MindOpt APL 达摩院自己的建模语言!

简介: MindOpt建模语言(MindOpt Algebraic Programming Language, MindOpt APL, 简称为MAPL)是MindOpt团队研发的一种代数建模语言。相比与其他的语言,MAPL语法相对较少且自然,很贴近数学语言。用MAPL描述数学规划模型与用数学公式进行描述非常类似。

MAPL有两种求解方法,分别是cell中直接输入建模代码运行、导入.mapl文件运行建模然后求解。

本文将用两个不同的例子(排产排程问题、数学算例)来分别展示MAPL语言建模及优化的两种方法。

云上建模求解平台

地址:https://opt.aliyun.com/

不需要下载软件,可以直接在平台上使用!而且有更多的案例提供参考哦!

如果您想要下载使用其他语言的话可以戳这里MindOpt优化求解器

MAPL

可以有效地连接数学模型和求解器的调用:

  • 支持对线性规划、整数规划、0-1规划、二次规划、非线性规划、多目标规划、约束规划等多类问题的建模,且能对数学模型进行模型优化和预处理。
  • 支持调用MindOpt Solver等优化求解器,方便切换求解器对比结果。

例题(一)

一位员工每天要负责处理a任务(生成零部件) 和b任务(组装产品)。其参与a任务的报酬为100元/小时,b任务的报酬为150元/小时。工厂要求该员工每天在每个任务上花费至少 3 个小时。已知该员工每天工作8小时(因此在 6 小时之外,可以自行决定 2 小时如何工作),那么他该如何在两项任务上分配时间以得到尽可能多的报酬?


  • 以上问题可以被称为任务分配问题,也可以被视为一个简单的排产排程问题,由于该员工要决策时间分配,我们引入决策变量 Xa和 Xb用于表示该工人投入在任务和任务中的时长。由问题描述可知,这些变量需要满足Xa+Xb=8 和 Xa>=3,Xb>=3。
  • 此外,该工人的目标是获得尽可能多的报酬。在定义如上三要素后,我们可以建立如下的数学规划问题
  • 决策变量: Xa,Xb
  • 目标函数: maxmize 100Xa + 150Xb
  •     约束:  s.t.  Xa + Xb = 8
  •               Xa>=3 , Xb>= 3

操作步骤

将以上数学规划问题用MAPL语法的代码表示,并另存为twoTask.mapl文件。

# twoTask.mapl
var xa >= 3;   # 用var来声明决策变量xa 
var xb >= 3;   # 声明决策变量xb
maximize Reward: 100 * xa + 150 * xb;  # 用maximize来声明目标函数
subto Worker_time: xa + xb == 8;       # 用subto来声明约束

#minimize来声明目标函数最小化,本例maximize是目标函数最大化

导入.mapl文件来运行

#步骤

MAPL.gif

#输入代码

clear model;       # 清除模型的内存
model ./model/twoTask.mapl;    # .mapl模型文件的路径,建模

do print "-----------------用MindOpt求解---------------";
option solver mindopt;     # (可选)指定求解用的求解器,默认是MindOpt
solve;         # 求解

do print "-----------------Display---------------";
display;        # 展示结果
do print "目标函数值 = ";
do print 100 * xa + 150 * xb;

# 更换求解器

do print "-----------------用CBC求解---------------";
option solver cbc;     # (可选)指定求解用CBC求解器
solve;         # 求解

do print "-----------------Display---------------";
display;        # 展示结果
do print "目标函数值 = ";
do print 100 * xa + 150 * xb;

#每行代码用分号结尾

求解的结果

-----------------用MindOpt求解---------------
Running mindoptampl ..
wantsol=1
MindOpt Version 0.20.0 (Build date: 20220915)
Copyright (c) 2020-2022 Alibaba Cloud.

Start license validation (current time : 31-OCT-2022 10:24:55).
License validation terminated. Time : 0.002s

Model summary.
 - Num. variables     : 2
 - Num. constraints   : 1
 - Num. nonzeros      : 2
 - Bound range        : [3.0e+00,1.0e+20]
 - Objective range    : [1.0e+02,1.5e+02]
 - Matrix range       : [1.0e+00,1.0e+00]

Presolver started.
Model has been fully presolved.
Presolver terminated. Time : 0.000s

