遗传算法求最大值问题c语言,用遗传算法求函数最大值三:主程序和结果

主程序

主程序如下:

clear

clc

popsize = 30; % 种群规模

chromlength = 10; % 染色体长度

pc = 0.5; % 交叉概率

pm = 0.05; % 变异概率

maxgen = 20; % 最大迭代数

lx = 5; ux = 10;

bestfit = zeros(1, maxgen);

bestobjvalue = zeros(2, maxgen);

% 优化

pop = initpop(popsize, chromlength);

objvalue = calobjvalue(pop, lx, ux);

fitvalue = calfitvalue(objvalue,'max');

for i = 1:maxgen

pop = selection(pop, fitvalue); % 选择

pop = crossover(pop, pc); % 交叉

pop = mutation(pop, pm); % 变异

objvalue = calobjvalue(pop, lx, ux);

fitvalue = calfitvalue(objvalue, 'max');

bestindex = bestindividual(pop, fitvalue, 'max');

x = calx(pop, lx, ux);

bestfit(1, i) = fitvalue(bestindex);

bestobjvalue(1, i) = x(bestindex);

bestobjvalue(2, i) = objvalue(bestindex);

% fprintf('bestX: %f, bestY: %f\n', bestobjvalue(1, i), bestobjvalue(2, i));

end

figure(1);

fplot(@(x) 9 .* sin(5 .* x) + 8 .* cos(4 .* x), [lx, ux]);

hold on;

plot(bestobjvalue(1,:), bestobjvalue(2,:),'bo');

xlabel('x');

ylabel('y=9sin(5x)+8cos(4x)');

title('函数图');

grid on;

hold off;

figure(2);

plot(1:maxgen, bestfit(1,:));

xlabel('进化代数');

ylabel('最优适应度值');

title('最优适应度值图');

grid on;

bestX = bestobjvalue(1, end);

bestY = bestobjvalue(2, end);

fprintf('bestX: %f, bestY: %f\n', bestX, bestY);

执行结果

执行结果:bestX: 7.859238, bestY: 16.995125

5c0384d0c87b

函数图

5c0384d0c87b

适应值图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值