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


相关文章
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
467 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
C语言 Perl 存储
优化求解器之MPS文件的格式简介
在使用MindOpt优化求解器解决实际问题时,其中重要的一环在于如何建立优化模型,以及存储优化模型以便于作为求解器的输入文件。存储优化模型的文件,其关键在于定义一种清晰的格式,用来说明优化模型的数学结构和相关的数据。接下来我们将发布一系列文章,对常见的MPS/LP等格式的模型文件和命名规范进行简要的介绍。
优化求解器之MPS文件的格式简介
|
机器学习/深度学习 人工智能 算法
阿里达摩院 MindOpt 介绍和使用
MindOpt 是阿里巴巴达摩院决策智能实验室研发的决策优化软件。团队组建于2019年,聚焦于研发尖端运筹优化和机器学习技术,构建智能决策系统,更快更好地向各行各业提供数学建模与求解能力,帮助业务更快更好地做出决策,以期降低成本、提升效率、增大收益 。当前 MindOpt 围绕智能决策优化所需的建模和求解能力,突破国外垄断,自研了 MindOpt Solver 优化求解器、MindOpt APL 建模语言、MindOpt Tuner 调参器;并创新地提出“强化+优化”双决策引擎,打造了MindOpt Studio 优化平台。并结合前沿先进的预训练大模型技术打造MindOpt Copilot。
4010 2
阿里达摩院 MindOpt 介绍和使用
|
机器学习/深度学习 达摩院
阿里达摩院MindOpt优化求解器-月刊(2024年4月)
【摘要】2024.04.30,阿里云发布了MindOpt优化求解器的新商品和功能。MindOpt现在已上架,提供超低价零售求解器,支持按需购买,可在阿里云平台上直接购买联网或不联网License。新版本V1.2发布,提升MILP性能,并增加PostScaling参数。此外,MindOpt Studio推出租户定制版,正处于邀测阶段。同时分享了使用MindOpt解决二分类SVM问题的案例。更多内容,可访问相关链接。
392 0
|
存储 达摩院 供应链
排产排程问题【数学规划的应用(含代码)】阿里达摩院MindOpt
**文章摘要:** 本文探讨了使用阿里巴巴达摩院的MindOpt优化求解器解决制造业中的排产排程问题。排产排程涉及物料流动、工序安排、设备调度等多个方面,通常通过数学规划方法建模。MindOpt支持线性规划、整数规划等,能有效处理大规模数据。案例以香皂制造工厂为例,考虑了多种油脂的购买、存储和生产计划,以及价格变化和存储成本。问题通过数学建模转化为MindOpt APL代码,求解器自动寻找最优解,以最大化利润。文章还提供了代码解析,展示了解决方案的细节,包括目标函数(利润最大化)、约束条件(如生产效率、库存管理)以及结果分析。
|
达摩院 供应链 安全
光储荷经济性调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文介绍使用MindOpt工具优化光储荷经济性调度的数学规划问题。光储荷经济性调度技术旨在最大化能源利用率和经济效益,应用场景包括分布式光伏微网、家庭能源管理系统、商业及工业用电、电力市场参与者等。文章详细阐述了如何通过数学规划方法解决虚拟电厂中的不确定性与多目标优化难题,并借助MindOpt云建模平台、MindOpt APL建模语言及MindOpt优化求解器实现问题建模与求解。最终案例展示了如何通过合理充放电策略减少37%的电费支出,实现经济与环保双重效益。读者可通过提供的链接获取完整源代码。
|
机器学习/深度学习 前端开发 安全
【Gradio】Could not create share link
【Gradio】Could not create share link
6117 7
|
达摩院 算法 Java
选择优化求解器的关键因素:以MindOpt为例
选择一款适合自己业务需求的求解器我们一般需要考量什么呢?可求解的问题类型?问题规模?本文将介绍一些需要考虑的重要因素,并且介绍阿里达摩院MindOpt优化求解器在这些因素下的表现。
|
达摩院 算法 决策智能
解决背包问题:组合优化的应用与建模方法
组合优化是数学优化的一支,专注于从有限集合中选取元素的最优化问题。它涉及将一组对象组合在一起,以满足特定条件并优化某个目标函数,即在所有可能的组合中找到最有利的一个。 本文将以一个简化的背包问题为例,来讲解采用数学规划的方法来解决背包这个组合优化问题。