04、遗传算法的MATLAB程序设计

一、程序设计流程及参数选取

   1、遗传算法的程序设计伪代码

BEGIN t=0;%遗传代数
    初始化P(t);初始化种群或染色体
    计算P(t)的适应值;
    while(不满足停止准则)do 
        begin 
        t=t+1;
        从P(t-1)中选择P(t);%选择
        重组P(t);%交叉和变异
        计算P(t)的适应值;
    end
END

    2、遗传算法的参数设计原则

    (1)种群的规模:种群规模的一个建议值为0~100 。

    (2)变异概率:变异概率一般取为0.0001~0.2 。

    (3)交配概率:交配概率一般取0.4~0.99 。

    (4)进化代数:进化代数一般取100~500 。

    (5)种群初始化:初始种群的生成是随机的。在初始种群的赋予之前,尽  量进行一个大概的区间估计,以免初始种群分布在远离全局最优解的编码空     间,导致遗传算法的搜索范围受到限制,同时也为算法减轻负担。

二、MATLAB遗传算法工具箱

    1、GA工具箱简介

        为了省略艰深难懂的遗传算法数学理论和降低程序开发的难度,MATLAB软件已经将遗传算法命令进行了封装,做成专门的遗传算法工具箱—GA Toolbox

    2、工具箱核心函数的用法

        (1)函数ga

                 函数ga的语法格式

[x,fval,reason] = ga (@fitnessfun,nvars,options)

               其中,x为经过遗传进化后自变量最佳染色染体返回值(最佳解),fval为最佳染色体的适应度(最佳值),reason为算法停止的原因,@fitnessfun为适应度句柄函数;nvars为目标函数自变量的个数;options为算法的属性设置,该属性是通过函数gaoptimset赋予的 ;

      (2)函数gaoptimset

               函数gaoptimset的语法格式为

Options=gaoptimset(‘PropertyName1’,’propertyValue1’, ‘PropertyName2’,’propertyValue2’, 
‘PropertyName3’,’propertyValue3’,…….)

              函数gaoptimset实现的功能为,设置遗传算法的参数和句柄函数,下图所列为函数gaoptimset常用的11种属性。

             由于遗传算法本质上是一种启发式的随机运算,算法程序经常重复运行多次才能得到理想结果。鉴于此,可以将前一次运行得到的最后种群作为下一次运行的初始种群,如此操作会得到更好的结果。例如:

[x,fval,reason,output,final_pop]=ga(@fitnessfcn,nvars);

            最后一个输出变量final_pop返回的就是本次运行得到的最后种群。再将final_pop作为函数ga的初始种群,语法格式为

 

options=gaoptimset('InitialPopulation',finnal_pop);
[x,fval,reason,output,finnal_pop2]=ga(@fitnessfcn,nvars,options);

三、Genetic Algorithm and Direct Search Toolbox 适应度函数设计

             实例1  遗传算法和直接搜索工具箱中的函数ga是求解目标函数的最小值,所以求目标函数最小值的问题,可直接令目标函数为适应度函数(注意:这里是求最小值)。编写适应度函数,语法格式如下:

function f=fitnessfcn(x)%x为自变量向量
f=f(x);

           实例2 如果有约束条件(包括自变量的取值范围),对于求解函数的最小值问题,可以使用如下语法格式:

function f=fitnessfcn(x)
if(x<=-1)lx>3)%表示有约束x>-1和x<=3,其他约束条件类推
    f=inf;
else 
    f=f(x);
end

         实例3如果有约束条件(包括自变量的取值范围),对于求解函数的最大值问题,可以使用如下语法格式

function f=fitnessfcn(x)
if(x<=-1)|x>3)
    f=inf;
else 
    f=-f(x);%注意,这里f=-f(x)而不是f=f(x)
end

       若目标函数作为适应度函数,则最终得到的目标函数值为一fval而不是fval。

四、程序设计范例

    首先编写函数f(x)的文件

function f=lbw(x)
if(x(1)>30|x(1)<-30|x(2)>30|x(2)<-30|x(3)>30|x(3)<-30|x(4)>30|x(4)<-30|x(4)>30|x(5)>30|x(5)<-30|x(6)>30|x(6)<-30|x(7)>30|x(7)<-30|x(8)>30|x(8)<-30|x(9)>30|x(9)<-30|x(10)>30|x(10)<-30)
    f=300;
else
    f=-2*pi*exp(-0.2*sqrt(1/10*((x(1)).^2+(x(2)).^2+(x(3)).^2+(x(4)).^2+(x(5)).^2+(x(6)).^2+(x(7)).^2+(x(8)).^2+(x(9)).^2+(x(10)).^2)))-exp(1/10*(cos(2*pi*x(1))+cos(2*pi*x(2))+cos(2*pi*x(3))+cos(2*pi*x(4))+cos(2*pi*x(5))+cos(2*pi*x(6))+cos(2*pi*x(7))+cos(2*pi*x(8))+cos(2*pi*x(9))+cos(2*pi*x(10))))+2*pi;
end

      编写主函数

options=gaoptimset('Generations',800,'StallGenLimit',300,'PlotFcns',@gaplotbestf);
[x,f]=ga(@lbw,10,options)

运行结果: 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
遗传算法是一种模拟自然进化过程的一种优化算法。Latex是一种排版系统,常用于生成高质量的科技文档。下面是一个使用Latex编写的遗传算法伪代码示例: \begin{verbatim} %定义遗传算法的参数 构造种群的大小:population_size 选择操作的个体比例:selection_rate 交叉操作的概率:crossover_probability 变异操作的概率:mutation_probability 迭代次数:iterations %初始化种群 创建一个包含population_size个随机个体的种群 %开始迭代 for i=1 to iterations do %选择操作 从种群中选择适应度高的个体作为父代 确定选择操作的个体数量:selection_count = selection_rate * population_size 在种群中随机选择selection_count个父代个体 %交叉操作 创建一个新种群 while 新种群的个体数量 < population_size do 选择两个父代个体适应度高的个体作为交叉操作的父代 以crossover_probability的概率进行交叉操作,生成两个子代个体 将两个子代个体加入新种群 %变异操作 在新种群中,对每个个体以mutation_probability的概率进行变异操作 %更新种群 将新种群替换为当前种群 end for %输出最优个体 输出适应度最高的个体作为最优解 \end{verbatim} 以上是一个简单的Latex遗传算法伪代码示例,其中包括初始化种群、选择操作、交叉操作、变异操作和更新种群等步骤。在迭代过程中,通过选择、交叉和变异操作,不断更新种群,最终输出适应度最高的个体作为最优解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值