MindOpt APL 最新版本功能介绍,并且开放下载使用了!

简介: MindOpt APL (MAPL) 是由阿里巴巴达摩院研发的国产建模语言,专长于电力SCUC等问题,提供向量化建模支持,可与Mindopt Studio平台集成。最新版2.4增加了向量化建模、Linux环境下通过pip安装支持以及改进了打印显示和错误提示。MAPL的向量化建模提高了效率,适合大规模问题。用户可通过云平台Docker打包或pip安装使用,支持多种求解器,包括MindOpt和开源求解器。

介绍

MindOpt APL(简称MAPL)是阿里巴巴达摩院决策智能实验室研发的国内第一款拥有自主知识产权,完全自研的国产建模语言,在电力SCUC等领域问题上建模性能优秀,对标或超越已有产品对比AMPL等建模语言,部分语法上更灵活简单,并且与Mindopt Studio平台集成,可云上使用。


版本更新内容

目前mapl已经发布2.4版本,主要更新内容如下:

  • 新增:支持向量化建模与法
  • 新增:Linux用户可pip install安装到自己电脑,支持命令行和PythonAPI
  • 变更:在 print /display 符号/结果时,索引数组的显示由X@调整为X[i,j]
  • 重构内核、增强语法错误提示功能
  • 写mps指令改善,直接mindopt求解mps的结果支持读入和展示

下文将介绍MAPL 2.4版本中的向量化建模功能和安装、使用MAPL的方法

向量化建模

向量化建模是一种高效的数学建模方法,在机器学习、信号处理、经济建模和物理科学等多个领域都有比较广泛的应用。其主要的特点是通过向量,矩阵等数据结构来形式化问题,而后借助线性代数的相关理论技术来实现对问题的转换,分析,计算,优化等任务。

一般来说,向量化建模方法有以下几个主要特点,使得其适合于解决很大一类实际问题。

  1. 表述优势:很多实际数学问题都具有良好的向量化形式或背景,对于这些问题,向量化建模方法一方面能够避免手动的形式化转换,简化建模成本,另一方面,很多复杂问题在通过矩阵和向量表示后,形式上会更简洁及紧凑,更易于理解和实现,也有利于揭示及利用问题的潜在结构。
  2. 操作优势:向量和矩阵运算为数据转换和操作提供了统一且灵活的框架,这种一致性为使用线性代数等基础数学理论及数学操作来转换,分析,优化模型成为可能。另一方面,很多强依赖向量/矩阵运算的实际任务,如数据预处理、特征提取和模式识别等任务也能变得更加直接。
  3. 计算性能:向量式建模通常具备显式问题结构,底层算法通过有效利用这些结构,可以实现建模及求解性能的显著提升。另一方面,很多基础的线性代数数值操作受益于现代计算库和GPU等硬件加速工具,也能够实现大量数据的快速并行处理。这些特性都可以显著的帮助大规模问题的计算及分析。
  4. 可扩展性:很多向量式建模易于扩展,可以无缝地从小规模数据集过渡到大规模数据集,模型和算法不需要进行根本性的修改。

MAPL从V2.4版本开始,支持向量化的问题建模及求解。

一个示例(可复制代码在云上平台中运行查看结果):

####################################################
#
#   Vectorization Modeling Example
#   Standard Simplex Projection
#
####################################################
# 1. 生成一个随机的50维向量常量
d = 50;
param a = random(shape=(d,1),seed=1234);
# 2. 建模标准单纯形投影问题
var x(d) >= 0;
minimize
sum((x - a)^2);
s.t.
sum(x) = 1;
# 3. 调用开源求解器Ipopt求解
option solver ipopt;
solve;
# 4. 输出最优投影向量x,以及对应的投影距离
print x;
param minDist = sum((x - a)^2);
print "Min distance: {:.2f}" % minDist;

安装、使用MAPL

渠道1:在MindOpt云平台使用后Docker打包下载

