Or-tools调用求解器介绍(三)

简介: Or-tools调用求解器介绍(三)

Or-tools作为谷歌运筹优化系列最流行的求解工具之一,其解决常见的规划问题也是非常方便。本文主要介绍其如何调用求解器。

举一个简单线性规划问题。

目标函数:max(x0+x1+x2)

约束条件:image.png

ortools求解

以上是个简单的线性规划(lp问题),调用ortools的规划求解函数。其求解代码如下:

from ortools.linear_solver import pywraplp
def solve_coexistence():
    t = 'model_1'
    s = pywraplp.Solver(t,pywraplp.Solver.CLP_LINEAR_PROGRAMMING)#选择求解器
    x = [s.NumVar(0,1000,'x[%i]' % i) for i in range(3)]#设置变量范围
    pop = s.NumVar(0,float('inf') ,'pop')# 目标函数限定范围(可不设置)
    s.Add(2*x[0] + x[1] + x[2] <= 1500)#约束1
    s.Add(x[0] + 3*x[1] + 2*x[2] <= 3000)#约束2
    s.Add(x[0] + 2*x[1] + 3*x[2] <= 4000)#约束3
    s.Add(pop == x[0] + x[1] + x[2])#目标函数
    s.Maximize(pop)#求最大值
    s.Solve()
    return pop.SolutionValue(),[e.SolutionValue() for e in x]
solve_coexistence()

本例调用的是CLP_LINEAR_PROGRAMMING求解器。可以查看pywraplp.py文档看看其底层代码如何调用求解器。

