学习笔记——遗传算法

1.概述

  • 遗传算法(Genetc Algorithm, GA)是一种进化算法,其基本原理消防生物界中的“物竞天择、适者生存”的演化法则
  • 种群(包含多个个体)解空间
    个体(染色体,包含多个基因)解空间的一个解
    基因(最小单元)解的一个组成部分
    适应度(fitness)函数解好坏的评价标准
    选择算子(“适者生存”)选出最优解进入下一代
    遗传算子(组合交叉和变异,“繁衍”过程)保证解(种群)的多样性
  • 遗传算法的三个基本操作:选择(Selection)、交叉(Crossover)、变异(Mutation)

        (1)选择        选择的目的是为了从当前种群中选出优良的个体,作为父辈繁衍下一代,适应度较高的个体被选择的概率较高(强调概率,并不是一个确定事件)

        (2)交叉        交叉的目的是为了得到新一代的个体,新个体组合保留了父辈个体的特性

        (3)变异        变异的目的是为了保证解的多样性,对当前种群的每个个体以一定概率改变一个或者多个基因的值(与交叉相比,变异的概率比较低)

  • 遗传算法的基本步骤:

        (1)编码        将需要优化解决的问题用数学语言描述,映射到遗传算法优化问题。也就是将解空间X={x1,x2,……}映射为个体上的基因

        (2)初始种群生成        随机生成N个初始串结构数据,每一个串结构数据称为一个个体(个体数量N是一个很重要的参数,个体较少进化的速度将很慢,个体较多将会存在相似的个体,导致重复计算,效率下降)

        (3)适应度评估        评估每个个体的优劣。不同的问题,适应度函数的定义方式也不同

5b4450753f1f4c8895ce708a6cae838c.png

2.遗传算法工具箱

MATLAB内嵌遗传算法工具箱:实时编辑器-优化

(1)新建一个优化的实时脚本:在主页中点击新建实时脚本>>在实时编辑器中点击任务>>找到优化

        dbc76bee50f845eebee74306c1c009dc.png

(2)指定求解器:只有非线性问题才能使用GA算法

3d4741be56cc499186add5dcd9b0a1c5.png

(3)设置优化目标和约束:目标函数和非线性约束需要从文件选择(点击新建按照格式进行编写),其余约束的参数从工作区选择

(4)设置参数

  • 种群设置
种群大小默认值:50(当变量<=5时,否则为200)
种群数据类型(可以不设置)doubleVector(默认),bitstring,custom
精英成员数默认值:种群数*0.05
  • 算法设置——选择函数(可以不设置使用默认函数)
