主要内容

遗传算法的选择

选择遗传算法

设置选项遗传算法通过使用optimoptions

选择= optimoptions (“遗传算法”,“Option1”,“value1”,“Option2”,“value2”);
  • 一些选项中列出斜体。这些选项没有出现在清单optimoptions的回报。知道为什么的optimoptions隐藏这些选项值,明白了选项optimoptions隐藏

  • 确保你通过选项来解决。否则,patternsearch使用默认选项值。

    [x, fval] = ga (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)

绘图选项

PlotFcn指定在每个迭代函数或函数调用遗传算法gamultiobj。设置PlotFcn选项是一个内置的情节功能名称或情节的处理功能。你可以在任何时候通过点击停止算法停止按钮图窗口。例如,显示最好的函数值,设置选项如下:

选择= optimoptions(“遗传算法”,“PlotFcn”,“gaplotbestf”);

显示多个情节,情节单元阵列使用内置函数名或函数处理单元阵列:

选择= optimoptions (“patternsearch”,“PlotFcn”,{@plotfun1 @plotfun2,});

在哪里@plotfun1,@plotfun2等等情节功能函数处理。如果你指定多个图函数,所有情节作为次要情节出现在同一个窗口中。右键单击任何次要情节获得在一个单独的图放大窗口。

可用情节功能遗传算法gamultiobj:

  • “gaplotscorediversity”情节在每一代分数的分布图。

  • “gaplotstopping”情节停止标准水平。

  • “gaplotgenealogy”情节的谱系。从一代一代的颜色如下:

    • 红色线表示变异的孩子。

    • 蓝线显示交叉的孩子。

    • 黑色线表示精英个体。

  • “gaplotscores”情节的每一代的个体。

  • “gaplotdistance”情节在每一代个体间的平均距离。

  • “gaplotselection”块的直方图的父母。

  • “gaplotmaxconstr”在每一代阴谋的最大非线性约束违反。为遗传算法,只有当可用NonlinearConstraintAlgorithm选择是“auglag”(默认为非整数问题)。因此,不能用于integer-constrained问题,因为他们使用“惩罚”非线性约束算法。

  • 您也可以创建和使用自己的情节功能。情节结构的功能描述了一个自定义结构情节的功能。通过任何自定义函数作为处理函数。

下面的情节功能可用遗传算法只有:

  • “gaplotbestf”情节最好的得分值和平均评分与一代。

  • “gaplotbestindiv”情节的向量条目最好的个体适应度函数值在每一代。

  • “gaplotexpectation”情节的预期的儿童数量在每一代与原始分数。

  • “gaplotrange”图的最小、最大和平均评分值在每一代。

下面的情节功能可用gamultiobj只有:

  • “gaplotpareto”情节的帕累托前前两个或三个目标函数。

  • “gaplotparetodistance”情节一个条形图的距离来自邻国的每个人。

  • “gaplotrankhist”块的直方图的个人。个人等级1的帕累托前沿。个人等级2低于至少一个等级1个人,但不低于任何其他个人,等等。

  • “gaplotspread”情节的平均传播的函数迭代数。

情节结构的功能

一块函数的第一行有这种形式:

功能状态= plotfun(选项、状态标志)

函数的输入参数

  • 选项——结构包含所有当前选项设置。

  • 状态——包含有关当前一代的信息结构。国家结构描述了领域状态

  • 国旗-描述的阶段中目前的算法。有关详细信息,请参见输出函数的选择

传递额外的参数解释如何提供额外的参数函数。

输出参数状态是一个国家结构。通过输入参数,修改如果你喜欢;看到改变国家结构。停止迭代,集state.StopFlag一个非空的特征向量,如“y”

国家结构

ga。国家结构遗传算法阴谋,这是一个输入参数,突变,和输出功能,包含以下字段:

  • 一代——当代数字。

  • 开始时间——遗传算法开始时,返回的抽搐

  • StopFlag——停止的理由,一个特征向量。

  • LastImprovement代上改善健康的价值。

  • LastImprovementTime——时间持续改善发生。

  • 最好的——包含每一代最好的得分向量。

  • 如何- - -“augLag”非线性约束算法报告下列操作之一:“不可行点”,“更新乘数”,或增加惩罚的;看到增广拉格朗日遗传算法

  • FunEval——累积的数量评估函数。

  • 期望——期望选择的个体。

  • 选择——指数精英的个人选择,交叉和变异。

  • 人口——在这一代人口。

  • 分数——当前人口的分数。

  • NonlinIneq——在当前点非线性不等式约束,目前只有当指定一个非线性约束函数,没有整数变量,国旗不是“中断”,NonlinearConstraintAlgorithm“auglag”

  • NonlinEq——在当前点非线性等式约束,目前只有当指定一个非线性约束函数,没有整数变量,国旗不是“中断”,NonlinearConstraintAlgorithm“auglag”

  • EvalElites-逻辑值,指出是否遗传算法评估精英个体的适应度函数。最初,这个值是真正的。在第一代,如果精英个人评估其先前的值(这表明,适应度函数是确定的),那么这个值就越大默认情况下为后续迭代。当EvalElites,遗传算法不重新精英个体的适应度函数。您可以覆盖此行为情节在一个自定义函数或自定义输出函数通过改变输出state.EvalElites

  • HaveDuplicates-逻辑值,指出是否遗传算法添加重复初始种群的个体。遗传算法使用一个小的相对公差确定一个人是否是重复的或独一无二的。如果HaveDuplicates真正的,然后遗传算法定位的独特的个人和评估每一个独特的个体的适应度函数只有一次。遗传算法副本复制个人健身和约束函数值。遗传算法重复测试在每一代,直到所有个体都是独一无二的。测试需要秩序n * m *日志(m)操作,人口规模和吗n据nvar。覆盖这个测试在一个定制的情节函数或自定义输出函数,设置输出state.HaveDuplicates

