当前位置: 首页 > news >正文

simulink与遗传算法结合求解TSP问题

前言:刚开始入门学习simulink,了解了基本的模块功能后想尝试从自己熟悉的领域入手,自己出题使用simulink搭建模型。选择的是TSP问题的遗传算法,考虑如何用simulink建模思想来实现一个简单TSP问题的遗传算法。

TSP问题描述

一个配送中心,8个需求点,各个需求点间的距离以及需求点离配送中心的距离已知,车辆从配送中心出发遍历每个需求点有且仅有一次,最后又回到配送中心,求最短的配送路线。

在这里插入图片描述

处理输入数据

万事开头难,从输入参数的配置开始吧。

主要是处理各个节点(配送中心+需求点)间的距离矩阵。

第一种方案:直接在查表模块中填写数据

在这里插入图片描述
在这里插入图片描述

第二种方案:也可以将excel表格中记录距离矩阵的数据导入.m文件,最后生成可以供查表模块使用的.mat文件数据

参考文章:Simulink仿真中将工作空间中的数据变量保存成.mat文件
https://blog.csdn.net/jk_101/article/details/120019475

在这里插入图片描述

本人采用的是第二种方案实现输入距离矩阵的处理。

用.m文件存储数据

clc;
clear;%% 处理各节点间的路线距离输入数据
%读取excel中,第一个sheet,B2-J10之间的内容
distance_data_file = 'distance_data.xlsx';
curr_path = matlab.desktop.editor.getActiveFilename;  % 获取当前.m脚本的工作路径
[pathstr, name, suffix] = fileparts(curr_path);  % 获取文件的上层父节点路径、文件名称、文件后缀
full_distance_path = fullfile(pathstr, distance_data_file);  % 拼接文件路径
distance_cube = xlsread(full_distance_path, 1, 'B2:J10');
save('distance_cube.mat', 'distance_cube');

9个节点(包括配送中心节点0)的距离数据存储在一个9*9的矩阵中,命名为distance_cube,使用save(‘distance_cube.mat’, ‘distance_cube’); 这条语句将从excel读取的距离矩阵存入distance_cube.mat供Simulink模型使用。

生成单条染色体

染色体编码方式采用整数编码方式,每一条染色体代表一种可行解,染色体中的每个基因位数字代表一个节点。

首先思考一条染色体在simulink中应该怎么表示?
假设:染色体A:0 1 2 3 4 5 6 7 8 0,可以直接使用constant模块表示

在这里插入图片描述

也可以使用Constant模块随机产生1-8的一维数组。

在这里插入图片描述

再使用Mux模块合并输入数据,得到一个以配送中心编号0开头和结尾的序列,这个序列就表示问题的一个可行解。

在这里插入图片描述

计算可行解的适应度函数

假设可行解为[0,1,2,3,4,5,6,7,8,0]

从基本单元“基因”开始处理

在这里插入图片描述

按照上面两个基因(节点)查表确认距离的思想,将基因使用Constant模块重组为一条染色体,计算单条染色体的适应度函数(总配送路线长度),备注:本博客提到的适应度函数不是真正意义上遗传算法要求的总运输距离的倒数,Simulink建模计算的染色体的适应度就是指代的总运输距离(车辆从配送中心出发依次经过8个需求点再返回配送中心的总路线长度)。

在这里插入图片描述
在这里插入图片描述

确定种群结构

假设染色体种群规模为10,采用Constant产生1-8个需求节点的随机序列,使用自定义的模块封装车辆从配送中心出发依次经过8个需求节点最后返回配送中心的过程。

自定义封装好的模块如下:

在这里插入图片描述

使用Mux模块合并输入数据(即10条染色体)组成形式上的种群,将输出结果采用To File模块存入initpopout.mat。

在这里插入图片描述

计算种群的适应度函数

将上一章节“确定种群结构”得到的输出序列存入Simulink的.mat文件,使用From File模块从initpopout.mat提取生成的种群结构作为输入,计算种群适应度函数的基本思想:使用Demux模块将1010的矩阵拆解成一维的110的列表,使用已经封装好的计算单条染色体的功能模块计算这个一维的1*10的列表,得到所有10条染色体的适应度函数(总运输距离的倒数)之后,再使用Mux模块合并列表作为一个输出信号,并且使用Min模块计算此时种群的最小运输距离。

