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 

联系我们
钉钉群号:32451444
邮箱地址:solver.damo@list.alibaba-inc.com
更多更新通知:https://solver.damo.alibaba.com


相关文章
|
6月前
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
6月前
|
机器学习/深度学习 算法 测试技术
MindOpt APL向量化建模语法的介绍与应用(1)
向量化建模是一种高效的数学建模和编程技术,它涉及到对向量、矩阵和更高维数组进行操作,以实现操作的同时性和批量处理。在优化和数据分析等领域,向量化建模可以极大地提高计算效率,特别是当涉及到大量的重复计算时。由于向量化建模具有表述优势、操作优势、计算性能、可扩展性等优势,使得其适合于解决很大一类实际问题
|
6月前
|
达摩院 Linux Docker
MindOpt APL 最新版本功能介绍,并且开放下载使用了!
MindOpt APL (MAPL) 是由阿里巴巴达摩院研发的国产建模语言,专长于电力SCUC等问题,提供向量化建模支持,可与Mindopt Studio平台集成。最新版2.4增加了向量化建模、Linux环境下通过pip安装支持以及改进了打印显示和错误提示。MAPL的向量化建模提高了效率,适合大规模问题。用户可通过云平台Docker打包或pip安装使用,支持多种求解器,包括MindOpt和开源求解器。
|
6月前
|
测试技术 索引
MindOpt APL向量化建模语法的介绍与应用(2)
在数据科学、工程优化和其他科学计算领域中,向量和矩阵的运算是核心组成部分。MAPL作为一种数学规划语言,为这些领域的专业人员提供了强大的工具,通过向量式和矩阵式变量声明以及丰富的内置数学运算支持,大大简化了数学建模和优化问题的处理。在本文中,我们将探索MAPL的这些特性,并且通过示例来展示如何有效使用这些工具。
MindOpt APL建模语言自定小义函数的重要性和示例
在编程和建模语言中,函数是一段独立的、可重复使用的代码块,用于执行特定任务。在MindOpt APL中,自定义函数的使用非常重要,因为它们提高了建模过程的效率、可读性和灵活性。
|
6月前
|
人工智能 算法 决策智能
MindOpt云上建模求解平台功能的简单介绍
MindOpt云上建模求解平台是阿里巴巴达摩院研发的一款“优化领域”的云平台。它结合了最新的算法研究和云技术,为用户提供了一个易于使用的界面和强大的后台计算能力。该平台支持广泛的优化问题,包括线性规划、整数规划、非线性规划和混合整数规划等。
|
6月前
|
达摩院 自然语言处理 Java
MindOpt APL:一款适合优化问题数学建模的编程语言
本文将以阿里达摩院研发的MindOpt建模语言(MindOpt Algebra Programming Language, MindOptAPL,简称为MAPL)来讲解。MAPL是一种高效且通用的代数建模语言,当前主要用于数学规划问题的建模,并支持调用多种求解器求解。
|
6月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
1月前
|
机器学习/深度学习 算法 数据可视化
如果你的PyTorch优化器效果欠佳,试试这4种深度学习中的高级优化技术吧
在深度学习领域,优化器的选择对模型性能至关重要。尽管PyTorch中的标准优化器如SGD、Adam和AdamW被广泛应用,但在某些复杂优化问题中,这些方法未必是最优选择。本文介绍了四种高级优化技术:序列最小二乘规划(SLSQP)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)和模拟退火(SA)。这些方法具备无梯度优化、仅需前向传播及全局优化能力等优点,尤其适合非可微操作和参数数量较少的情况。通过实验对比发现,对于特定问题,非传统优化方法可能比标准梯度下降算法表现更好。文章详细描述了这些优化技术的实现过程及结果分析,并提出了未来的研究方向。
26 1
|
4月前
|
人工智能 算法 调度
优化问题之如何选择合适的优化求解器
优化问题之如何选择合适的优化求解器