gamultiobj。国家结构gamultiobj阴谋,这是一个输入参数,突变,和输出功能,包含以下字段:

  • 人口——在这一代人口

  • 分数——当前人口的分数人口——- - - - - -nObjectives矩阵,nObjectives目标的数量吗

  • 一代——当代数字

  • 开始时间——遗传算法开始时,返回的抽搐

  • StopFlag——停止的理由,一个特征向量

  • FunEval——累积的数量评估函数

  • 选择——指数精英的个人选择,交叉和变异

  • 排名——矢量队伍成员的人口

  • 距离——矢量距离的每个成员的人口到最近的邻近的成员

  • AverageDistance标准偏差(平均)距离

  • 传播——矢量的条目在每一代传播

  • mIneq——非线性不等式约束的数量

  • 微地震——非线性等式约束的数量

  • 购物中心非线性约束的总数,购物中心=mIneq+微地震

  • C——在当前点非线性不等式约束PopulationSize——- - - - - -mIneq矩阵

  • 量表信——在当前点非线性等式约束,PopulationSize——- - - - - -微地震矩阵

  • isFeas——人口的可行性,一个逻辑向量PopulationSize元素

  • maxLinInfeas——最大的不可行性对线性约束的人口

人口的选择

人口选项允许您指定的参数数量遗传算法使用。

PopulationType指定类型的适应度函数的输入。类型和他们的限制:

  • “doubleVector”——使用这个选项如果人口的个人类型。使用这个选项为混合整数规划。这是默认的。

  • “位”——使用这个选项如果人群中个体的组件01

    谨慎

    个人在一个位串人口是向量类型的,而不是字符串或字符。

    CreationFcnMutationFcn,使用“gacreationuniform”“mutationuniform”或处理定制函数。为CrossoverFcn,使用“crossoverscattered”,“crossoversinglepoint”,“crossovertwopoint”或自定义函数的句柄。你不能使用HybridFcn,遗传算法忽略所有约束,包括范围、线性约束和非线性约束。

  • “自定义”:表示一个定制的人口类型。在这种情况下,您必须使用一个定制的CrossoverFcnMutationFcn。您必须提供一个自定义创建函数或一个InitialPopulationMatrix。你不能使用HybridFcn,遗传算法忽略所有约束,包括范围、线性约束和非线性约束。

PopulationSize在每一代指定有多少个人。庞大的人口规模,遗传算法搜索解空间更彻底,从而减少算法的机会返回一个局部最小值,不是一个全球最低。然而,一个大的人口规模也会导致算法运行得更慢。默认值是50当numberOfVariables < = 5,否则200年

如果你设置PopulationSize一个向量,该遗传算法创建多个亚种群,这是长度的向量。每个分组人口的大小是向量的对应的条目。注意此选项不是有用的。看到迁移选项

CreationFcn指定的函数创建的初始种群遗传算法。选择:

  • []使用默认为你的问题类型创建函数。

  • “gacreationuniform”创建一个随机的初始种群均匀分布。这是默认没有线性约束时,或当有整数约束。均匀分布在初始种群范围(InitialPopulationRange)。的默认值InitialPopulationRange[10]-10;对于每一个组件,或者(-9999;10001)当有整数约束。这些边界转移和缩放匹配任何现有的边界乌兰巴托

    谨慎

    不要使用“gacreationuniform”当你有线性约束。否则,你的人口可能不满足线性约束。

  • “gacreationlinearfeasible”是默认当线性约束和没有整数约束。这个选择创建一个随机的初始种群,满足所有边界和线性约束。如果有线性约束,“gacreationlinearfeasible”创造了许多个人的边界约束区域,并创建一个人口的说法。“gacreationlinearfeasible”忽略了InitialPopulationRange“gacreationlinearfeasible”调用linprog创建一个可行的人口范围和线性约束。

    一个例子显示它的行为,看到自定义函数和线性约束遗传算法

  • “gacreationnonlinearfeasible”是默认创建的函数“惩罚”非线性约束算法。有关详细信息,请参见约束参数

  • “gacreationuniformint”是默认创建函数遗传算法当问题整数约束。这个函数适用于人造绑定到无界组件,生成个人随机均匀范围内,然后执行整数约束。

    请注意

    当你的问题整数约束,遗传算法gamultiobj执行整数约束,边界,在每个迭代线性约束是可行的。默认的变异、交叉、创建和选择功能,遗传算法gamultiobj申请额外的例程后的函数操作可行性。

  • “gacreationsobol”是默认创建函数gamultiobj当问题整数约束。创建函数使用一个quasirandom Sobol序列来生成一个初始种群的说法。人口是可行的界限,线性约束和整数约束。

  • 一个函数处理函数允许您编写自己的创造,必须生成指定类型的数据PopulationType。例如,

    选择= optimoptions (“遗传算法”,“CreationFcn”,@myfun);

    你创建函数必须有以下调用语法。

    函数人口= myfun (GenomeLength、FitnessFcn选项)

    函数的输入参数是:

    • Genomelength——数量的适应度函数的自变量

    • FitnessFcn——适应度函数

    • 选项——选项

    函数返回人口遗传算法的初始种群。

    传递额外的参数解释如何提供额外的参数函数。

    谨慎

    当你有界限或线性约束,确保您创建函数创建个人满足这些约束。否则,你的人口可能不满足约束条件。