selectionstochunif(默认函数)随机均匀分布
selectionremainder(残余)取适应值的整数部分进行轮盘赌选择
selectionuniform不是一种非常有效的搜索策略,可用于测试
selectionroulette(常用函数)轮盘赌算法
selectiontourmament联赛选择算法
  • 算法设置——交叉比例:默认为0.8,可以自己设置
  • 算法设置——交叉函数(可以不设置使用默认函数)
    • crossoverscattered:对于没有线性约束问题的默认交叉函数。产生随机二进制向量控制交叉

      例如:   P1=[a b c d e f g h]

                    P2=[1 2 3 4 5 6 7 8]

      二进制向量=[1 1 0 0 1 0 0 0]

                 child=[a b 3 4 e 6 7 8]

    • crossoverheuristic(启发式算法):子代远离适应度差的父代(不等于靠近更好的父代)

      如果在父代P1和P2中,P1的适应度更好,则函数返回子代child=P2+随机数*(P1-P2)

    • crossoversinglepoint(单点交叉):生成一个数字,从该数字对应位置后一位开始交叉

      例如:   P1=[a b c d e f g h]

                    P2=[1 2 3 4 5 6 7 8]

             交叉点为3

                 child=[a b c 4 5 6 7 8]

    • crossovertwopoint(两点交叉):与单点交叉类似

      例如:   P1=[a b c d e f g h]

                    P2=[1 2 3 4 5 6 7 8]

             交叉点为3和6

                 child=[a b c 4 5 6 g h]

    • crossoverarithmetic(算数平均):创建的子代是两个父代的算数平均值

    • crossoveriaplace:问题就具有整数约束时的默认交叉函数

      拉普拉斯交叉使用以下任意公式(随机选择)生成子代:

              xOverkid=P1+b1*abs(P1-P2)

              xOverkid=P2+b1*abs(P1-P2),其中b1是拉普拉斯分布生成的随机数

      参考文献:

  • 算法设置——变异函数(可以不设置使用默认函数)

    • mutationgaussian(无需设置变异率):无约束问题的默认变异函数。利用高斯分布来选取变异的个体,前面的变异程度较高,后面变异程度较低

    • mutationadaptfeasible(自适应,无需设置变异率):存在非整数约束的默认变异函数。随机生成相对于最后成功或者不成功的生成自适应方向

    • mutationuniform:有边界或线性约束时不要使用。均匀突变,突变率默认为0.01,可以更改变异率rate:options=optimoptions('ga','MutationFcn',{@mutationuniform,rate})

    • mutationpositivebasis(网格自适应,无法设置变异率):该变异类似于蒸饺MADS(网格自适应搜索)步骤,针对线性约束和边界进行了改进

    • mutationpower:具有整数约束的默认变异函数。

      mutationChild(i)=x(i)-s(x(i)-lb(i))        if t<r     (t:x(i)与最小边界lb(i)的距离,r:随机数)

                               =x(i)+s(ub(i)-x(i))        if t>=r  (s:幂分布的一个随机数)

  • 算法设置——混合优化器(整数约束不可用)(有非整数约束,设置后更严谨)

    • fminsearch:使用MATLAB函数fminsearch智行无约束最小化

    • patternsearch:使用模式搜索来智行受约束或不受约束的最小化

    • fminunc:使用优化工具箱函数fminunc执行无约束最小化

    • fmincon:使用优化工具性函数fmincon执行约束最小化

  • 运行时间限制

最大代数(迭代次数)(一般只设置此项)默认值为100*变量数,可以设置
停滞代数限制(迭代N次没有变化停止迭代)默认值50
停滞时间限制默认为最大值

(5)例子

         优化问题求解步骤

  • 33
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于 jQuery 的事件,我可以和你分享一些学习笔记。 1. 绑定事件 在 jQuery 中,我们可以通过以下方式来绑定事件: ``` $(selector).event(function(){ // 事件处理程序 }) ``` 其中,`selector` 表示要绑定事件的元素,`event` 表示要绑定的事件类型,比如 `click`、`mouseover` 等等。事件处理程序则是在事件触发时要执行的代码块。 2. 多个事件绑定 我们可以通过 `on()` 方法来同时绑定多个事件: ``` $(selector).on({ event1: function(){ // 事件处理程序1 }, event2: function(){ // 事件处理程序2 } }) ``` 这样,当 `event1` 或 `event2` 中任意一个事件触发时,对应的处理程序都会被执行。 3. 解除事件 如果需要解除某个元素的事件处理程序,可以使用 `off()` 方法: ``` $(selector).off(event); ``` 其中,`event` 表示要解除的事件类型。如果不指定事件类型,则会解除该元素上所有的事件处理程序。 4. 事件委托 在 jQuery 中,我们可以使用事件委托来提高性能。事件委托是指将事件绑定到父元素上,而不是绑定到子元素上,然后通过事件冒泡来判断是哪个子元素触发了该事件。这样,当子元素数量较多时,只需要绑定一次事件,就可以监听到所有子元素的事件。 ``` $(selector).on(event, childSelector, function(){ // 事件处理程序 }) ``` 其中,`selector` 表示父元素,`event` 表示要绑定的事件类型,`childSelector` 表示要委托的子元素的选择器,事件处理程序则是在子元素触发事件时要执行的代码块。 以上是 jQuery 中事件的一些基本操作,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值