遗传算法的手工模拟计算示例(通俗易懂)(包含遗传算法原理、遗传算法代码)

article/2025/10/18 11:02:52

下面是关于“遗传算法”的几个不错的学习资源

  1. 遗传算法介绍及手工模拟计算示例(文字版)
    遗传算法介绍及手工模拟计算示例(视频讲解版)

  2. 遗传算法原理介绍(包含二进制编码、解码原理,算法实现,视频讲解版)并分析了选择、交叉、变异的一些思路

学习笔记:

遗传算法简介

遗传算法(Genetic Algorithm,GA)是借鉴生物界进化规律(适者生存和优胜劣汰遗传机制)而演化出来的一类随机搜索算法。最早由美国Michigan大学的Holland教授于20世纪70年代首次提出,起源于60年代对自然和人工自适应系统的研究。复制该算法非常适合于处理传统优化方法难以解决的复杂的和非线性的优化问题。

遗传算法流程

ps概念:
基因:对应每个解的组成分量;
个体:单个个体,相当于待求解优化问题的一个解;
种群:很多个体组成的群体;
适应度:度量某个物种对于生存环境的适应程度;
选择:以一定的概率从种群中选择若干个个体,让其基因有机会遗传给下一代。一般来说,选择过程是一种基于适应度的优胜劣汰的过程;
交叉:两个染色体的某一相同位置DNA被切断,前后两串分别交叉组合成两个新的染色体,也即是基因重组或杂交;
变异:以一定概率将种群中一些交叉后的个体进行变异,产生新的染色体,也即是改变基因。

在这里插入图片描述

由遗传算法流程图可以看出,使用上述三种遗传算子(选择算子、交叉算子、变异算子)的遗传算法的主要运算过程如下所述:

  1. 初始化种群。设置迭代次数(进化代数)计数器t←0;设置最大迭代次数(进化代数)T;随机生成M个个体作为初始群体P(0)。
  2. 计算种群上每个个体适应度值。计算第t代群体P(t)中各个个体的适应度。
  3. 选择运算。将选择算子作用于群体。
  4. 交叉运算。将交叉算子作用于群体,按概率Pc进行交叉操作。
  5. 变异运算。将变异算子作用于群体,按概率Pm进行变异操作。第t代群体P(t)经过选择、交叉、变异运算之后得到下一代(t+1代)群体P(t+1)。
  6. 终止条件判断。若t≤T,则:t←t+1,转到步骤2;若t>T,则以进化过程中得到的具有最优适应度的个体作为问题的满意解或最优解输出,终止计算。

**PS:启发式算法背后的思想都是一样的——择优进化,即根据一定的策略使差的解向好的方向发展,使好的解变得更好。其中可以利用保底机制,即下一代的解若比上一代差,则不更新;下一代的解若比上一代好,则更新。 保底机制+更新策略+启发式思想=最优解/近似最优解