InitialPopulationMatrix指定一个遗传算法的初始种群。默认值是[],在这种情况下遗传算法使用默认的CreationFcn创建一个初始种群。如果你输入一个非空的数组中InitialPopulationMatrix数组必须不超过PopulationSize行,具体据nvar列,据nvar变量的数量,第二个输入遗传算法gamultiobj。如果你有一个部分初始种群,意味着不到PopulationSize行,那么遗传算法调用CreationFcn产生其余的人。

InitialScoreMatrix指定了初始种群初始分数。最初的分数也可以部分。如果你的问题有非线性约束算法不使用InitialScoreMatrix

InitialPopulationRange指定范围内的向量生成的初始种群gacreationuniform创建函数。你可以设置InitialPopulationRange是一个矩阵和两行据nvar列,每列的形式(磅;乌兰巴托),在那里下界和吗乌兰巴托的上限是条目的协调。如果您指定InitialPopulationRange2×1的向量,每个条目是扩展到一个常数的长度据nvar。如果你不指定一个InitialPopulationRange,默认的是[10]-10;([1 e4 + 1; 1 e4 + 1)integer-constrained问题),修改匹配任何现有的边界。“gacreationlinearfeasible”忽略了InitialPopulationRange。看到设置初始范围了一个例子。

健身缩放选项

健康健身扩展转换的原始分数返回的适应度函数值的范围适用于选择功能。

FitnessScalingFcn指定执行的功能扩展。选项是

  • “fitscalingrank”——默认健身尺度函数,“fitscalingrank”,鳞片原始分数排名的基础上每个人而不是它的分数。个体的等级地位的排序分数。个体与排名r按比例缩小的分数成正比吗 1 / r 。所以最适合个人的比例分数比例为1时,下一个最适合的比例分数成正比 1 / 2 ,等等。等级健身缩放删除原始分数的传播的影响。√使差分数排名更平等的个体,而排名得分。有关更多信息,请参见健身比例

  • “fitscalingprop”——比例缩放使得个体的比例值正比于它的原始健康得分。

  • “fitscalingtop”——最高比例尺度个人同样顶部。你可以修改扩展使用一个额外的参数:

    选择= optimoptions (“遗传算法”,“FitnessScalingFcn”,{@fitscalingtop、数量})

    数量指定的个体数量分配积极扩展值。数量可以从1到一个整数人口规模或分数从0到1指定数量的一小部分。默认值是0.4。每个个体的后代被分配一个相等的比例值,而其余的分配值0。比例值的形式[1 / n 1 0 0 1 0 0 1 / n / n / n…]。

  • “fitscalingshiftlinear”——转变线性扩展规模的原始分数,适者个人的期望等于一个常数乘以平均分数。您可以修改参数:

    选择= optimoptions (“遗传算法”,“FitnessScalingFcn”,{@fitscalingshiftlinear,速度})

    的默认值2

  • 处理函数允许您编写自己的尺度函数。

    选择= optimoptions (“遗传算法”,“FitnessScalingFcn”,@myfun);

    你的扩展函数必须有以下调用的语法:

    函数nParents期望= myfun(分数)

    函数的输入参数是:

    • 分数-一个向量的标量,一个用于每个成员的人口

    • nParents——父母需要从这个人口的数量

    函数返回期望,一个列向量的长度相同的标量分数,给每个成员的人口的比例值。的条目的总和期望必须等于nParents

    传递额外的参数解释如何提供额外的参数函数。

看到健身比例为更多的信息。

选择选项

选择选项指定遗传算法如何选择父母对下一代。

SelectionFcn选项指定选择功能。

gamultiobj只使用了“selectiontournament”选择功能。

