【进阶六】Python实现SDVRPTW常见求解算法——量子粒子群算法(QDPSO)

“利用蚁群系统(ACS)解决带有时间窗约束的动态车辆路径问题(DVRPTW):一种Java实现方案的探索“ 在深入到蚁群系统的实现之前,我们首先要理解DVRPTW的问题定义。在DVRPTW中,我们有一个车辆队列,这些车辆需要从一个指定的配送中心出发,前往各个客户的位置提供服务,然后返回配送中心。每个客户的位置都有一个特定的服务时间窗,即车辆需要在这个时间窗内到达并提供服务。另外,每个客户的需求是动态变化的,这意味着在算法执行过程中,新的客户需求可能会出现。我们的目标是找到一种车辆路线安排,使得总的行驶距离(或行驶时间)最小,同时满足所有客户的需求,并且在每个客户的服务时间窗内到达。 阅读详情

基于python语言,采用经典量子离散粒子群算法(QDPSO)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。

往期优质资源


经过一年多的创作,目前已经成熟的代码列举如下,如有需求可私信联系,表明需要的 **问题与算法**,原创不宜,有偿获取。
VRP问题GAACOALNSDEDPSOQDPSOTSSA
CVRP√√√√√√√√
VRPTW√√√√√√√√
MDVRP√√√√√√√√
MDHVRP√√√√√√√√
MDHVRPTW√√√√√√√√
SDVRP√√√√√√√√
SDVRPTW√√√√√√

1. 适用场景

  • 求解SDVRPTW
  • 车辆类型单一
  • 车辆容量小于部分需求节点需求
  • 单一车辆基地
  • 带硬时间窗

2. 代码调整


2.1 需求拆分


与SDVRP问题相比,SDVRPTW问题不仅允许客户需求大于车辆载重,而且考虑了客户节点的时间窗约束。为了使得每个客户的需求得到满足,必须派遣一辆或多辆车辆在规定时间窗内对客户进行服务。对于需求节点的拆分,这里依然采取先验拆分策略,本文采用文献[1]提出的先验分割策略,表述如下:

(1)20/10/5/1拆分规则

  • m20 =max{ m ∈ Z + ∪ { 0 } ∣ 0.20 Q m < = D i m\in Z^+ \cup \{0\} | 0.20Qm <= D_i m∈Z+∪{0}∣0.20Qm<=Di​ }
  • m10 =max{ m ∈ Z + ∪ { 0 } ∣ 0.10 Q m < = D i − 0.20 Q m 20   m\in Z^+ \cup \{0\} | 0.10Qm <= D_i-0.20Qm_{20}~ m∈Z+∪{0}∣0.10Qm<=Di​−0.20Qm20​  }
  • m5 =max{ m ∈ Z + ∪ { 0 } ∣ 0.05 Q m < = D i − 0.20 Q m 20 − 0.10 Q m 10 m\in Z^+ \cup \{0\} | 0.05Qm <= D_i-0.20Qm_{20}-0.10Qm_{10} m∈Z+∪{0}∣0.05Qm<=Di​−0.20Qm20​−0.10Qm10​ }
  • m1 =max{ m ∈ Z + ∪ { 0 } ∣ 0.01 Q m < = D i − 0.20 Q m 20 − 0.10 Q m 10 − 0.05 Q m 5 m\in Z^+ \cup \{0\} | 0.01Qm <= D_i-0.20Qm_{20}-0.10Qm_{10}-0.05Qm_{5} m∈Z+∪{0}∣0.01Qm<=Di​−0.20Qm20​−0.10Qm10​−0.05Qm5​ }

