news 2026/5/23 16:58:35

直接上手玩转遗传算法,先搞个简单的函数最值问题热热身。比如找f(x)=x²的最小值,这玩意儿小学生都能秒答,但咱们用遗传算法折腾一下。先看看种群初始化代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
直接上手玩转遗传算法,先搞个简单的函数最值问题热热身。比如找f(x)=x²的最小值,这玩意儿小学生都能秒答,但咱们用遗传算法折腾一下。先看看种群初始化代码

#MATLAB编写遗传算法,基于遗传算法求解TSP问题及函数最值最值问题。 #程序包含详细注释,本人在2020a版本均可运行。

% 种群初始化 population_size = 50; gene_length = 20; % 二进制编码长度 population = randi([0 1], population_size, gene_length);

这里用20位二进制表示一个数,相当于把[-5,5]区间细分成了2²⁰份。随机生成的50个二进制串构成初始种群,注意这里的二进制编码是实打实的0-1矩阵,看着像乱码其实藏着潜在解。

适应度计算更有意思,咱们把二进制转十进制后算目标函数:

function fitness = calc_fitness(pop) x = binary2real(pop); % 二进制转实数 fitness = 1./(x.^2 + 1e-5); % 防止除零 end

这里有个骚操作——取倒数让最小值问题转化为适应度最大化问题。加上1e-5避免除零,虽然数学上x=0时原函数最小,但实际运算中种群可能正好撞上这个点。

交叉操作来个两点交叉:

child = [parent1(1:cross_point1), parent2(cross_point1+1:cross_point2), parent1(cross_point2+1:end)];

这种交叉方式比单点交叉更灵活,特别是处理二进制编码时,能保留更多基因组合可能性。实测发现交叉概率设在0.6-0.8之间效果最佳,太高容易破坏优秀个体。

突然想试试更刺激的TSP问题。拿中国34个城市坐标开刀,先看距离矩阵生成:

dist_matrix = zeros(n,n); for i = 1:n for j = i+1:n dist_matrix(i,j) = norm(cities(i,:)-cities(j,:)); dist_matrix(j,i) = dist_matrix(i,j); end end

这个全连接矩阵会吃掉不少内存,不过34城市还在可接受范围。路径编码直接采用整数排列,比如[3,1,4,2]表示访问顺序,这种编码方式天然满足TSP的访问限制。

变异操作玩点花活——逆转变异:

mutate_point = sort(randperm(length(path),2)); mutated = [path(1:mutate_point(1)-1), fliplr(path(mutate_point(1):mutate_point(2))), path(mutate_point(2)+1:end)];

随机选两个点把中间路径反转,这种操作能在保持大部分路径结构的同时引入突变,实测比单纯交换两个城市位置更容易跳出局部最优。

跑完500代后的最优路径长度从初始的8万多公里降到3万以内,虽然离理论最优还有差距,但看着MATLAB生成的路径动画,城市连线从杂乱无章逐渐变成合理回路,这过程莫名治愈。关键代码其实就三大块:选择、交叉、变异,但调参真是玄学——种群规模太大收敛慢,太小容易早熟;突变率高了像无头苍蝇,低了又陷入局部最优。

最后扔个实用技巧:在迭代后期加入局部搜索能显著提升解的质量。比如对TSP当前最优解做2-opt优化:

for i = 1:length(path)-1 for j = i+2:length(path) new_path = path; new_path(i:j) = path(j:-1:i); if calc_distance(new_path) < current_best path = new_path; break; end end end

这种暴力邻域搜索虽然时间复杂度高,但在精英个体上偶尔用用效果拔群。遗传算法的魅力就在于这种全局探索与局部开发的平衡,就像人生既要大胆尝试又要专注深耕。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 16:26:35

【打靶日记】VulNyx 之 Listen

主机发现 ┌──(root㉿xhh)-[~/Desktop/xhh/VluNyx/listen] └─# arp-scan -I eth1 -l192.168.56.151 08:00:27:1b:16:5c PCS Systemtechnik GmbH主机地址为 端口扫描 ┌──(root㉿xhh)-[~/Desktop/xhh/VluNyx/listen] └─# nmap -p- 192.168.56.151 …

作者头像 李华
网站建设 2026/5/21 11:23:45

无人驾驶车辆轨迹跟踪与模型预测控制第二版配套程序整理分享

无人驾驶车辆轨迹跟踪与模型预测控制第二版书中配套程序整理&#xff0c;包括MATLAB simulink模型与Carsim par文件。 一共从第二章到第八章。 已经完全适配Carsim2019与MATLAB2018a以上版本&#xff0c;最好为MATLAB2021a。 包括相关的电子资料。 非常适合学习模型预测控制&am…

作者头像 李华
网站建设 2026/5/22 17:59:31

Cadence 1.8V LDO电路设计:从带隙基准到完整实现

cadance 1.8v LDO电路 cadance virtuoso 设计 模拟电路设计 LDO带隙基准电路设计 带设计报告&#xff08;14页word&#xff09; 基于tsmc18工艺 模拟ic设计 bandgapLDO 1.8v LDO电路 包含工程文件和报告 可以直接打开最近在模拟IC设计的领域里摸爬滚打&#xff0c;深入研究了基…

作者头像 李华
网站建设 2026/5/23 6:14:11

Realme Narzo 90系列印度发布:配备7000mAh电池与50MP摄像头,售价公布

Realme Narzo 90系列印度发布&#xff1a;配备7000mAh电池与50MP摄像头&#xff0c;售价公布 Realme扩充中端产品线 Realme在印度发布了Narzo 90系列&#xff0c;通过Realme Narzo 90 5G和Narzo 90x 5G扩充其中端智能手机阵容。两款机型均配备7000mAh大电池&#xff0c;支持60W…

作者头像 李华
网站建设 2026/5/22 19:14:27

硬核优化5连击,性能暴涨300%!附开箱即用模板,小白也能秒上手!

文为CUDA并行规约系列文章的下篇&#xff0c;本文介绍了5种并行规约算法的实现&#xff0c;并从硬件的角度对它们进行分析和优化&#xff0c;最终给出一个开箱即用的模板代码及其使用示例。勘误首先是一个勘误&#xff0c;在上篇中存在一个拼写错误&#xff0c;线程束的正确单词…

作者头像 李华
网站建设 2026/5/21 0:27:58

GitLab讲解

目录一、GitLab概念二、GitLab安装三、GitLab汉化四、Gitlab使用1、登录基本操作2、使用方法一、GitLab概念 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项…

作者头像 李华