2017-06-05 31 views
0

我想比较Gurobi和Scipy的线性编程工具,比如linprog。 SciPy的要求来指定一个问题,同时Gurobi就像here这样Scipy.linprog的Gurobi风格模型构建?

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 

我的目标是把代码写在只有一个方法,仍然基准与两个结果求解。为了加快比较求解器:

  1. 是否存在用于Scipy的LP问题的Gurobi式模型构造?

  2. 是否存在一些包使两种方法可以互换(我可以为Gurobi编写scipy风格,或者为Scipy编写Gurobi风格)?

  3. scipy会提供任何其他接口来指定线性编程问题吗?

+1

你见过[this](https://stackoverflow.com/questions/22767608/sparse-matrix-lp-problems-in-gurobi-python)回答? – Ioannis

+0

loannis:谢谢,但它是关于稀疏矩阵,这里没有真正的相关性。 – hhh

回答

3

这听起来像一个大量的工作,显示明显的:

  • 商业求解像Gurobi是更快,远远超过非商业的更强大的
    • 也有高 - 通过H. Mittelmann(CLP和GLPK成为最受欢迎的非商用产品)的质量基准测试
  • W hile scipy的linprog没问题,它比包括CBC/CLP,GLPK,lpSolve在内的开源竞争差得多......
    • 速度和鲁棒性!
    • 另外:SciPy的的linprog似乎真的没有维护open issues

有一些方法,你可以这样做:

  • A)的问题定义的使用linprog的方式将它转换为古罗比风格
    • 非常容易转换矩阵格式到古罗比的造型
  • B)使用cvxpy造型工具,grab the standard-form和写入Gurobi(实际上是一个包装:有一个)和linprog(又容易)。这将允许使用非常强大的建模语言
    • 缺点:根据问题的内在变换(例如,abs(some_vector)可能会引入辅助变量)
  • C)写一些MPS阅读器/或采取一个从其他工具,以您模型中Gurobi问题,输出这些和阅读&
    • 候选工具中linprog解决:cvxopt's MPS阅读器(以及隐藏在文档),一些GLPK接口,甚至一些CBC接口
    • (也许隐藏变换)

无论您做什么,解决方案流程分析都将成为您的代码的重要组成部分,因为linprog可能会失败很多。它也无法处理大型稀疏模型。

备注根据您的gurobi,例如

  • 你的榜样(TSP)是MIP,而不是一个LP
  • 对于MIP,一切以上商用和开放之间获取的恶化(特别是性能上的差异说-source)
  • scipy中没有MIP解算器!
+0

运营商没有提到TSP。您提及的TSP的表述是什么?“您的示例(TSP)是MIP,而不是LP”'? – hhh

+1

检查你的链接'''Gurobi的工作就像这里''',这导致了一些页面'''旅行推销员问题 与整数编程和Gurobi''' – sascha

+0

CVXPY看起来非常好,还有纸浆。它看起来像CVXPY是那里的顶级免费产品。是对的吗?指定问题与我喜欢的Gurobi非常相似。 – hhh