运筹系列91:vrp算法包PyVRP

news2025/1/17 3:00:03

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 Model

m = 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)  # Manhattan
        m.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.coloradmin.cn/o/1628300.html

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

相关文章

Wireshark安装教程

一、下载 地址:https://www.wireshark.org/download.html打开网址后,点击相应的版本下载: 二、安装 下载完成后双击文件开始安装 点击Next 点击Noted 点击Next 点击Next 点击Next 可以点击Browse更改安装路径,默认…

Python实时聊天机器人框架之errbot使用详解

概要 在现代软件开发中,即时通讯和自动化任务的需求越来越重要。Python的Errbot库是一个强大的实时聊天机器人框架,可以帮助开发者快速构建自定义的聊天机器人应用,提供了丰富的特性和灵活的扩展能力。 安装 Errbot的安装非常简单,可以通过pip工具进行安装: pip instal…

力扣【LeetCode】258:各位相加

🎁个人主页:我们的五年 🔍系列专栏:每日一练 🌷追光的人,终会万丈光芒 前言: 【LeetCode】真的是一个好网站呀,上面的题目的太经典了,提供的方法也很很多,非…

抖店怎么高效选品?99%卖家都容易忽略的选品秘密

大家好,我是电商花花。 选品是我们做抖店商家最为担心的问题,如果选品选的不多,就很容易影响我们店铺的销量和转化,所以我们在做店的时候一定要学会高效选品。 今天花花分享一招高效选品的方法,或许大家都注意到&…

remote: HTTP Basic: Access deniedfatal: Authentication failed for

$ git push -u origin main remote: HTTP Basic: Access denied fatal: Authentication failed for https://gitcode.com/edenl/GD32E350_hid_keyboard.git/ 使用访问令牌做为密码登录即可。

uniapp小程序订阅通知

服务 开通订阅服务 const tmplIds ref([tsdasdadasdfgdrtwexQHdEsjZV])//换成自己的 function confirm(){uni.requestSubscribeMessage({tmplIds: tmplIds.value,success: (res) > {// console.log(res)let auth_notice res[tmplIds.value[0]] accept ? 1 : 2 //1是接…

WPF 资源基础

动态资源/静态资源 UI代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/ex…

Kafka 3.x.x 入门到精通(08)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通&#xff08;08&#xff09;——对标尚硅谷Kafka教程 5. Kafka优化5.1 资源配置5.1.1 操作系统5.1.2 磁盘选择5.1.3 网络带宽5.1.4 内存配置5.1.5 CPU选择 5.2 集群容错5.2.1 副本分配策略5.2.2 故障转移方案5.2.3 数据备份与恢复 5.3 参数配置优化5.4 数…

西安交通大学 915 备考常见误区

看到助教在 915 全程班群里给同学们解答问题&#xff0c;我也是感触颇深&#xff0c;想起来我当年自身的一个备考情况。接下来结合我自身情况给同学们分析一下&#xff0c;为什么有的同学基础一般&#xff0c;最后分数却很高&#xff0c;有的同学基础很好&#xff0c;分数却一般…

CC软件防火墙和WEB应用防火墙哪个好

本文将从CC软件防火墙的定义、原理、功能以及应用方面进行全面探讨&#xff0c;旨在加深对CC软件防火墙的理解&#xff0c;并推动网络安全意识的普及。以及WEB应用防火墙二者之间的对比。让用户更了解两个形态产品并作出选择。 第一部分&#xff1a;CC软件防火墙的定义和原理 …

探索UTONMOS《神念无界-源起山海》元宇宙游戏的奇幻世界

在科技的前沿&#xff0c;元宇宙游戏如同一扇神秘的大门&#xff0c;缓缓开启&#xff0c;引领我们进入一个前所未有的奇幻世界。 UTONMOS《神念无界-源起山海》元宇宙游戏是数字世界的巅峰之作&#xff0c;它打破了现实与虚拟的界限&#xff0c;让玩家能够身临其境地体验各种奇…

新开的拼多多店铺怎么运营

今天给大家分享一下如何在拼多多平台上开设并运营一家店铺。不管你是创业者还是小型商家&#xff0c;相信这个话题都会对你有所帮助。 拼多多新店需要做些推广提高店铺权重 新店用3an推客做推广比较好 3an推客是给商家提供的营销工具&#xff0c;3an推客CPS推广模式由商家自主…

C++笔试强训day7

目录 1.字符串中找出连续最长的数字串 2.岛屿数量 3.拼三角 1.字符串中找出连续最长的数字串 链接 我的思路很简洁&#xff0c;就是双指针遍历&#xff0c;然后不断更新左位置left和右位置right和长度len。 然后我写代码的时候代码思路没跟上原本思路&#xff0c;直接把所有…

实验七 智能手机互联网程序设计(微信程序方向)实验报告

请编写一个用户登录界面&#xff0c;提示输入账号和密码进行登录&#xff0c;要求在输入后登陆框显示为绿色&#xff1b; 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; index.wxml <view class"content"> <view class"a…

链表与模拟LinkedList的实现

1. ArrayList的缺陷 ArrayList底层使用数组来存储元素 由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后 搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低。因此ArrayList不适合做任意位…

大数据—数仓分层概论

数据仓库&#xff08;Data Warehouse&#xff09;是一个用于集成和存储大量数据的系统&#xff0c;旨在支持企业的决策制定过程。它是一个面向主题的、集成的、非易失的数据集合&#xff0c;用于支持管理决策制定过程。数据仓库的发展源于企业对数据分析和决策支持的需求&#…

【skill】usbwebserver的几个问题

试了几个云服务器&#xff08;华为云、移动10086云&#xff09;&#xff0c;使用usbwebserver均会出现问题。 以前都是找缺少的对应的dll文件&#xff0c;不仅搜索半天、解压、移动复制、同时还要考虑文件的位数 有人说C:\Windows\System32存放的是64位的东西有人说C:\Windows…

#天空星硬件SPI驱动GD25Q64

一、使用方式及接线&#xff1a; 硬件SPI&#xff0c;软件片选CS&#xff08;PA4&#xff09; STM32F407&#xff08;主机&#xff09; GD25Q322&#xff08;从机&#xff09; 说明 PA4&#xff08;SPI1_NSS&#xff09; CS(NSS) 片选线 PA5&#xff08;SPI1_SCK&#x…

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

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

【Unity动画系统】动画状态基本属性与相关API、IK简单概述

动画状态基本属性与相关API Tag&#xff1a;判断是否当前播放着相对应Tag的动画&#xff0c;如果是&#xff0c;那么玩家的输入就是无效的。 using UnityEngine.InputSystem;public AnimatorStateInfo stateInfo;void State(){//stateInfo animator.GetCurrentAnimatorStateIn…