我正在尝试使用python和gurobi优化器来建模和解决优化问题。这是我第一次使用优化器解决问题。首先,我编写了一个非常大的问题,并逐步添加了所有变量和约束。但是那有问题。所以我一次又一次地将问题简化为小版本。毕竟,现在我有一个非常简单的代码:
from gurobipy import *
m = Model('net')
x = m.addVar(name = 'x')
y = m.addVar(name = 'y')
m.addConstr(x >= 0 and x <= 9000, name = 'flow0')
m.addConstr(y >= 0 and y <= 1000, name = 'flow1')
m.addConstr(y + x == 9990, name = 'total_flow')
m.setObjective(x *(4 + 0.6*(x/9000)) + (y * (4 + 0.6*(y/1000))), GRB.MINIMIZE)
solo = m.optimize()
if solo:
print ('find!!!')
这实际上是一个简单的网络流问题(对于具有两个节点和两个边的图形),我想计算每个边(x和y)的流。显然,每个边缘的流量不能为负,并且不能大于边缘容量(x(capa)= 9000,y(capa)= 1000)。第三个约束条件显示了两边的总流量限制。最后,目标函数必须使方程最小化。
现在我对这段代码有疑问:
3.Ive得到了这个结果。但我真的不明白! 例如:它在每次迭代中计算的剂量是多少?!
提前发送Tnx,请原谅我的简单问题...
答案 0 :(得分:0)
optimize()
方法始终返回None,请参见print(help(m.optimize))
。调用此方法后,模型的状态存储在m.status
中,而解决方案值存储在每个变量的.X
属性中(假定模型已求解到最佳状态)。要访问它们,您可以使用m.getVars()
:
# your model ...
m.optimize()
if m.status = GRB.OPTIMAL:
for var in m.getVars():
print(var.VarName, var.X)
您发布的日志显示障碍方法(也称为内点方法)的每次迭代的目标值。有关详细概述,请参见here。