如何通过阿里达摩院MindOpt获得MILP多个解

简介: 在2024年1月达摩院新发布的MindOpt 优化求解器V1.1.0版本中,新增加了一个"MIP/SolutionNumber"参数,可以用于获取MILP多个解。有些业务里,会想要找到更多的可行解,目标值不一定最优,用于给业务指导。本篇案例将讲解如何使用此功能。

MindOpt V1.1 新增"MIP/SolutionNumber"参数


在本月达摩院新发布的MindOpt 优化求解器V1.1.0版本,新增加了一个"MIP/SolutionNumber"参数,可以用于获取MILP多个解。

image.png


优化求解器产品是求解优化问题的专业计算软件,属于底层数学软件,可以用于各个行业。对优化求解器有更多好奇心的初学者,可查阅小编之前的文章《什么是优化技术?给算法小白同学的快速讲解和上手文》(或公众号精排版)。

在默认模式使用时,求解器最后只会给出一个解,对应求解到的最优目标值。有些业务里,会想要找到更多的可行解,目标值不一定最优,用于给业务指导。此次MindOpt更新的MILP参数会产生多个可行解。下载和安装MindOpt软件>>

使用方法

想要多个结果,设置的相关参数:

  • MIP/SolutionPoolSize (int)   设置解缓存池的最大容量。求解前设置。

计算完成后,从属性(Attributes)中获取结果的属性:

  • SolCount (int)  找到的较优解数量。
  • Xn (double) 由参数 MIP/SolutionNumber 指定的较优解。
  • 关联参数:MIP/SolutionPoolSize (int)   设置获取较优解的下标。设置后,通过获取属性Xn得到该较优解。求解完成后使用。

比如求解完成后,获取第k个solution的方式:用户设置<参数> SolutionNumber = k (0 <= k < SolCount),设置完成之后<属性>Xn即为对应的suboptimal solution的值。

示例代码


示例代码如下:

  • line2是索引的MindOpt安装目录里面的示例MILP模型文件
  • line6是设置候选解池数目
  • line10是求解的最优目标值
  • line14-20 是由差到优的结果的获取方式
frommindoptpyimport*file="~/mindopt/1.1.0/examples/data/pg.mps.gz"m=read(file)
vars=m.getVars()
expr=m.getObjective()
m.setParam(MDO.Param.MIP_SolutionPoolSize, 10)
m.optimize()
print("Solution count =", m.SolCount)
print("Problem status =", m.status)
if (m.status==MDO.Status.OPTIMAL):
print("Best Solution obj =", m.objval)
print(str([var.Xforvarinvars[:20]]), "...")
print("Suboptimal solutions from worst to best:")
foriinrange(m.SolCount):
m.setParam(MDO.Param.MIP_SolutionNumber, i)
objval=m.objConstforiinrange(expr.size()):
objval+=expr.getCoeff(i) *expr.getVar(i).Xnprint("  suboptimal obj = ", objval)
print("  "+str([round(var.Xn,1) forvarinvars[:20]]), "...")


输出的结果日志摘取部分如下:

..................
Set parameter MIP/SolutionPoolSize to value 10Model summary.
- Num. variables     : 2700- Num. constraints   : 125- Num. nonzeros      : 5200- Num. integer vars. : 100- Bound range        : [1.0e+00,2.5e+03]
- Objective range    : [1.0e+00,1.4e+02]
..................
- Solution pool    : 10Branch-and-cut method terminated. Time : 30.305s
..................
Solution count =10Problem status =1Best Solution obj =-8674.342607117027
[1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0] ...
Suboptimal solutions from worst to best:
Set parameter MIP/SolutionNumber to value 0  suboptimal obj =7009.0
  [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] ...
Set parameter MIP/SolutionNumber to value 1  suboptimal obj =6937.0
  [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] ...
Set parameter MIP/SolutionNumber to value 2  suboptimal obj =-3661.011498595497
  [1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] ...
Set parameter MIP/SolutionNumber to value 3  suboptimal obj =-3987.192860239571
  [1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0] ...
Set parameter MIP/SolutionNumber to value 4  suboptimal obj =-4162.448499031024
  [1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] ...
Set parameter MIP/SolutionNumber to value 5  suboptimal obj =-8553.380870759038
  [1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0] ...
Set parameter MIP/SolutionNumber to value 6  suboptimal obj =-8637.723513904024
  [1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0] ...
Set parameter MIP/SolutionNumber to value 7  suboptimal obj =-8653.94037031042
  [1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0] ...
Set parameter MIP/SolutionNumber to value 8  suboptimal obj =-8665.322015044003
  [1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, -0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0] ...
Set parameter MIP/SolutionNumber to value 9  suboptimal obj =-8666.843995053305
  [1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0] ...
