|
|
[求助]
GA算法怎么求最小值啊,算法哪里出错了,求大神指教。。。。。 已有1人参与
有没有大神帮我看一下GA算法怎么求函数最小值啊
这是代码
function ga()
clear
clc
popsize = 50;
chromlength = 10;
pc = 0.5;
p0=0.1;
pend=0.0025;
t=160;
n=1600;
pm = (p0-pend).*exp(-n/t)+pend;
pop = initpop(popsize,chromlength);
for i=1:100
[objvalue] = cal_objvalue(pop);
fitvalue = objvalue;
[newpop] = selection(pop,fitvalue);
[newpop] = crossover(newpop,pc);
[newpop] = mutation(newpop,pm);
pop = newpop;
[bestindividual,bestfit]=best(pop,fitvalue);
x2 = binary2decimal(bestindividual);
x1 = binary2decimal(newpop);
[y1] = cal_objvalue(newpop);
if mod(i,10)==0
figure;
fplot('(x-3).^2',[0 5]);
hold on;
title(['迭代次数为 n=' num2str(i)]);
plot(x1,y1,'*');
end
end
fprintf('the best X is --->>%5.2f\n',x2);
fprintf('the best Y is --->>%5.2f\n',bestfit);
function pop = initpop(popsize,chromlength)
pop = round(rand(popsize,chromlength));
function pop2 = binary2decimal(pop)
[px,py]=size(pop);
for i=1:py
pop1(:,i) = 2.^(py-i).*pop(:,i);
end
%sum(.,2)对行求和,得到列的向量
temp = sum(pop1,2);
pop2 = temp*5/1023;
function [objvalue]=cal_objvalue(pop)
x = binary2decimal(pop);
objvalue =(x-3).^2;
function [newpop] = selection(pop,fitvalue)
%构造轮盘
[px,py]=size(pop);
totalfit = sum(fitvalue);
p_fitvalue = fitvalue/totalfit;
p_fitvalue = cumsum(p_fitvalue);%概率求和排序
%-------
ms = sort(rand(px,1));
fitin = 1;
newin = 1;
while newin<=px
if (ms(newin))<p_fitvalue(fitin)
newpop(newin, =pop(fitin, ;
newin=newin+1;
else fitin=fitin+1;
end
end;
function [newpop]=crossover(pop,pc)
[px,py]=size(pop);
newpop = ones(size(pop));
for i=1:2:px-1
if(rand<pc)
cpoint = round(rand*py);
newpop(i, = [pop(i,1:cpoint),pop(i+1,cpoint+1:py)];
newpop(i+1, = [pop(i+1,1:cpoint),pop(i,cpoint+1:py)];
else
newpop(i, =pop(i, ;
newpop(i+1, =pop(i+1, ;
end
end
function [newpop] = mutation(pop,pm)
[px,py] = size(pop);
newpop = ones(size(pop));
for i=1:px
if(rand<pm)
mpoint = round(rand*py);
if mpoint<=0
mpoint=1;
end
newpop(i, = pop(i, ;
if newpop(i,mpoint)==0
newpop(i,mpoint)=1;
else newpop(i,mpoint)=0;
end
else
newpop(i, =pop(i, ;
end
end
function [bestindividual,bestfit]=best(pop,fitvalue)
[px,py]=size(pop);
bestindividual = pop(1, ;
bestfit = fitvalue(1);
for i=2:px
if fitvalue(i)<bestfit
bestindividual = pop(i, ;
bestfit = fitvalue(i);
end
end
这个求出来是(x-3).^2的最大值,我想求他的最小值,我也试了把函数变成-(x-3).^2,结果求出来是他的最小值也就是说还是原函数的最大值,但是我需要的 是原函数放入最小值。。。。。求大神指点啊 
![GA算法怎么求最小值啊,算法哪里出错了,求大神指教。。。。。]()
1.jpg
![GA算法怎么求最小值啊,算法哪里出错了,求大神指教。。。。。-1]()
2.jpg |
» 猜你喜欢
化学专业申博
已经有4人回复
售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急
已经有3人回复
评审有感
已经有27人回复
论文撤稿了
已经有7人回复
售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急
已经有4人回复
售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急
已经有3人回复
售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急
已经有3人回复
售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急
已经有5人回复
售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急
已经有4人回复
河北省自然科学基金
已经有9人回复
|