遗传算法的选项是:

  • “selectionstochunif”- - -遗传算法默认选择功能,“selectionstochunif”勾勒出一条线,线的每个家长都对应于一个部分的长度成比例缩放值。中沿着直线移动的算法步骤相同的大小。在每个步骤中,该算法分配父母从部分土地。第一步是一个随机数小于步长。

  • “selectionremainder”——选择分配剩余部分父母确定性从每个个体的比例值的整数部分,然后使用轮盘赌选择剩下的小数部分。例如,如果个体的比例值为2.3,个人列出父母因为整数部分是2的两倍。在父母被分配根据比例值的整数部分,其余的父母是随机选择。父母选择的概率在这一步成正比的小数部分比例值。

  • “selectionuniform”——统一选择使用父母的期望和数量选择父母。统一的选择是有用的调试和测试,但并不是一个非常有效的搜索策略。

  • “selectionroulette”——选择父母通过模拟一个轮盘,轮盘赌选择的区域的部分轮对应一个正比于个人的期望。算法使用一个随机数来选择一个部分的概率等于它的面积。

  • “selectiontournament”——比赛选择选择每位家长的选择大小玩家随机,然后选择最好的个人的父母。大小至少要2。的默认值大小4。集大小到一个不同的值如下:

    选择= optimoptions (“遗传算法”,“SelectionFcn”,{@selectiontournament、大小})

    NonlinearConstraintAlgorithm点球,遗传算法使用“selectiontournament”与大小2

  • 请注意

    当你的问题整数约束,遗传算法gamultiobj执行整数约束,边界,在每个迭代线性约束是可行的。默认的变异、交叉、创建和选择功能,遗传算法gamultiobj申请额外的例程后的函数操作可行性。

  • 一个函数处理功能使您能够编写自己的选择。

    选择= optimoptions (“遗传算法”,“SelectionFcn”,@myfun);

    你的选择函数必须调用的语法如下:

    函数父母= myfun(期望,nParents选项)

    遗传算法提供输入参数期望,nParents,选项。你的函数返回父母的指标。

    函数的输入参数是:

    • 期望

      • 遗传算法,期望是一个列向量的每个成员的人口的健康。的比例来自于健身缩放选项

        提示

        你可以确保你有一个列向量通过使用期望(:1)。例如,编辑selectionstochunif或者其他的内置的选择功能。

      • gamultiobj,期望是一个矩阵的第一列是负的等级的个体,而第二列是衡量个人的距离。看到多目标的选择

    • nParents——父母选择的数量。

    • 选项——遗传算法选项

    函数返回父母行向量的长度nParents包含的父母选择的指标。

    传递额外的参数解释如何提供额外的参数函数。

看到选择为更多的信息。

复制选项

复制选项指定遗传算法如何为下一代创造的孩子。

EliteCount指定的个人保证生存给下一代。集EliteCount是一个正整数小于或等于人口规模。默认值是装天花板(0.05 * PopulationSize)连续的问题,0.05 *(默认PopulationSize)为整数的问题。

CrossoverFraction指定下一代的分数,除了精英孩子,由交叉。集CrossoverFraction之间的一小部分01。默认值是0.8

看到设置交叉部分了一个例子。

突变的选择

突变选项指定遗传算法如何使小随机变化的个体人口创造变异的孩子。突变提供了遗传多样性,使遗传算法来搜索一个更广泛的空间。指定的变异函数MutationFcn选择。

MutationFcn选项:

  • “mutationgaussian”——默认变异函数遗传算法对于无约束问题,“mutationgaussian”补充说,一个随机数从一个高斯分布的意思是0到父向量的每个条目。该分布的标准偏差是由参数决定规模缩小,到InitialPopulationRange选择。集规模缩小如下:

    选择= optimoptions (“遗传算法”,“MutationFcn”,{@mutationgaussian,规模,缩小})
    • 规模参数确定第一代的标准偏差。如果你设置InitialPopulationRange是一个2×1的向量v,最初的标准差是相同的在父母的所有坐标向量,并给出了规模* (v (2) - v (1))

      如果你设置InitialPopulationRange是一个向量v两行和据nvar列,最初的标准偏差在坐标是由父母的向量规模* (v(我,2),(我,1))

    • 缩小参数控制标准偏差如何缩小为一代又一代。如果你设置InitialPopulationRange一个2×1的向量,标准偏差的k一代,σk父母的,是相同的坐标向量,并给出的递归公式

      σ k = σ k 1 ( 1 缩小 k 一代又一代 )

      如果你设置InitialPopulationRange是一个向量和两行据nvar列,标准差在坐标父向量的k一代,σ我,k给出的递归公式

      σ , k = σ , k 1 ( 1 缩小 k 一代又一代 )

      如果你设置缩小1,该算法在每个坐标线性收缩标准差,直到它达到0在最后一代。一个负值的缩小导致标准差增长。

    的默认值规模缩小是1。

    谨慎

    不要使用mutationgaussian当你有界限或线性约束。否则,您的人口将不一定满足约束。相反,使用“mutationadaptfeasible”或一个定制的变异函数满足线性约束。

  • “mutationuniform”——统一的突变是一个两步的过程。首先,矢量的算法选择一小部分条目的变异个体,每个条目都有一个概率突变。的默认值0.01。在第二步中,随机数的算法取代每个选中的条目选择范围的统一入口。

    改变的默认值,

    选择= optimoptions (“遗传算法”,“MutationFcn”,{@mutationuniform,率})

    谨慎

    不要使用mutationuniform当你有界限或线性约束。否则,您的人口将不一定满足约束。相反,使用“mutationadaptfeasible”或一个定制的变异函数满足线性约束。

  • “mutationadaptfeasible”,默认的变异函数gamultiobj遗传算法当有noninteger约束,随机生成方向自适应对过去成功或失败的一代。突变选择方向和步长,满足范围和线性约束。

  • “mutationpower”是默认的变异函数遗传算法gamultiobj当问题整数约束。功率突变变异一个家长,x通过以下。为每个组件的母公司th组件的孩子:

    mutationChild (i) = x (i) - s (x (i) -磅(i))如果t < r

    = x (i) + s(乌兰巴托(i) - x (i))如果t > = r

    在这里,t按比例缩小的距离吗x(我)th下界的组件,磅(我)年代是一个随机变量来自配电和r是一个均匀分布随机数来自。

    这个函数可以处理磅(i) =乌兰巴托(我)。新的儿童的生成th组件设置为磅(我),等于乌兰巴托(我)。有关这个转换函数的更多信息参见2.1节以下参考:

    Kusum深,Krishna普拉塔普Singsh m . l . Kansal c·莫汉。一个真正解决整数编码的遗传算法和混合整数规划问题。应用数学和计算,212 (2009),505 - 518。

    请注意

    当你的问题整数约束,遗传算法gamultiobj执行整数约束,边界,在每个迭代线性约束是可行的。默认的变异、交叉、创建和选择功能,遗传算法gamultiobj申请额外的例程后的函数操作可行性。

  • “mutationpositivebasis”——这个变异函数类似于正交马德斯步骤,修改后的线性约束和边界。

  • 一个函数处理使您能够编写自己的变异函数。

    选择= optimoptions (“遗传算法”,“MutationFcn”,@myfun);

    你的变异函数必须有这个调用的语法:

    函数mutationChildren = myfun(父母、选项、据nvar FitnessFcn,状态,thisScore, thisPopulation)

    函数的参数

    • 父母——行向量的父母选择的选择功能

    • 选项——选项

    • 据nvar——数量的变量

    • FitnessFcn——适应度函数

    • 状态——包含有关当前一代的信息结构。国家结构描述了领域状态

    • thisScore——大量的当前人口的向量

    • thisPopulation——个体在当前人口的矩阵

    函数返回mutationChildren——变异后代一个矩阵行对应于孩子们的地方。矩阵的列数据nvar

    传递额外的参数解释如何提供额外的参数函数。

    谨慎

    当你有界限或线性约束,确保你的变异函数创建个人满足这些约束。否则,您的人口将不一定满足约束。

