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求解器使用介绍(二)
535 0
|
人工智能 算法 决策智能
OR-tools求解器使用介绍(一)
OR-tools求解器使用介绍(一)
767 0
|
6月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
6月前
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
29天前
|
机器学习/深度学习 算法 数据可视化
如果你的PyTorch优化器效果欠佳,试试这4种深度学习中的高级优化技术吧
在深度学习领域,优化器的选择对模型性能至关重要。尽管PyTorch中的标准优化器如SGD、Adam和AdamW被广泛应用,但在某些复杂优化问题中,这些方法未必是最优选择。本文介绍了四种高级优化技术:序列最小二乘规划(SLSQP)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)和模拟退火(SA)。这些方法具备无梯度优化、仅需前向传播及全局优化能力等优点,尤其适合非可微操作和参数数量较少的情况。通过实验对比发现,对于特定问题,非传统优化方法可能比标准梯度下降算法表现更好。文章详细描述了这些优化技术的实现过程及结果分析,并提出了未来的研究方向。
24 1
|
4月前
|
人工智能 算法 调度
优化问题之如何选择合适的优化求解器
优化问题之如何选择合适的优化求解器
|
4月前
|
调度 决策智能
优化问题之优化求解器有哪些主要的评估特性
优化问题之优化求解器有哪些主要的评估特性
|
达摩院 调度
使用达摩院MindOpt优化交通调度_最大化通行量—线性规划问题
在数学规划中,网络流问题是指一类基于网络模型的流量分配问题。网络流问题的目标是在网络中分配资源,使得网络的流量满足一定的限制条件,并且使得某些目标函数最小或最大化。网络流问题通常涉及一个有向图,图中每个节点表示一个资源,每条边表示资源之间的关系。边上有一个容量值,表示该边上最多可以流动的资源数量。流量从源节点开始流出,经过一系列中间节点,最终到达汇节点。在这个过程中,需要遵守一定的流量守恒和容量限制条件。
|
6月前
|
存储 达摩院 调度
「达摩院MindOpt」优化FlowShop流水线作业排班问题
在企业在面临大量多样化的生产任务时,如何合理地安排流水线作业以提高生产效率及确保交货期成为了一个重要的问题。
「达摩院MindOpt」优化FlowShop流水线作业排班问题
MindOpt V1.0优化种植计划问题,新的建模方法
种植计划是指农业生产中针对不同农作物的种植时间、面积和种植方式等方面的规划安排。根据具体情况进行合理的规划和安排,以实现农作物的高产、优质和可持续发展。
MindOpt V1.0优化种植计划问题,新的建模方法