Simplex method started.
Postsolver started.
Simplex method terminated. Time : 0.001s


OPTIMAL; objective 1050.00
0 simplex iterations

Completed.
-----------------Display---------------

Primal Solution:
xa  = 3.000000000000000E+00
xb  = 5.000000000000000E+00

Dual Solution:
Worker_time   = 1.500000000000000E+02
目标函数值 = 
 + 1050 
-----------------用CBC求解---------------
Running cbc ..
CBC 2.10.5Completed.
-----------------Display---------------

Primal Solution:
xa  = 3.000000000000000E+00
xb  = 5.000000000000000E+00

Dual Solution:
Worker_time   = 1.500000000000000E+02
目标函数值 = 
 + 1050 

例题(二)

线性规划模型:

max     x1 + 2 *x2 + 3 *x3 +  x4
s.t.       − x1 + x2 + 3 *x3 + 10 *x4 ≤ 20

          x1 − 3 *x2 + x3 ≤ 30

          x2 - 3.5 *x4 = 0

          0 ≤ x1 ≤ 40

                x2 ≥ 0

                x3 ≥ 0

          2 ≤ x4 ≤ 3

cell中直接输入建模代码运行

clear model;  #清除model,多次run的时候使用
option modelname model/test; #运行完代码之后会自动生成.nl和.sol文件  
                                model是存放的地址,test是文件名

#--------------------------
# test.mapl
var x1 >= 0;   # 声明决策变量
var x2 >= 0;
var x3 >= 0;
var x4 >= 2;
maximize Reward: x1 + 2 * x2 + 3 * x3 + x4;  # 声明目标函数
subto c1: (-1) * x1 + x2 + 3 * x3 + 10 * x4 <= 20;       # 声明约束
subto c2: x1 - 3 * x2 + x3 <= 30;
subto c3: x2 - 3.5 * x4 == 0;
subto c4: x1 <= 40;                #因为决策变量的声明目前只能识别上界或者下界一个,
subto c5: x4 <= 3;                  所以我们把另一个下界或者上届放在声明约束这一组中。
#--------------------------


option solver mindopt;     # (可选)指定求解用的求解器,默认是MindOpt
solve;         # 求解

do print "-----------------Display---------------";
display;        # 展示结果
do print "目标函数值 = ";
do print x1 + 2 * x2 + 3 * x3 + x4;

#每行一定要用分号结尾!!!

结果展示

Running mindoptampl ..
wantsol=1
MindOpt Version 0.23.0 (Build date: 20221129)
Copyright (c) 2020-2022 Alibaba Cloud.

Start license validation (current time : 16-DEC-2022 15:16:12).
License validation terminated. Time : 0.004s

Model summary.
 - Num. variables     : 4
 - Num. constraints   : 3
 - Num. nonzeros      : 9
 - Bound range        : [2.0e+00,1.0e+20]
 - Objective range    : [1.0e+00,3.0e+00]
 - Matrix range       : [1.0e+00,1.0e+01]

Presolver started.
Presolver terminated. Time : 0.001s

Simplex method started.
Model fingerprint: ==gZ3R2dkdnZ

    Iteration       Objective       Dual Inf.     Primal Inf.     Time
            0     9.73004e+01      0.0000e+00      3.4501e+00     0.01s    
            1     8.90000e+01      0.0000e+00      0.0000e+00     0.01s    
Postsolver started.
Simplex method terminated. Time : 0.008s


OPTIMAL; objective 89.00
1 simplex iterations

Completed.
-----------------Display---------------

Primal Solution:
x1  = 4.000000000000000E+01
x2  = 7.000000000000000E+00
x3  = 1.100000000000000E+01
x4  = 2.000000000000000E+00

Dual Solution:
c1  = 1.000000000000000E+00
c2  = 0.000000000000000E+00
c3  = 1.000000000000000E+00
目标函数值 = 
 + 89 

联系我们

钉钉:damodi

邮箱地址:solver.damo@list.alibaba-inc.com


