我有一个混合整数规划问题.我可以使用JuMP找到最佳解决方案.但我怎样才能找到第二个最佳解决方案?或者第三好等
这可能是另一个同样最优的解决方案,或者它可能是更糟糕的解决方案,或者可能是:Infeasible
- 可能没有大多数解决方案.
我知道对于类似TSP的问题,我可以通过逐步删除最佳路径上的链接来找到其他解决方案(即将某些城市之间的距离设置为无限).对于调度类型问题,我可以类似地逐步设置禁止在最佳路径中使用的时隙的可用性.
但有没有一种通用的方法来做到这一点,而没有编写自己的问题特定的方法来禁止这个解决方案?
mathematical-optimization julia coin-or-cbc julia-jump mixed-integer-programming
我正在尝试在 Pyomo 上使用 CBC(v2.10.3) 来解决整数线性问题。
执行求解器时,我当前设置的时间限制为 600 秒。
opt = SolverFactory ("cbc")
opt.options['seconds'] =600
Run Code Online (Sandbox Code Playgroud)
在这个时间限制内,求解器设法找到多个可行的解决方案。但是,当它在 600 秒结束时超时时,它不会返回找到的最佳整数解。相反,它返回一个非整数解。
有没有办法在 pyomo 上使用 CBC 在时间限制结束时返回最佳整数解决方案?
(我知道设置了一个最优差距。但是,最好解决给定的时间并返回找到的最佳解决方案。)
Cbc0010I After 144000 nodes, 17010 on tree, 51.908959 best solution, best possible 5.2447218 (566.79 seconds)
Cbc0010I After 145000 nodes, 16985 on tree, 51.908959 best solution, best possible 5.2447218 (568.59 seconds)
Cbc0010I After 146000 nodes, 17412 on tree, 51.908959 best solution, best possible 5.2447218 (576.34 seconds)
Cbc0010I After 147000 nodes, 17433 on tree, 51.908959 best solution, best possible …
Run Code Online (Sandbox Code Playgroud) 我正在使用COIN-OR的CBC求解器来解决一些数值优化问题。我正在通过PuLP构建Python中的优化问题。
我注意到,GUROBI和CPLEX之类的求解器会创建日志文件,但是我似乎无法弄清楚如何使CBC创建日志文件(与在屏幕上打印优化程序的进度相反)。
有人知道CBC中设置日志文件的选项吗?将所有stdout重定向到文件对我来说不起作用,因为我正在并行解决一堆问题,并希望将其日志文件分开。
这是我如何调用求解器的示例。这很好用,并将进度打印到终端。
prob.solve(pulp.COIN_CMD(msg=1, options=['DivingVectorlength on','DivingSome on']))
Run Code Online (Sandbox Code Playgroud)
这就是我认为应该构建解决方案的方式(尽管显然LogFileName不是有效的CBC选项)。
prob.solve(pulp.COIN_CMD(msg=1, options=['DivingVectorlength on', 'DivingSome on', 'LogFileName stats.log']))
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。我已经花了数小时试图浏览互联网,文档和CBC互动会议。
python mathematical-optimization python-2.7 pulp coin-or-cbc
我正在尝试解决puLP(Python)中的MILP,并且不断收到以下错误:
Traceback (most recent call last):
File "main_lp.py", line 63, in <module>
ans = solve_lp(C)
File "/home/ashwin/Documents/Williams/f2014/math317_or/project/solve_lp.py", line 36, in solve_lp
prob.solve()
File "/usr/local/lib/python2.7/dist-packages/PuLP-1.5.6-py2.7.egg/pulp/pulp.py", line 1619, in solve
status = solver.actualSolve(self, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/PuLP-1.5.6-py2.7.egg/pulp/solvers.py", line 1283, in actualSolve
return self.solve_CBC(lp, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/PuLP-1.5.6-py2.7.egg/pulp/solvers.py", line 1346, in solve_CBC
raise PulpSolverError("Pulp: Error while executing "+self.path)
pulp.solvers.PulpSolverError: Pulp: Error while executing /usr/local/lib/python2.7/dist-packages/PuLP-1.5.6-py2.7.egg/pulp/solverdir/cbc-32
Run Code Online (Sandbox Code Playgroud)
对于我的线性编程问题,我试图将不同向量的总和作为约束,并且我认为我一定做错了这个问题,因为一个更简单的问题可以解决。我已经附上了代码(C
是一个N×N numpy
数组)。
def solve_lp(C):
N = len(C)
prob=LpProblem('Scheduling',LpMinimize)
X = [[LpVariable('X' + str(i+1) + str(j+1), 0, C[i,j],LpBinary)
for …
Run Code Online (Sandbox Code Playgroud) coin-or-cbc ×4
python ×3
pulp ×2
coin-or ×1
julia ×1
julia-jump ×1
optimization ×1
pyomo ×1
python-2.7 ×1