在云上建模求解平台的notebook环境中选择mapl内核对自己的问题进行建模求解,然后通过docker打包编译的方式下载到本地,可在用于不联网环境部署。

渠道2:pip install

Step 1:安装maplpy

当前Linux用户可以通过如下方式来安装maplpy包:

# x86 Linux用户,Python 3.6-3.10
pip install maplpy

Step 2:查询maplpy包的能力

安装完成后,我们可以通过maplpython指令来查看它的能力

  1. mapl查询命令行工具能力
  • 检查MindOpt APL的版本
  • MAPL的部分语法展示
  • 命令行运行数据文件命令

image.png

图:命令行使用示例

  1. python查询maplpy的Python包的能力
  • python版本查询
  • python调用maplpy的部分语法展示

image.png

图:python包使用示例


Step 3:下载求解器,调用求解器求解

如果需要求解,则需要单独安装求解器,且MindOpt APL 可以支持调用多种求解器,如:

  • MindOpt 求解器,可在链接下载和安装。正常安装后将根据MINDOPT_HOME环境变量自动去调用。
  • 开源求解器,可以下载此安装包文件,或者根据文档的链接去下载最新版本。
  • 下载后,每次运行求解时候,需要用option solverpath xxfoldername;指令来定义求解器的地址。
# 假设CBC求解器的可执行文件位于目录usr/bin/cbc下,你可以这样设置:

option solverpath "/usr/bin/cbc";

Step 4:执行指令示例

安装后使用示例:

示例代码文件:📎maplpy_case.zip

# 同MindOpt Studio平台的IDE中的用法,包含建模和求解等指令
mapl -f diet.mapl 
# 直接运行建模脚本,自动调用求解器去求解,部分情况下会更高效快速
mapl -m diet.mpl 
# Python API 运行
python mapl_diet.py

diet.mapl文件源码如下:

# 声明集合
# # ZIMPL diet.mod and diet.dat
clear;
set NUTR := { "A", "B1", "B2", "C" };
set FOOD := {"BEEF", "CHK", "FISH", "HAM", "MCH", "MTL", "SPG", "TUR"} ;
set F:= {"cost", "f_min", "f_max"};
set N:= {"n_min", "n_max"};
# 声明参数
param data1[FOOD * F] :=
        | "cost"  , "f_min" , "f_max" |
|"BEEF" |  3.19   ,  0      ,  100    |
|"CHK"  |  2.59   ,  0      ,  100    |
|"FISH" |  2.29   ,  0      ,  100    |
|"HAM"  |  2.89   ,  0      ,  100    |
|"MCH"  |  1.89   ,  0      ,  100    |
|"MTL"  |  1.99   ,  0      ,  100    |
|"SPG"  |  1.99   ,  0      ,  100    |
|"TUR"  |  2.49   ,  0      ,  100    |;
param data2[NUTR * N] :=
      | "n_min", "n_max"|
|"A"  |  700,     10000 |
|"C"  |  700,     10000 |
|"B1" |  700,     10000 |
|"B2" |  700,     10000 |;
param amt[FOOD * NUTR] :=
        | "A",  "C",  "B1",  "B2"|
|"BEEF" |  60,   20,   10,    15 |
|"CHK"  |  8,    0,    20,    20 |
|"FISH" |  8,    10,   15,    10 |
|"HAM"  |  40,   40,   35,    10 |
|"MCH"  |  15,   35,   15,    15 |
|"MTL"  |  70,   30,   15,    15 |
|"SPG"  |  25,   50,   25,    15 |
|"TUR"  |  60,   20,   15,    10 |;
# 声明变量
var x[j in FOOD] >= data1[j, "f_min"] <= data1[j, "f_max"];
# 声明目标
minimize Total_Cost:  sum {j in FOOD} : data1[j, "cost"] * x[j];
# 声明约束
subto Diet: forall {i in NUTR} do
   data2[i, "n_min"] <= sum {j in FOOD}: amt[j, i] * x[j] <= data2[i, "n_max"];