(2)25/10/5/1拆分规则

  • m25 =max{ m ∈ Z + ∪ { 0 } ∣ 0.25 Q m < = D i m\in Z^+ \cup \{0\} | 0.25Qm <= D_i m∈Z+∪{0}∣0.25Qm<=Di​ }
  • m10 =max{ m ∈ Z + ∪ { 0 } ∣ 0.10 Q m < = D i − 0.25 Q m 25   m\in Z^+ \cup \{0\} | 0.10Qm <= D_i-0.25Qm_{25}~ m∈Z+∪{0}∣0.10Qm<=Di​−0.25Qm25​  }
  • m5 =max{ m ∈ Z + ∪ { 0 } ∣ 0.05 Q m < = D i − 0.25 Q m 25 − 0.10 Q m 10 m\in Z^+ \cup \{0\} | 0.05Qm <= D_i-0.25Qm_{25}-0.10Qm_{10} m∈Z+∪{0}∣0.05Qm<=Di​−0.25Qm25​−0.10Qm10​ }
  • m1 =max{ m ∈ Z + ∪ { 0 } ∣ 0.01 Q m < = D i − 0.25 Q m 25 − 0.10 Q m 10 − 0.05 Q m 5 m\in Z^+ \cup \{0\} | 0.01Qm <= D_i-0.25Qm_{25}-0.10Qm_{10}-0.05Qm_{5} m∈Z+∪{0}∣0.01Qm<=Di​−0.25Qm25​−0.10Qm10​−0.05Qm5​ }

在实现过程中,对于需求超过车辆容量的客户必须进行需求拆分,而对于未超过车辆容量的客户可以拆分也可以不拆分,这里设置了参数比例进行限制。

2.2 需求拆分后的服务时长取值问题


节点的服务时长会影响车辆的行进时间,进而会影响与节点时间窗的匹配问题。一般来说,节点的服务时长与需求量成正比关系,在进行节点需求拆分后,新节点的需求量降低,其服务时长理应也降低。但从标准数据集来看,各需求节点的服务时长均采用同一数值。因此本文在代码实现过程中也采用固定值,不考虑新节点服务时长的变化。当然,如有需要,也可以设置单位货物的服务时长,根据拆分后节点的具体需求量设置相应的服务时长。


3. 求解结果


(1)收敛曲线
在这里插入图片描述

(2)车辆路径
在这里插入图片描述

(3)输出内容

在这里插入图片描述


4. 代码片段


(1)数据结构

import time
import csv
import math
import random
import numpy as np
import copy
import xlsxwriter
import matplotlib.pyplot as plt
# 数据结构:解
class Sol():
    def __init__(self):
        self.obj=None # 目标函数值
        self.node_no_seq=[] # 解的编码
        self.route_list=[] # 解的解码
        self.timetable_list=[] # 车辆访问各点的时间
        self.route_distance_list = None
# 数据结构:需求节点
class Node():
    def __init__(self):
        self.id=0 # 节点id
        self.x_coord=0 # 节点平面横坐标
        self.y_coord=0  # 节点平面纵坐标
        self.demand=0 # 节点需求
        self.start_time=0 # 节点开始服务时间
        self.end_time=1440 # 节点结束服务时间
        self.service_time=0 # 单次服务时长
        self.vehicle_speed = 0 # 行驶速度
# 数据结构:车场节点
class Depot():
    def __init__(self):
        self.id=0 # 节点id
        self.x_coord=0 # 节点平面横坐标
        self.y_coord=0  # 节点平面纵坐标
        self.start_time=0 # 节点开始服务时间
        self.end_time=1440 # 节点结束服务时间
        self.v_speed = 0 # 行驶速度
        self.v_cap = 80 # 车辆容量
# 数据结构:全局参数
class Model():
    def __init__(self):
        self.best_sol=None # 全局最优解
        self.sol_list=[] # 解的集合
        self.demand_dict = {}  # 需求节点集合
        self.depot = None  # 车场节点集合
        self.demand_id_list = [] # 需求节点id集合
        self.distance_matrix = {}  # 距离矩阵
        self.time_matrix = {}  # 时间矩阵
        self.number_of_demands = 0 # 需求点数量
        self.demand_id_list_ = []  # 经先验需求分割后的节点集合
        self.demand_dict_ = {}  # 需求分割后的节点需求集合
        self.distance_matrix_ = {}  # 原始节点id间的距离矩阵
        self.time_matrix_ = {}  # 原始节点id间的时间矩阵
        self.mapping = {}  # 需求分割前后的节点对应关系
        self.split_rate = 0.5 # 控制需求分割的比例(需求超出车辆容量的除外)
        self.popsize = 100 # 种群规模
        self.pl=[] # 个体历史最优解
        self.pg=None # 种群历史最优解
        self.mg=None # 群体平均位置
        self.alpha=1.0 # 创新参数

