微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Gurobi for python 的 VRP 模型中的可选节点出现问题

如何解决使用 Gurobi for python 的 VRP 模型中的可选节点出现问题

我目前正在处理电动车辆的 VRP 问题。这意味着我有范围限制和充电站作为可选访问的节点。

在我的模型中,我有以下内容

O = [0] # depot
N = [1,2,3,4,5,6,7] # deliveries
V = [0,1,7] # all nodes which must be visited
F = [8,9] # charging stations.
G = [0,7,8,9] # all the nodes

此外,我有一个距离矩阵,其中包含所有节点之间的距离。我对每个交货点的重量也有要求。我目前的模型是这样的:

m = Model('E-VRP')
x = m.addVars(G,G,vtype=GRB.BINARY)
lw = m.addVars(G,vtype=GRB.CONTINUOUS) # for calculating load weight
d = m.addVars(G,vtype=GRB.CONTINUOUS) # for calculating distance driven

m.setobjective(quicksum(distance[i,j]*x[i,j] for i in G for j in G if i!=j),GRB.MINIMIZE)

# Restrictions

m.addConstrs(quicksum(x[i,j] for j in V if j!=i)== 1 for i in N)  #1
m.addConstrs(quicksum(x[i,j] for i in V if i!=j)== 1 for j in N)  #2

m.addConstrs ((x[i,j]==1) >> (lw[i] + Dw[i] == lw[j])  #3
              for i in G for j in G if i!=0 if j!=0)
m.addConstrs (lw[i] >= Dw[i] for i in G);  #4 (Dw being demand in weight at delivery)
m.addConstrs (lw[i] <= Qw for i in G);     #5 (Qw being weight capacity of vehicle)

m.addConstrs ((x[i,j]==1) >> (d[i] + distance[i,j] == d[j])
              for i in G for j in G if j>0);   #6
m.addConstrs (d[i] <= Qr for i in G);          #7 (Qr being range restriction of vehicle)

前三个限制的组合使该模型成为一个有效的车辆路径问题。它在depot(0)开始和结束,如果Qw小于lw,模型将进行多条路线。

当我施加范围限制时,问题就来了。我有两个问题:

首先,该模型不会将充电站作为路线的一部分。我知道限制 #1 和 #2 规定必须有从列表 V 到 N 的连接,反之亦然,这意味着对于节点 j,列表 V 中必须有一个 i(不包括充电站)。但是,每当我尝试“放开”前两个限制时,该模型都会建议不在 depot 开始或结束的 subtours。有人对我如何解决这个问题有任何建议吗?

其次,我的变量 d 会跟踪行驶的距离,它只会在返回仓库之前将到最后一个节点的距离相加。我意识到我的代码 j>0 表明该仓库不能是我的旅行变量中的目的地,但是,这是我让它适用于所有其他节点的唯一方法

对这些问题的任何帮助将不胜感激。

Brgds,

维克托

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。