【TSP问题】基于遗传算法求解固定的开放式不返回多旅行推销员问题(M-TSP)附matlab代码

news2024/11/27 18:07:06

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

旅行商问题是一个经典的NP完全问题,多人旅行商问题的求解则更具挑战性.以往对求解多人旅行商问题的研究局限于以所有成员路径总和最小为优化标准,而对以所有成员路径最大值最小为优化标准的另一类多人旅行商问题却未加注意.文章给出了这两类多人旅行商问题的形式化描述,探讨了利用遗传算法求解这固定的开放式多旅行推销员问题(M-TSP)的基本思想和具体方案,进行了仿真实验验证.仿真实验数据表明,这是一种高效而且适应性强的多入旅行商问题求解方法.

⛄ 部分代码

clc;

clear all;

close all

xy = 100*rand(29,2);%坐标

N = size(xy,1);%城市数量

dmat = xlsread('1.xlsx','Sheet1','B2:AD30');%距离

min_tour = 4;%最小时间限制

pop_size = 200;%种群数量

num_iter = 1000;%迭代次数

n = N - 1; % 减去起点

for salesmen=2:7%旅行商个数循环

    

    % 线路断点选择的初始化

    num_brks = salesmen-1;

    % 初始化种群

    pop_rte = zeros(pop_size,n);          %路径初始化

    pop_brk = zeros(pop_size,num_brks);   % population of breaks

            for k = 1:8 % Generate New Solutions

                tmp_pop_rte(k,:) = best_of_8_rte;

                tmp_pop_brk(k,:) = best_of_8_brk;

                switch k

                    case 2 % Flip

                        tmp_pop_rte(k,I:J) = fliplr(tmp_pop_rte(k,I:J));

                    case 3 % Swap

                        tmp_pop_rte(k,[I J]) = tmp_pop_rte(k,[J I]);

                    case 4 % Slide

                        tmp_pop_rte(k,I:J) = tmp_pop_rte(k,[I+1:J I]);

                    case 5 % Modify Breaks

                        tmp_pop_brk(k,:) = randbreaks(min_tour,n,num_brks,cum_prob);

                    case 6 % Flip, Modify Breaks

                        tmp_pop_rte(k,I:J) = fliplr(tmp_pop_rte(k,I:J));

                        tmp_pop_brk(k,:) = randbreaks(min_tour,n,num_brks,cum_prob);

                    case 7 % Swap, Modify Breaks

                        tmp_pop_rte(k,[I J]) = tmp_pop_rte(k,[J I]);

                        tmp_pop_brk(k,:) = randbreaks(min_tour,n,num_brks,cum_prob);

                    case 8 % Slide, Modify Breaks

                        tmp_pop_rte(k,I:J) = tmp_pop_rte(k,[I+1:J I]);

                        tmp_pop_brk(k,:) = randbreaks(min_tour,n,num_brks,cum_prob);

                    otherwise % Do Nothing

                end

            end

            new_pop_rte(p-7:p,:) = tmp_pop_rte;

            new_pop_brk(p-7:p,:) = tmp_pop_brk;

        end

        pop_rte = new_pop_rte;

        pop_brk = new_pop_brk;

    end

    %     if global_min<100%如果<200则跳出循环

    

    ds=zeros(s,1);

    flg=0;

    for s = 1:salesmen

        %         disp(['旅行商',num2str(s),'的路径:'])

        

        ds(s) = ds(s) + dmat(1,opt_rte(rng(s,1))); % 计算起点到旅行商第一个城市的距离

        rte = [1 opt_rte(rng(s,1):rng(s,2))];

        for i=1:length(rte)-1

            ds(s) = ds(s) + dmat(rte(i),rte(i+1)); % 计算起点到旅行商第一个城市的距离

        end

        if ds(s)>22

            flg=flg+1;

        end

    end

    if flg==0

        disp(['最少旅行商数量为',num2str(salesmen)]);

        %         disp(['最短路径为:',num2str(min_dist)])

        

        ds=zeros(s,1);

        for s = 1:salesmen

            disp(['旅行商',num2str(s),'的路径:'])

            d(s) = d(s) + dmat(1,opt_rte(rng(s,1))); % 计算起点到旅行商第一个城市的距离

            rte = [1 opt_rte(rng(s,1):rng(s,2))]

            for i=1:length(rte)-1

                ds(s) = ds(s) + dmat(rte(i),rte(i+1)); % 计算起点到旅行商第一个城市的距离

            end

            ds(s)

        end

        break;

    end

    