(2)距离矩阵

# 初始化参数:计算距离矩阵时间矩阵
def calDistanceTimeMatrix(model):
    for i in range(len(model.demand_id_list)):
        from_node_id = model.demand_id_list[i]
        for j in range(len(model.demand_id_list)):
            to_node_id = model.demand_id_list[j]
            dist = math.sqrt((model.demand_dict[from_node_id].x_coord - model.demand_dict[to_node_id].x_coord) ** 2
                             + (model.demand_dict[from_node_id].y_coord - model.demand_dict[to_node_id].y_coord) ** 2)
            model.distance_matrix[from_node_id, to_node_id] = dist
            model.time_matrix[from_node_id,to_node_id] = math.ceil(dist/model.depot.v_speed)
        dist = math.sqrt((model.demand_dict[from_node_id].x_coord - model.depot.x_coord) ** 2 +
                         (model.demand_dict[from_node_id].y_coord - model.depot.y_coord) ** 2)
        model.distance_matrix[from_node_id, model.depot.id] = dist
        model.distance_matrix[model.depot.id, from_node_id] = dist
        model.time_matrix[from_node_id,model.depot.id] = math.ceil(dist/model.depot.v_speed)
        model.time_matrix[model.depot.id,from_node_id] = math.ceil(dist/model.depot.v_speed)

(3)邻域搜索

# 调整不可行解
def adjustRoutes(node_no_seq,model):
    all_node_id_list=copy.deepcopy(model.demand_id_list_)
    repeat_node=[]
    for id,node_no in enumerate(node_no_seq):
        if node_no in all_node_id_list:
            all_node_id_list.remove(node_no)
        else:
            repeat_node.append(id)
    for i in range(len(repeat_node)):
        node_no_seq[repeat_node[i]]=all_node_id_list[i]
    return node_no_seq
# 更新位置
def updatePosition(model):
    alpha=model.alpha
    pg=model.pg
    mg=model.mg
    #更新历史平均最优位置
    mg_=[0]*model.number_of_demands
    for id, sol in enumerate(model.sol_list):
        x=sol.node_no_seq
        pl = model.pl[id].node_no_seq
        pi=[]
        for k in range(model.number_of_demands):
            phi = random.random()
            pi.append(phi*pl[k]+(1-phi)*pg[k])
        if random.random()<=0.5:
            X=[min(int(pi[k]+alpha*abs(mg[k]-x[k])*math.log(1/random.random())),model.number_of_demands-1)
               for k in range(model.number_of_demands)]
        else:
            X=[min(int(pi[k]-alpha*abs(mg[k]-x[k])*math.log(1/random.random())),model.number_of_demands-1)
               for k in range(model.number_of_demands)]
        #调整可行性
        X= adjustRoutes(X, model)
        timetable_list, obj, route_distance,route_list = calObj(X,model)

        if obj < model.pl[id].obj:
            model.pl[id].node_no_seq = copy.deepcopy(X)
            model.pl[id].obj = obj
            model.pl[id].route_list = route_list
            model.pl[id].route_distance = route_distance
            model.pl[id].timetable_list = timetable_list
        if obj < model.best_sol.obj:
            model.best_sol.obj = copy.deepcopy(obj)
            model.best_sol.node_no_seq = copy.deepcopy(X)
            model.best_sol.route_list = copy.deepcopy(route_list)
            model.best_sol.route_distance = copy.deepcopy(route_distance)
            model.best_sol.timetable_list = copy.deepcopy(timetable_list)
            model.pg = copy.deepcopy(X)
        mg_ = [mg_[k] + model.pl[id].node_no_seq[k] / model.popsize for k in range(model.number_of_demands)]
        model.sol_list[id].node_no_seq = copy.deepcopy(X)
        model.sol_list[id].obj = copy.deepcopy(obj)
        model.sol_list[id].route_list = copy.deepcopy(route_list)
        model.sol_list[id].route_distance = copy.deepcopy(route_distance)
        model.sol_list[id].timetable_list = copy.deepcopy(timetable_list)
    model.mg=copy.deepcopy(mg_)

