⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opt-ga24.m

📁 Matlab数值解算法实现代码
💻 M
字号:
function ga
clear all;
clc;
format short
ps=10;
sl=30;
flag=1;
gen=1;
maxs=100;
chs=round(rand(ps,sl));
chsc=zeros(ps,sl);
fitf=zeros(1,ps);
fitf1=zeros(1,ps);
sel=zeros(1,ps);

% while (flag>0)&(gen<1000)
    sumf=0;
    for i=1:1:ps
        a1=chs(i,1:15);
        a2=chs(i,16:30);
        par=zeros(1,2);
        for j=1:1:15
            par(1,1)=par(1,1)+a1(1,j)*pow2(j-1);
        end
        for j=1:1:15
            par(1,2)=par(1,2)+a2(1,j)*pow2(j-1);
        end
        m=pow2(15)-1;
        x1=-5+par(1,1)/m*10;
        x2=-5+par(1,2)/m*10;
        fitf(1,i)=(4-2.1*x1^2+0.5*x1^4)*x1^2+x1*x2+(-4+4*x2^2)*x2^2;
        if (fitf(1,i)<maxs)
            maxs=fitf(1,i);
            opt=[x1 x2 fitf(1,i)];
        end
        if (fitf(1,i)<=0.001)
            flag=-1;
            opt
            gen
            break;
        else
            sumf=sumf+fitf(1,i);
        end
        if (flag<0)
            break;
        end
    end
    
%***************************************************************************************************
%***************************************************************************************************
    if(flag>0)
        %the first select.
        sumf=sumf-fitf(1,ps);
        for i=1:1:ps-1
            x=round(rand(1)*32767);
            sum=round(sumf);
            rr=rem(x,sum);
            n=1;
            ba=1;
            partsum=0;
            while ((partsum<rr)&(n<ps-1))
                partsum=partsum+fitf(1,n);
                ba=n;
                n=n+1;
            end        
            sel(1,i)=ba
        end
        
%***************************************************************************************************
%***************************************************************************************************       
        %reproduce
        fitf=fitf
        for i=1:1:ps-1
            for j=1:1:sl
                chsmc(i,j)=chs(sel(1,i),j);
            end
            fitf1(1,i)=fitf(1,sel(1,i));
        end
        fitf=fitf1
%***************************************************************************************************
%***************************************************************************************************       
        %select before crossover
        for i=1:1:ps-1
            x=round(rand(1)*32767);
            sum=round(sumf);
            rr=rem(x,sum)+1;
            n=1;
            partsum=0;
            while((partsum<rr)&(n<=ps-1))
                partsum=partsum+fitf(1,n);
                bba=n;
                n=n+1;
            end
                sel(1,i)=bba;
        end
        
%***************************************************************************************************
%***************************************************************************************************
        %crossover
        maxs=max(fitf);
        for i=1:1:ps/2-1
            parent1=sel(1,i);
            parent2=sel(1,ps-1-i);
            child1=i;
            child2=ps-1-i;
            pc=0.8;
            randnum=rand(1);
            site1=round(rand(1)*sl);
            for j=1:1:sl
                if (j<site1)
                    chs(child1,j)=chsc(parent1,j);
                    chs(child2,j)=chsc(parent2,j);
                else
                    chs(child1,j)=chsc(parent2,j);
                    chs(child2,j)=chsc(parent1,j);
                end
            end
        end

%***************************************************************************************************        
%***************************************************************************************************
        %mutation
        pm=0.05;
        for i=1:1:ps-1
            for j=1:1:sl
                randnum=rand(1);
                if (randnum<pm)
                    chs(i,j)=chs(i,j);
                end
            end
        end
    end
%     gen=gen+1
% end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -