📄 realgamax.m
字号:
%利用遗传算法求解一元函数极小值,用于实值编码
%参数说明:
%obj--要求解的函数
% 调用格式: obj(x)
%m--群体规模
%select--选择函数
% 调用格式: select(fitness,n), fitness为一列向量, 表示适应度值, n为选择个数
% 返回值: n×1的整数向量, 表示被选择个体的编号
%cross--交叉函数
% 调用格式: cross(chrom,pc), chrom为一列矩阵, 表示群体, pc为交叉概率
% 返回值: 一列矩阵, 表示交叉后的新的群体
%mutation--变异函数
% 调用格式: mutation(chrom,pc), chrom为一列矩阵, 表示群体, pm为变异概率
% 返回值: 一列矩阵, 表示变异后的新的群体
%pc--交叉概率
%pm--变异概率
%a, b--搜索空间[a,b]
%gn--迭代次数
%graph--是否要作图
function mx=realGaMax(Obj,m,select,cross,mutation,pc,pm,a,b,gn,graph)
x=a+(b-a)*rand(m,1); %生成初始群体
for t=1:gn
y=feval(Obj,x);%计算适应度,适应度越大越好
[my,i]=max(y);%取出最大值
mx=x(i);% 最优解
index=feval(select,y,m);%选择
x=x(index,:);
x=feval(cross,x,pc); %交叉
x=feval(mutation,x,pm);%变异
end
if graph
z=a:0.1:b;
plot(z,feval(Obj,z))
hold on
plot(x,feval(Obj,x),'.')
hold off
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -