生产配送车辆路径问题,制定和代码
等待用户输入你好,
希望这个发现你和安全。
我想实现一个毕普使用Gurobi Python模块。却没有任何错误代码运行结果是有点误导。在这个阶段,我不确定如果是配方误解或我没有正确地编写代码。我简化了输入检查第一个如果代码是运行。下面你将看到的参数和设置值。
感谢你的支持!
MIP模型:
代码:
进口gurobipy作为全科医生
从gurobipy进口*
mdl =模型(“与”)
“集和参数”
N = (1,2,3,4]
V = (0,1,2,3,4]
K = (1,2]
一个= [(i, j)为我在V为j在V如果我! = j]
q = {1:6,2:2,3:4,4:3}
C = {1:8,2:4}
M = {1:1,2:2}
“成本矩阵”
c = {(0,1):3,(0,2):4,(0,3):5,(0,4):2,(1,0):3,(1,2):5,(1,3):7,(1,4):5,(2,0):4,(2,1):5,(2,3):9,(2,4):6,(3,0):5,(3,1):7,(3,2):9,(3,4):4,(4,0):2,(4,1):5,(4,2):6,(4,3):4}
“决策变量”
对= [(i, j, k)为我在V为j在V为k在K)
x = mdl。addVars(对,vtype =伽马线暴。二进制名称=“x”mdl)。modelSense = GRB.MINIMIZE
“约束”
mdl.addConstrs (quicksum (x (i, j, k)为k在K为我在V如果我! = = = j)1为j在N)
mdl.addConstrs (quicksum (x [0j k)为j在N) < = M [k]为k在K)
mdl.addConstrs (quicksum (x (i, j, k)为我在V)——quicksum (x (j, k)为我在V)) = =0为j在V为k在K)
mdl.addConstrs (quicksum (x (i, j, k)为我在V为j在N如果j ! =我)< = C [k]为k在K)
mdl。addConstrs (x(我,我,k) = = 0,因为我在k V k)
“目标函数”
mdl.setObjective (quicksum (x[我]* c(弧)为我在双为弧在一))
“解决”
mdl.Params。MIPGap =0.1
mdl.Params。期限=30.#秒
mdl.optimize ()
解决方案:
x (1、2、1) = 1
x [2 4 1] = 1
x [3 1 1] = 1
x [4、3、1] = 1
0
-
嗨,维萨姆,
你可以精心或奇怪的制定/实施的究竟是什么?
我的理解你的目标函数应该读
mdl.setObjective (quicksum (x (i, j, k) * c [(i, j)] (i, j)在k) k)
这是问题的根源吗?
我也推荐使用write ()功能和检查模型构建是你是否也希望。
mdl.write (“myLP.lp”)
最好的问候,
Jaromił0 -
在结果中,应该有主动弧离开仓库,它显示了没有。此外,有一个车辆1型和它不能同时满足所有客户的需求。
我重写了目标函数像你推荐和我有相同的解决方案。
将审查并获得新发现。
谢谢你的支持!
问候,
0 -
嗨,维萨姆,
通常,你应该定义一组边缘,然后定义\ (\ texttt {x} \)变量。我想在你的情况下,边缘的集合定义为\ (\ texttt {} \)。
最好的问候,
Jaromił0 -
因为我只是无意中在这古老的线程:
请注意,有约束缺失,消除车辆subtours分开的仓库。
有很多方法,使用大m约束、单/多种商品流动,削减连接等。0 -
此外,由于变量指数k定义了车辆类型和没有一个车辆,容量约束的一个特定的k太严格,因为它总结了由某种类型的所有车辆的要求。
0
请登录留下你的评论。
评论
6个评论