minimiza_f()

%简单一元函数优化:计算函数最小值
% f(x)=sin(10pix)/x,x∈[1,2]

clc
clear all
close all %close what?
%%画出函数图
figure(1); % 画图指令
hold on;
lb = 1; ub = 2; %函数自变量范围
ezplot(‘sin(10pix)/x’,[lb, ub]); %画出函数曲线
xlabel(‘自变量/X’)
ylabel(‘函数值/Y’)
%%定义遗传算法参数
NIND = 40; %种群大小
MAXGEN = 20; %最大迭代次数
PRECI = 20; %染色体长度
GGAP = 0.95; %代沟,选择95%的个体
px = 0.7; %交叉概率
pm = 0.01; %变异概率
trace = zeros(2, MAXGEN); %寻优结果的初始值(一行自变量,一行值)
FieldD = [PRECI;lb;ub;1;0;1;1]; %区域描述器TODO
%FieldD = [len;lb;ub;code;scale;lbin;ubin] 一般用于二进制串到实值的转换;
%len代表包含在chrom中每个字符串的长度;lb和ub是行向量,指明每个变量的下界和上界,code表明如何编码(code=1二进制,code=0是格雷),scale指明刻度(scale=0算数,scale=1对数)lbin和ubin表示是否包含边界,0表示去掉,1代表包含
Chrom = crtbp(NIND, PRECI); %创建基于二进制的种群,一行代表一个个体

%%优化
gen = 0;
X = bs2rv(Chrom,FieldD); %子代个体的十进制表达,第二个参数是什么意思?
ObjV = sin(10piX)/X; %求目标函数的值,保存在ObjV向量里面

while gen<MAXGEN
FitnV = ranking(ObjV); %为种群排序
SelCh = select(‘sus’, Chrom, FitnV, GGAP); %TODO被选择之后的种群
SelCh = recombin(‘xovsp’,SelCh,px); %xovsp是什么?经过交叉之后的种群
SelCh = mut(SelCh, pm) %变异
X = bs2rv(SelCh, FieldD); %
ObjVSel = sin(10piX)/X; %
[Chrom, ObjV] = reins(Chrom, SelCh,1,1,ObjVSel); %重插入子代到父代,得到新种群
X = bs2rv(SelCh, FieldD); %
gen = gen + 1; %

%获取每代的最优解及其序号,Y为最优解,I为个体的序号
[Y, I] = min(ObjV);
trace(1, gen) = X(I); %把个体的序号存入第一行
trace(2, gen) = Y; %第二行放第一行对应的适应值
end
plot(trace(1,:),trace(2,:),‘bo’); %第三个参数是什么?某种线型
grid on %打开网格
plot(X, ObjV,‘b*’); %和上一个有没有区别
hold off %与hold on相对,hold表示在当前图(坐标系,可能是figure)中画了一张图,再画其他的时候保持原图还在.

%%画进化图
figure(2);
plot(1:MAXGEN,trace(2,:)); %
grid on
xlabel(‘遗传代数’)
ylabel(‘解的变化’)
title(‘进化过程’)
bestY = trace(2,end);
bestX = trace(1,end);
fprintf([‘最优解:\nX = ‘,num2str(bestX),’\nY=’,num2str(bestY),’\n’])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值