遗传算法之Matlab实现1:从下载工具箱到实现,极详细,保证一看就会!!!

本文详细介绍了如何在MATLAB中使用遗传算法工具箱解决一元和二元函数最优化问题。首先,通过官网下载GA工具箱并批量修改文件后缀为.m。接着,将工具箱添加到MATLAB路径中,并验证添加成功。随后,展示了求解一元函数f(x)=x*cos(5*pi*x)+3.5在[-1,2.5]区间最大值的完整代码及结果。最后,给出了求解二元函数最大值的代码和结果。" 122995113,7549583,数字化经营支付3.0的盈利策略与机会,"['小程序', '支付技术', '会员管理', '营销策略', '数字化转型']
摘要由CSDN通过智能技术生成

本文找了两个遗传算法的例子,分别是求一元函数和二元函数的最大值,用MATLAB进行了实现,以下是具体过程:

1)下载遗传算法需要的工具箱,Genegic Algorithm Toolbox(GA工具箱)。下载方法:在百度中输入关键字“Genegic Algorithm 官网”,然后点击第二个(Genegic Algorithm Toolbox)网页进入后,点击Download即下载完毕,下载后的文件后面有。

(2)批量修改GA工具箱的文件后缀名。由于下载的GA工具箱文件后缀都为.M,会导致后面用不了里面的函数,所以需要修改文件后缀为.m。修改方法:

把一个文件格式转化为另外一种格式普遍方法为:在文件列表中新建一个txt文档,在里面输入ren *.(原文件后缀)  *.(将要改的后缀),然后把txt改为bat即可。在这里要将M文件改为m文件,需要先以jpg为铺垫,先把M改为jpg,再将jpg修改为m。具体方法如下:先新建一个txt文档。在里面输入ren *.M *.jpg,然后点击保存后修改该txt后缀为bat,点确定可以看到M文件全变为jpg文件。再新建一个txt文件,输入ren *.jpg *.m,然后点击保存后修改该txt后缀为bat,点确定可以看到jpg文件全变为m文件。

(3)添加工具箱到matlab中。先把工具箱文件夹gatbx复制到matlab安装路径下的toolbox文件夹中(也可以省略此步找到路径直接添加也可),然后在MATLAB中点击File-Set path-Add with Subfolders,找到gatbx文件夹的路径-save即可。

(4)检验工具箱添加是否成功。在MATLAB命令行输入help reins(可随意输入GA工具箱中任意的一个函数检验),出现该函数的用法说明等则表示添加成功,若没有添加成功会提示not found。,

(5)遗传算法一元函数MATLAB实现。

实例:用遗传算法求函数f(x)=x*cos(5*pi*x)+3.5在区间[-1,2.5]上的最大值。(注:pi表示π)

先在工作区建立上面函数的一个m文件输入以下代码并保存,保存M文件时默认为函数名命名,所以不需要修改文件名,同时注意M文件的保存路径要与当前的工作空间保持一致,不然在运行命令文件时会找不到该函数,导致出错。

function y=fun_sigv(x)
    y=x.*cos(5*pi*x)+3.5;

然后在命令行输入以下代码运行即可:

opt_minmax=1;   %目标优化类型:1最大化、0最小化
num_ppu=50;     %种群规模即个体个数  初始种群的大小一般是20-100,这里选择的是50个
num_gen=60;     %最大遗传代数
len_ch=20;          %基因长
简单的遗传算法,计算函数最值. function ga_main() % 遗传算法程序 % n-- 种群规模% ger-- 迭代次数% pc--- 交叉概率% pm-- 变异概率 % v-- 初始种群(规模为n)% f-- 目标函数值% fit-- 适应度向量 % vx-- 最优适应度值向量% vmfit-- 平均适应度值向量 clear all; close all; clc;%清屏 tic;%计时器开始计时 n=20;ger=100;pc=0.65;pm=0.05;%初始化参数 %以上为经验值,可以更改。 % 生成初始种群 v=init_population(n,22); %得到初始种群,22串长,生成20*22的0-1矩阵 [N,L]=size(v); %得到初始规模行,列 disp(sprintf('Number of generations:%d',ger)); disp(sprintf('Population size:%d',N)); disp(sprintf('Crossover probability:%.3f',pc)); disp(sprintf('Mutation probability:%.3f',pm)); %sprintf可以控制输出格式 % 待优化问题 xmin=0;xmax=9; %变量X范围 f='x+10*sin(x.*5)+7*cos(x.*4)'; % 计算适应度,并画出初始种群图形 x=decode(v(:,1:22),xmin,xmax);"位二进制换成十进制,%冒号表示对所有行进行操作。 fit=eval(f);%eval转化成数值型的 %计算适应度 figure(1);%打开第一个窗口 fplot(f,[xmin,xmax]);%隐函数画图 grid on;hold on; plot(x,fit,'k*');%作图,画初始种群的适应度图像 title('(a)染色体的初始位置');%标题 xlabel('x');ylabel('f(x)');%标记轴 % 迭代前的初始化 vmfit=[];%平均适应度 vx=[]; %最优适应度 it=1; % 迭代计数器 % 开始进化 while it<=ger %迭代次数 0代 %Reproduction(Bi-classist Selection) vtemp=roulette(v,fit);%复制算子 %Crossover v=crossover(vtemp,pc);%交叉算子 %Mutation变异算子 M=rand(N,L)<=pm;%这里的作用找到比0.05小的分量 %M(1,:)=zeros(1,L); v=v-2.*(v.*M)+M;%两个0-1矩阵相乘后M是1的地方V就不变,再乘以2. NICE!!确实好!!!把M中为1的位置上的地方的值变反 %这里是点乘 %变异 %Results x=decode(v(:,1:22),xmin,xmax);%解码,求目标函数值 fit=eval(f); %计算数值 [sol,indb]=max(fit);% 每次迭代中最优目标函数值,包括位置 v(1,:)=v(indb,:); %用最大值代替 fit_mean=mean(fit); % 每次迭代中目标函数值的平均值。mean求均值 vx=[vx sol]; %最优适应度值 vmfit=[vmfit fit_mean];%适应度均值 it=it+1; %迭代次数计数器增加 end
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值