实验一:基于遗传算法的函数优化
1、实验目的
1) 掌握Matlab子函数的编写与调用。
2) 理解基本遗传算法的原理,并利用程序实现利用遗传算法优化非线性函数的解。
2、实验内容与实验要求
1) 掌握基本遗传算法方法原理。
2) 掌握matlab子函数的编写方法及调用方法。
3) 根据基本遗传算法方法原理,编写Matlab程序,优化非线性函数的解。
4) 设 f(x) = -x^2 - 4x + 1,求 max f(x), x[-2, 2],解的精度保留二位小数
3、遗传算法原理
遗传算法模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异)对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。
4、主程序及子函数:
主函数:
clear
clc
my_scale=80; %种群规模
gen_len=22; %基因长度
M=100; %迭代次数
pc=; %交叉概率
pm=; %变异概率
new_scale=produscale(my_scale,gen_len); %产生初始种群
fitfit=[];
fittimer=[];
best_f1=[];
best_x1=[];
for i=1:M
my_f=cal_my_f(new_scale); %计算函数值
my_fit=cal_my_fit(my_f); %计算适应度值
next_scale=my_sellect(new_scale,my_fit); %采用赌轮盘法选择
cross_scale=my_cross(next_scale,pc); %按概率交叉
mut_scale=my_mutat(cross_scale,pm); %按概率变异
%寻找每一代中的最优适应度值所对应的个体
best_fit=my_fit(1);
[sx,sy]=size(new_scale);
for j=2:length(my_fit)
if best_fit<my_fit(j)
best_fit=my_fit(j);
best_f=my_f(j);
best_x=my2to10(new_scale(j,:));
best_x=-2+best_x.*4./(2^sy-1);
end
end
new_scale=mut_scale;
fitfit=[fitfit,best_fit];
best_f1=[best_f1,best_f];
best_x1=[best_x1,best_x];
fittimer=[fittimer,i];
end
[best_fit,loca]=max(fitfit);
best_f=best_f1(loca);
best_x=best_x1(loca);
disp('[best_fit,best_f,best_x]=')
disp([best_fit,best_f,best_x])
subplot(2,2,1)
plot(fittimer,fitfit)
xla
遗传算法搜索最优解 来自淘豆网m.daumloan.com转载请标明出处.