交叉选项

交叉选项指定如何将遗传算法结合了两个人,或父母,形成交叉为下一代的孩子。

CrossoverFcn指定的函数执行交叉。你可以选择从以下功能:

  • “crossoverscattered”,默认的转换函数没有线性约束问题,创建了一个随机二进制向量和选择的基因向量是1从第一个家长,和向量是一个0的基因从第二个父母,和孩子的基因结合形成。例如,如果p1p2是我的父母

    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),函数返回下面的孩子:

    child1 = (b 3 4 e 6 7 8)

    谨慎

    当你的问题线性约束,“crossoverscattered”能给一个差分布的人口。在这种情况下,使用不同的交叉功能,如“crossoverintermediate”

  • “crossoversinglepoint”选择一个随机整数n和1之间据nvar然后

    • 选择矢量条目数小于或等于n从第一个父母。

    • 选择矢量条目编号大于n从第二个父母。

    • 连接这些条目,形成一个孩子向量。

      例如,如果p1p2是我的父母

      p1 = [a b c d e f g h] p2 = (1 2 3 4 5 6 7 8)

    和交叉点是3,函数返回以下的孩子。

    孩子= [a b c 4 5 6 7 8]

    谨慎

    当你的问题线性约束,“crossoversinglepoint”能给一个差分布的人口。在这种情况下,使用不同的交叉功能,如“crossoverintermediate”

  • “crossovertwopoint”选择两个随机整数n之间的1据nvar。功能选择

    • 向量的条目数小于或等于从第一个父

    • 向量条目编号从m + 1n、包容,从第二个父母

    • 向量条目编号大于n从第一个父母。

    算法然后连接这些基因形成单个基因。例如,如果p1p2是我的父母

    p1 = [a b c d e f g h] p2 = (1 2 3 4 5 6 7 8)

    和交叉点3和6,函数返回以下的孩子。

    孩子= [a b c 4 5 6 g h]

    谨慎

    当你的问题线性约束,“crossovertwopoint”能给一个差分布的人口。在这种情况下,使用不同的交叉功能,如“crossoverintermediate”

  • “crossoverintermediate”,默认的转换函数当有线性约束,创造孩子通过加权平均的父母。您可以指定权重由一个参数,,这可以是一个标量或行向量的长度据nvar。的默认值1是一个矢量。设置参数如下。

    选择= optimoptions (“遗传算法”,“CrossoverFcn”,{@crossoverintermediate,比});

    “crossoverintermediate”创建了孩子从parent1parent2使用下面的公式。

    孩子= parent1 +兰特** (parent2——parent1……)

    如果所有的条目躺在[0,1],范围内的儿童产生超立方体定义为将父母在相反的顶点。如果不在这个范围,孩子们都可能超出了超立方体。如果是一个标量,那么所有的孩子躺在父母之间的界线。

  • “crossoverlaplace”是默认的转换函数当问题整数约束。拉普拉斯转换生成儿童使用下列公式(随机选择):

    xOverKid = p1 +提单* abs (p1, p2)

    xOverKid = p2 +提单* abs (p1, p2)

    在这里,p1,p2的父母xOverKid提单一个随机数生成的是一个人吗拉普拉斯分布。有关这个转换函数的更多信息参见2.1节以下参考:

    Kusum深,Krishna普拉塔普Singsh m . l . Kansal c·莫汉。一个真正解决整数编码的遗传算法和混合整数规划问题。应用数学和计算,212 (2009),505 - 518。

  • “crossoverheuristic”返回一个孩子躺在直线上包含两个父母,一个小距离的父母更好的健身价值的方向远离父母和更糟糕的健康价值。您可以指定更好的父母的孩子是多远的参数。的默认值是1.2。设置参数如下。

    选择= optimoptions (“遗传算法”,“CrossoverFcn”,{@crossoverheuristic,比});

    如果parent1parent2是父母,parent1有更好的健身价值,函数返回了孩子

    孩子= parent2 +比率* (parent1 parent2)…………;

    谨慎

    当你的问题线性约束,“crossoverheuristic”能给一个差分布的人口。在这种情况下,使用不同的交叉功能,如“crossoverintermediate”

  • “crossoverarithmetic”创造孩子双亲的加权算术平均数。孩子们总是可行的对线性约束和边界。

  • 请注意

    当你的问题整数约束,遗传算法gamultiobj执行整数约束,边界,在每个迭代线性约束是可行的。默认的变异、交叉、创建和选择功能,遗传算法gamultiobj申请额外的例程后的函数操作可行性。

  • 一个函数处理使您能够编写自己的转换函数。

    选择= optimoptions (“遗传算法”,“CrossoverFcn”,@myfun);

    您的转换函数必须有以下调用语法。

    xoverKids = myfun(父母、选项、据nvar FitnessFcn,未使用,thisPopulation)

    函数的参数

    • 父母——行向量的父母选择的选择功能

    • 选项——选项

    • 据nvar——数量的变量

    • FitnessFcn——适应度函数

    • 未使用的——占位符不习惯

    • thisPopulation——矩阵代表当前的人口。矩阵的行数PopulationSize和列的数量据nvar

    函数返回xoverKids——交叉后代一个矩阵行对应于孩子们的地方。矩阵的列数据nvar

    传递额外的参数解释如何提供额外的参数函数。

    谨慎

    当你有界限或线性约束,确保您的转换函数创建个人满足这些约束。否则,您的人口将不一定满足约束。