参考

【1】 A novel approach to solve the split delivery vehicle routing problem

深入理解与实践:基于遗传算法的具有时间窗的车辆路径问题的Python实现 遗传算法(Genetic Algorithm, GA)是模拟达尔文的自然选择理论的搜索算法。GA 通常被用来解决优化和搜索问题。它们通过模拟自然进化过程来解决问题。初始化种群选择交叉变异替代基于遗传算法的具有时间窗的车辆路径问题解决方案为我们提供了一个强大的工具,用于解决实际中的配送和路由问题。遗传算法具有高度的灵活性和适应性,使其成为解决此类问题的理想选择。然而,还有许多其他策略和技术可以用于解决VRPTW。为了获得最佳结果,可能需要结合多种策略。具体过程请下载完整项目。 阅读详情

相关推荐

深入解析:如何使用改进的PSO(粒子群优化)算法高效地解决VRPTW问题 - Python实现指南

PSO算法是一种群体智能优化技术,它是通过模拟鸟群觅食行为来找到问题的最优解的。在PSO中,每个“鸟”被称为一个“粒子”,每个粒子在搜索空间中代表一个可能的解。通过追踪每个粒子的最佳位置和整个群体的最佳位置,粒子可以更新其速度和位置,从而向最优解靠近。通过本文,我们深入探讨了如何使用改进的PSO算法来解决具有时间窗约束的车辆路径问题。我们介绍了VRPTW的基础知识,传统的PSO算法,以及如何对其进行改进以获得更好的性能。通过Python的实现,我们展示了如何将这些理论应用到实践中。

qq_38334677的博客 969

Which local search operator best 4 SPVRPTW:or and 2-opt*

本文的贡献是对具有拆分送货和时间窗口的车辆路径问题进行本地搜索移动算子的测试。作者分析了常用于车辆路径问题和其变体的本地搜索移动算子以及蚁群优化元启发式方法的组合效果,并对具有拆分送货和时间窗口的车辆路径问题的解决方案质量进行了比较。实验设计包括93种不同的本地搜索算子配置[14]。通过实验结果,在解决成本与运行时间之间取得了平衡的算子配置(Cluster 1)表现最好,但其他三个集群中,Cluster 1表现一般,这可能在特定应用中对成本或运行时间的价值有不同需求。

Zzzzzzz_s的博客 1273

python实现VRPTW求解禁忌搜索算法

python实现VRPTW求解禁忌搜索+变邻域搜索代码,完美支持所罗门算例!

【进阶六】Python实现SDVRPTW常见求解算法——遗传算法(GA)

基于python语言,采用经典遗传算法(GA)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRP) 进行求解。

Better.C的博客 1547

遗传算法求解VRPTW_可运行_附带说明_matlab

【达摩老生出品,必属精品,亲测校正,质量保证】 资源名:遗传算法求解VRPTW_可运行_附带说明_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员

GA-VRPTW-python版本遗传算法求解带时间窗的路径规划问题(Python版本)

1、完整代码,可直接运行 ,包运行(如有疑问可私信) 2、擅长领域:路径规划、机器学习、数据爬虫、数据分析处理等 3、该资源有较为详尽的注解,非常方便大家阅读与理解。 GA-VRPTW-python版本 遗传算法求解带时间窗的路径规划问题(Python版本) 该资源适用于研究路径规划的同学,以及研究遗传算法的同学

python入门之遗传算法的路径规划

python入门之遗传算法的路径规划

qq_52241267的博客 403

基于遗传算法的具有时间窗的车辆路径问题解决方案的Python实现

基于遗传算法的具有时间窗的车辆路径问题解决方案的Python实现

【进阶二】Python实现VRPTW常见求解算法——遗传算法(GA)

基于python语言,实现经典遗传算法(GA)对带有时间窗的车辆路径规划问题(VRPTW)进行求解。

Better.C的博客 9932

产生式系统的完整示例——医疗诊断系统(附python代码)