class Solver(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    CLP_LINEAR_PROGRAMMING = _pywraplp.Solver_CLP_LINEAR_PROGRAMMING
    GLPK_LINEAR_PROGRAMMING = _pywraplp.Solver_GLPK_LINEAR_PROGRAMMING
    GLOP_LINEAR_PROGRAMMING = _pywraplp.Solver_GLOP_LINEAR_PROGRAMMING
    SCIP_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_SCIP_MIXED_INTEGER_PROGRAMMING
    GLPK_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_GLPK_MIXED_INTEGER_PROGRAMMING
    CBC_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_CBC_MIXED_INTEGER_PROGRAMMING
    GUROBI_LINEAR_PROGRAMMING = _pywraplp.Solver_GUROBI_LINEAR_PROGRAMMING
    GUROBI_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_GUROBI_MIXED_INTEGER_PROGRAMMING
    CPLEX_LINEAR_PROGRAMMING = _pywraplp.Solver_CPLEX_LINEAR_PROGRAMMING
    CPLEX_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_CPLEX_MIXED_INTEGER_PROGRAMMING
    XPRESS_LINEAR_PROGRAMMING = _pywraplp.Solver_XPRESS_LINEAR_PROGRAMMING
    XPRESS_MIXED_INTEGER_PROGRAMMING = _pywraplp.Solver_XPRESS_MIXED_INTEGER_PROGRAMMING
    BOP_INTEGER_PROGRAMMING = _pywraplp.Solver_BOP_INTEGER_PROGRAMMING
    SAT_INTEGER_PROGRAMMING = _pywraplp.Solver_SAT_INTEGER_PROGRAMMING

该文件在安装的Or-tools包中。其支持的求解器较多(Or-tools安装完成后,其实已封装了部分求解器,另外部分求解器若要使用需重新安装),现在一一试验看是否可行。

CLP_LINEAR_PROGRAMMING

可求解(Or-tools已封装CLP的LP求解器)

GLPK_LINEAR_PROGRAMMING

无法求解(使用GLPK求解,需提前安装GLPK)

GLOP_LINEAR_PROGRAMMING

可求解(Or-tools已封装GLOP的LP求解器)

SCIP_MIXED_INTEGER_PROGRAMMING

可求解(Or-tools已封装了SCIP的MIP求解器)

GLPK_MIXED_INTEGER_PROGRAMMING

不支持GLPK的MIP求解,需要重新安装。

CBC_MIXED_INTEGER_PROGRAMMING

可求解(Or-tools已封装了CBC的MIP求解器)

GUROBI_LINEAR_PROGRAMMING

无法求解(使用GUROBI求解,需提前安装GUROBI)

CPLEX_LINEAR_PROGRAMMING

无法求解(使用CPLEX求解,需提前安装CPLEX)

XPRESS_MIXED_INTEGER_PROGRAMMING

无法求解(使用XPRESS求解,需提前安装XPRESS)

SAT_INTEGER_PROGRAMMING

可求解(Or-tools已封装了SAT整数规划(IP)求解器)

总结

OR-tools的pywraplp方法求解。可调用各类求解器。大部分商业求解器比如(groubi、cplex、xpress等需要安装和授权才能使用)。像CLP/SCIP/GLOP/SAT部分功能已封装至Or-tools可直接调用。已封装的求解器及功能有(无需再重新安装):CLP的LP求解器/SCIP的MIP求解器/GLOP的LP求解器/CBC的MIP求解器/SAT的IP求解器。

目录
相关文章
|
算法
OR-tools求解器使用介绍(二)
OR-tools求解器使用介绍(二)
644 0
|
人工智能 算法 决策智能
OR-tools求解器使用介绍(一)
OR-tools求解器使用介绍(一)
860 0
|
8月前
|
达摩院 Linux 决策智能
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
### MindOpt 优化求解器月刊(2024年3月) - 发布亮点:MAPL建模语言升级至V2.4,支持云上无安装使用和向量化建模语法。 - 新增功能:Linux用户可本地安装`maplpy`,并支持Python与MAPL混编。 - 实例分享:介绍背包问题的组合优化,展示如何在限定容量下最大化收益。 - 用户投稿:探讨机票超售时的最优调派策略,以最小化赔付成本。 - 加入互动:官方钉钉群32451444,更多资源及。 [查看详细内容](https://opt.aliyun.com/)
133 0
阿里达摩院MindOpt优化求解器-月刊(2024年3月)
|
8月前
|
达摩院 Linux API
阿里达摩院MindOpt求解器V1.1新增C#接口
阿里达摩院MindOpt求解器发布最新版本V1.1,增加了C#相关API和文档。优化求解器产品是求解优化问题的专业计算软件,可广泛各个行业。阿里达摩院从2019年投入自研MindOpt优化求解器,截止目前经历27个版本的迭代,取得了多项国内和国际第一的成绩。就在上个月,2023年12月,在工信部产业发展促进中心等单位主办的首届能源电子产业创新大赛上,MindOpt获得电力用国产求解器第一名。本文将为C#开发者讲述如何下载安装MindOpt和C#案例源代码。
255 3
阿里达摩院MindOpt求解器V1.1新增C#接口
|
8月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
8月前
|
机器学习/深度学习 达摩院
阿里达摩院MindOpt优化求解器-月刊(2024年4月)
【摘要】2024.04.30,阿里云发布了MindOpt优化求解器的新商品和功能。MindOpt现在已上架,提供超低价零售求解器,支持按需购买,可在阿里云平台上直接购买联网或不联网License。新版本V1.2发布,提升MILP性能,并增加PostScaling参数。此外,MindOpt Studio推出租户定制版,正处于邀测阶段。同时分享了使用MindOpt解决二分类SVM问题的案例。更多内容,可访问相关链接。
171 0
|
5月前
|
达摩院 供应链 安全
光储荷经济性调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文介绍使用MindOpt工具优化光储荷经济性调度的数学规划问题。光储荷经济性调度技术旨在最大化能源利用率和经济效益,应用场景包括分布式光伏微网、家庭能源管理系统、商业及工业用电、电力市场参与者等。文章详细阐述了如何通过数学规划方法解决虚拟电厂中的不确定性与多目标优化难题,并借助MindOpt云建模平台、MindOpt APL建模语言及MindOpt优化求解器实现问题建模与求解。最终案例展示了如何通过合理充放电策略减少37%的电费支出,实现经济与环保双重效益。读者可通过提供的链接获取完整源代码。
|
5月前
|
达摩院 BI 索引
切割问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文主要讲述了使用MindOpt工具对切割问题进行优化的过程与实践。切割问题是指从一维原材料(如木材、钢材等)中切割出特定长度的零件以满足不同需求,同时尽可能减少浪费的成本。文章通过实例详细介绍了如何使用MindOpt云上建模求解平台及其配套的MindOpt APL建模语言来解决此类问题,包括数学建模、代码实现、求解过程及结果分析等内容。此外,还讨论了一维切割问题的应用场景,并对其进行了扩展,探讨了更复杂的二维和三维切割问题。通过本文的学习,读者能够掌握利用MindOpt工具解决实际切割问题的方法和技术。
|
5月前
|
达摩院 算法 安全
智慧楼宇多目标调度问题【数学规划的应用(含代码)】阿里达摩院MindOpt
本文探讨了使用MindOpt工具优化智慧楼宇的多目标调度问题,特别是在虚拟电厂场景下的应用。智慧楼宇通过智能化技术综合考虑能耗、舒适度等多目标,实现楼宇设备的有效管理和调度。虚拟电厂作为多能源聚合体,能够参与电力市场,提供调峰、调频等辅助服务。文章介绍了如何使用MindOpt云上建模求解平台及MindOpt APL建模语言对楼宇多目标调度问题进行数学建模和求解,旨在通过优化储能设备的充放电操作来最小化用电成本、碳排放成本和功率变化成本,从而实现经济、环保和电网稳定的综合目标。最终结果显示,在使用储能设备的情况下,相比不使用储能设备的情形,成本节约达到了约48%。
|
5月前
|
达摩院 供应链 JavaScript
网络流问题--仓储物流调度【数学规划的应用(含代码)】阿里达摩院MindOpt
本文通过使用MindOpt工具优化仓储物流调度问题,旨在提高物流效率并降低成本。首先,通过考虑供需匹配、运输时间与距离、车辆容量、仓库储存能力等因素构建案例场景。接着,利用数学规划方法,包括线性规划和网络流问题,来建立模型。在网络流问题中,通过定义节点(资源)和边(资源间的关系),确保流量守恒和容量限制条件下找到最优解。文中还详细介绍了MindOpt Studio云建模平台和MindOpt APL建模语言的应用,并通过实例展示了如何声明集合、参数、变量、目标函数及约束条件,并最终解析了求解结果。通过这些步骤,实现了在满足各仓库需求的同时最小化运输成本的目标。