%% 遗传算法Matlab代码(此时示例的目标函数为f(x)=x.^2,求最小值)
%% 采用二进制编码方式;选择算子采用轮盘赌方式;交叉算子采用两点交叉法;变异算子采用基本位变异算子(即对于二进制编码符号串所表示的个体,若需要进行变异操作的某一基因座上的原有基因值为0,则将其变为1%% 参考up https://www.bilibili.com/video/BV14a411C7s8?spm_id_from=333.880.my_history.page.click&vd_source=77722e5d7039d559546697b243150ac0%% 主程序
function GA()clc
clear
popsize = 30;       % 种群大小
chromlength = 20;   % 串的长度(个体长度)
pc = 0.6;           % 交叉概率
pm = 0.2;           % 变异概率
xlim = [0,50];    % 求解范围
Maxiter = 200;            % 迭代次数
% x = zeros(1,Maxiter);     % 记录每代个体最优位置
% y = zeros(1,Maxiter);     % 记录每代最优个体对应的函数值pop = round(rand(popsize,chromlength)); % 随机产生初始种群  直接生成的二进制串
% rand(popsize,chromlength)生成一个由介于 01 之间,即取值(0,1)的均匀分布的随机数组成的 popsize×chromlength 矩阵
% round(X) 将X的每个元素四舍五入为最近的整数。在对等情况下,即有元素的小数部分恰为 0.5 时,round 函数会偏离零四舍五入到具有更大幅值的整数。
% 这样随机生成的初试种群的值 非01
decpop = bintodec(pop,popsize,chromlength,xlim); % 计算初始解对应的十进制
fx = calobjvalue(decpop);  % 计算初始解的函数值,形状为1×popsize的矩阵
plotfig(decpop,fx,xlim,1); % 画出初始函数图
[y(1),I] = min(fx);        %[M,I] = mix(A) 返回 A 中最小值,以及最小值对应的索引。
x(1) = decpop(I);          % 获取最小值对应的变量xfor i = 2:Maxiterdecpop = bintodec(pop,popsize,chromlength,xlim); % 计算上一代解对应的十进制fx = calobjvalue(decpop); % 计算上一代解的函数值fitvalue = calfitvalue(fx); % 适应度映射newpop = copyx(pop,fitvalue,popsize); % 复制newpop = crossover(newpop,pc,popsize,chromlength); %交叉newpop = mutation(newpop,pm,popsize,chromlength); % 变异% 这时的newpop是经过复制交叉变异产生的新一代群体% 下面进行选择择优保留(即优胜劣汰)newdecpop = bintodec(newpop,popsize,chromlength,xlim);new_fx = calobjvalue(newdecpop); % 计算新解目标函数new_fitvalue = calfitvalue(new_fx); % 计算新群体中所有个体的适应度index = find(new_fitvalue < fitvalue);  % find(X) 返回一个包含数组X中每个非零元素的线性索引的向量。即若新解的值小于更新前解的值,获取新解的索引(本示例是求最小值)pop(index,:) = newpop(index,:) % 更新得到最新解decpop = bintodec(pop,popsize,chromlength,xlim); % 计算新解的十进制fx = calobjvalue(decpop); % 计算结果plotfig(decpop,fx,xlim,i); % 绘制新解的图% 找出更新后的个体最优函数值[bestindividual,bestindex] = min(fx);y(i) = bestindividual; % 记录每一代的最优函数值x(i) = decpop(bestindex); % 十进制解subplot(1,2,2);plot(1:i,y);title('适应度进化曲线');i = i+1;
end
[ymin,min_index] = min(y);
disp(['最优解对应的位置为:', num2str(x(min_index))])
disp(['最优解为:', num2str(ymin)])
end%% 计算适应度
function fitvalue = calfitvalue(fx)
% 这里求最小值,并且函数值又都大于等于0,所以直接使用函数值本身作为适应度值
% 不同的问题构造适应度函数的方法不同
fitvalue = fx;
end%% 复制操作 按适应度大小映射为概率,进行轮盘赌复制
% 轮盘赌基本思想:适应度越高的解,按道理越应该高概率的进行复制,且复制的份数应该越多
function newx = copyx(pop,fitvalue,popsize) % 传进来二进制串和对应适应度值
% 利用轮盘赌策略对个体进行复制
newx = pop; % 只是起到申请size为pop大小空间的作用,newx之后要更新的
i = 1; j = 1;
p = fitvalue / sum(fitvalue);  % 对于每个个体,计算对应适应度.即被选择的概率
Cs = cumsum(p);            
% cumsum(A) 从 A 中的第一个其大小不等于 1 的数组维度开始返回 A 的累积和
% 如p为 0.2 0.1 0.4 0.3 则对应 Cs 为0.2 0.3 0.7 1.0
R = sort(rand(popsize,1)); % 每个个体的复制概率,升序排序
while j <= popsizeif R(j) < Cs(i)newx(j,:) = pop(i,:);j = j+1;elsei = i+1;end
end
end%% 交叉操作 1234,以一定概率决定是否交叉。若交叉,则两者选择随机一个段进行交叉
function newx = crossover(pop,pc,popsize,chromlength)
% 12 34 56交叉方式,随机选择交叉位点
% 注意个体数为奇数偶数的区别
i = 2;
newx = pop; % 申请空间
while i+2 <= popsize% 将第i与i-1进行随机位点交叉if rand < pcx1 = pop(i-1,:);  % 第i-1个个体x2 = pop(i,:);    % 第i个个体r = randperm(chromlength,2); % 返回范围内两个整数   p = randperm(n,k)返回行向量,其中包含在 1 到n之间随机选择的k个唯一整数。r1 = min(r); r2 = max(r); % 交叉复制的位点newx(i-1,:) = [x1(1:r1-1),x2(r1:r2),x1(r2+1:end)];newx(i,:) = [x2(1:r1-1),x1(r1:r2),x2(r2+1:end)];endi = i + 2; % 更新i   2,4,6,8...
end
end%% 变异 按照一定概率决定该个体是否变异,若变异,随机选择一个位点进行变异:按位取反
function newx = mutation(pop,pm,popsize,chromlength)
i = 1;
while i <= popsizeif rand < pmr = randperm(chromlength,1);pop(i,r) = ~ pop(i,r);  % 按位取反endi = i+1;
endnewx = pop; % 将变异后的结果返回
end%% 二进制转十进制函数
function dec = bintodec(pop,popsize,chromlength,xlim)
dec = zeros(1,chromlength);
index = chromlength-1:-1:0;  % chromlength=10 chromlength-1:-1:09 8 7 6 ... 0
for i = 1:popsizedec(i) = sum(pop(i,:).*(2.^index)); % 将二进制数转成十进制
end
dec = xlim(1) + dec*(xlim(2) - xlim(1)) / (2 ^ chromlength -1); % 获得二进制串对应的实值解
end%% 绘制图像
function plotfig(decpop,fx,xlim,k)
f = @(x) (x.^2);
x = xlim(1):0.05:xlim(2);
y = f(x);
subplot(1,2,1);
plot(x,y,decpop,fx,'o');
title(['第',num2str(k),'次迭代进化'])
pause(0.1); % pause(n) 暂停执行 n 秒,然后继续执行。必须启用暂停,此调用才能生效。
end%% 目标函数
function fx = calobjvalue(decpop) % 参数为十进制
f = @(x) (x.^2);
fx = f(decpop);
end

上面程序结果
在这里插入图片描述
遗传算法解决TSP问题代码实例


http://chatgpt.dhexx.cn/article/Cif9vXnA.shtml

相关文章

神经网络中的遗传算法

简 介&#xff1a; 人工神经网络是一种模仿动物神经网络行为特征&#xff0c;进行分布式并行信息处理的算法数学模型。遗传算法是一种引入自然选择和进化思想的优化算法&#xff0c;具有优良的全局寻优性能。在神经网络中借助遗传算法进行网络优化&#xff0c;可以充分利用两者…

遗传算法(Genetic Algorithm)

1、遗传算法的基本思想 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型&#xff0c;是一种通过模拟自然进化过程搜索最优解的方法。 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;起…

遗传算法基本原理

遗传算法基本原理 1.遗传算法 GA是基于“物竞天择、适者生存”原理的一种高度并行、随机和自适应优化算法&#xff0c;它将问题的求解表示成“染色体"(chromosome)适者生存的进化过程,通过种群(population)的一代代不断进化&#xff0c;通过选择(selection)、交叉(cross…

多目标遗传算法NSGA-II原理详解及算法实现

在接触学习多目标优化的问题上&#xff0c;经常会被提及到多目标遗传算法NSGA-II&#xff0c;网上也看到了很多人对该算法的总结&#xff0c;但真正讲解明白的以及配套用算法实现的文章很少&#xff0c;这里也对该算法进行一次详解与总结。会有侧重点的阐述&#xff0c;不会针对…

一文搞懂什么是遗传算法Genetic Algorithm【附应用举例】

代码链接放文末。 本文参考了很多张军老师《计算智能》的第四章内容。 本文来源&#xff1a;https://blog.csdn.net/qq_44186838/article/details/109181453 遗传算法 1.1 遗传算法简介 1.1.1 基本原理 重温高中生物哈哈&#xff01; 遗传算法&#xff08;Genetic Algor…

遗传算法的基本原理和matlab实现

2016年9月7日星期三 T.s.road 总结笔记 遗传算法解决全局优化&#xff08;即为最值点如图中C&#xff0c;D&#xff09;&#xff0c;而局部最优解决的是极值点问题&#xff08;如图中A&#xff0c;B&#xff09; 1. 遗传算法流程&#xff1b; %遗传算法的伪代码描述&…

遗传算法(三)——基本遗传算法

目录 2.基本遗传算法 2.1基本遗传算法描述 2.1.1基本遗传算法的构成要素 2.1.2基本遗传算法描述 2.1.3基本遗传算法的形式化定义 2.2基本遗传算法的实现 2.2.1个体适应度评价 2.2.2比例选择算子 2.2.3单点交叉算子 2.2.4基本位变异算子 2.3基本遗传算法应用举例 2.3…

遗传算法原理以及matlab代码

目录 1&#xff0c;算法原理以及形象解释 2&#xff0c;参数编码 3&#xff0c;算法框架 4&#xff0c;代码 MATLAB 1&#xff0c;算法原理以及形象解释 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是仿生物智能优化算法&#xff0c;是模拟达尔文生物进化论中…

遗传算法的基本原理

1、简介 遗传算法是一种基于自然选择和群体遗传机理的搜索算法,它模拟了自然选择和自然遗传过程中的繁殖、杂交和突变现象.再利用遗传算法求解问题时,问题的每一个可能解都被编码成一个“染色体”,即个体,若干个个体构成了群体(所有可能解).在遗传算法开始时,总是随机的产生一些…

遗传算法原理介绍

前言 遗传算法( genetic algorithm,GA)是模拟自然界生物进化机制的一种算法,即遵循适者生存、优胜劣汰的法则&#xff0c;也就是寻优过程中有用的保留无用的则去除。在科学和生产实践中表现为在所有可能的解决方法中找出最符合该问题所要求的条件的解决方法,即找出一个最优解。…

遗传算法原理及其matlab程序实现

遗传算法原理及其matlab实现 一、遗传算法背景二、遗传算法原理及其数学模型2.1 编码方式2.1.1 二进制编码2.1.2 浮点数编码 2.2 种群初始化2.3 计算初始种群的适应度函数值2.4 对初始种群个体进行筛选—天泽&#xff08;以轮盘赌方式进行选择&#xff09;2.5 个体染色体交叉及…

遗传算法原理及其python实现

遗传算法原理 基本思想&#xff1a; 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一种进化算法&#xff0c;其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则&#xff0c;它最初由美国Michigan大学的J. Holland教授于1967年提出。遗传算法…

智能算法——遗传算法原理、应用汇总

一、遗传算法原理 遗传算法&#xff08;GA&#xff09;是一种基于生物界规律和自然遗传机制的并行搜索算法。1975 年&#xff0c;J. Holland 教授首次在书中提出“自然组合人工智能系统的适应性”。它是一种多参数&#xff0c;多组合同时优化方法&#xff0c;模拟自然进化过程中…

遗传算法原理

一、遗传算法简介 遗传算法是进化算法的一个分支. 它将达尔文的进化理论搬进了计算机. 科学定义如下&#xff1a; **遗传算法&#xff08;Genetic Algorithm, GA&#xff09;**起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优…

遗传算法

目录 一、算法原理 二、代码实现 三、结果分析 优化目标函数为Rastrigin(x) 目标函数为Schaffer(x) 目标函数为Griewank(x) 总结 一、算法原理 1、基本原理 遗传算法是一种典型的启发式算法&#xff0c;属于非数值算法范畴。其目的是抽象和严谨地解释自然界的适应过程以…

遗传算法(GA)详解

遗传算法&#xff08;GA&#xff09;详解 遗传算法主要作用是求解最优解&#xff0c;例如求函数极值&#xff0c;或是飞机巡航问题中的最短巡航路线的求解等&#xff0c;其作用与模拟退火算法的作用较为相似。本文将从GA算法的原理&#xff0c;结构与两个实践应用进行比较详细…

html中热区如何设置,Dreamweaver中如何设置热区?DW设置热区方法图解

Dreamweaver中如何设置热区?下面小编就为大家详细介绍一下&#xff0c;一起来看看吧&#xff01; 方法/步骤 向平时一样&#xff0c;这里我们在设置Dreamweaver热区的时候。同样这里是需要建立一个新的HTML界面的。 建立完毕&#xff0c;如下图中所示的一个新的文档(HTML) 按照…

用html编写或在dw中完成,Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码

Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码,代码,教程,标签,光标,文本 Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码 易采站长站&#xff0c;站长之家为您整理了Dreamweaver教程-在 Dreamweaver 中编写 HTML 代码的相关内容。 1.启动 Dreamweaver CS5 2.点击左上角…

dw写HTML怎么设置背景颜色,dreamweaver cs6设置div背景颜色的具体操作教程

最近有不少刚刚接触dreamweaver cs6的伙伴们&#xff0c;并不是很熟悉其中是怎么设置div背景颜色?本期为你们分享的文章就讲述dreamweaver cs6设置div背景颜色的具体流程介绍。 dreamweaver cs6设置div背景颜色的具体操作教程 首先需要打开dreamweaver cs6软件&#xff0c;添加…

dw html转为css,DIV+CSS辅助软件Dreamweaver介绍

DIVCSS开发软件之Adobe Dreamweaver介绍 接下来我们(www.divcss5.com)给大家介绍是大家最熟悉不过的软件Adobe Dreamweaver&#xff0c;他被称为网页三剑客之一主要成员。 Dreamweaver我们常称他为DW,是开发DIVCSS比较好的工具。 Dreamweaver特点 1、开发css具体完善快捷简便提…