迁移选项

请注意

亚种群指的是并行处理的遗传算法的一种形式。遗传算法目前不支持这种形式。万博1manbetx在亚种群,每个工人举办的个人。这些人是一个族群。工人的发展程序独立于其他工人,除非工人之间的迁移导致一些人旅行。

因为遗传算法目前不支持这种形式的并行处理,设置没有万博1manbetx好处吗PopulationSize一个向量,或设置MigrationDirection,MigrationInterval,或MigrationFraction选项。

迁移选项指定个体如何亚种群之间移动。如果你设置发生迁移PopulationSize一个向量的长度大于1。从一个分组人口迁移发生时,最好的个体替换另一个族群最严重的个人。个人,从一个分组人口迁移到另一个复制。他们不是从源程序。

你可以控制如何迁移发生以下三个选项:

  • MigrationDirection——迁移可以发生在一个或两个方向。

    • 如果你设置MigrationDirection“前进”,向最后一个分组人口迁移发生。也就是说,nth分组人口迁移到(n+ 1)分组人口。

    • 如果你设置MigrationDirection“两个”,nth分组人口迁移到(n1)th和(n+ 1)分组人口。

    迁移包装两端的亚种。也就是最后一个分组人口迁移到第一个,第一个可能迁移到最后一个。

  • MigrationInterval——指定有多少代通过之间的迁移。例如,如果您设置MigrationInterval20.每20代,迁移。

  • MigrationFraction——指定有多少个人之间移动的亚种。MigrationFraction指定两个亚种群的比例较小的动作。例如,如果个人从50个人的分组人口迁移到分组人口100个人和设置MigrationFraction0.1,个体迁移的数量是0.1 * 50 = 5。

约束参数

参考约束求解非线性约束参数。在算法的详细信息,请参见非线性约束求解算法

通过设置选择之间的非线性约束算法NonlinearConstraintAlgorithm选项“auglag”(增广拉格朗日)或“惩罚”(点球算法)。

增广拉格朗日遗传算法

  • InitialPenalty——指定惩罚参数的初始值,使用非线性约束算法。InitialPenalty必须大于或等于1,有一个默认的10

  • PenaltyFactor-增加惩罚参数时,问题不解决所需的准确性和约束并不满意。PenaltyFactor必须大于1,有一个默认的One hundred.

点球算法

点球算法使用“gacreationnonlinearfeasible”在默认情况下创建函数。创建这个函数使用fmincon找到可行的个人。“gacreationnonlinearfeasible”开始fmincon从不同的初始点的范围内InitialPopulationRange选择。可选地,“gacreationnonlinearfeasible”可以运行fmincon在平行的初始点。

您可以指定的调优参数“gacreationnonlinearfeasible”使用以下名称-值对。

的名字 价值
SolverOpts fmincon选项,创建使用optimoptionsoptimset
UseParallel 真正的、运行fmincon同时在初始点;默认是
NumStartPts 的开始点,一个正整数总和(PopulationSize)在的价值。

包括单元阵列中的名称-值对@gacreationnonlinearfeasible

选择= optimoptions(“遗传算法”,“CreationFcn”{@gacreationnonlinearfeasible,……“UseParallel”,的确,“NumStartPts”, 20});

多目标的选择

