应用遗传算法求函数最小值

1、遗传算法概论

       遗传算法(GA)可能是最早开发出来的模拟生物遗传系统的算法模型。它首先由Fraser提出,后来有Bremermann和Reed等人

 再次提出。最后,Holland对遗传算法做了大量工作并使之推广,因此被认为是遗传算法的奠基人。遗传算法模拟了基因进化,在这

个模型中,个体的性状通过基因型表达。选择算子(模拟适者生存)与交叉算子(模拟繁殖),是遗传算法的主要驱动算法。

2遗传算法的基本运算过程如下:

a)初始化:设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。
b)个体评价:计算群体P(t)中各个个体的适应度


c)选择运算将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。
d)交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。
e)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。
群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t+1)。
f)终止条件判断:若t=T,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。
3、应用遗传算法求解函数最小值

     使用的函数为f(x)=7*sin(6*x)+6*cos(5*x),x∈[0,2*pi]

    遗传算法的MATLAB实现如下:

  

L=16;  %编码长度,即用16位二进制表示
N=32;  %种群数目
M=48;  %M>=N,M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变异
T=100; %最大繁殖代数
Pc=0.8;  %交叉概率
Pm=0.03;  %变异概率

x1=zeros(1,N);
x2=zeros(1,N);
x4=zeros(1,N);
%grayCode=zeros(1,N)';
grayCode=cell(N,1);
grayCodeNew=cell(N,1);
for i=1:1:N %初始化种群N
    x1(1,i)=rand()*2*pi;
    x2(1,i)=uint16(x1(1,i)/(2*pi)*65535);
    %grayCode(i,:)=num2gray(x2(1,i),L); 
    grayCode{i}=num2gray(x2(1,i),L);
end
%=========进化,开始进行遗传算子操作
for t=1:1:T
    y1=7*sin(6*x1)+6*cos(5*x1);
    for i=1:1:M/2    
        [~,b]=min(y1);
        %grayCodeNew(i,:)=grayCode(b,:);
        grayCodeNew{i}=grayCode{b};
        %grayCodeNew(i+M/2,:)=grayCode(b,:);
        grayCodeNew{i+M/2}=grayCode{b};
        y1(1,b)=inf;
    end
    for i=1:1:M/2  
        p=unidrnd(L);    
        if rand()< Pc %rand()产生一个随机数          
            for j=p:1:L               
                temp=grayCodeNew{i}(j);               
                grayCodeNew{i}(j)=grayCodeNew{M-i+1}(j);              
                grayCodeNew{M-i+1}(j)=temp;
            end
        end
    end
    %将全部染色体按概率进行变异
    for i=1:1:M      
        for j=1:1:L
            if rand()< Pm               
                grayCodeNew{i}(j)=dec2bin(1-bin2dec(grayCodeNew{i}(j)));
            end
        end
    end
    for i=1:1:M
        %x4(1,i)=gray2num(grayCodeNew(i,:));
        x4(1,i)=gray2num(grayCodeNew{i});
    end
    x3=double(x4)*2*pi/65535;
    y3=11*sin(6*x3)+7*cos(5*x3);
    for i=1:1:N  %更新种群
        %[a,b]=min(y3);
        [~,b]=min(y3);
        x1(1,i)=x3(1,b);
        %grayCode(i,:)=grayCodeNew(b,:);
        grayCode{i}=grayCodeNew{b};
        y3(1,b)=inf;
    end
end
%经过第T代后,由x1计算出y1,找出最小者
%x1
y1=11*sin(6*x1)+7*cos(5*x1);
[a,b]=min(y1);
x0=x1(1,b); 
y0=a;      
disp(['x0=',num2str(x0)]);
disp(['y0=',num2str(y0)]);