发烧(Fever)、咳嗽(Cough)、皮疹(Rash)、喉咙痛(SoreThroat)、头痛(Headache)、流涕(RunnyNose)、呼吸困难(ShortnessOfBreath)、白细胞计数高(HighWBC)、接触流感患者(ContactFlu)、接触麻疹患者(ContactMeasles)。(2)若规则库中存在尚未使用过的规则,而且它的前提(前件)可与综合数据库中的已知事实匹配,则转第(3)步;(3)执行当前选中的规则,并对该规则做上标记,把该规则执行后得到的结论送入综合数据库中。

搏博的专栏 1704

DSP复习笔记(5)——外部接口模块XINTF

【注意】 1. 芯片型号:TMS320F28335 2. 适用于NJUSTEO李彧晟老师课程 3. 参考资料:《TMS320F28335 DSP原理、开发及应用》 4. 对应PPT第二章 5. 本章内容较多而且较为重要,请结合PPT一起复习

BerenCamlost的博客 1万+

【进阶六】Python实现SDVRPTW常见求解算法——自适应大邻域算法(ALNS)

基于python语言,采用经典自适应大邻域算法(ALNS)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。

Better.C的博客 1718

从FP16到FP8:我是如何让Stable Diffusion 3.5提速40%而不丢画质的

本文分享了StableDiffusion模型优化的实战经验。通过FP8精度转换、分层处理敏感模块,实现显存占用降低35%、推理速度提升40%。文章详细介绍了提升画质的五大技巧、本地/云端/移动端部署方案,以及二次元模型定制等垂直领域应用。同时总结了硬件兼容性、数据质量等七大常见陷阱,并强调持续监控和伦理考量。作者指出未来应关注MoE架构、注意力机制优化等方向,认为技术优化是持续追求性能与质量平衡的过程。

达则兼济天下 1190

【进阶六】Python实现SDVRPTW常见求解算法——离散粒子群算法(DPSO)

基于python语言,采用经典离散粒子群算法(DPSO)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。

Better.C的博客 1330

1991-2020年气候背景数据集

2011 年,国家气象信息中心对 1951-2010 年 2400 余个地面站气温、气压、降水、湿度、日照等 19 大要素项的定时观测资料和日极值资料中由数字化过程中引起的系统性问题(例如数字化遗漏、整段拷贝等问题)进行质量检测、质量控制和错误数据的更正,形成较高质量的地面基础资料集。1991-2020年中国地面气候值数据集提供了中国2438个站点的气温、降水、气压、风向风速、相对湿度、水汽压、云、天气现象、能见度、蒸发、积雪、地温、冻土、日照共14个要素的气候背景信息。数据时间:30年平均。

地球资源数据云的官方博客 1597

Hi3516CV610 YOLOv8模型转换与部署实战:从源码到板端推理全流程解析

本文详细解析了将YOLOv8模型部署到Hi3516CV610开发板的全流程。内容涵盖从Ubuntu环境搭建、模型获取与验证,到关键的PyTorch模型转换为ONNX格式,并利用海思工具链量化生成板端可执行的.wk文件。最后,指导开发者编写板端C程序,完成视频流处理、NNIE推理及结果后处理,并提供了部署调试与性能优化的实用技巧。

weixin_29215815的博客 270

遗传算法优化VRPTW问题概述

本文介绍了遗传算法在优化VRPTW问题中的应用,并提供了一个基于遗传算法的流程图。遗传算法通过模拟自然选择和遗传机制,能够搜索最优解并优化车辆路径规划,以满足VRPTW问题的约束条件和目标函数。通过实验结果的分析,可以验证遗传算法在优化VRPTW问题上的有效性,并为进一步的研究提供指导。

corn1949的博客 3379

CircuitBreaker Resilience4J 介绍

在分布式环境中,我们的应用可能会面临着各种各样的可恢复的异常(比如超时,网络环境异常),此时我们可以利用不断重试的方式来从异常中恢复(Retry Pattern),使整个集群正常运行。然而,也有一些异常比较顽固,突然发生,无法预测,而且很难恢复,并且还会导致级联失败(举个例子,假设一个服务集群的负载非常高,如果这时候集群的一部分挂掉了,还占了很大一部分资源,整个集群都有可能遭殃)。如果我们这时还是不断进行重试的话,结果大多都是失败的。

zzhongcy的专栏 3541

