MD-MTSP:星雀优化算法NOA求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

173 篇文章 15 订阅
59 篇文章 1 订阅

一、星雀优化算法NOA

星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出,该算法模拟星雀的两种行为,即:在夏秋季节收集并储存食物,在春冬季节搜索食物的存储位置。星雀优化算法(Nutcracker optimizer algorithm,NOA)_IT猿手的博客-CSDN博客

参考文献:

[1]Mohamed Abdel-Basset, Reda Mohamed, Mohammed Jameel, Mohamed Abouhawwash.Nutcracker optimizer: A novel nature-inspired metaheuristic algorithm for global optimization and engineering design problems[J]. Knowledge-Based Systems,2023,262.

二、多仓库多旅行商问题MD-MTSP

多旅行商问题(Multiple Traveling Salesman Problem, MTSP)是著名的旅行商问题(Traveling Salesman Problem, TSP)的延伸,多旅行商问题定义为:给定一个𝑛座城市的城市集合,指定𝑚个推销员,每一位推销员从起点城市出发访问一定数量的城市,最后回到终点城市,要求除起点和终点城市以外,每一座城市都必须至少被一位推销员访问,并且只能访问一次,需要求解出满足上述要求并且代价最小的分配方案,其中的代价通常用总路程长度来代替,当然也可以是时间、费用等。多仓库多旅行商问题是其中一种多旅行商问题。

多旅行商问题(Multiple Traveling Salesman Problem, MTSP):单仓库多旅行商问题及多仓库多旅行商问题(含动态视频)_IT猿手的博客-CSDN博客

多仓库多旅行商问题(Multi-Depot Multiple Travelling Salesman Problem, MD-MTSP):𝑚个推销员从𝑚座不同的城市出发,访问其中一定数量的城市并且每座城市只能被某一个推销员访问一次,最后回到各自出发的城市,这种问题模型被称之为MD-MTSP。

三、星雀优化算法NOA求解MD-MTSP

本文选取国际通用的TSP实例库TSPLIB中的测试集bayg29作为测试例子,数据集可以自行修改。

3.1部分代码(可更改起点及旅行商个数)

close all
clear
clc
global data  StartPoint Tnum
%数据集参考文献  REINELT G.TSPLIB-a traveling salesman problem[J].ORSA Journal on Computing,1991,3(4):267-384.
% 导入TSP数据集 bayg29
load('data.txt')
StartPoint=[1 5 15 16 20];%起点城市的序号(可以修改) 必须由小到大排列 (建议:2到6个旅行商)
Tnum=length(StartPoint);%旅行商个数
Dim=size(data,1)-Tnum;%维度
lb=-100;%下界
ub=100;%上界
fobj=@Fun;%计算总距离
SearchAgents_no=100; % 种群大小(可以修改)
Max_iteration=3000; % 最大迭代次数(可以修改)
[fMin,bestX,curve]=NOA(SearchAgents_no,Max_iteration,lb,ub,Dim,fobj);  

3.2部分结果

(1)4个旅行商

第1个旅行商的路径:5->13->17->21->3->29->9->5

第1个旅行商的总路径长度:2132.088178

第2个旅行商的路径:15->22->11->7->25->19->10->15

第2个旅行商的总路径长度:1290.968629

第3个旅行商的路径:16->24->2->26->6->28->8->16

第3个旅行商的总路径长度:1219.590095

第4个旅行商的路径:20->1->14->18->4->23->12->27->20

第4个旅行商的总路径长度:2559.296778

所有旅行商的总路径长度:7201.943680

(2)5个旅行商

第1个旅行商的路径:1->29->3->19->13->1

第1个旅行商的总路径长度:1858.063508

第2个旅行商的路径:5->8->12->6->28->5

第2个旅行商的总路径长度:1297.844367

第3个旅行商的路径:15->22->14->18->4->15

第3个旅行商的总路径长度:691.230786

第4个旅行商的路径:16->25->7->11->10->16

第4个旅行商的总路径长度:1386.434275

第5个旅行商的路径:20->21->2->26->9->24->23->27->17->20

第5个旅行商的总路径长度:2225.353904

所有旅行商的总路径长度:7458.926841

四、完整Matlab代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,根据您提供的引用内容,似乎没有关于“星雀优化算法”的信息。但是,您提到了麻雀搜索算法(SSA),以下是关于如何在Python中实现SSA的介绍: 麻雀搜索算法(SSA)是一种基于自然界麻雀觅食行为的优化算法。在SSA中,麻雀被分为两类:领袖麻雀和追随者麻雀。领袖麻雀负责探索搜索空间,而追随者麻雀则根据领袖麻雀的行为进行搜索。SSA的主要思想是通过模拟麻雀觅食行为来寻找最优解。 以下是一个使用Python实现SSA的示例代码: ```python import numpy as np import matplotlib.pyplot as plt # 定义目标函数 def func(x): return np.sum(x**2) # 定义SSA算法 def ssa(func, dim, size, iter_num): # 初始化麻雀的位置和速度 pos = np.random.rand(size, dim) vel = np.zeros((size, dim)) # 初始化领袖麻雀的位置和适应度值 leader_pos = np.zeros(dim) leader_fit = np.inf # 记录每次迭代的最优适应度值 best_fit = np.zeros(iter_num) # 开始迭代 for t in range(iter_num): # 计算每只麻雀的适应度值 fit = np.array([func(pos[i]) for i in range(size)]) # 更新领袖麻雀的位置和适应度值 idx = np.argmin(fit) if fit[idx] < leader_fit: leader_pos = pos[idx] leader_fit = fit[idx] # 更新每只麻雀的速度和位置 for i in range(size): r1 = np.random.rand(dim) r2 = np.random.rand(dim) vel[i] = vel[i] + r1*(leader_pos - pos[i]) + r2*(pos[idx] - pos[i]) pos[i] = pos[i] + vel[i] # 记录每次迭代的最优适应度值 best_fit[t] = leader_fit return best_fit # 运行SSA算法并绘制收敛曲线 best_fit = ssa(func, dim=10, size=50, iter_num=100) plt.plot(best_fit) plt.xlabel('Iteration') plt.ylabel('Best fitness') plt.show() ``` 该示例代码实现了一个简单的SSA算法,并使用matplotlib绘制了算法的收敛曲线。您可以根据自己的需求修改目标函数、搜索空间维度、种群大小和迭代次数等参数来运行该算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值