运行结果如下:


  • 13
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 遗传算法是一种模拟自然界生物进化过程的优化算法,常用于函数最小值。在使用遗传算法函数最小值的过程中,可以遵循以下步骤: 1. 确定问题:首先需要明确需要解的函数和最小化的目标。 2. 设计编码方案:将问题转化为遗传算法所能处理的编码形式,通常采用二进制编码。 3. 初始化种群:随机生成一定数量的个体作为初始种群,每个个体都代表着函数的一个可能解。 4. 适应度评价:使用函数对每个个体进行适应度评价,评价标准可以是函数值的大小,目标是使适应度函数最小。 5. 选择操作:根据个体的适应度值选择一定数量的个体,选出优秀的个体作为下一代种群的父代。 6. 交叉操作:对选出的父代个体进行交叉操作,产生新的个体作为下一代种群的子代。 7. 变异操作:对子代个体进行一定概率的变异操作,引入新的基因,增加种群的多样性。 8. 重复步骤4到步骤7,直到达到终止条件,例如达到最大迭代次数或解的收敛程度满足要。 9. 输出结果:选择适应度最优的个体作为最终结果,即函数最小值点。 通过不断进行交叉、选择和变异操作,逐渐优化种群中的个体,通过遗传算法找到函数最小值点。需要注意的是,遗传算法是一种启发式算法,无法保证找到全局最优解,但通常能够找到较好的局部最优解。 ### 回答2: 遗传算法是一种基于进化论思想的搜索和优化算法,它模拟了自然界的进化过程,通过选择、交叉、变异等操作来逐步改进种群中个体的基因型,从而逐步逼近最优解。 要使用遗传算法求函数最小值,首先要定义适应度函数和个体的编码方式。适应度函数用于评估每个个体的适应程度,个体的编码方式决定了每个个体的表现型。 然后,需要初始化一个种群,通过随机生成的个体来表示解空间中的初始解。接下来,使用适应度函数对整个种群进行评估,得到每个个体的适应度值。 在进化的过程中,根据适应度值对个体进行选择,选择较优秀的个体作为下一代的父代。通过交叉和变异操作,生成新的后代,引入新的基因组合。 交叉操作模拟了基因的配子相互交换,从而产生新的个体。变异操作则是在个体基因中引入一定程度的随机性,增加种群的多样性。 重复进行选择、交叉和变异操作,直到达到终止条件,如迭代次数达到预设值或适应度达到一定阈值。最终,得到的个体中具有最小适应度值的个体即为所求函数最小值。 通过CSND等网络资源,也可以找到相应的遗传算法的开源库或代码示例,以加快算法的实现过程。遗传算法作为一种强大的搜索和优化方法,可以在函数解、参数优化等问题中发挥重要作用。 ### 回答3: 遗传算法是一种模拟自然界遗传机制的优化算法,可以用来函数最小值。在使用遗传算法求函数最小值的过程中,需要经历以下几个关键步骤。 首先,确定问题的适应度函数,即要优化的函数。适应度函数需要根据问题的特点来确定,常用的有二维函数、多维函数、约束函数等。 其次,确定遗传算法的编码方式。编码是将问题的解表示为染色体的方式。常用的编码方式有二进制编码和实数编码。 接下来,确定遗传算法的基本操作。遗传算法的基本操作包括选择、交叉、变异。选择操作是根据个体的适应度值来选择部分个体作为下一代的父代。交叉操作是对选中的个体进行染色体的交叉,产生新的个体。变异操作是在染色体中进行随机的变异操作,增加染色体的多样性。 然后,确定遗传算法的参数。遗传算法的参数包括种群大小、交叉概率、变异概率等。参数的选取需要基于问题的特点进行调整,以保证算法的有效性和稳定性。 最后,利用遗传算法进行迭代优化。通过不断的迭代选择、交叉和变异操作,逐渐接近问题的最优解。迭代的过程中,根据适应度函数的变化情况,不断调整参数,以提高算法的性能。 通过以上的步骤,可以使用遗传算法函数最小值遗传算法具有较强的全局搜索能力和对多峰函数的适应性,可以应用于各种函数优化问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值