遗传算法的matlab实现

介绍

优良的个体繁衍下一代(选择适应度函数比较高的那个体概率比较大,不是百分之百)

基本步骤

编码:需要优化的问题,用数学语言描述出来(解空间里面的x1、x2),映射到遗传算法空间里面的基因串结构数据
随机产生初始串结构数据
个体:每个串结构数据

选择:优良的特性到下一代的概率会比较高
交叉:新的个体较大概率保留了父辈个体的特征,但是又有一些变化
变异:每个个体都有机会在局部的变量上面产生新的变化,保证解空间的多样性

fitness.m

function [sol, fitnessVal] = fitness(sol, options)

x = sol(1);

fitnessVal = x + 10*sin(5*x)+7*cos(4*x);%最大值

%如果是求最小值fitnessVal = -1 * (x + 10*sin(5*x)+7*cos(4*x);
end

main.m

%% I. 清空环境变量
clear all %右侧
clc %下方

%% II. 绘制函数曲线
%可以先运行这一片段,看下最大值在什么位置
x = 0:0.01:9;
y =  x + 10*sin(5*x)+7*cos(4*x); 

figure
plot(x, y)
xlabel('自变量')
ylabel('因变量')
title('y = x + 10*sin(5*x) + 7*cos(4*x)')


%% III. 初始化种群
%如果是求最小值,就把目标函数变成1/y
initPop = initializega(50,[0 9],'fitness');%种群规模大小是50个;适应度函数值,目标函数就是适应度函数

%单独调试会形成initPop函数(50*2),第二列是第一列对应的适应度函数

%% IV. 遗传算法优化
[x, endPop, bpop, trace] = ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,...
                           'normGeomSelect',0.08,'arithXover',2,'nonUnifMutation',[2 25 3]);


%% V. 输出最优解并绘制最优点
x
plot (endPop(:,1),endPop(:,2),'ro')
hold on

%% VI. 绘制迭代进化曲线
figure(2)
plot(trace(:,1),trace(:,3),'b:')
hold on
plot(trace(:,1),trace(:,2),'r-')
xlabel('Generation'); ylabel('Fittness');
legend('Mean Fitness', 'Best Fitness')


猜你喜欢

转载自blog.csdn.net/qq_43641765/article/details/111419275