在这里插入图片描述

主函数

本博客针对TSP问题只进行到种群生成及种群染色体的适应度函数计算,不涉及遗传算法进化迭代的选择、交叉及变异算子。

总结以上求解TSP问题的分解步骤,可以得到下图所示的总的模型:

在这里插入图片描述

参考文献:

1.Matlab读取excel文件中的数据
https://blog.csdn.net/qq_38826019/article/details/81184811
2.MATLAB-获取正在执行的m文件路径的方法
https://blog.csdn.net/qq_43278043/article/details/115922597
3.matlab函数-fullfile-将字符合并成路径
https://blog.csdn.net/weixin_37724055/article/details/109952562
4.matlab的输出(命令窗口、fprint函数、disp函数)
https://blog.csdn.net/caomin1hao/article/details/83996365
5.matlab 分割字符串、提取文件路径及文件名
https://blog.csdn.net/u012189747/article/details/86504693

相关文章:

simulink与遗传算法结合求解TSP问题

前言:刚开始入门学习simulink,了解了基本的模块功能后想尝试从自己熟悉的领域入手,自己出题使用simulink搭建模型。选择的是TSP问题的遗传算法,考虑如何用simulink建模思想来实现一个简单TSP问题的遗传算法。 TSP问题描述 一个配…...

环境搭建-Ubuntu18.04.6系统TensorFlow BenchMark的GPU测试

1. 下载Ubuntu18.04.6镜像 登录阿里云官方镜像站:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 2. 测试环境 Server OS:Ubuntu 20.04.6 LTS Kernel: Linux 5.4.0-155-generic x86-64 Docker Version:24.0.5, build ced0996 docker-com…...

C# 汇总区间

228 汇总区间 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围…...

加利福尼亚大学|3D-LLM:将3D世界于大规模语言模型结合

来自加利福尼亚大学的3D-LLM项目团队提到:大型语言模型 (LLM) 和视觉语言模型 (VLM) 已被证明在多项任务上表现出色,例如常识推理。尽管这些模型非常强大,但它们并不以 3D 物理世界为基础,而 3D 物理世界涉及更丰富的概念&#xf…...

HCIA实验四

一.实验要求: 1、R4为ISP,其上只能配置IP地址;R4与其他所有直连设备间均使用共有IP; 2、R3 - R5/6/7为MGRE环境,R3为中心站点; 3、整个网络配置OSPF环境,IP基于172.16.0.0/16网段划分&#x…...

常见的算法

查找算法 基本查找 Demo1 public static boolean basicSearch(int index,int[] arr){for (int i 0; i < arr.length; i) {if (indexarr[i]){return true;}}return false; } Demo2 //顺序查找&#xff0c;考虑重复&#xff0c;返回查找内容的索引 public static ArrayLis…...

Jetbrains 2023.2教程

IDEA 2023.2 激活演示 Pycharm 2023.2 激活演示 WebStorm 2023.2 激活演示 Clion 2023.2 激活演示 DataGrip 2023.2 PhpStorm 2023.1.4 激活演示&#xff08;2023.2尚未发布&#xff09; RubyMine 2023.2 激活演示 获取方式 仔细看每一个工具演示的图片 本文由 mdnice …...

OpenLayers入门,OpenLayers地图初始化时如何设置默认缩放级别、设置默认地图中心点、最大缩放级别和最小缩放级别以及默认坐标系

专栏目录: OpenLayers入门教程汇总目录 前言 OpenLayers地图初始化时如何设置默认缩放级别、初始化时设置默认地图中心点、设置最大缩放级别和最小缩放级别,超过缩放级别用户无法再放大和缩小,和设置默认坐标系。 二、依赖和使用 "ol": "^6.15.1"使用…...

css实现步骤条中的横线

实现步骤中的横线&#xff0c;我们使用css中的after选择器&#xff0c;content写空&#xff0c;然后给这个范围设定一个绝对定位&#xff0c;相当于和它设置伪类选择的元素的位置&#xff0c;直接看代码&#xff1a; const commonStyle useMemo(() > ({fontSize: 30px}),[]…...

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】

