运筹系列91:vrp算法包PyVRP

1. 介绍

PyVRP使用HGS(hybrid genetic search)算法求解VRP类问题。在benchmark上的评测结果如下,看起来还不错:
在这里插入图片描述

2. 使用例子

2.1 CVRP

COORDS = [(456, 320),  # location 0 - the depot(228, 0),    # location 1(912, 0),    # location 2(0, 80),     # location 3(114, 80),   # location 4(570, 160),  # location 5(798, 160),  # location 6(342, 240),  # location 7(684, 240),  # location 8(570, 400),  # location 9(912, 400),  # location 10(114, 480),  # location 11(228, 480),  # location 12(342, 560),  # location 13(684, 560),  # location 14(0, 640),    # location 15(798, 640),  # location 16
]
DEMANDS = [0, 1, 1, 2, 4, 2, 4, 8, 8, 1, 2, 1, 2, 4, 4, 8, 8]
from pyvrp import Modelm = Model()
m.add_vehicle_type(4, capacity=15)
depot = m.add_depot(x=COORDS[0][0], y=COORDS[0][1])
clients = [m.add_client(x=COORDS[idx][0], y=COORDS[idx][1], delivery=DEMANDS[idx])for idx in range(1, len(COORDS))
]locations = [depot] + clients
for frm in locations:for to in locations:distance = abs(frm.x - to.x) + abs(frm.y - to.y)  # Manhattanm.add_edge(frm, to, distance=distance)

下面是求解和绘图:

from pyvrp.stop import MaxRuntime
from pyvrp.plotting import plot_solution
res = m.solve(stop=MaxRuntime(1), display=False)
print(res)
_, ax = plt.subplots(figsize=(8, 8))
plot_solution(res.best, m.data(), ax=ax)

在这里插入图片描述

2.2 VRPTW

X_COORD = [0,20,25,30,45]
TIME_WINDOWS = [(0, 1000),(100, 1002),(200, 1005),(180, 1008),(180, 1003),(90, 500),\(95, 1000),(90, 400),(95, 1000),(90, 300), (90, 1600),(90, 150), \(10, 500),  (50, 100), (70, 800), (190, 1500), (100, 1005)] 
SERVICE_TIME = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
DEMANDS = [1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1]
STATION = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 2, 4, 3, 1, 2]#https://pyvrp.readthedocs.io/en/latest/api/pyvrp.html
from pyvrp.stop import MaxRuntime
from pyvrp.plotting import plot_solution
from pyvrp import Model
m = Model()
m.add_vehicle_type(20, capacity=4)
depot = m.add_depot(x=X_COORD[0],y=0,tw_early=0,tw_late=9999)
clients = [m.add_client(x=X_COORD[STATION[idx]], y=0,delivery=DEMANDS[idx],service_duration = 2, \tw_early=TIME_WINDOWS[idx][0],tw_late=TIME_WINDOWS[idx][1],) for idx in range(len(DEMANDS))]
locations = [depot] + clients
for frm in locations:for to in locations:m.add_edge(frm, to, distance=abs(frm.x - to.x), duration=abs(frm.x - to.x))
res = m.solve(stop=MaxRuntime(2), display=False)
print(res)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++进阶之路——关键字

C进阶——关键字 本系列博客主要对于已经有一定C/C基础的网友,欢迎志同道合的朋友来进行纯粹的技术交流!!! 一、const 在C中,const 关键字是一个非常重要的特性,用于定义变量或对象的值为常量,…

通往AGI路上,DPU将如何构建生成式AI时代的坚实算力基石?

4月19日,在以“重构世界 奔赴未来”为主题的2024中国生成式AI大会上,中科驭数作为DPU新型算力基础设施代表,受邀出席了中国智算中心创新论坛,发表了题为《以网络为中心的AI算力底座构建之路》主题演讲,勾勒出在通往AGI…

Xcode 15构建问题

构建时出现的异常: 解决方式: 将ENABLE_USER_SCRIPT_SANDBOXING设为“no”即可!

GateWay具体的使用!!!

一、全局Token过滤器 在Spring Cloud Gateway中,实现全局过滤器的目的是对所有进入系统的请求或响应进行统一处理,比如添加日志、鉴权等。下面是如何创建一个全局过滤器的基本步骤: 步骤1: 创建过滤器类 首先,你需要创建一个实现…

表---商场 nine