option modelname diet;
option solverpath <MINDOPT_BINARY_DIR>;
option solver mindopt;
option mindopt_options 'num_threads=2';
solve;
display;
相关文章
MindOpt APL 达摩院自己的建模语言!
MindOpt建模语言(MindOpt Algebraic Programming Language, MindOpt APL, 简称为MAPL)是MindOpt团队研发的一种代数建模语言。相比与其他的语言,MAPL语法相对较少且自然,很贴近数学语言。用MAPL描述数学规划模型与用数学公式进行描述非常类似。
MindOpt APL 达摩院自己的建模语言!
|
4月前
|
人工智能 算法 调度
优化问题之如何选择合适的优化求解器
优化问题之如何选择合适的优化求解器
|
6月前
|
机器学习/深度学习 算法 测试技术
MindOpt APL向量化建模语法的介绍与应用(1)
向量化建模是一种高效的数学建模和编程技术,它涉及到对向量、矩阵和更高维数组进行操作,以实现操作的同时性和批量处理。在优化和数据分析等领域,向量化建模可以极大地提高计算效率,特别是当涉及到大量的重复计算时。由于向量化建模具有表述优势、操作优势、计算性能、可扩展性等优势,使得其适合于解决很大一类实际问题
|
6月前
|
并行计算 算法 API
MindOpt优化器: 浅谈版本0.x和1.x之间API的差异
Mindopt是一款高性能优化求解器,专为解决从简单线性规划 (LP) 到更复杂的混合整数规划 (MIP) 、非线性规划(QP、SDP)的一系列问题而设计。其强大的算法旨在有效地找到最佳解决方案,使其成为运筹学,电力能源、工业制造、交通物流和其他领域的研究人员和专业人员的首选工具。
|
6月前
|
测试技术 索引
MindOpt APL向量化建模语法的介绍与应用(2)
在数据科学、工程优化和其他科学计算领域中,向量和矩阵的运算是核心组成部分。MAPL作为一种数学规划语言,为这些领域的专业人员提供了强大的工具,通过向量式和矩阵式变量声明以及丰富的内置数学运算支持,大大简化了数学建模和优化问题的处理。在本文中,我们将探索MAPL的这些特性,并且通过示例来展示如何有效使用这些工具。
|
6月前
|
开发框架 自然语言处理 达摩院
MindOpt APL,可以支持调用几十种求解器的建模语言
建模语言可以提供更高级、更灵活的问题描述方式,从而提高问题的理解和求解效率。它可以加速问题的开发和部署过程,促进不同领域之间的合作和交流,从而推动问题求解的进展和创新。
MindOpt APL建模语言自定小义函数的重要性和示例
在编程和建模语言中,函数是一段独立的、可重复使用的代码块,用于执行特定任务。在MindOpt APL中,自定义函数的使用非常重要,因为它们提高了建模过程的效率、可读性和灵活性。
|
达摩院 数据格式 索引
「达摩院MindOpt APL 建模语言」语法说明 print 将结果写表格文件
不同的编程语言写入表格文件的方式均不相同,下面将展示MindOpt APL建模语言的方式。
|
6月前
|
人工智能 算法 决策智能
MindOpt云上建模求解平台功能的简单介绍
MindOpt云上建模求解平台是阿里巴巴达摩院研发的一款“优化领域”的云平台。它结合了最新的算法研究和云技术,为用户提供了一个易于使用的界面和强大的后台计算能力。该平台支持广泛的优化问题,包括线性规划、整数规划、非线性规划和混合整数规划等。
|
6月前
|
达摩院 自然语言处理 Java
MindOpt APL:一款适合优化问题数学建模的编程语言
本文将以阿里达摩院研发的MindOpt建模语言(MindOpt Algebra Programming Language, MindOptAPL,简称为MAPL)来讲解。MAPL是一种高效且通用的代数建模语言,当前主要用于数学规划问题的建模,并支持调用多种求解器求解。