4.权限管理模块开发 4.1 权限管理概述 4.1.1 权限管理的意义 后台管理系统中&#xff0c;通常需要控制不同的登录用户可以操作的内容。权限管理用于管理系统资源&#xff0c;分配用户菜单、资源权限&#xff0c;以及验证用户是否有访问资源权限。 4.1.2 RBAC权限设计模型 …...

云计算需求激增带来的基础设施挑战及解决方案

云计算的指数级增长迅速改变了我们消费和存储数字信息的方式。随着企业和个人越来越依赖基于云的服务和数据存储&#xff0c;对支持这些服务的强大且可扩展的基础设施的需求已达到前所未有的水平。 云计算需求的快速增长 我们的日常生活越来越多地被新技术所渗透。流媒体服务、…...

R语言中的函数23:zoo::rollmean, rollmax, rollmedian, rollsum等等

文章目录 函数介绍rollmean()rollmax()rollmedianrollsum 函数介绍 rollmean(x, k, fill if (na.pad) NA, na.pad FALSE, align c("center", "left", "right"), ...)rollmax(x, k, fill if (na.pad) NA, na.pad FALSE, align c("cen…...

数据结构—数组和广义表

4.2数组 数组&#xff1a;按一定格式排列起来的&#xff0c;具有相同类型的数据元素的集合。 **一维数组&#xff1a;**若线性表中的数据元素为非结果的简单元素&#xff0c;则称为一维数组。 **一维数组的逻辑结构&#xff1a;**线性结构&#xff0c;定长的线性表。 **声明…...

服务器负载均衡算法有哪些

算法举例 服务器负载均衡算法是用于分配网络流量到多个服务器的策略&#xff0c;以实现负载均衡和提高系统性能。以下是一些常见的服务器负载均衡算法的详细说明&#xff1a; 轮询&#xff08;Round Robin&#xff09;算法&#xff1a; 轮询算法是最简单且常见的负载均衡算法之…...

2023年深圳杯数学建模B题电子资源版权保护问题

2023年深圳杯数学建模 B题 电子资源版权保护问题 原题再现&#xff1a; 版权又称著作权&#xff0c;包括发表权、署名权、修改权、保护作品完整权、复制权、发行权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、汇编权及应当由著作权人…...

Easyui中datagrid切换页码后,再次根据其他条件查询,重置为第一页,序号从1开始显示

Easyui中datagrid切换页码后&#xff0c;再次根据其他条件查询&#xff0c;无法将序号重置为1开始显示 1、查询按钮2、datagrid的查询方法3、datagrid点击分页4、重置方法 1、查询按钮 <a href"javascript:Query(1,true)" id"btnQuery" class"eas…...

随笔03 考研笔记整理

图源&#xff1a;文心一言 上半年的博文整理&#xff0c;下半年依然会更新考研类的文章&#xff0c;有需要的小伙伴看向这里~~&#x1f9e9;&#x1f9e9; 另外&#xff0c;这篇文章可能是我上半年的努力成果之一&#xff0c;因此仅关注博主的小伙伴能够查看它~~&#x1f9e…...

一次线上OOM问题的个人复盘

我们一个java服务上线后&#xff0c;偶尔会发生内存OOM(Out Of Memory)问题&#xff0c;但由于OOM导致服务不响应请求&#xff0c;健康检查多次不通过&#xff0c;最后部署平台kill了java进程&#xff0c;这导致定位这次OOM问题也变得困难起来。 最终&#xff0c;在多次review代…...

【机器学习】基础知识点的汇总与总结!更新中

文章目录 一、监督学习1.1、单模型1.1.1、线性回归1.1.2、逻辑回归&#xff08;Logistic Regression&#xff09;1.1.3、K近邻算法&#xff08;KNN&#xff09;1.1.4、决策树1.1.5、支持向量机&#xff08;SVM&#xff09;1.1.6、朴素贝叶斯 1.2、集成学习1.2.1、Boosting1&…...

NLP杂记

来京一周余&#xff0c;初病将愈&#xff0c;终跑通llama及ViT&#xff0c;记于此—— 之前都是做的图像&#xff0c;大模型迁移基本上都是NLP相关的知识&#xff0c;很多东西和CV差距还是有点&#xff0c;再加上大模型对算力要求较高&#xff0c;基于云的操作对我一个习惯在本…...

SWF逆向工程工作流优化:JPEXS Free Flash Decompiler效率提升技巧

SWF逆向工程工作流优化&#xff1a;JPEXS Free Flash Decompiler效率提升技巧 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler&#xff08;简称FFDec&#…...

RustFS实战:5分钟在Linux服务器上搭个私有S3兼容存储(保姆级配置+避坑指南)

RustFS实战&#xff1a;5分钟在Linux服务器上搭个私有S3兼容存储&#xff08;保姆级配置避坑指南&#xff09; 最近在折腾一个需要私有文件存储的Side Project&#xff0c;既不想用公有云S3&#xff08;太贵&#xff09;&#xff0c;又嫌MinIO配置繁琐。偶然发现RustFS这个基于…...

告别复制粘贴!用ABAP类CL_SALV_BS_RUNTIME_INFO自动化获取任意ALV报表数据

告别复制粘贴&#xff01;用ABAP类CL_SALV_BS_RUNTIME_INFO自动化获取任意ALV报表数据 在SAP系统的日常开发中&#xff0c;ABAP程序员经常需要从各种ALV报表中提取数据用于二次处理。传统的手动复制粘贴方式不仅效率低下&#xff0c;还容易出错。本文将介绍如何利用CL_SALV_BS_…...

泛微OA单点登录配置全攻略:从零开始实现第三方系统免密登录

泛微OA单点登录深度实战&#xff1a;Token机制与系统集成最佳实践 对于企业IT架构师和运维团队而言&#xff0c;系统间的无缝衔接一直是提升工作效率的关键。想象一下这样的场景&#xff1a;销售人员在CRM系统中完成客户跟进后&#xff0c;无需反复登录就能直接跳转到OA系统提…...

解锁新可能:ArkData 在智能穿戴设备中的应用

解锁新可能&#xff1a;ArkData 在智能穿戴设备中的应用随着人们对健康生活的重视&#xff0c;智能穿戴设备愈发普及。这些设备能够实时收集心率、步数、睡眠等健康数据&#xff0c;为人们的健康管理提供重要参考。在这一背景下&#xff0c;如何高效管理和利用这些健康数据成为…...

C++ 模板与泛型编程入门

C 模板与泛型编程入门 模板把类型&#xff08;及非类型参数&#xff09;作为参数&#xff0c;在编译期由编译器按用法生成具体函数或类&#xff0c;是 C 泛型编程与 STL 的基础。下文以 Max、简单类模板、选择排序及可定制比较器为例说明常见写法&#xff1b;排序复杂度为 (O(…...

零代码玩转OpenClaw:ollama-QwQ-32B自动化脚本生成教程

零代码玩转OpenClaw&#xff1a;ollama-QwQ-32B自动化脚本生成教程 1. 为什么选择OpenClawollama-QwQ-32B组合&#xff1f; 上周我在整理旅行照片时&#xff0c;面对上千张命名混乱的图片文件&#xff0c;突然意识到&#xff1a;这不正是测试OpenClaw自动化能力的绝佳场景吗&…...

I2CLCD驱动库:HD44780字符屏的I²C轻量级嵌入式适配方案

1. I2CLCD库概述&#xff1a;面向嵌入式系统的字符型LCD IC适配驱动I2CLCD是一个轻量级、可移植的C语言驱动库&#xff0c;专为将标准HD44780兼容的字符型LCD&#xff08;如1602、2004&#xff09;通过IC总线接入MCU而设计。其核心价值在于消除并行接口对GPIO资源的高占用&…...

C语言回调函数在TCP客户端中的实现与应用

C语言回调函数在TCP客户端中的实现与应用1. 回调函数基础概念回调函数是一种通过函数指针实现的编程机制&#xff0c;允许将一个函数作为参数传递给另一个函数。在C语言中&#xff0c;回调函数的实现完全依赖于函数指针&#xff0c;这与C、Python等现代语言中可能使用仿函数或匿…...

Go-Gin-API跨域处理终极指南:5分钟配置CORS中间件

Go-Gin-API跨域处理终极指南&#xff1a;5分钟配置CORS中间件 【免费下载链接】go-gin-api xinliangnote/go-gin-api 是一个用于快速构建 Go 语言 API 的框架。适合在Go语言开发的Web应用中使用&#xff0c;提供丰富的中间件和模块化架构。特点是提供了简洁的API、自动化API文档…...