目录
相关文章
|
3天前
|
达摩院
人员排班【数学规划的应用(含代码)】阿里达摩院MindOpt
本文介绍了使用阿里巴巴达摩院的MindOpt工具解决人员排班的数学规划问题。人员排班在多个行业中至关重要,如制造业、医疗、餐饮和零售等。问题涉及多种约束,包括工作需求、员工能力、工作时间限制、连续工作天数及公平性。通过MindOpt云建模平台和建模语言MindOpt APL,建立数学模型并编写代码来解决最小化总上班班次的问题。案例中展示了如何声明集合、参数、变量和约束,并给出了部分代码示例。最后,通过MindOpt求解器得到最优解,并将结果输出到CSV文件中。
|
7天前
|
存储 达摩院 供应链
排产排程问题【数学规划的应用(含代码)】阿里达摩院MindOpt
**文章摘要:** 本文探讨了使用阿里巴巴达摩院的MindOpt优化求解器解决制造业中的排产排程问题。排产排程涉及物料流动、工序安排、设备调度等多个方面,通常通过数学规划方法建模。MindOpt支持线性规划、整数规划等,能有效处理大规模数据。案例以香皂制造工厂为例,考虑了多种油脂的购买、存储和生产计划,以及价格变化和存储成本。问题通过数学建模转化为MindOpt APL代码,求解器自动寻找最优解,以最大化利润。文章还提供了代码解析,展示了解决方案的细节,包括目标函数(利润最大化)、约束条件(如生产效率、库存管理)以及结果分析。
|
17天前
|
达摩院 Python
阿里达摩院MindOpt优化求解器-月刊(2024年6月)
**阿里达摩院MindOpt优化求解器2024年6月月刊概览:** - 发布新功能,MAPL建模语言V2.5上线,Python APIs全面升级,旧版本不兼容。 提供快速入门教程、示例代码展示如何用Python调用MAPL。MindOpt Studio租户版新增Gradio支持,便于开发WebAPP,提供了案例源码展示如何开发。引入新案例: 1. 巡检线路的排班-2017全国大学生数学建模竞赛D题。包含最短路模型、TSP模型、弧分割模型。2. 商品组合定价策略:探讨如何最赚钱的加购区商品定价。
58 0
|
17天前
|
供应链 定位技术 数据库
仓库选址问题【数学规划的应用(含代码)】阿里达院MindOpt
使用阿里云MindOpt工具,文章展示了如何解决仓库选址的数学规划问题。该问题涉及构建工厂以供应多个商店,考虑因素包括建设成本、库存成本、运输成本和需求量。MindOpt是一个优化求解器,能处理大规模数据的数学规划问题。通过声明集合、参数、变量、目标函数和约束条件,构建模型并求解,以最小化总成本。文中还提到了不同行业的应用场景,如农业、制造业、零售业和电商,并提供了视频讲解和代码示例。
|
2月前
|
达摩院 IDE 开发工具
阿里达摩院MindOpt优化求解器-月刊(2024年5月)
阿里达摩院MindOpt优化求解器-月刊(2024年5月版),新增了两个案例,如何使用LLM和MindOpt更准确地回答数学问题、如何使用MindOpt优化云计算集群虚拟机资源配置提高机器利用率,和如何利用IIS冲突分析指导不可解的问题解决方案。MindOpt的求解器已经可以在阿里云线上购买不联网版本。租户版也正式上线,可体验更多功能。新增QQ交流群。
72 4
|
24天前
|
达摩院 供应链 调度
【FlowShop流水线作业排班问题【数学规划的应用(含代码)】阿里达摩院MindOpt】
本文探讨了使用阿里巴巴达摩院的MindOpt工具解决FlowShop流水线作业排班的数学规划问题。FlowShop涉及到多台机器、多个工序和多个作业,目标是通过优化排班最小化总生产耗时。MindOpt通过数学规划方法,如线性或混合整数线性规划,将问题建模并转化为代码,利用云建模平台MindOpt Studio和MindOpt APL建模语言进行求解。案例中详细介绍了参数定义、变量解析、约束设置和目标函数,展示了如何通过MindOpt进行建模和求解,以达到最优化的生产调度。此外,文章还提供了代码示例和结果解析,帮助读者理解如何实际应用MindOpt解决这类问题。
|
2月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
2月前
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
2月前
|
存储 达摩院 调度
「达摩院MindOpt」优化FlowShop流水线作业排班问题
在企业在面临大量多样化的生产任务时,如何合理地安排流水线作业以提高生产效率及确保交货期成为了一个重要的问题。
「达摩院MindOpt」优化FlowShop流水线作业排班问题
|
达摩院 调度
使用达摩院MindOpt优化交通调度_最大化通行量—线性规划问题
在数学规划中,网络流问题是指一类基于网络模型的流量分配问题。网络流问题的目标是在网络中分配资源,使得网络的流量满足一定的限制条件,并且使得某些目标函数最小或最大化。网络流问题通常涉及一个有向图,图中每个节点表示一个资源,每条边表示资源之间的关系。边上有一个容量值,表示该边上最多可以流动的资源数量。流量从源节点开始流出,经过一系列中间节点,最终到达汇节点。在这个过程中,需要遵守一定的流量守恒和容量限制条件。