24小时热门版块排行榜    

Znn3bq.jpeg
查看: 963  |  回复: 4

tdykxmg

新虫 (初入文坛)

[求助] 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
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
tdykxmg: 金币+7, ★★★★★最佳答案 2017-10-16 17:45:05
CODE:
function question_56 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,1./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 =1./((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

2楼2017-09-27 20:10:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pdl9527

专家顾问 (小有名气)

【答案】应助回帖

引用回帖:
2楼: Originally posted by pdl9527 at 2017-09-27 20:10:01
function question_56 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  = cal_obj ...

CODE:
function question_56
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,1./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 =1./((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

3楼2017-09-27 20:11:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tdykxmg

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by pdl9527 at 2017-09-27 20:11:06
function question_56
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 ...

还是不对啊,我需要在原图上求最小值
GA算法怎么求最小值啊,算法哪里出错了,求大神指教。。。。。-2
3.jpg

4楼2017-09-28 09:40:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tdykxmg

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by pdl9527 at 2017-09-27 20:11:06
function question_56
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 ...

抱歉,解决了,谢谢啊
5楼2017-09-28 09:55:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tdykxmg 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 1rx34o113h 2026-05-23 3/150 2026-05-24 17:41 by 0i3mu4vkjz
[基金申请] 评审有感 +16 popular289 2026-05-18 27/1350 2026-05-24 17:34 by hhs666
[教师之家] 论文撤稿了 +4 bjvtcliu 2026-05-24 7/350 2026-05-24 17:29 by bjvtcliu
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 hvkbtfonbv 2026-05-23 4/200 2026-05-24 17:21 by 75ui6h7z2t
[博后之家] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 hvkbtfonbv 2026-05-23 3/150 2026-05-24 17:10 by 75ui6h7z2t
[考博] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 hvkbtfonbv 2026-05-23 3/150 2026-05-24 17:01 by 75ui6h7z2t
[考研] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 a2tycdlnq1 2026-05-23 5/250 2026-05-24 16:21 by hhx1yx9evi
[论文投稿] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 a2tycdlnq1 2026-05-23 4/200 2026-05-24 16:16 by hhx1yx9evi
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 pmo95bazuy 2026-05-23 8/400 2026-05-24 15:56 by 1uy1ht2y9r
[教师之家] 某211大学教师把个人教师官方主页改成:我跑了我跑了我跑了!官宣跑路! +4 zju2000 2026-05-21 5/250 2026-05-24 09:35 by songwz
[考博] 26/27申博自荐 10+4 ZXW0202 2026-05-22 9/450 2026-05-24 08:47 by bjvtcliu
[基金申请] 青B发送上会通知了吗 +5 chemBioBro 2026-05-22 7/350 2026-05-23 12:35 by zhuifengzhy
[考博] 博士申请 +3 焦晓明 2026-05-21 3/150 2026-05-23 11:26 by mlc840311
[论文投稿] 投稿求助,期刊 +4 希冀,有书读 2026-05-20 8/400 2026-05-22 10:16 by 希冀,有书读
[基金申请] 国自然评分 +4 无名者登山 2026-05-20 5/250 2026-05-21 16:35 by swuq
[基金申请] 国自然上会要求 +7 无名者登山 2026-05-18 11/550 2026-05-21 15:50 by draco1987
[基金申请] 提交了我也来说说感想 +9 fummck 2026-05-20 10/500 2026-05-21 14:17 by draco1987
[有机交流] 反应很差,大量原料没有反应 5+3 Mr.Zot 2026-05-19 8/400 2026-05-20 22:19 by Equinoxhua
[考博] 如果工作了想读博,可以边工作边读全日制嘛? 30+3 铁达火车 2026-05-18 5/250 2026-05-20 09:33 by tfang
[考博] 博士申请 +5 星…… 2026-05-18 6/300 2026-05-18 23:49 by 糊糊涂涂好
信息提示
请填处理意见