运筹优化学习02:Lingo求解带容量约束的车辆路径问题(CVRP)(上)

简介: 运筹优化学习02:Lingo求解带容量约束的车辆路径问题(CVRP)

带容量约束的车辆路径问题,是使用一组具有核定载重约束的车队为一组顾客点提供服务,要求服务的总路径最短。

本文的视频参考B站视频:Lingo求解车辆路径问题模型代码演示

1 基础知识储备

1.1 LINGO 具有9种逻辑运算符

image.png

这些运算符的优先级由高到低为

gif.png

1.2 lingo的窗口状态解析

20190608141107186.png

20190619232416530.png

20190619232522133.png

1.3 @wrap函数解析

1.3.1 官方解释

@wrap(index,limit)

@WRAP( INDEX, LIMIT)


This allows you to "wrap" an index around the end of a set and continue indexing at the other end of the set. That is, when the last (first) member of a set is reached in a set looping function, use of @WRAP will allow you to wrap the set index to the first (last) member of the set. This is a particularly useful function in cyclical, multiperiod planning models.


Formally speaking, @WRAP returns J such that J = INDEX - K * LIMIT, where K is an integer such that J is in the interval [1,LIMIT]. Informally speaking, @WRAP will subtract or add LIMIT to INDEX until it falls in the range 1 to LIMIT.


For an example on the use of the @WRAP function in a staff scheduling model, refer to the Primitive Set Example section in Using Sets.


@wrap函数的确是返回j=index-k*limit,其中k是一个整数,取适当值保证j落在区间[1,limit]内。可是它并不等于做简单的取模再加1的作用。如果硬要在取模方面来说明@wrap函数的话只能这么来解释了:@wrap(index,limit)函数相当于index模limit,如果取模结果不等于0,就返回该结果,否则返回limit。


1.3.2 示例代码及解释

resault = @wrap(10,2);
resault1 = @wrap(10,1);
resault2 = @wrap(10,3);
resault3 = @wrap(10,4);
resault4 = @wrap(10,5);
resault5 = @wrap(10,6);
resault6 = @wrap(10,7);
resault7 = @wrap(10,8);
resault8 = @wrap(10,9);
resault9 = @wrap(10,0); !本行代码会报错误代码86;

代码演示结果

20190609105309817.png

最后一行代码的报错及解释:不允许分母为0

20190609102006515.png

An undefined arithmetic operation (e.g., 1/0 or @LOG( -1)) occurred while LINGO was solving the model. If you have specified a row name for the constraint, LINGO will print the name of the constraint. If you haven't specified row names in your model, you may want to add them to assist in tracking down this error. Check the referenced constraint for any undefined operations and try to either, 1) rewrite it avoiding operations that can potentially become undefined, or, 2) use the @BND function to restrict variables to ranges where all operations are defined.


2 CVRP问题描述与模型

2.1 问题描述

假定存在一个车场Depot和3个顾客需求点,4个节点之间的距离和每个顾客点的需求量如下图所示:


20190608123402146.png


我们的任务是安排车辆从depot出发,然后服务完成这三个顾客需求点所需的车辆行驶路径最短

2.2 定义集合和数据段

我们在模型中使用到如下变量:

q_{i}:表示顾客节点的需求量,对应需求向量Q,维度为1*4;其中4为模型涉及的节点个数,并将车场点设置为0;


u_{i}:车辆行驶至节点i时的累积需求量,对应需求量向量U


d_{ij}:表示节点 i 到节点 j 的空间距离,对应距离矩阵DIST


x_{ij}:表示弧段i,j是否为车辆方位,若访问则取值为1,否则取值为0

2.2.1 定义集合

!定义集合;
SETS:
CITY/1..4/: Q, U; !定义需求量向量Q_{i}和累积载重量向量U(i);
CXC(CITY, CITY): DIST, X;!定义距离矩阵d_{ij}和二进制变量x_{ij};
ENDSETS

2.2.2 定义数据段

