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

2024-03-28 05:12

本文主要是介绍MindOpt APL 最新版本功能介绍,并且开放下载使用了!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

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

版本更新内容

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

  • 新增:支持向量化建模与法
  • 新增:Linux用户可pip install安装到自己电脑,支持命令行和PythonAPI
  • 变更:在 print /display 符号/结果时,索引数组的显示由X@<i,j>调整为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;指令来定义求解器的地址,或者以如下指令指定求解器:
(py38) root@izbp1383jjeoi7k545tggzZ:mapl  #输入
Mind0pt Apl 2.4.0 (Build date: Mar3 2024, 22:51:08) #输出
Type                                     #输出
Type "help;" for detailed instructions.  #输出
"help;"                                  #输出
[MAPL: option solver 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} dodata2[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 最新版本功能介绍,并且开放下载使用了!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854540

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三