多目标选项定义参数的特征gamultiobj算法。您可以指定以下参数:

  • ParetoFraction——设置个人的分数在第一帕累托面前,解算器选择个人更高的领域。这个选项是一个标量在0和1之间。

    请注意

    个人的分数在第一帕累托可以超过前面ParetoFraction。这发生在几乎没有个人的其他步骤6的行列迭代

  • DistanceMeasureFcn——定义一个处理函数,计算距离测量的个体,计算在决策变量空间(基因型,也称为设计变量空间)或者在函数空间(表现型)。例如,默认距离测量功能“distancecrowding”在函数空间,这是一样的{@distancecrowding,“表现型”}

    “距离”措施人口中的每一个个体的拥挤。选择如下:

    • “distancecrowding”,或者相当于{@distancecrowding,“表现型”}——测量在适应度函数空间的距离。

    • {@distancecrowding,基因型的}——测量在决策变量空间的距离。

    • @distancefunction——编写一个自定义距离函数使用以下模板。

      函数距离= distancefunction(流行、分数、期权)%取消以下两行之一,或者是两者的结合% y =分数;%表型% y =流行;%基因型popSize =大小(y, 1);%的个人numData =大小(y, 2);%的维度或健身功能距离= 0 (popSize, 1);%分配输出%计算距离

      gamultiobj通过人口流行人口,计算得分分数和选项选项。你的距离函数返回的距离参考每个成员的人口,如最近邻在某种意义上。例如,编辑内置的文件distancecrowding.m

混合功能选项

遗传算法混合函数

混合函数是另一个最小化函数运行遗传算法终止后。您可以指定一个混合功能HybridFcn选择。不要使用整数问题。的选择是

  • []——没有混合功能。

  • “fminsearch”——使用MATLAB®函数fminsearch执行无约束极小化。

  • “patternsearch”——使用一个模式搜索执行限制或无约束极小化。

  • “fminunc”——使用优化工具箱™函数fminunc执行无约束极小化。

  • “fmincon”——使用优化工具箱函数fmincon执行约束最小化。

请注意

确保你的混合函数接受你的问题约束。否则,遗传算法抛出一个错误。

你可以设置单独的选项混合功能。使用optimsetfminsearch,或optimoptionsfmincon,patternsearch,或fminunc。例如:

hybridopts = optimoptions (“fminunc”,“显示”,“通路”,“算法”,“拟牛顿”);
包括遗传算法的混合选项选项如下:
选择= optimoptions (“遗传算法”选项,“HybridFcn”,{@fminunc, hybridopts});
hybridopts必须存在之前,你准备好了吗选项

看到遗传算法的混合方案了一个例子。看到当使用混合功能

gamultiobj混合函数

混合函数是运行在另一个最小化函数多目标遗传算法终止。您可以指定混合功能“fgoalattain”HybridFcn选择。

在使用多目标混合函数,解决如下:

  1. 计算每个目标函数的最大和最小的解决方案。万博 尤文图斯对客观j在解决方案k,让

    F 马克斯 ( j ) = 马克斯 k F k ( j ) F 最小值 ( j ) = 最小值 k F k ( j )

  2. 计算每个解决方案的总重量k,

    w ( k ) = j F 马克斯 ( j ) F k ( j ) 1 + F 马克斯 ( j ) F 最小值 ( j )

  3. 为每个目标函数计算重量j在每一个解决方案k,

    p ( j , k ) = w ( k ) F 马克斯 ( j ) F k ( j ) 1 + F 马克斯 ( j ) F 最小值 ( j )

  4. 对于每一个解决方案k,执行的目标达到情况问题的目标向量Fk(j)和权向量p(j,k)。

有关更多信息,请参见第9.6节的黛比[3]

停止条件的选择

停止标准确定的算法将会被终止。您可以指定以下选项:

  • MaxGenerations——指定的最大数量的迭代遗传算法来执行。默认值是100 * numberOfVariables

  • MaxTime——指定的最长时间在几秒钟内遗传算法运行停止之前,作为衡量抽搐toc。执行每一次迭代后,此限制遗传算法迭代可以超过限制时需要大量的时间。

  • FitnessLimit——算法停止如果最好的健身价值小于或等于的价值FitnessLimit。并不适用于gamultiobj

  • MaxStallGenerations——算法停止如果最好的适应度函数值的平均相对变化MaxStallGenerations小于或等于什么FunctionTolerance。(如果StallTest选择是“geometricWeighted”,然后测试是一个几何加权平均相对变化。)为非线性约束的问题,MaxStallGenerations适用于子问题(见非线性约束求解算法)。

    gamultiobj,如果几何平均值的相对变化传播帕累托的解决方案万博 尤文图斯MaxStallGenerations小于FunctionTolerance,最终小于平均传播蔓延过去MaxStallGenerations,则算法停止。几何平均系数是½。传播是一个帕累托面前的运动。看到gamultiobj算法

  • MaxStallTime——算法停止如果没有改善最好的健身价值的间隔时间以秒为单位指定的MaxStallTime,以抽搐toc

  • FunctionTolerance——算法停止如果最好的适应度函数值的平均相对变化MaxStallGenerations小于或等于什么FunctionTolerance。(如果StallTest选择是“geometricWeighted”,然后测试是一个几何加权平均相对变化。)

    gamultiobj,如果几何平均值的相对变化传播帕累托的解决方案万博 尤文图斯MaxStallGenerations小于FunctionTolerance,最终小于平均传播蔓延过去MaxStallGenerations,则算法停止。几何平均系数是½。传播是一个帕累托面前的运动。看到gamultiobj算法

  • ConstraintTolerance- - -ConstraintTolerance不是作为停止准则。它是用来确定可行性对非线性约束。同时,max (sqrt (eps), ConstraintTolerance)确定可行性对线性约束。

