%???????????????????????????????????????????????????????????????????%
%
%
%?? 将 x 的值用一个10位的二值形式表示为二值问题?????????????????????%
%----------------------------------------------
% 编程
%----------------------------------------------
%n维Griewangk函数寻找极小值
%可任意设置待优化变量数目和它们各自的变化范围
%遗传算法主程序
clear
clf
global bounds
global Numv %优化参数个数, 每个变量具有相同长度的二进制编码
global badvalue
Numv=4; %本例中为四维griewangk函数,优化参数4个
popsize=30; %设置初始参数,群体大小
chromlength=Numv*10; %字符串长度(个体长度),染色体长度
eranum=100; %设置种群代数,一般取20-100
pc=0.6; %设置交叉概率,本例中交叉概率是定值,若想设置变化的交叉概率可用表达式表示,或从写一个
%交叉概率函数,例如用神经网络训练得到的值作为交叉概率
pm=0.1; %设置变异概率,同理也可设置为变化的
badvalue=300; %估计最差值
bestvalue=badvalue;
bounds=ones(Numv,1)*[-512 512]; %自变量上下限
pop=initpop(popsize,chromlength); %运行初始化函数,随机产生初始群体
pmutation=pm;
for i=1:eranum
[objvalue,averageobj]=calobjvalue(pop); %计算目标函数
average(i)=averageobj %记录每代平均目标值
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
[newpop]=selection(pop,fitvalue); %复制
[newpop]=crossover_multiv(newpop,pc); %交叉
[newpop]=mutation_multiv(newpop,pmutation); %变异
pmutation=pm+(i^4)*(0.6-pm)/(eranum^4); %随着种群不断进化,逐步增大变异率
[bestindividual,bestobj]=best(pop,fitvalue); %求出群体中适应值最大的个体及其适应值
y(i)=bestobj;
if y(i)<bestvalue %保留迄今为止最优的个体及其适应值
bestvalue=y(i);
bestind=decode_multiv(bestindividual);
bestind=bestind';
end
x(i,:)=decode_multiv(bestindividual);
pop=newpop;
end
bestvalue
bestind
plot(y,'k-');
xlabel('Generation');
ylabel('Fittness');
hold on
plot(average,'r-');
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
duoweibianliang.rar (12个子文件)
mainprog.asv 2KB
decode_multiv.m 413B
mainprog.m 2KB
calfitvalue.m 274B
griewangk.m 206B
selection.m 1KB
initpop.m 436B
calobjvalue.asv 368B
best.m 355B
calobjvalue.m 456B
mutation_multiv.m 1002B
crossover_multiv.m 1KB
共 12 条
- 1
寒泊
- 粉丝: 74
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2