end

disp('总路程')

disp(sum(ds));

% Plot the Best Route

figure(1);%显示城市分布图

for s = 1:salesmen

    rte = [1 opt_rte(rng(s,1):rng(s,2))];

    plot(xy(rte,1),xy(rte,2),'.-','Color',clr(s,:));

    title(sprintf('Total Distance = %1.4f, Iteration = %d',min_dist,iter));

    hold on

end

plot(xy(1,1),xy(1,2),'ko');

hold off

% Plots

figure('Name','MTSPOFS_GA | Results','Numbertitle','off');%距离矩阵,没啥用

subplot(2,2,1);

plot(xy(:,1),xy(:,2),'k.');

title('City Locations');

subplot(2,2,2);

imagesc(dmat([1 opt_rte],[1 opt_rte]));

title('Distance Matrix');

subplot(2,2,3);%显示路径规划图

rng = [[1 opt_brk+1];[opt_brk n]]';

for s = 1:salesmen

    rte = [1 opt_rte(rng(s,1):rng(s,2))];

    plot(xy(rte,1),xy(rte,2),'.-','Color',clr(s,:));

    title(sprintf('Total Distance = %1.4f',min_dist));

    hold on;

end

plot(xy(1,1),xy(1,2),'ko');

subplot(2,2,4);%显示迭代图

plot(dist_history,'b','LineWidth',2);

title('Best Solution History');

set(gca,'XLim',[0 num_iter+1],'YLim',[0 200]);

% Generate Random Set of Break Points

⛄ 运行结果

⛄ 参考文献

[2]温清芳. 遗传算法求解TSP问题的MATLAB实现[J]. 秦关学院学报, 2007, 28(6):5.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

 

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

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

相关文章

基于django+sqlite3的新闻网站管理系统源代码,含数据库文件

基于djangosqlite3的新闻网站管理系统源代码&#xff0c;含数据库文件 程序部署方法 1、安装程序依赖&#xff1b; 2、 manage.py migrate #初始化数据库&#xff1b; 3、 manage.py createsuperuser创建管理员&#xff1b; 4、manage.py runserver启动程序 完整程序下载地址&…

编程内功心法「底层原理系列」 底层架构原理,分析CPU处理器鲜为人知的那些秘密

前提概要 所谓&#xff0c;知彼知己百战不殆&#xff0c;针对于计算机的优化技术来讲&#xff0c;最底层也不过是针对于CPU技术的优化了&#xff0c;但是如果要区优化程序&#xff0c;涉及到CPU的执行能力&#xff0c;那必须要了解CPU的原理和概念以及执行过程等概念&#xff0…

html网页设计大学生作业成品——公益校园网站设计与实现(HTML+CSS+JavaScript)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

1.Spring概述(Spring官方文档总结)

目录 1.1jdk环境依赖 1.2 Spring介绍 1.3 Spring历史 1.4 设计理念 1.1 jdk环境依赖 从Spring Framework 5.1开始&#xff0c;Spring需要JDK 8 (Java SE 8)&#xff0c;并提供对JDK 11 LTS的开箱即用支持。建议将Java SE 8 update 60作为Java 8的最低补丁版本&#xff0c;但…

由于找不到qt5core.dll,无法继续执行代码的问题

由于找不到qt5core.dll,无法继续执行代码的问题处理&#xff0c;其实和平常的dll缺失处理方法是差不多的 一. 下载qt5core.dll文件来解决 1.在百度搜索qt5core.dll这个dll文件&#xff0c;并且下载到自己的电脑 2.或者是直接在别人的电脑找qt5core.dll&#xff0c;然后拷贝到…

(附源码)ssm医护服务平台 毕业设计 260954

SSM医护服务平台 摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设医护…

XFINIUM.PDF CROSS-PLATFORM BUNDLE 11.1.2

轻松将您的 PDF 应用程序移植到其他平台。 XFINIUM.PDF CROSS-PLATFORM BUNDLE 是一个用于跨平台 PDF 开发的库。在所有支持的平台&#xff08;.NET、Windows Forms、Xamarin.Mac、ASP.NET Webforms 和 MVC、控制台应用程序、Windows 服务、Mono、Windows Presentation Foundat…

Python.02.语法进阶

目录 基本运算符 比较运算符 赋值运算符 多变量赋值 逻辑运算符 案例&#xff1a; 案例实现源码如下 三元运算符 条件语句 循环语句 1.计算0-100的求和 2.for循环数组求和 3.range定义一个1-100的奇数数组,for循环求出数组的和 4.while...else...语法 基本运算符 比较…

