有段时间,一直用为知笔记记笔记,可是后来使用了csdn博客后,就不太喜欢用为知笔记了,可惜了我的会员。笔记里的一些东西,例如公式什么的,都不能直接复制过来,很是遗憾。
准备弃用为知笔记了,把这个遗传算法的程序粘过来吧,即使对我可能没什么用了,但也可能有需要用的人。
程序很详细,当时上课的时候就是用这个程序编的一篇小报告。程序很详细。
function main()
%% -------------主函数-----------------------------------
% 用遗传算法求:
% max: f(x1,x2) = 21.5+x1*sin(4*pi*x1)+x2*sin(20*pi*x2)
% s.t: -3.0 <= x1 <= 12.1
% 4.1 <= x2 <= 5.8
%---------------------------------------------------------------
clear
clc
close all
popsize = 100; %种群大小
x1_length = 18; %x1长度为18
x2_length = 15; %x2长度为15
chromlength = 33; %二进制编码长度
pc = 0.25; %交叉概率
pm = 0.01; %变异概率
pop = initpop(popsize,chromlength); %初始种群
for i = 1:1000 % 迭代1000次
[objvalue] = cal_objvalue(pop);%计算计算函数值
fitvalue = objvalue; %令适应度等于函数值
[newpop] = selection(pop,fitvalue); %选择操作
[newpop] = crossover(newpop,pc); %交叉操作
[newpop] = mutation(newpop,pm); %变异操作
pop = newpop; %更新种群
% 将种群的每个个体表示出来
[A B] = binary2decimal(newpop);
[y] = cal_objvalue(newpop);
figure(1);
set(1, 'unit', 'normalized', 'position', [0.1,0.1,0.7,0.7]);
i