Python实现VRP常见求解算法——禁忌搜索(TS)

写一个用遗传算法解决VRP问题的代码 下面是一个使用 Python 实现的遗传算法解决 VRP 问题的代码示例: ``` import random import numpy as np class VRP: def init(self, num_customers, vehicle_capacity, demand, distance_matrix): self.num_customers = num_cus... 阅读详情

基于python语言,实现经典禁忌搜索算法(TS)对车辆路径规划问题(CVRP)进行求解。

优质资源

1. 适用场景

  • 求解CVRP
  • 车辆类型单一
  • 车辆容量不小于需求节点最大需求
  • 单一车辆基地

2. 求解效果

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

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

3. 问题分析

CVRP问题的解为一组满足需求节点需求的多个车辆的路径集合。假设某物理网络中共有10个顾客节点,编号为1~10,一个车辆基地,编号为0,在满足车辆容量约束与顾客节点需求约束的条件下,此问题的一个可行解可表示为:[0-1-2-0,0-3-4-5-0,0-6-7-8-0,0-9-10-0],即需要4个车辆来提供服务,车辆的行驶路线分别为0-1-2-0,0-3-4-5-0,0-6-7-8-0,0-9-10-0。由于车辆的容量固定,基地固定,因此可以将上述问题的解先表示为[1-2-3-4-5-6-7-8-9-10]的有序序列,然后根据车辆的容量约束,对序列进行切割得到若干车辆的行驶路线。因此可以将CVRP问题转换为TSP问题进行求解,得到TSP问题的优化解后再考虑车辆容量约束进行路径切割,得到CVRP问题的解。这样的处理方式可能会影响CVRP问题解的质量,但简化了问题的求解难度。

4. 数据格式

以xlsx文件储存网络数据,其中第一行为标题栏,第二行存放车辆基地数据。在程序中车辆基地seq_no编号为-1,需求节点seq_id从0开始编号。可参考github主页相关文件。

5. 分步实现

(1)数据结构
为便于数据处理,定义Sol()类,Node()类,Model()类,其属性如下表:

  • Sol()类,表示一个可行解
属性描述
nodes_seq需求节点seq_no有序排列集合,对应TSP的解
obj优化目标值
action_id解所对应的算子id,用于禁用算子
routes车辆路径集合,对应CVRP的解
  • Node()类,表示一个网络节点
属性描述
id物理节点id,可选
name物理节点名称,可选
seq_no物理节点映射id,基地节点为-1,需求节点从0编号
x_coord物理节点x坐标
y_coord物理节点y坐标
demand物理节点需求
  • Model()类,存储算法参数
属性描述
best_sol全局最优解,值类型为Sol()
node_list物理节点集合,值类型为Node()
node_seq_no_list物理节点映射id集合
depot车辆基地,值类型为Node()
number_of_nodes需求节点数量
tabu_list禁忌表
TL算子禁忌长度
opt_type优化目标类型,0:最小车辆数,1:最小行驶距离
vehicle_cap车辆容量
(2)文件读取
def readXlsxFile(filepath,model):
    # It is recommended that the vehicle depot data be placed in the first line of xlsx file
    node_seq_no = -1#the depot node seq_no is -1,and demand node seq_no is 0,1,2,...
    df = pd.read_excel(filepath)
    for i in range(df.shape[0]):
        node=Node()
        node.id=node_seq_no
        node.seq_no=node_seq_no
        node.x_coord= df['x_coord'][i]
        node.y_coord= df['y_coord'][i]
        node.demand=df['demand'][i]
        if df['demand'][i] == 0:
            model.depot=node
        else:
            model.node_list.append(node)
            model.node_seq_no_list.append(node_seq_no)
        try:
            node.name=df['name'][i]
        except:
            pass
        try:
            node.id=df['id'][i]
        except:
            pass
        node_seq_no=node_seq_no+1
    model.number_of_nodes=len(model.node_list)

(3)初始解生成

def genInitialSol(node_seq):
    node_seq=copy.deepcopy(node_seq)
    random.seed(0)
    random.shuffle(node_seq)
    return node_seq

(4)定义邻域生成算子
这里主要定义三类算子:

  • 算子1:单节点交换,即将nodes_seq序列前半部分与后半部分对应位置的需求节点交换;
  • 算子2:双节点交换,即将nodes_seq序列前半部分紧邻两个位置的需求节点与对应的后半部分紧邻位置的需求节点交换;
  • 算子3:指定长度的片段反序;
def createActions(n):
    action_list=[]
    nswap=n//2
    #Single point exchange
    for i in range(nswap):
        action_list.append([1,i,i+nswap])
    #Two point exchange
    for i in range(0,nswap,2):
        action_list.append([2,i,i+nswap])
    #Reverse sequence
    for i in range(0,n,4):
        action_list.append([3,i,i+3])
    return action_list

(5)生成邻域

def doACtion(nodes_seq,action):
    nodes_seq=copy.deepcopy(nodes_seq)
    if action[0]==1:
        index_1=action[1]
        index_2=action[2]
        temporary=nodes_seq[index_1]
        nodes_seq[index_1]=nodes_seq[index_2]
        nodes_seq[index_2]=temporary
        return nodes_seq
    elif action[0]==2:
        index_1 = action[1]
        index_2 = action[2]
        temporary=[nodes_seq[index_1],nodes_seq[index_1+1]]
        nodes_seq[index_1]=nodes_seq[index_2]
        nodes_seq[index_1+1]=nodes_seq[index_2+1]
        nodes_seq[index_2]=temporary[0]
        nodes_seq[index_2+1]=temporary[1]
        return nodes_seq
    elif action[0]==3:
        index_1=action[1]
        index_2=action[2]
        nodes_seq[index_1:index_2+1]=list(reversed(nodes_seq[index_1:index_2+1]))
        return nodes_seq

(6)目标值计算
目标值计算依赖 " splitRoutes " 函数对TSP可行解分割得到车辆行驶路线和所需车辆数, " calDistance " 函数计算行驶距离。

def splitRoutes(nodes_seq,model):
    num_vehicle = 0
    vehicle_routes = []
    route = []
    remained_cap = model.vehicle_cap
    for node_no in nodes_seq:
        if remained_cap - model.node_list[node_no].demand >= 0:
            route.append(node_no)
            remained_cap = remained_cap - model.node_list[node_no].demand
        else:
            vehicle_routes.append(route)
            route = [node_no]
            num_vehicle = num_vehicle + 1
            remained_cap =model.vehicle_cap - model.node_list[node_no].demand
    vehicle_routes.append(route)
    return num_vehicle,vehicle_routes
def calDistance(route,model):
    distance=0
    depot=model.depot
    for i in range(len(route)-1):
        from_node=model.node_list[route[i]]
        to_node=model.node_list[route[i+1]]
        distance+=math.sqrt((from_node.x_coord-to_node.x_coord)**2+(from_node.y_coord-to_node.y_coord)**2)
    first_node=model.node_list[route[0]]
    last_node=model.node_list[route[-1]]
    distance+=math.sqrt((depot.x_coord-first_node.x_coord)**2+(depot.y_coord-first_node.y_coord)**2)
    distance+=math.sqrt((depot.x_coord-last_node.x_coord)**2+(depot.y_coord - last_node.y_coord)**2)
    return distance
def calObj(nodes_seq,model):
    # calculate obj value
    num_vehicle, vehicle_routes = splitRoutes(nodes_seq, model)
    if model.opt_type==0:
        return num_vehicle,vehicle_routes
    else:
        distance=0
        for route in vehicle_routes:
            distance+=calDistance(route,model)
        return distance,vehicle_routes

(7)绘制收敛曲线

def plotObj(obj_list):
    plt.rcParams['font.sans-serif'] = ['SimHei']  #show chinese
    plt.rcParams['axes.unicode_minus'] = False  # Show minus sign
    plt.plot(np.arange(1,len(obj_list)+1),obj_list)
    plt.xlabel('Iterations')
    plt.ylabel('Obj Value')
    plt.grid()
    plt.xlim(1,len(obj_list)+1)
    plt.show()

(8)输出结果

def outPut(model):
    work = xlsxwriter.Workbook('result.xlsx')
    worksheet = work.add_worksheet()
    worksheet.write(0, 0, 'opt_type')
    worksheet.write(1, 0, 'obj')
    if model.opt_type == 0:
        worksheet.write(0, 1, 'number of vehicles')
    else:
        worksheet.write(0, 1, 'drive distance of vehicles')
    worksheet.write(1, 1, model.best_sol.obj)
    for row, route in enumerate(model.best_sol.routes):
        worksheet.write(row + 2, 0, 'v' + str(row + 1))
        r = [str(i) for i in route]
        worksheet.write(row + 2, 1, '-'.join(r))
    work.close()

(9)主函数
禁忌搜索算法有很多类型,比如禁忌对象的选择、藐视规则的定义、禁忌长度的设置等等。这里只考虑简单情况:禁忌对象为算子(通过记录算子id实现对算子的禁用),不考虑藐视规则。

def run(filepath,epochs,v_cap,opt_type):
    """
    :param filepath: :Xlsx file path
    :param epochs: Iterations
    :param v_cap: Vehicle capacity
    :param opt_type:Optimization type:0:Minimize the number of vehicles,1:Minimize travel distance
    :return: 
    """
    model=Model()
    model.vehicle_cap=v_cap
    model.opt_type=opt_type
    readXlsxFile(filepath,model)
    action_list=createActions(model.number_of_nodes)
    model.tabu_list=np.zeros(len(action_list))
    history_best_obj=[]
    sol=Sol()
    sol.nodes_seq=genInitialSol(model.node_seq_no_list)
    sol.obj,sol.routes=calObj(sol.nodes_seq,model)
    model.best_sol=copy.deepcopy(sol)
    history_best_obj.append(sol.obj)
    for ep in range(epochs):
        local_new_sol=Sol()
        local_new_sol.obj=float('inf')
        for i in range(len(action_list)):
            if model.tabu_list[i]==0:
                new_sol=Sol()
                new_sol.nodes_seq=doACtion(sol.nodes_seq,action_list[i])
                new_sol.obj,new_sol.routes=calObj(new_sol.nodes_seq,model)
                new_sol.action_id=i
                if new_sol.obj<local_new_sol.obj:
                    local_new_sol=copy.deepcopy(new_sol)
        sol=local_new_sol
        for i in range(len(action_list)):
            if i==sol.action_id:
                model.tabu_list[sol.action_id]=model.TL
            else:
                model.tabu_list[i]=max(model.tabu_list[i]-1,0)
        if sol.obj<model.best_sol.obj:
            model.best_sol=copy.deepcopy(sol)
        history_best_obj.append(model.best_sol.obj)
        print("%s/%s: best obj: %s"%(ep,epochs,model.best_sol.obj))
    plotObj(history_best_obj)
    outPut(model)

6. 完整代码

代码和数据文件获取【私信】:

https://download.youkuaiyun.com/download/python_n/37357242

参考

  1. 汪定伟. 智能优化方法[M]. 高等教育出版社, 2007.
  2. https://blog.youkuaiyun.com/adkjb/article/details/81712969
Python-运筹优化领域常见问题模型-VRP 在运筹优化领域,车辆路径问题(VRP)是一个经典且重要的问题。VRP 一般指的是对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下,力争实现一定的目标。最基本的 VRP 问题叫做带容量约束的车辆路径规划问题(Capacitated Vehicle Routing Problem,CVRP)。在 CVRP 中,需要考虑每辆车的容量约束、车辆的路径约束和装载量约束。 阅读详情

相关推荐

深入解析禁忌搜索算法及其Python实现

禁忌搜索由 Glover 提出,是一种基于局部搜索的优化方法。它通过禁忌表的引入避免循环搜索已访问过的解,并通过多样化搜索策略探索解空间,适用于解决复杂的优化问题,如旅行商问题(TSP)、车辆路径规划问题(VRP)和生产调度问题。本文详细介绍了禁忌搜索算法及其 Python 实现,并通过结合工厂模式、策略模式和模板方法模式解决了 TSP、调度问题等实际案例。通过设计模式的灵活应用,我们可以扩展禁忌搜索框架以适应更多问题场景,提升代码的复用性与可维护性。

闲人编程的博客 376

量子退火Python实战(1):车辆路径问题(VRP : Vehicle Routing Problem)

建模车辆路径问题(VRP:Vehicle Routing Problem)的QUBO矩阵,并提供Python实现代码。

gangshen1993的博客 1万+

Python 利用遗传算法、模拟退火和禁忌搜索算法解决车辆路径问题(VRP)的详细项目实例

车辆路径问题(Vfhiclf ITouting Pitoblfm,VITP)她运筹学和物流管理领域中一个重要她组合优化问题,其目她她在满足一系列约束条件她前提下,找到最优她车辆路线。例如,遗传算法她模拟退火算法她结合可以有效避免局部最优解她问题,禁忌搜索她遗传算法她结合能够提升搜索效率并加速收敛。在项目她实她过程中,我们充分考虑了算法她多样她和灵活她,确保不同她优化需求能够得到满足。通过不断她实验她调优,我们不仅提升了算法她收敛速度,还确保了系统她高效她和稳定她。这个代码用她绘制不同算法她她能对比图。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 1098

智能算法的Python实现(更新中)

遗传算法:https://blog.youkuaiyun.com/qq_43445362/article/details/108307132 模拟退火算法:https://blog.youkuaiyun.com/qq_43445362/article/details/108364134

qq_43445362的博客 978

车辆路径问题的Python与MATLAB解决工具包

车辆路径问题(Vehicle Routing Problem,VRP)是运筹学中一类重要的组合优化问题,主要关注如何高效地分配车辆对客户进行服务,以便最小化运输成本并满足一系列约束条件。此问题广泛存在于物流、配送、调度等领域,对于提高运输效率、降低成本具有显著的意义。禁忌搜索算法(Tabu Search, TS)是由Fred Glover于1986年提出的一种用于解决组合优化问题的启发式搜索算法。算法的命名来源于其核心机制——一个“禁忌表”,用于记录搜索过程中已经访问过的解,以避免搜索陷入局部最优解。

weixin_31486261的博客 830

【VRP问题】基于禁忌搜索求解带时间窗的TWVRP问题.md

【VRP问题】基于禁忌搜索求解带时间窗的TWVRP问题

Python实现VRP常见求解算法——差分进化算法(DE)

基于python语言,实现经典差分进化算法(DE)对车辆路径规划问题(CVRP)进行求解。

Better.C的博客 2478

基于任务的后勤智能体:三段构建与演进设计探究

这是系统智能化的核心难点。例如,对于一个“加强连级滩头阵地防御”子任务,系统会根据防御时长、预期敌军攻击强度、地形等因素,计算出所需的弹药(不同弹种的具体数量)、构筑工事的器材、人员的给养和饮水量、以及医疗救护的药品和血包数量。首先进行分词、词性标注等基础处理,然后利用在军事语料库上训练的命名实体识别(NER)模型,提取出关键实体,如任务类型(“夺控作战”)、作战对象(“Y岛”)、时间约束(“D日H时”、“24小时内”)、成功标准(“建立稳固滩头阵地”)、保障重点(“弹药充足”、“及时救治”)等。

weixin_49042442的博客 1088

3. Python实现VRP常见求解算法——禁忌搜索(TS)

参考笔记 https://github.com/PariseC/Algorithms_for_solving_VRP TS算法原理详解 禁忌搜索(Tabu Search)算法及python实现 邻域 对于组合优化问题,给定任意可行解x,x∈D,D是决策变量的定义域,对于D上的一个映射:N:x∈D→N(x)∈2(D) 其中2(D)表示D的所有子集组成的集合,N(x)成为x的一个邻域,y∈N(x)称为x的一个邻居。 候选集合 候选集合一般由邻域中的邻居组成,可以将某解的所有邻居作为候选集合,也可以通过最优提取

qq_36744449的博客 4227

无线Mesh组网全攻略:从原理、部署到调优与排障

对于布线困难的大户型、复式楼或园区,传统的无线中继往往面临带宽减半和链路不稳定的问题。无线Mesh网络通过多跳转发与自组织路由,让每个节点无需网线即可协作扩展覆盖,并依靠动态路径选择实现自愈。其核心技术涉及802.11s、HWMP路由协议,以及802.11k/v/r协同的无缝漫游,能有效提升终端切换体验。在实际部署中,设备选型、回程频段规划与布点位置直接决定网络质量。围绕无线Mesh的组网原理、设备选型、配置调优与故障排查,提供一套工程实践参考,帮助用户在复杂环境下构建稳定高效的无缝覆盖。

weixin_34098209的博客 274

Latex | IEEE双栏排版中长公式的排版

IEEE双栏排版中,有时候公式过于长了,过宽,导致单栏排版不下。

qq_43466146的博客 1万+

【改进篇】Python实现VRP常见求解算法——禁忌搜索算法(TS)

基于python语言,实现经典禁忌搜索算法(TS)对车辆路径规划问题(CVRP)进行求解,

Better.C的博客 1629

Multisim的探针(Probe)及数字电路的一些调试技巧的应用

Multisim的探针(Probe)及数字电路的一些调试技巧的应用 --EE Bang   By  WRS 上图为555方波发生器,根据R1,R2,C2参数的配置可产生频率为46.3KHZ,占空比50%的方波信号,如果用示波器查看波形参数的话需要用两个坐标轴做差,操作不便,另外如果要修改电路将上述电阻换成滑动变阻器的话,使其产生可变频率

Agent Christmas的博客 3万+

【改进篇】Python实现VRP常见求解算法——禁忌搜索+模拟退火算法(TS+SA)

基于python语言,实现经典禁忌搜索(TS)+模拟退火(SA)对车辆路径规划问题(CVRP)进行求解, 优化代码结构,改进Split函数。

Better.C的博客 1638

利用Civil3D装配设计器(SAC)建设高度形状自适应挡土墙

之前的模型都是点线,最后加一个形状,形成面。再根据现场测得的挡土墙的墙脚的点生成中心线(alignment),在中心线的基础上生成在现有地面(existing ground level)的高程(profile)。简单的说,该墙的墙趾啊,墙踵啊,基底下面那个把儿啊,都是随着高度变化的,而高度是随着下面这个高程图变化的。接着出现角度和Y的文本框,角度92,y 值随便写一个,然后重要的是,高程目标选路面(优先于Y值)。意思是P2的高度,也就是路面的高程,减去P10,墙脚高程,再减去墙脚埋进地里的深度0.8m。

测量老覃 的博客 1131

拆解博世、大陆的EMB方案:自增力机构如何省下83%的能耗?

本文深度解析了博世和大陆的电子机械制动(EMB)技术,重点探讨了自增力机构如何实现83%的能耗节省。通过对比电机直驱型和自增力型EMB的技术参数,揭示了自增力机构在能量优化和系统集成方面的创新优势,为汽车电动化和智能化提供了关键技术支持。

weixin_42665725的博客 396

VRP问题

最近一个物流配送车辆调度系统的项目要求带VRP的功能,以下是一些开源框架、API,和重点尝试的禁忌搜索。 用c-w节约启发式算法解决的单车型送货非满载vsp问题 https://www.write-bug.com/article/173.html API: http://demo.smartvrp.com/eu https://georepublic.info/en/product...

越开源越幸运 1万+

详解大端模式和小端模式

详解大端模式和小端模式 一、大端模式和小端模式的起源         关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令

ce123的技术博客 19万+

禁忌搜索算法完整指南(python)

在实际生活中,很多问题都可以转化为优化问题,比如生产调度、物流配送、旅行商问题等等。对于这些问题,我们需要找到一个最优解或者接近最优解的解。然而,传统的一些优化算法,如贪心算法、动态规划等,往往只能找到局部最优解,而不能保证全局最优解。这时候,我们需要一些更强大的算法来帮助我们解决问题,禁忌搜索算法就是其中一种。

bgfffg的博客 3607

基于Simulink的风电系统背靠背变流器解耦控制仿真

本文完成了基于 Simulink 的风电背靠背变流器解耦控制仿真,实现了:✅掌握 dq 解耦控制的数学本质✅构建 MSC + GSC 完整控制链✅验证其在动态、扰动下的卓越性能✅达成高解耦度、低 THD、稳母线三大目标。

xiaoheshang_123的博客 79

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【进阶六】Python实现SDVRPTW(需求拆分)常见求解算法——禁忌搜索+模拟退火算法(TS+SA)

基于python语言,采用经典禁忌搜索(TS)+模拟退火(SA)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。

Better.C的博客 1376

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——禁忌搜索+模拟退火算法(TS+SA)

基于python语言,采用经典禁忌搜索(TS)+模拟退火(SA)对 需求拆分车辆路径规划问题(SDVRP) 进行求解。

Better.C的博客 1431

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【群智能算法】TS-TSP 基于禁忌搜索的车辆路径优化方法-Python

禁忌搜索(Tabu Search, TS)是一种基于局部搜索的优化算法,它通过引入禁忌表来避免陷入局部最优解。禁忌表存储了在当前解的邻域中不可选的解,以此来避免在短期内重复选择相同的解,从而拓宽搜索空间,提高算法的全局搜索能力。随机选择一个初始解。通过对当前解进行一些小的变动(如交换、插入、翻转等)生成邻域解。从生成的邻域解中选择最优解。将选择的解加入禁忌表,避免在短期内重复选择相同解。在一定迭代次数下,算法不断迭代更新当前解,逐步优化目标函数。达到最大迭代次数或者找到满意的解时,终止算法。

2303_77200324的博客 1068

3. 【进阶】Python实现MDCVRP常见求解算法——禁忌搜索(TS)

参考笔记 https://github.com/PariseC/Algorithms_for_solving_VRP 1. 适用场景 求解MDCVRP 问题 车辆类型单一 车辆容量不小于需求节点最大需求 多车辆基地 各车场车辆总数满足实际需求 1. 适用场景 求解MDCVRP 问题 车辆类型单一 车辆容量不小于需求节点最大需求 多车辆基地 各车场车辆总数满足实际需求 2. 代码分析 车俩路径规划问题按照车场数量可分为单一车场路径规划问题和多车场路径规划问题。针对单一车场条件下仅考虑车辆容量限制的路径

qq_36744449的博客 494

禁忌搜索算法(Tabu Search,TS)在组合优化中的实战应用与Python/MATLAB代码解析

本文深入解析了禁忌搜索算法(Tabu Search)在组合优化问题中的实战应用。通过对比传统爬山算法,阐释了TS通过引入禁忌表和藐视准则来跳出局部最优的核心机制。文章以旅行商问题(TSP)为例,提供了完整的Python和MATLAB代码实现,并详细拆解了算法四大核心部件与关键调参技巧,为读者提供了从理论到实践的全面指南。

weixin_29212867的博客 308

数学建模竞赛实战:从VRP问题到启发式算法求解全流程解析

车辆路径问题(VRP)是运筹学与组合优化领域的经典问题,其核心目标是在满足一系列约束条件下,为多辆车规划访问多个客户点的最优行驶路线,以最小化总成本或最大化效率。该问题属于NP-hard难题,无法在多项式时间内求得精确最优解,因此在实际工程中广泛采用启发式与元启发式算法进行近似求解。这类算法,如模拟退火、遗传算法和禁忌搜索,通过模拟自然过程或利用历史搜索信息,在可接受的时间内寻找高质量可行解,在物流配送、供应链管理、网络路由等场景具有极高的技术价值。本文以数学建模竞赛为背景,深入探讨了模拟退火算法在求解带时

weixin_34356555的博客 309
上一篇: Python实现VRP常见求解算法——遗传算法(GA)
下一篇: Python实现VRP常见求解算法——离散粒子群(DPSO)
Better.C
博客等级 码龄9年 1万+粉丝 72原创
评论 14
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值