Python 如何使用gurobipy编写最大化约束
我在python和 我想解决一个路由问题,但有一些约束条件我不知道如何写,如图所示: 我试过几种方法 第一次尝试:Python 如何使用gurobipy编写最大化约束,python,gurobi,Python,Gurobi,我在python和 我想解决一个路由问题,但有一些约束条件我不知道如何写,如图所示: 我试过几种方法 第一次尝试:model.addConstr(a[j,k]==max_uz((b[i,k]+T[i,j]-(1-x[i,j,k])*M),0)) 第二次尝试:单独使用指示符约束,如下所示 model.addConstr((c == 0) >> (b[i,k] + T_ij[i,j] - ( 1-x[i,j,k] )*M <= -eps) ) model.addConstr((c
model.addConstr(a[j,k]==max_uz((b[i,k]+T[i,j]-(1-x[i,j,k])*M),0))
第二次尝试:单独使用指示符约束,如下所示
model.addConstr((c == 0) >> (b[i,k] + T_ij[i,j] - ( 1-x[i,j,k] )*M <= -eps) )
model.addConstr((c == 1) >> (b[i,k] + T_ij[i,j] - ( 1-x[i,j,k] )*M >= 0))
model.addConstr((c==0)>>(b[i,k]+T_ij[i,j]-(1-x[i,j,k])*M>(b[i,k]+T_ij[i,j]-(1-x[i,j,k])*M>=0)
第三次尝试:model.addGenConstrMax(a[j,k],[0,b[i,k]+T_ij[i,j]-(1-x[i,j,k])*M])
运行代码,但并非每次都有效
- 请注意,M表示BigM,我为is 1e-6设置的eps
- a[]和b[]是连续变量,x[]是二进制变量,T_ij[]是参数
max_389;()
N = [1,2,3]
V = [4,5,6]
a = m.addVars(N,V,name="a")
b = m.addVars(N,V,name="b")
T_ij = m.addVars(N,N,name="T_")
x = m.addVars(N,N,V,name="x")
aux = m.addVars(N,N,V,name="aux")
M = 10000
for i in N:
for j in N:
for k in V:
m.addConstr(aux[i,j,k] == (b[i,k] + T_ij[i,j] - ( 1-x[i,j,k] )*M))
m.addConstr(a[j,k] == max_( aux[i,j,k], 0) )
这同样适用于第三种方法,因为max()
只是addGenConstrMax()
函数的快捷方式
您的第二种方法应该可以正常工作,但我建议您使用以下方法之一:
max
函数。@dejdej感谢您的编辑!这已经在中得到了回答。