【路径规划】基于cplex算法求解带时间窗车辆路径规划问题(VRPTW)matlab代码

399 阅读3分钟

1 简介

本文提出一种基于约束规划的带时间窗车辆路径问题建模及优化方法,属于智能交通领域,包括:1,根据车辆路径问题的描述,建立其基本数学模型;2,基于车辆路径问题的数学模型,建立带时间窗车辆路径问题的约束规划基本模型;3,合理添加其他的约束条件,以优化模型,加快模型求解速度;4,导入验证和测试模型的基准测试包,并读取客户点信息;5,调用CPLEX优化器求解带时间窗车辆路径问题的约束规划模型,实验并进行结果分析.本发明所提出的建模及优化方法,便于描述和表示该问题复杂的约束条件,模型易拓展;合理添加的启发式约束条件,大大缩减算法搜索空间而加速求解;可求解到精确的全局最优解.

CPLEX是用于求解最优控制中的线性规划、整数规划及混合整数规划问题的高性能算法,可对多维状态及多重约束下的最优化求解显示出良好的求 解 特 性。 此 外,IBM 公 司 已 开 发 出 成 熟 的CPLEX技 术 应 用 工 具 包,可 支 持 C、MATLAB 及Java等多种计算运行环境。

2 部分代码

clear

clc

%% 小规模数据

d=[0,120,170,150,140,170,140,120,190];          %需求量

a=[0,912,825,65,727,15,621,170,255];            %左时间窗

b=[1236,967,870,146,782,67,702,225,324];        %右时间窗

E=a(1);                                         %配送中心左时间窗

L=b(1);                                         %配送中心右时间窗

s=[0,90,90,90,90,90,90,90,90];                  %服务时间

x=[81.5,87,75,85,89,77,76,87,73];               %横坐标

y=[41.5,37,53,52,41,58,45,53,38];               %纵坐标

d=[d,d(1)];                                     %体现出数学模型中的第n+1个节点,也就是配送中心

a=[a,a(1)];                                     %体现出数学模型中的第n+1个节点,也就是配送中心

b=[b,b(1)];                                     %体现出数学模型中的第n+1个节点,也就是配送中心

s=[s,s(1)];                                     %体现出数学模型中的第n+1个节点,也就是配送中心

x=[x,x(1)];                                     %体现出数学模型中的第n+1个节点,也就是配送中心

y=[y,y(1)];                                     %体现出数学模型中的第n+1个节点,也就是配送中心

axis=[x' y'];                                   %顾客坐标

h=pdist(axis);

Dij=squareform(h);                              %距离矩阵

%% 配送车辆和顾客数据

vNum=5;                                         %车数量

nodeNum=numel(a);                               %总节点数量

C=600;                                          %单车容量

%% 决策变量

Xijk=binvar(nodeNum,nodeNum,vNum,'full');       %i、j节点之间是否由第k辆车进行配送

Wik=sdpvar(nodeNum,vNum,'full');                %表示车辆k对i点的开始服务时间

M=1e7;                                          %足够大的数,对应公式(6)中的Mij

tol=1e-7;                                       %决策变量精确度

%% 目标函数,对应公式(1)

obj=0;

for i=1:nodeNum

    for j=1:nodeNum

        for k=1:vNum

            obj=obj+Dij(i,j)*Xijk(i,j,k);

        end

    end

end

f=obj;

%% 约束条件

F=[];

%每个需求点i都会被一辆车经过,对应公式(2)

for i=2:nodeNum-1

    F=[F;sum(Xijk(i,1,:))==0;sum(Xijk(i,i,:))==0;sum(sum(Xijk(i,:,:)))==1];

end

%每条配送路线从配送中心出发只能前往一个顾客点,对应公式(3)

for k=1:vNum

    F=[F;Xijk(1,1,k)==0;sum(Xijk(1,:,k))==1];

end

%流量平衡,对应公式(4)

for j=2:nodeNum-1

    for k=1:vNum

        F=[F;sum(Xijk(j,:,k))==sum(Xijk(:,j,k))];

    end

end

3 仿真结果

4 参考文献

[1]陈鹏等. "一种基于约束规划的带时间窗车辆路径问题建模及优化方法.", CN109034481A. 2018.​

5 MATLAB代码与数据下载地址

见博客主页