相关文章
|
负载均衡 网络协议 算法
slb监听协议与端口
SLB是云服务商提供的负载均衡服务,用于分发客户端请求到多台后端服务器,提升服务可用性和响应速度。关键概念包括监听协议(TCP、UDP、HTTP、HTTPS、TCPSSL)和监听端口。监听协议决定了SLB处理请求的方式,而监听端口则是SLB接收请求的入口。配置时需根据应用选择合适协议和端口,并可设置负载均衡算法(如轮询、最少连接等)。客户端应通过SLB统一入口访问后端服务,避免绕过SLB导致的问题。
1664 2
|
数据挖掘 测试技术 BI
性能工具之 Gatling 快速入门
Gatling 是一款基于 Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。
899 1
性能工具之 Gatling 快速入门
|
存储 分布式计算 运维
【2023云栖】刘一鸣:Data+AI时代大数据平台建设的思考与发布
本文根据2023云栖大会演讲实录整理而成,演讲信息如下: 演讲人:刘一鸣 | 阿里云自研大数据产品负责人 演讲主题:Data+AI时代大数据平台应该如何建设
103025 16
|
8月前
|
运维 监控 Kubernetes
【大模型】RAG增强检索:大模型运维的基石
RAG(检索增强生成)是一种结合大模型与外部知识库的技术,通过“先查资料再作答”的流程,解决模型幻觉、知识更新滞后等问题。其核心包括四大模块:文档处理中心、知识检索库、提问处理器和智能应答器。RAG在大模型运维中实现知识保鲜、精准控制和成本优化,同时支持动态治理、安全合规增强及运维效率提升,推动智能运维从“人工救火”向“预测性维护”演进。
2105 10
【大模型】RAG增强检索:大模型运维的基石
|
8月前
|
机器学习/深度学习 编解码 人工智能
Kimi开源MoE架构多模态推理模型,小激活参数,大能量!
最近Moonshot AI推出了 Kimi-VL,这是一个高效的开源混合专家(MoE)视觉-语言模型(VLM),它提供了先进的多模态推理、长上下文理解以及强大的代理能力——所有这些功能都只需激活其语言解码器中的2.8B参数(Kimi-VL-A3B)。
538 1
|
11月前
|
弹性计算 JSON 自然语言处理
语音交互产品通过WebSocket协议对外提供实时语音流语音转写功能
阿里云智能语音交互产品通过WebSocket协议提供实时语音转写功能,支持长语音。音频流以Binary Frame上传,指令和事件为Text Frame。支持单声道、16 bit采样位数的PCM、WAV等格式,采样率8000Hz/16000Hz。可设置返回中间结果、添加标点、中文数字转阿拉伯数字,并支持多语言识别。服务端通过临时Token鉴权,提供外网和上海ECS内网访问URL。交互流程包括StartTranscription、StopTranscription指令及多种事件反馈。
|
JSON 数据格式
vscode配置latex
本文档介绍如何在VSCode中配置LaTeX环境。首先需安装texlive和VSCode,并提前安装SumatraPDF以查看PDF文件。配置包括设置自动编译、PDF预览程序及正反向搜索等。提供了详细的`settings.json`配置示例,涵盖不同操作系统下的编译选项与方案。此外,还介绍了如何配置SumatraPDF实现与VSCode的跳转功能,以及相关快捷键的使用方法。
|
前端开发 NoSQL Redis
智能排班系统 【开源说明】
智能排班系统 【开源说明】
748 1
|
监控 安全 Java
Java Z 垃圾收集器如何彻底改变内存管理
大家好,我是V哥。今天聊聊Java的ZGC(Z Garbage Collector)。ZGC是一个低延迟垃圾收集器,专为大内存应用场景设计。其核心优势包括:极低的暂停时间(通常低于10毫秒)、支持TB级内存、使用着色指针实现高效对象管理、并发压缩和去碎片化、不分代的内存管理。适用于实时数据分析、高性能服务器和在线交易系统等场景,能显著提升应用的性能和稳定性。如何启用?只需在JVM启动参数中加入`-XX:+UseZGC`即可。
279 0
|
达摩院 自然语言处理 Java
MindOpt APL:一款适合优化问题数学建模的编程语言
本文将以阿里达摩院研发的MindOpt建模语言(MindOpt Algebra Programming Language, MindOptAPL,简称为MAPL)来讲解。MAPL是一种高效且通用的代数建模语言,当前主要用于数学规划问题的建模,并支持调用多种求解器求解。