联通物联网卡激活方法

科技的发展日新月异&#xff0c;我们国家的发展战略也是支持高新科技公司的发展&#xff0c;所以越来越多的高新科技公司出现&#xff0c;但凡是高新科技公司&#xff0c;在设备的联网中&#xff0c;都会用到物联卡&#xff0c;所以物联卡的市场也愈发火爆&#xff0c;那么今天…

Web前端大作业——基于HTML+CSS+JavaScript仿英雄联盟LOL游戏网站

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

pytorch复习笔记--nn.Embedding()的用法

目录 1--nn.Embedding()的用法 2--实例展示&#xff1a; 3--注意的问题 1--nn.Embedding()的用法 import torch.nn as nnembedding nn.Embedding(num_embeddings 10, embedding_dim 256) nn.Embedding()产生一个权重矩阵weight&#xff0c;其shape为&#xff08;num_em…

图解:Go Mutext

Mutex 可能处于两种不同的模式&#xff1a;正常模式和饥饿模式。 正常模式下获取Mutex 在正常模式下&#xff0c;新来的G会尝试自旋获取锁&#xff0c;如果自旋获取失败&#xff0c;则会按照FIFO的顺序排队获取锁。 当Mutex被释放&#xff0c;会唤醒等待队列中第一个等待者G&…

[附源码]计算机毕业设计求职招聘网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Spring框架的介绍、工厂设计模式以及Spring环境的搭建

spring崇尚&#xff1a;不重复的造轮子 二、工厂设计模式 工厂设计模式&#xff1a;工厂生产对象(配置文件properties反射) Spring创建对象的实现原理: 根据配置文件的id得到对应的class属性值,根据反射,通过类全路径创建对象; 通过配置文件,通过工厂设计模式,有反射动态创…

matlab knn方法快速实现,手把手教学

目录介绍话不多说&#xff0c;进入实战注意事项KNN算法的优势和劣势介绍 1968年&#xff0c;Cover和Hart提出K近邻算法。该算法既可以用于回归也可以用于分类&#xff0c;其用于分类时其输入为实例的特征向量&#xff0c;输出为实例的类别。假设给定一个训练数据集&#xff0c…

PsiQuantum宣布在容错量子计算架构方面取得新突破

&#xff08;图片来源&#xff1a;网络&#xff09; 12月2日&#xff0c;PsiQuantum宣布了一项突破性技术&#xff0c;该技术将使编译应用程序在运行时效率提高约50倍。可以更有效地实现容错量子计算。 该技术专门针对容错量子计算机的算法&#xff0c;而不是非容错的NISQ系统。…

linux倒序查看占用cpu或内存最多的进程

一、获取当前系统占用CPU最高的前10个进程 命令&#xff1a;ps aux|head -1;ps aux|sort -rn -k3|head -10 该命令组合由2条独立的命令组成&#xff1a; ps aux|head -1&#xff1a;这一句是为了获取标题&#xff08;USER PID %CPU %MEN VSZ RSS TTY STAT START TIME COMMAND…

儿童学生护眼台灯哪个牌子好?双十二儿童护眼台灯精选

我国儿童以及青少年的近视人数迅速增加&#xff0c;主要是不注意用眼时间&#xff0c;不良好的照明光线&#xff0c;拥有一个明亮舒适的光线环境&#xff0c;能大大减少近视概率&#xff0c;推荐合适的儿童护眼台灯给大家。 TOP1&#xff1a;南卡护眼台灯L1 推荐指数&#xf…

每天一个面试题:ThreadLocal底层原理和实现Demo(12.6.2022)

ThreadLocal底层原理和实现Demo每天一个面试题&#xff1a;ThreadLocal实现ThreadLocal的DemoThreadLocal底层原理为什么ThreadLocalMap的key设计为弱引用今天开始一个新专栏&#xff1a;每天一个面试题系列 也没有拿到令人心动的offer&#xff0c;看来自己学习方式和能力还是差…

霸榜!这本《程序员如何向架构师转型》在Github已持续置顶两月

前言 企业架构在过去十年中取得了长足的进步。随着越来越多新技术出现&#xff0c;充分利用这些因素来将企业架构创建得更好十分重要。通过将新技术集成到企业架构中&#xff0c;即使在困难时期&#xff0c;也能取得丰硕的成果。现代企业架构师的 5 个特征&#xff1a; 1. IT…