我想比较Guidelines和Scipy的线性编程工具,比如linprog。Scipy需要在matrix-list-vector-form中指定问题,而Guidance的工作方式类似于here,
m = Model()
m.addVar(...) %for variables
m.addConstr(..>) %for constraints
m.update() %for updating the model
m.optimize % for optimizing the model
m.params %for getting parameters
m._vars %for getting variables
比较Scipy
Minimize: c^T * x
Subject to: A_ub * x <= b_ub
A_eq * x == b_eq
c : array_like
Coefficients of the linear objective function to be minimized.
A_ub : array_like, optional
2-D array which, when matrix-multiplied by x, gives the values of the upper-bound inequality constraints at x.
b_ub : array_like, optional
1-D array of values representing the upper-bound of each inequality constraint (row) in A_ub.
A_eq : array_like, optional
2-D array which, when matrix-multiplied by x, gives the values of the equality constraints at x.
b_eq : array_like, optional
1-D array of values representing the RHS of each equality constraint (row) in A_eq.
bounds : sequence, optional
我的目标是只使用一种方法编写代码,并且仍然使用两种求解器对结果进行基准测试。为了加快比较求解器:
- Scipy是否存在Gurobi式的LP问题模型构造?
1.是否存在一些包来使这两个方法可以互换(我可以为Guidelines编写scipy样式,或者为Scipy编写Gurobi样式)? - scipy是否提供任何其他接口来指定线性规划问题?
2条答案
按热度按时间btxsgosb1#
这听起来像是一个很大的工作,以显示明显的:
有一些方法可以做到这一点:
***A)**使用linprog的问题定义方式并将其转换为Gurobi风格
***B)**使用cvxpy作为建模工具,获取标准格式并为Guidelines编写一个 Package 器(实际上:有一个)和linprog(又是简单的)。这将允许一个非常强大的建模语言被两者使用
abs(some_vector)
可能会引入辅助变量)***C)**编写一些MPS-reader /或从其他工具中获取一个,以便在Guidelines中建模问题,输出这些问题并在linprog中读取和解决
无论你做什么,解决方案过程分析都将是你代码的重要组成部分,因为linprog可能会失败很多。它也不能处理大型稀疏模型。
基于您的gurobi示例的备注
4dbbbstv2#
我以一种非常直接的方式做到了这一点。这并不像之前的文章所暗示的那样需要大量的工作。例如
翻译成:
当然,如果不是所有的边界都是整数或二进制的,你可能需要更多的变量类型处理,或者scipy提供的其他各种可能性,如列表与标量,无值等。不用说,它可以在几行Python代码中完成。