运筹优化学习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);



相关文章
|
消息中间件 监控 NoSQL
Celery 高效异步任务队列:打破常规,颠覆认知,应用实践全攻略在此!
【8月更文挑战第5天】Celery 是一款强大的异步任务队列框架,适用于后台执行耗时任务如邮件发送、报表生成等。可通过`pip install celery`安装,并配置消息代理(如Redis)以启动服务。定义异步任务使用装饰器`@app.task`,并通过`.delay()`方法执行。任务状态和结果可通过`.ready()`和`.get()`查询。异常处理支持任务重试,性能优化包括调整并发数和选用高效消息代理。Celery 能显著提升应用效率与用户体验。
1133 0
|
8月前
|
算法 数据处理 调度
【VRP问题】基于遗传算法求解带容量和体积的车辆路径规划问题CVRP问题附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍 一、 引言:物流人头疼的 CVRP 难题,到底难在哪? 1.1 从快递配送看 VRP 的现实意义 在电商行业蓬勃发展的当下,每年的 “双 11”“618” 大促期间,海量的快递订单如潮水般涌来。你是否想过,快递企业是如何在短时间内,调度有限的车辆,将这些包裹准确无误地送到千
738 1
|
达摩院 供应链
「达摩院MindOpt」用于多目标规划(加权和法)
多目标规划(Multi-objective programming)是指在一个优化问题中需要同时考虑多个目标函数的优化。在多目标规划问题中,目标函数之间通常是互相冲突的,即在优化一个目标函数的过程中,另一个或几个目标函数可能会受到影响。因此,多目标规划问题的目标是找到一个解x,使得在满足约束的前提下,所有目标函数达到一个相对满意的折中。
「达摩院MindOpt」用于多目标规划(加权和法)
|
8月前
|
弹性计算 人工智能 运维
2026年阿里云秒级部署OpenClaw(Clawdbot)并接入skills保姆级教程
2026年,OpenClaw(原Clawdbot,曾用名Moltbot)凭借轻量化架构、高适配性及强大的自动化能力,成为阿里云生态下最热门的AI自动化代理工具,其秒级部署方案彻底打破开源工具的技术门槛,无需复杂环境配置,零基础新手也能轻松上手。OpenClaw本身仅提供核心编排框架,而Skills作为其“能力扩展插件”,能赋予它网页浏览、邮件管理、数据统计、多平台联动等实操能力,二者结合可快速搭建专属智能助手,适配个人办公、企业运维、AI创意生产等多场景。
1200 6
|
人工智能 弹性计算 前端开发
一句话生成全栈应用?阿里云「应用管理 - 应用生成」来了!
阿里云应用管理 应用生成 是一款AI全栈开发工作台,支持通过自然语言或图片自动生成可运行、可部署的现代Web应用。覆盖开发、调试到上线全流程,助力开发者高效构建产品原型、内部工具与企业级应用。
1454 0
|
11月前
|
JSON 安全 API
技术探索 | 淘宝平台商品评论数据获取方法与接口浅析
本文探讨获取淘宝商品评论数据的合规与技术路径,涵盖官方API申请、非官方接口逆向分析及爬虫实现难点,强调遵守平台规则与数据安全法规,建议优先采用合法渠道或第三方服务替代。
基于GA-PSO遗传粒子群混合优化算法的CVRP问题求解matlab仿真
本文介绍了一种基于GA-PSO混合优化算法求解带容量限制的车辆路径问题(CVRP)的方法。在MATLAB2022a环境下运行,通过遗传算法的全局搜索与粒子群算法的局部优化能力互补,高效寻找最优解。程序采用自然数编码策略,通过选择、交叉、变异操作及粒子速度和位置更新,不断迭代直至满足终止条件,旨在最小化总行驶距离的同时满足客户需求和车辆载重限制。
|
机器学习/深度学习
西瓜书机器学习AUC与ℓ-rank(loss)的联系理解以及证明(通俗易懂)
西瓜书机器学习AUC与ℓ-rank(loss)的联系理解以及证明(通俗易懂)
1175 0

热门文章

最新文章