无时间窗口的VRP

    最近观摩了油管大佬关于VRP的讲解,获得了一些体会,并自己用lingo编程实现了一些无时间窗口的VRP,使用的模型是整数规划。

    把所有运送货物的车辆当成一辆去考虑,只要有某一辆车从i到j送过货,x_{ij}=1,否则为0;f_{ij}是一个辅助变量,表示的是在除去发货点(depot)以外的每一个点有且只有一辆车去的前提下,从i出发到j的车辆上所承载的货物的余量,所以得到这个余量的两个约束:

\sum\limits_{j = 1}^n {​{f_{ij}} - \sum\limits_{j = 1}^n {​{f_{ji}}} = {D_i}}

  表示为所有可能到i点的车的余量减去从i点出去的车的余量是i点的需求量

0 \le {f_{ij}} \le C{x_{ij}}

 表示为:若某车从i点到过j点则其载量不大于车的总承载量C;如果没来过则承载量必为0;

为此我自己编了lingo程序实现:

N=15;C=35;

MODEL:
SETS:
CITY/1..15/:DEMAND;
CXC(CITY,CITY):DIST,F,X;
ENDSETS
DATA:
DIST=
              0    6.9630    5.2030   10.0750    4.0230    3.0710    4.3500    4.1250    5.6280    6.3840    3.6870    3.4250    8.6590    3.5510    7.9180
    6.9630         0    9.3180    7.6410    5.4940   10.9060    6.6890    6.4680    6.6630    6.7480    6.5730    7.5220    7.2500    6.0380    8.0600
    5.2030    9.3180         0    7.6520    6.9260    7.3970    7.8340    6.3890    6.0140   10.5140    5.6190    6.8320    6.5090    8.5310    8.9140
   10.0750    7.6410    7.6520         0    3.1320    5.7650    9.7370    6.9490    7.0950    7.3060    6.3760    5.8960   10.3970    8.3150    9.1060
    4.0230    5.4940    6.9260    3.1320         0    3.5890    7.1960    7.2610    7.9930    8.6330    6.4200    6.3040    5.8040    6.7340    6.3310
    3.0710   10.9060    7.3970    5.7650    3.5890         0    6.5890   11.6230    8.5780    9.2250    9.1820    6.2760   10.9700    5.0080    6.5680
    4.3500    6.6890    7.8340    9.7370    7.1960    6.5890         0    8.6860    6.1750    7.0210    7.1110    4.6290    4.7340   11.6380    6.2130
    4.1250    6.4680    6.3890    6.9490    7.2610   11.6230    8.6860         0    6.3290    4.3000    5.8340    7.7320    8.3390    7.2770    6.9490
    5.6280    6.6630    6.0140    7.0950    7.9930    8.5780    6.1750    6.3290         0    4.9970    5.0830    7.1610    6.9370   10.1340    5.9630
    6.3840    6.7480   10.5140    7.3060    8.6330    9.2250    7.0210    4.3000    4.9970         0    3.1420    8.4270    6.1860    5.1270    6.8490
    3.6870    6.5730    5.6190    6.3760    6.4200    9.1820    7.1110    5.8340    5.0830    3.1420         0    9.8980    9.9830    6.6840    9.5520
    3.4250    7.5220    6.8320    5.8960    6.3040    6.2760    4.6290    7.7320    7.1610    8.4270    9.8980         0    4.2850    3.7890    3.6040
    8.6590    7.2500    6.5090   10.3970    5.8040   10.9700    4.7340    8.3390    6.9370    6.1860    9.9830    4.2850         0    6.6910    5.0810
    3.5510    6.0380    8.5310    8.3150    6.7340    5.0080   11.6380    7.2770   10.1340    5.1270    6.6840    3.7890    6.6910         0    4.4620
    7.9180    8.0600    8.9140    9.1060    6.3310    6.5680    6.2130    6.9490    5.9630    6.8490    9.5520    3.6040    5.0810    4.4620         0;
DEMAND = 0     8    12    13    10     7    16     6     6     7     7    12    12     6    16;
ENDDATA
@FOR(CXC:@BIN(X));
MIN = @SUM(CXC(I,J):DIST(I,J)*X(I,J));
@FOR(CITY(I)|I #GT# 1:@SUM(CITY(J):X(I,J))=1;@SUM(CITY(J):X(J,I))=1);
@FOR(CITY(I)|I #GT# 1:@SUM(CITY(J):F(J,I))-@SUM(CITY(J):F(I,J))=DEMAND(I));
@FOR(CXC(I,J):F(I,J)<=35*X(I,J);F(I,J)>=0);

结果并没有注明所使用到的车辆数目,车辆数目是回路数量(因为所有车辆轨迹除了depot不相交)

 Global optimal solution found.
  Objective value:                              85.08600
  Objective bound:                              85.08600
  Infeasibilities:                              0.000000
  Extended solver steps:                           15259
  Total solver iterations:                        822550
  Elapsed runtime seconds:                         39.30

  Model Class:                                      MILP

  Total variables:                    455
  Nonlinear variables:                  0
  Integer variables:                  225

  Total constraints:                  493
  Nonlinear constraints:                0

  Total nonzeros:                    1697
  Nonlinear nonzeros:                   0

这里的objective bound表示的是最小值的下界,因为整数规划用的还是单纯形法,通过换基来实现. 

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值