CREATE TABLE gao25 (id int(11) NOT NULL AUTO_INCREMENT COMMENT 自增ID,shopId int(11) NOT NULL COMMENT 店铺ID,goodsId int(11) NOT NULL COMMENT 商品ID,attrId int(11) NOT NULL COMMENT 属性名称,attrVal text NOT NULL COMMENT 属性值,createTime datetime NOT NULL …

实验 1--SQL Server2008数据库开发环境

文章目录 实验 1--SQL Server2008数据库开发环境2.4.1 实验目的2.4.2 实验准备2.4.3 实验内容1.利用 SSMS 访问系统自带的Report Server 数据库。2.熟悉了解 SMSS对象资源管理器树形菜单相关选择项的功能。(1)右键单击数据库Report Server,查看并使用相关功能;(2)选…

scp用法

scp常用参数: 命令选项 含义 -1 使用ssh协议版本1 -2 使用ssh协议版本2 -4 使用ipv4 6 使用ipv6 -B 以批处理模式运行 -C 使用压缩 -F 指定ssh配置文件 -l 指定带宽限制 -o 指定使用的ssh选项 -P 指定远程主机的端口号 -p 保留…

[C++基础学习]----02-C++运算符详解

前言 C中的运算符用于执行各种数学或逻辑运算。下面是一些常见的C运算符及其详细说明:下面详细解释一些常见的C运算符类型,包括其原理和使用方法。 正文 01-运算符简介 算术运算符: a、加法运算符():对两个…

基于openwrt交叉编译opencv4.9.0版本

源码包的获取 源码获取有两种方式,一种是通过编译时在makefile指定它的git地址,在编译时下载,这种很依赖网速,网速不好时,编译会失败。另一种是我们将源码的压缩包下载到本地,放到我们的SDK中,…

以场景驱动CMDB数据治理经验分享

数据治理是 CMDB 项目实施中难度最大、成本最高的环节,是一个长期治理的过程,而行业很少提出 CMDB 数据治理的技术实现方案。CMDB 数据治理不仅需要解决配置管理工程性的技术问题,还要基于运维组织的特点,建立适应性的配置运营能力…

DS进阶:并查集

一、并查集的原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这…

SCSS全局配置 vue项目(二)

目录 1、先要查看node版本 2、安装对应的node-sass、sass-loader版本 2.1根据项目使用的node版本安装对应的node-sass版本 2.2根据node-sass版本选择兼容的sass-loader版本,不然项目无法正常运行 3、在 vue.config.js 中配置: 4、在组件中…

深入浅出掌握CSS选择器

CSS选择器是CSS规则的核心组成部分,它们犹如一把钥匙,帮助开发者精准锁定并装饰HTML文档中的各类元素。正确理解和熟练运用CSS选择器,能够极大提升代码效率和页面表现力。本文将系统全面地剖析CSS选择器的种类、用途及应用场景,并…

国家级会议报道:贝锐蒲公英异地组网高效实现前方数据回传

作为市委宣传部的国有新闻媒体,在日常工作中会派遣大量人员外出进行采访、报道,还经常面临国家级重要会议或活动的报道任务。 在这些工作中,前方人员往往需要和后方人员协同、保证内容的时效性,及时反馈现场的相关资料和信息、访…

FSRCNN:加速超分辨率卷积神经网络,SRCNN的加速版

paper:https://arxiv.org/pdf/1608.00367 code: https://github.com/yjn870/FSRCNN-pytorch/tree/master 目录 1. 动机 2. 方法 3. 代码对比 4. 实验结果 1. 动机 作者此前提出的SRCNN证明了CNN在图像超分领域的有效性。然而,SRCNN计算效率较低&#…

PHP EOF(heredoc) 使用说明

在PHP中,EOF(End Of File)或heredoc是一种定义字符串的方法,它允许你跨越多行来定义字符串,而无需使用大量的引号或字符串连接符。这在编写多行文本、SQL查询或HTML内容时特别有用。 使用heredoc的基本语法如下&#…

​可视化大屏C位图:城市地图,一览城市全貌信息。

城市地图是一种常见的可视化大屏C位图,用于展示城市的地理分布和相关数据。以下是对城市地图的解读: 地理分布 城市地图可以展示不同地理区域的城市分布情况。通过地图上的点、标记或区域着色等方式,可以清晰地看到城市的位置和分布范围。这…

六天以太坊去中心化租房平台,前端+合约源码

六天以太坊去中心化租房平台 概述项目结构合约部署运行项目功能介绍一、首页二、房东后台我的房屋我的订单上架新房屋 三、租户后台我的房屋我的订单 四、仲裁后台 下载地址 概述 六天区块链房屋租赁系统,采用去中心化的方式实现了房屋的租赁功能。房东可在平台上托…

Java 2024 常见多线程20道面试题

Java 2024 常见多线程20道面试题 简介: 线程是一种轻量级进程,用于实现并发编程。它是操作系统进行调度的基本单位,可以独立运行并共享进程资源。线程能够提高程序的并发性和响应速度,并节约系统资源,因此在多任务和并…

C++ Primer Plus

第一章 初始C #include <iostream> //#:预处理int main(void) //void:无参数 {using namespace std;int carrots; //定义声明语句:开辟内存空间&#xff0c; int:整型 cout << "how many corrots do you have?" << endl; //cout:输出流(out) end…