hg1088皇冠welcome hg1088皇冠welcome hg1088皇冠welcome

MATLAB数学建模教学(二) | 如何使用YALMIP来检验数学模型的正确性?

大家好,我们在MATLAB教数学建模(一) | 天天要闻 如何使用YALMIP来检验数学模型的正确性?在这条推文的最后,还有一道作业题——如何使用YALMIP建立VRPTW的数学模型(vehicle routing problem with time windows)。

首先我们回顾一下VRPTW的数学模型:

首先给出经典的VRPTW数学模型。

crf 判别模型_数学建模判别分析模型_spss19如何进行决策树模型建模

数学建模判别分析模型_spss19如何进行决策树模型建模_crf 判别模型

目标函数 (1) 表示最小化车辆行驶的总距离;约束 (2) 限制每个客户只能分配到一条路线;约束条件(3)~(5)表示路径上车辆k的流量限制;constraint (6) )~(8) 表示时间窗约束;约束 (9) 表示负载重量约束。

因为我们的目的是测试模型的正确性,所以我们只需要使用小规模的数据进行测试。这里有的小伙伴会有疑问,为什么需要使用小规模的数据进行测试呢?

其实大家可以仔细想想,VRPTW问题是一个典型的NP-hard问题,即求解问题的时间随着问题规模的增大呈指数增长。即使是专业的cplex,如果直接解决一个问题规模为100个节点的VRPTW问题,解决时间会非常长,更不用说YALMIP的解决时间了。因此数学建模判别分析模型,我们只需要用小规模数据来验证数学模型。

接下来,我们分析这个数学模型。看到一个数学模型后,我们必须时刻牢记以下三点:1)输入参数是什么?2)什么是决策变量?3) 哪些是输出变量?

01 | 输入小规模数据

对于这个 VRPTW 数学模型,输入参数是节点(包括配送中心和客户)数据和车辆数据。节点数据包括:

1)节点的x和y坐标;

2)节点的左右时间窗和服务时间;

3)节点需求。

车辆数据包括:

1)允许使用的最大车辆数量;

2) 车辆的最大装载能力。

这条推文有8个客户,1个配送中心,5辆车(每辆车的最大装载量为600kg)。

具体数据如下。第一个位置的数据代表配送中心的数据:

%% 小规模数据
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];               %纵坐标matlab

02 | 识别决策变量

对于这个数学模型,决策变量是 xijk 和 wik。因此,求解这个VRPTW数学模型,实际上相当于求解了两个决策变量xijk和wik。

03 | 确定输出变量

在确定了输入参数和决策变量之后,我们实际上需要弄清楚我们的数学模型在寻找什么?也就是说,我们的数学模型要解决的目标是什么?

因此,在我们最终得到决策变量之后,我们必须能够利用决策变量的值来获得目标函数的值。

综上所述数学建模判别分析模型,输出变量实际上包含决策变量和目标函数值。

04 | 求解结果

对上述输入数据求解后,求解出的配送路线图如下图所示。

spss19如何进行决策树模型建模_crf 判别模型_数学建模判别分析模型

各配送路线的结果如下图所示,其中0代表配送中心起点,9代表配送中心终点,路线4和路线5表示车辆无配送任务。另外,代码运行得到的目标函数值为96.07,即最终配送路线的总距离为96.07。

spss19如何进行决策树模型建模_数学建模判别分析模型_crf 判别模型

05 | 检查数学模型是否合理

使用MATLAB程序找到决策变量xijk和wik后,可以根据xijk判断车辆开始服务各个节点的时间wik是否在其时间窗内,即需要判断是否满足ai