如何将公式转换为Python?

问题描述

我目前正在研究跨码头的门到门问题优化问题,需要帮助才能将此公式转换为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的货运量的函数

Formulation of the problem

这是我到目前为止所得到的... 输出必须是进出房门的最佳拖车到最佳门:

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 (将#修改为@)