[基因遗传算法]进阶之五:实践VRPTW

定义解的结构,需求节点的结构,depot的结构,model的属性结构.

panbaoran913的博客 3577

树根互联Java开发面试题及参考答案

说一下 Java 集合类。 Java 集合类是用于存储和操作一组对象的容器。它提供了多种数据结构,方便程序员对数据进行高效的管理和处理。 Java 集合框架主要包括两大接口:Collection 和 Map。 Collection 接口是一组对象的集合,它有三个主要的子接口:List、Set 和 Queue。 List 接口代表有序的集合,可以包含重复的元素。例如 ArrayList,它是基于数组实现的动态数组。它的优点是随机访问效率高,通过索引访问元素的时间复杂度为 O (1)。当

大模型大数据攻城狮的专栏 856

MMCVDeformConv2d转TensorRT记录

MMCVDeformConv2d转Tensorrt

qq_35435798的博客 1780

如何写代码实现VRP问题中车辆容量限制及时间窗要求(python)

卸货点1-10的时间限制理解如下:卸货点1要求在下午1点至下午4点配送,卸货点1要求的服务时间是半个小时;卸货点2要求在下午4点至下午6点配送,卸货点2要求的服务时间是1个小时,以此类推其他的卸货点的配送及服务时间限制。当首次配送的需求点为卸货点10时,最早到达时间要求是下午5点,配送中心开门是上午七点,关门是下午七点,两点之间的路径长度是160公里,车辆每小时的车速是40公里/小时,所以最佳的方案是不考虑先去卸货点10完成配送任务,因为车辆返回时赶不上配送中心的关门时间。从配送中心出发立即回到配送中心。

Logintern09的博客 777

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蚁群算法求解VRPTW问题

在VRPTW中,有一组客户需要被服务,这些客户位于不同的位置,每个客户有特定的需求量和时间窗口。时间窗口定义了每个客户允许被访问的时间范围,即服务必须在时间窗口内完成。此外,还有一个或多个车辆可用于服务客户,并且每辆车有容量限制。VRPTW的目标是找到一组最优路径,使得所有客户的需求得到满足,并且最小化总的路程和车辆的数量。解决VRPTW问题可以帮助优化物流和配送等领域的路线规划,提高效率和降低成本。

weixin_42616101的博客 3190

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【运筹优化】带时间窗约束的车辆路径规划问题(VRPTW)详解 + Python 调用 Gurobi 建模求解

车辆路径规划问题(Vehicle Routing Problem,VRP)一般指的是:对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:货物的需求量与发货量,交发货时间,车辆容量限制,行驶里程限制,行驶时间限制等),力争实现一定的目标(如车辆空驶总里程最短,运输总费用最低,车辆按一定时间到达,使用的车辆数最小等)。下图给出了一个简单的VRP的例子最基本的VRP问题叫做带容量约束的车辆路径规划问题(Capacitated Vehicle Rou

知不足而奋进,望远山而前行 4万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【进阶三】Python实现(MD)HFVRPTW常见求解算法——离散粒子群(DPSO)

基于python语言,实现经典遗传算法(GA)对多车场(Multi-depot)、异构固定车辆(heterogeneous fixed fleet)、带有服务时间窗(time window)等限制约束的车辆路径规划问题((MD)HFVRPTW)进行求解。 目录往期资料1. 适用场景2. 求解效果3. 代码分析4. 数据格式5. 分步实现6. 完整代码参考 往期资料 python实现6种智能算法求解CVRP问题 python实现7种智能算法求解MDVRP问题 python实现7种智能算法求解MDVRPT.

Better.C的博客 1539

软件工具 | Python调用运筹优化求解器(一):以CVRP&VRPTW为例

以CVRP & VRPTW问题为例,介绍Python调用Gurobi,COPT,SCIP的方法。

Better.C的博客 7639
上一篇: 【进阶六】Python实现SDVRPTW常见求解算法——离散粒子群算法(DPSO)
下一篇: 【进阶六】Python实现SDVRPTW(需求拆分)常见求解算法——禁忌搜索+模拟退火算法(TS+SA)
Better.C
博客等级 码龄9年 1万+粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Better.C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值