1

目前我一直在使用 MATLAB 来解决我一直在处理的问题。在我的 MATLAB 代码中,我调用 CPlex 或 GUROBI 求解器来解决大型线性规划问题。在我的 MATLAB 代码的每次调用中,CPlex 或 GUROBI 被调用超过 10^5 次。这会导致高计算负载,并且解决更大的问题需要太多时间。但是,我想切换到另一种编程语言,即

  • 能够调用其中之一(CPlex 或 GUROBI),
  • 能够在每次调用中调用这些求解器之一(CPlex 或 GUROBI)太多次(比如说 10^6 次),而不会显着降低性能,也不会显着增加运行时间。
  • 能够使用动态数组(即,当我运行我的代码时,它会获取一些用户参数,并且它将在每次运行中定义不同大小的矩阵。)
  • 能够定义多维数组,而不是数组数组。

在这一点上,我找到了三个选项

  1. Fortran:看起来还不错,但我担心它是否能够有效地调用求解器太多次。看来我只能将 Fortran 与 Cplex 一起使用。我用谷歌搜索了 Fortran+GUROBI,但结果并不令人鼓舞。

  2. Visual Basic.NET:似乎使用 Visual Basic 可以同时调用 Cplex 和 GUROBI,但我不确定性能。

  3. Python:都可以与 CPlex 和 GUROBI 集成。

最后,我请求您提出建议以继续前进。我的偏好是从可以同时使用 GUROBI 和 CPlex 的编程语言开始。

4

1 回答 1

2

我的建议是使用 Python 和 Pyomo。

Pyomo (www.pyomo.org) “...是一个基于 Python 的开源软件包,支持多种优化功能,用于制定和分析优化模型。” 因此,您可以使用 Python 构造来帮助构建模型。构建模型后,您可以在 gurobi、cplex 等上运行它。而且由于求解器只是求解函数中的一个参数,因此在两者中运行它只是一个单词的区别。下面是一个简单的例子。

# model.py
from __future__ import division
from pyomo.environ import *

model = ConcreteModel()

model.x = Var([1,2], domain=NonNegativeReals)

model.OBJ = Objective(expr = 2 * model.x[1] + 3 * model.x[2])

model.Constraint1 = Constraint(expr=3 * model.x[1] + 4 * model.x[2] >= 1)

然后你可以从命令行解决

pyomo solve model.py --solver=gurobi

或者

pyomo solve model.py --solver=cplex

您也可以使用脚本解决它。这片天空是极限,支持小组很棒。

于 2015-07-10T12:15:54.130 回答