问题描述
我目前正在研究跨码头的门到门问题优化问题,需要帮助才能将此公式转换为pyscipopt语言!在此处查看说明和图片!
•I:接收门(入站卸货门)的数量 •J:装运门(出站装载门)的数量 •M:每个入站拖车的起点数量(I≥M)被视为起点 •N:目的地数目(J≥N)目的地是城市,还是枢纽或跨码头 •dij:接收门i与目的门j之间的距离 •xmi:0/1指示器,用于将原点m分配给接收门i •ynj:用于将目的地n分配到装运门j的0/1指示器 •wmn:从原点m运送货物到m所需的叉车行程次数 目的地这个数字是从m到n的货运量的函数。
这是我到目前为止所得到的... 输出必须是进出房门的最佳拖车到最佳门:
from pyscipopt import Model,quicksum
def opt_model(In,Out,Trailer_In,Trailer_Out,cost_matrix):
model = Model("Optimization")
x = {}
for i,m,j,n in cost_matrix:
x[i,n] = model.addVar(vtype="C",name="x[%s,%s,%s]" % (i,n))
for i in In:
for m in Trailer_In:
model.addCons(quicksum(x[i,n] for j in In if (i,m) in x) == 1,"Jobs_In[%s,m))
for j in Out:
for n in Trailer_Out:
model.addCons(quicksum(x[i,n] for i in Out if (j,n) in x) == 1,"Jobs_Out[%s,%s]" % (j,n))
model.setobjective(quicksum((cost_matrix[i,n] * x[i,n] for i,n in x)))
model.data = x
return model
Trailer_In = [1,2,3]
Trailer_Out = [1,3]
trips = {(1,1):4,(1,2):2,3):2,(2,2):7,3):3,(3,2):5,3):2
}
In = [1,3]
Out = [1,3]
distance = {(1,2):6,3):9,1):5,2):4,3):7,1):6,2):3,3):4
}
cost_matrix = {}
for i in In:
for m in Trailer_In:
for j in Out:
for n in Trailer_Out:
cost_matrix[i,n] = distance[i,j] * trips[m,n]
model = opt_model(In,cost_matrix)
model.optimize()
print("Optimal value")
print(model.getobjVal())
EPS = 0
for i,n in model.data:
if model.getVal(model.data[i,n]) >= EPS:
print("Dock no. {0} unloads Truck no. {1} and dock no. {2} loads truck no. {3}".format((model.getVal(i,n))))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)