!定义数据段;
DATA:
Q = 0 2 3 5;!需求量向量;
DIST = !距离矩阵;
  0 3 4 2
  3 0 4 5
  4 4 0 7
  2 5 7 0;
C = 5;!车辆的最大载重量为5;
ENDDATA

2.2.3 定义目标函数

gif.gif

对应Latex源码:

min z = \sum_{i=1}^{4}  \sum_{i=1}^{4} x_{ij} * d_{ij}

对应Lingo源码:

min = @sum(CXC : X * DIST);



相关文章
|
存储 数据可视化 Serverless
使用蒙特卡罗模拟的投资组合优化
在金融市场中,优化投资组合对于实现风险与回报之间的预期平衡至关重要。蒙特卡罗模拟提供了一个强大的工具来评估不同的资产配置策略及其在不确定市场条件下的潜在结果。
220 1
|
4天前
|
机器学习/深度学习 算法 调度
基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出规划路径结果和满载率
基于ACO蚁群优化的VRPSD问题求解MATLAB仿真,输出ACO优化的收敛曲线、规划路径结果及每条路径的满载率。在MATLAB2022a版本中运行,展示了优化过程和最终路径规划结果。核心程序通过迭代搜索最优路径,更新信息素矩阵,确保找到满足客户需求且总行程成本最小的车辆调度方案。
|
4月前
|
机器学习/深度学习 人工智能 分布式计算
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
机器学习中的超参数调优是提升模型性能的关键步骤,包括网格搜索、随机搜索、贝叶斯优化和遗传算法等方法。网格搜索通过穷举所有可能的超参数组合找到最优,但计算成本高;随机搜索则在预设范围内随机采样,降低计算成本;贝叶斯优化使用代理模型智能选择超参数,效率高且适应性强;遗传算法模拟生物进化,全局搜索能力强。此外,还有多目标优化、异步并行优化等高级技术,以及Hyperopt、Optuna等优化库来提升调优效率。实践中,应结合模型类型、数据规模和计算资源选择合适的调优策略。
156 0
算法金 | 最难的来了:超参数网格搜索、贝叶斯优化、遗传算法、模型特异化、Hyperopt、Optuna、多目标优化、异步并行优化
|
4月前
|
机器学习/深度学习
深度之眼(二十四)——无约束最优化和约束最优化
深度之眼(二十四)——无约束最优化和约束最优化
|
6月前
R语言用GAM广义相加模型研究公交专用道对行程时间变异度数据的影响
R语言用GAM广义相加模型研究公交专用道对行程时间变异度数据的影响
|
6月前
|
数据可视化
R语言两层2^k析因试验设计(因子设计)分析工厂产量数据和Lenth方法检验显著性可视化|数据分享(一)
R语言两层2^k析因试验设计(因子设计)分析工厂产量数据和Lenth方法检验显著性可视化|数据分享(一)
|
6月前
|
移动开发 数据可视化
R语言两层2^k析因试验设计(因子设计)分析工厂产量数据和Lenth方法检验显著性可视化|数据分享(二)
R语言两层2^k析因试验设计(因子设计)分析工厂产量数据和Lenth方法检验显著性可视化|数据分享(二)
|
6月前
R语言估计多元标记的潜过程混合效应模型(lcmm)分析心理测试的认知过程
R语言估计多元标记的潜过程混合效应模型(lcmm)分析心理测试的认知过程
|
6月前
|
算法 Python
动态规划法在汽车租赁问题中的实战(使用策略迭代法得到最优策略和最优价值 python实现 附源码)
动态规划法在汽车租赁问题中的实战(使用策略迭代法得到最优策略和最优价值 python实现 附源码)
85 0
|
数据采集 算法 安全
基于启发式算法与单目优化和马尔科夫模型的进出口公司的货物装运策略——整数线性规划 随机模拟(一)
基于启发式算法与单目优化和马尔科夫模型的进出口公司的货物装运策略——整数线性规划 随机模拟
436 0
基于启发式算法与单目优化和马尔科夫模型的进出口公司的货物装运策略——整数线性规划 随机模拟(一)