问题标签 [gurobi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
724 浏览

programming-languages - 编程语言建议 - 动态和多维数组 - cplex 或 gurobi

目前我一直在使用 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 的编程语言开始。

0 投票
0 回答
144 浏览

python - 使用 Python 在 Gurobi 中实现复杂的优化公式

我想实现以下优化程序,但我发现这样做非常困难:

最大限度。alpha*(C'GC/|C|) + beta*((1-Var(1-3^{-VC}))*(mean(VC)/3))
st |C| <= {0,1} 中的数字和 C


然而,

  • C 是长度为 m 的决策列向量。
  • |C| 代表范数 0 或 C 向量的总和。
  • C'代表C的转置。
  • G 是非负实数的 [m,m] 矩阵。
  • V 是非负整数的 [n,m] 矩阵,n <= m。
  • alpha 和 beta 是常数(非负实数)。
  • “Var”和“mean”分别代表方差和均值。
  • “数字”是一个非负实数常数。

我对 Gurobi 很陌生。高度赞赏在 Python 中实现上述公式的任何帮助。

0 投票
0 回答
918 浏览

python - 如何在python中解决负gurobi变量幂的常数

我正在使用 Gurobi 和 Python 来解决以下问题:

最大限度。(1-Var(3^{-VC})) * (mean(VC)) st sum(C) <= 3 and C in {0,1}

而 C 是长度为 n 的二元决策向量。V 是大小为 mxn (m<=n) 的系数(信息)矩阵。这是我的python代码:

我收到以下错误:

显然,主要问题是如何使用 gurobi 变量作为常数的幂。请建议我特别解决该错误以及总体上的整体实施。

0 投票
0 回答
362 浏览

java - 在 Gurobi 拥有用于 LP 松弛的切割平面

我目前正在通过使用 Gurobi Java 接口在 Java 中实现 Gurobi。我想通过实现生成我自己的切割平面的回调函数来加速某些 MIP 的求解过程。这些切割平面应该在分支定界树的每个节点中生成,以收紧该节点相应的 LP-松弛。因此,我需要 LP 松弛的最优解变量。目前我不知道如何设置回调函数的 WHERE 和 WHAT 变量以获得节点中 LP 松弛的最优解变量。以下Gurobi 页面提供了更多信息,在我看来 Gurobi 仅在 C 中提供了 LP 松弛的解变量的多余部分。感谢您的每一个答案...

0 投票
1 回答
899 浏览

mathematical-optimization - 尽管数学上不可能,Gurobi 报告了无限模型

我正在使用 Julia 出色的 JuMP 包来求解以 Gurobi 6.0.4 作为求解器的线性程序。目标函数是决策变量的总和,明确定义为非负,问题要求将其最小化。出于某种原因,Gurobi 认为该模型是无限的。

以下是变量和目标的定义:

奇怪的观察 #1:虽然这是一个最小化问题,但 Gurobi 的 BarrierSolve 方法的日志清楚地显示了目标函数在每次迭代时都在增加。此外,Gurobi 似乎在行数和列数之间进行了切换。在预求解步骤之前,模型有 50k 行和 25k 列。在 presolve 步骤(删除少于 1k 行和列)之后,我们有 24k 行和 50k 列。日志如下所示:

奇怪的观察 #2:BarrierSolve 最终以 status 终止InfeasibleOrUnbounded。然后它建议通过设置来设置InfUnbdInfo=1和使用 Gurobi 的齐次 BarrierSolve 方法BarHomogeneous=1。当我做这两件事时,目标函数不断增加(!),障碍日志如下所示:

当涉及最小化非负变量的总和时,我不明白线性程序如何无界。这是 Gurobi 的问题还是我在设置 LP 时做错了什么?我怀疑这可能是某种数字错误,但我不确定如何解决它。

编辑:我通过放松一些约束并人为地使可行性区域变得更好,找到了该问题的部分解决方案。看起来这个问题确实是一个可行性问题而不是无界问题,这意味着 Gurobi 可能实际上指的是对偶的无界?

谢谢你的帮助!

0 投票
1 回答
5372 浏览

python - GurobiError:Q 矩阵不是半正定 (PSD)

我需要在 python 中编写一个模型来用 gurobi 解决它。该模型包含一个平方根:Σ(h z a*√(SI+TR))(这是目标函数)

因为 Gurobi 不支持平方根,所以我将目标函数转换为:Σ(h z a*Z)(目标函数)

SI+TR<=Z*Z(额外约束)

Z>=0(额外约束)

但是现在Gurobi还是报错:GurobiError: Q matrix is not positive semi-definite (PSD)

我如何让 Gurobi 解决这个模型?代码:(从第 143 行开始到第 199 行)

回溯(最后一次调用):文件“C:\gurobi600\win32\examples\python\safetyStock.py”,第 230 行,在安全库存(需求,中级,alfa)文件“C:\gurobi600\win32\examples\python \safetyStock.py”,第 192 行,在 safestock m.optimize() 文件“model.pxi”,第 536 行,在 gurobipy.Model.optimize (../../src/python/gurobipy.c:37543) GurobiError : Q 矩阵不是半正定的 (PSD)

0 投票
1 回答
126 浏览

gurobi - 使用整数规划检查遏制

对于这个问题,区域Z d的子集,由具有整数系数的有限多个线性不等式定义,其中Z d是整数的 d 元组的集合。例如,(x, y)非负整数对的集合2x+3y >= 10构成一个区域d=2(非负性只是强加了额外的不等式x>=0y>=0)。

问题:有没有一种好方法,使用整数编程(或其他东西?)来检查一个区域是否包含在有限多个其他区域的联合中?

我知道一种检查收容的方法,我将在下面描述,但我希望有人能够提供一些改进,因为它不是太有效。


这是我知道的检查收容措施的方法。首先,整数编程库可以直接检查区域是否为空:在整数编程术语中(据我理解),区域的空性对应于模型的不可行性。我使用 gurobi 库编写了一些代码来检查空虚,它在实践中似乎对我关心的那种区域运行良好。

现在假设我们要检查一个区域X是否包含在另一个区域中Y(问题的一个特例)。让ZX与 的补码的交集Y。thenX包含在Y当且仅当Z为空时。现在,Z它本身不是我所说的区域,而是区域的联合Z_1, ..., Z_n,其中n是用于定义的不等式的数量Y。我们可以Z通过检查 each 是否为空来检查是否Z_1, ..., Z_n为空,我们可以如上所述进行。

一般情况可以用完全相同的方式处理:如果Y是区域的有限联合,Y_1, ..., Y_k那么Z仍然是区域的有限联合Z_1, ..., Z_n,因此我们只需检查每个区域Z_i是否为空。IfY_im_i不等式定义 then n = m_1 * m_2 * ... * m_k

所以总而言之,我们可以将包含问题简化为空性问题,图书馆可以直接解决这个问题。问题是我们可能必须解决非常大量的空性问题来解决包含问题(例如,如果每个Y_i不等式仅由两个不等式定义,则n = 2^k随着 指数增长k),因此这可能需要很多时间。

0 投票
1 回答
1449 浏览

c++ - Gurobi 和 C++——如何使用 Clion 协同工作

首先,我对 C++ 完全陌生,所以如果您知道答案,请耐心等待我 ;)。这是我的问题:我想在 C++ 代码中使用 Gurobi 解决 IP。代码本身似乎很好,因为没有标记为错误的表达式。但是,当我运行代码时,我收到以下错误报告:

和许多这样的行:

我想错误出在我的 CMakeList.txt 文件中。这个文件是自动创建的,因为我使用的是 Clion,并且为了包含 gurobi,我输入了这些额外的行:

非常感谢任何帮助,如果您需要更多信息,请告诉我。(如果我使用mac很重要)。

编辑:自从我找到这个后,我更改了我的制作代码: https ://github.com/joschu/trajopt/blob/master/cmake/modules/FindGUROBI.cmake 我更改了版本,因为我有 gurobi604 但它仍然不起作用. 我的新错误信息是:

我不明白,因为我想

那应该很容易找到。有什么建议吗?

0 投票
2 回答
1325 浏览

algorithm - 多目标整数规划

我希望使用整数规划来枚举帕累托最优解。我想实现一个算法,使用 gurobi 或类似的单目标整数规划求解器来做到这一点,但我不知道任何这样的算法。有人可以提出一个枚举有效边界的算法吗?

0 投票
1 回答
185 浏览

python - networkx 中的编码求和 i > j

我正在使用networkx(和gurobi)来计算一组节点中节点之间的最短路径。但是我需要以特定方式计算所有最短路径的总和,即,

对所有 i > j 的 dij 求和

其中 dij 是节点 i 和 j 之间的最短路径

我认为这是非常错误的。