看到设置最大数量的代和失速代了一个例子。

输出函数的选择

输出函数在每一代遗传算法的函数调用。不像其他的解决者,遗传算法输出函数不仅可以读取的值的算法,而且修改这些值。输出函数也可以停止解决者根据你设定的条件。

选择= optimoptions (“遗传算法”,“OutputFcn”,@myfun);

多个输出函数,输入一个函数处理单元阵列:

选择= optimoptions (“遗传算法”,“OutputFcn”,{@myfun1 @myfun2,});

看到一个模板,您可以使用它来编写您自己的输出函数,输入

编辑gaoutputfcntemplate

在MATLAB命令行。

例如,看到的自定义输出函数的遗传算法

结构的输出功能

你的输出函数必须有以下调用的语法:

[选项,optchanged] = myfun(选项、状态标志)

MATLAB传递选项,状态,国旗数据输出函数和输出函数返回状态,选项,optchanged数据。

请注意

停止迭代,集state.StopFlag一个非空的特征向量,如“y”

输入输出函数有以下参数:

  • 选项——选项

  • 状态——包含有关当前一代的信息结构。国家结构描述了领域状态

  • 国旗-算法的现状:

    • “init”——初始化状态

    • “通路”——迭代状态

    • “中断”——迭代的非线性约束问题的子问题“auglag”非线性约束算法。当国旗“中断”:

      • 的值状态字段适用于子问题迭代。

      • 遗传算法不接受改变选项,忽略了optchanged

      • state.NonlinIneqstate.NonlinEq字段不是可用的。

    • “完成”——最终状态

传递额外的参数解释如何提供额外的参数函数。

输出函数返回以下参数遗传算法:

  • 状态——包含有关当前一代的信息结构。国家结构描述了领域状态。停止迭代,集state.StopFlag一个非空的特征向量,如“y”

  • 选项——选项修改输出函数。这个参数是可选的。

  • optchanged——布尔标志指示的变化选项。改变选项为后续迭代,集optchanged真正的

改变国家结构

谨慎

改变状态结构不小心会导致不一致或错误的结果。通常情况下,您可以实现相同或更好的状态修改通过突变或交叉功能,而不是改变状态结构情节功能或输出功能。

遗传算法可以改变输出功能状态结构(见国家结构)。在这个结构变化值时要小心,因为你可以通过不一致的数据遗传算法

提示

如果你的输出结构的变化人口场,然后一定要更新分数字段,可能最好的,NonlinIneq,或NonlinEq领域,包含一致的信息。

更新分数场后改变了人口场,首先计算人口的适应度函数值,然后计算出健身人口比例。看到健身缩放选项

显示命令窗口选项

“显示”在命令行指定多少信息显示在遗传算法运行时。可用的选项是

  • “最后一次”(默认)——显示停止的原因。

  • “关闭”或同等“没有”——没有显示输出。

  • “通路”——信息显示在每一个迭代。

  • “诊断”——信息显示在每一个迭代。此外,诊断信息和列出了一些问题已经从默认的选项。

这两个“通路”“诊断”显示以下信息:

  • 一代代数量

  • f-count——累积数量的适应度函数评价

  • 最好的f (x)-最佳适应度函数值

  • 意思是f (x)——平均适应度函数值

  • 摊位代——许多代以来的最后改进适应度函数

当一个非线性约束函数被指定,“通路”“诊断”不要显示意思是f (x),但另外显示:

  • 马克斯约束——最大非线性约束违反

此外,“通路”“诊断”迭代之前显示问题信息显示,如问题类型和创建、变异、交叉和选择功能遗传算法gamultiobj是使用。

Vectorize和并行选项(用户函数评价)

你可以选择你的健康和约束函数评估在串行,平行或矢量化的方式。设置“UseVectorized”“UseParallel”选择与optimoptions

  • “UseVectorized”(默认),遗传算法调用一个个体的适应度函数,因为它遍历。(这个假设“UseParallel”在其默认值吗。)

  • “UseVectorized”真正的,遗传算法调用全部人口的适应度函数,在一个对适应度函数的调用。

    如果有非线性约束,适应度函数和非线性约束都需要矢量化算法为了计算矢量化的方式。

    看到Vectorize健身功能了一个例子。

  • UseParallel真正的,遗传算法并行调用适应度函数,使用并行环境建立了(见如何使用并行处理在全球优化工具箱)。集UseParallel(默认)来计算连续。

请注意

你不能同时使用矢量化和并行计算。如果你设置“UseParallel”真正的“UseVectorized”真正的,遗传算法评估你的健康和约束函数矢量化的方式,而不是平行的。

健身和约束函数是如何评估

UseVectorized= UseVectorized=真正的
UseParallel= 串行 矢量化
UseParallel=真正的 平行 矢量化