主要内容

遗传算法选项

遗传算法的选项

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

选项= optimoptions(“遗传算法”“Option1”“value1”“Option2”“value2”);
  • 中列出了一些选项斜体.这些选项不会出现在清单中optimoptions的回报。看看为什么”optimoptions隐藏这些选项值,请参见optimoptions隐藏的选项

  • 确保将选项传递给求解器。否则,patternsearch使用默认选项值。

    [x,fval] = ga(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,选项

绘图选项

PlotFcn指定在每次迭代中调用的绘图函数遗传算法gamultiobj.设置PlotFcn选项为内置绘图函数名或绘图函数的句柄。单击,可以随时停止算法停止图窗口上的按钮。例如,显示最佳函数值,设置选项如下:

options = optimoptions('ga','PlotFcn','gaplotbestf');

要显示多个图,使用内置图函数名的单元格数组或函数句柄的单元格数组:

options = optimoptions('patternsearch','PlotFcn', {@plotfun1, @plotfun2,…});

在哪里@plotfun1@plotfun2,等等都是绘图函数的函数句柄。如果指定多个绘图函数,则所有绘图将作为子绘图显示在同一窗口中。右键单击任何子图,可在单独的图形窗口中获得更大的版本。

可用的绘图函数遗传算法gamultiobj

  • “gaplotscorediversity”绘制每代得分的直方图。

  • “gaplotstopping”绘制停止标准级别。

  • “gaplotgenealogy”绘制个体的谱系图。从一代到下一代的线条用颜色编码如下:

    • 红线表示突变儿童。

    • 蓝线表示交叉子结点。

    • 黑线代表精英。

  • “gaplotscores”画出每一代个体的分数。

  • “gaplotdistance”画出每一代个体之间的平均距离。

  • “gaplotselection”绘制父节点的直方图。

  • “gaplotmaxconstr”绘制每代非线性约束违反的最大值。为遗传算法,仅当NonlinearConstraintAlgorithm选择是“auglag”(非整数问题的默认值)。因此,不可用于整数约束的问题,因为它们使用“惩罚”非线性约束算法。

  • 您还可以创建和使用自己的绘图函数。图功能结构描述自定义绘图函数的结构。将任何自定义函数作为函数句柄传递。

下列绘图函数可用于遗传算法只有:

  • “gaplotbestf”绘制最佳分数值和平均分数与世代的关系。

  • “gaplotbestindiv”绘制每代适应度函数值最佳个体的向量项。

  • “gaplotexpectation”绘制出每一代的预期子女数量与原始分数之间的关系。

  • “gaplotrange”绘制每一代的最小值、最大值和平均值。

下列绘图函数可用于gamultiobj只有:

  • “gaplotpareto”绘制前两个目标函数的帕累托前沿。

  • “gaplotparetodistance”绘制每个个体与其邻居之间距离的柱状图。

  • “gaplotrankhist”绘制个体排名的直方图。等级1的个体在帕累托边界上。等级2的个体低于至少一个等级1的个体,但不低于来自其他等级的任何个体,等等。

  • “gaplotspread”以迭代次数为函数绘制平均扩散图。

图功能结构

plot函数的第一行有这样的形式:

函数state = plotfun(选项,状态,标志)

函数的输入参数为

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

  • 状态-包含当前代信息的结构。国家结构字段的描述。状态

  • 国旗—描述当前算法所处的阶段。详细信息请参见输出函数选项

传递额外参数解释如何向函数提供附加参数。

输出参数状态也是一个国家结构。传递输入参数,如果你喜欢可以修改;看到改变国家结构.要停止迭代,请设置状态。停止Flag到非空字符向量,例如“y”

国家结构

ga。国家结构遗传算法,它是绘图、突变和输出函数的输入参数,包含以下字段:

  • 一代-当前代号。

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

  • StopFlag-停止的原因,一个字符向量。

  • LastImprovement-适应度值最后一次改善发生的年代。

  • LastImprovementTime-最近一次改善发生的时间。

  • 最好的-包含每代最好分数的向量。

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

  • FunEval—功能评估累计次数。

  • 期望-对个人选择的期望。

  • 选择-精英、交叉、突变选择个体的指标。

  • 人口-这一代的人口。

  • 分数-目前人口的几十个。

  • NonlinIneq-当前点的非线性不等式约束,仅当指定非线性约束函数时才存在,没有整数变量,国旗不是“中断”,NonlinearConstraintAlgorithm“auglag”

  • NonlinEq-当前点的非线性等式约束,仅在指定非线性约束函数时存在,没有整数变量,国旗不是“中断”,NonlinearConstraintAlgorithm“auglag”

  • EvalElites—是否存在的逻辑值遗传算法评价精英个体的适应度函数。最初,这个值是真正的.在第一代中,如果精英个体的评价是他们之前的值(这表明适应度函数是确定的),那么这个值就变成默认情况下,用于后续迭代。当EvalElites遗传算法没有重新评估精英个体的适应度函数。通过更改输出,可以在自定义绘图函数或自定义输出函数中覆盖此行为状态。EvalElites

  • HaveDuplicates—是否存在的逻辑值遗传算法为初始种群添加重复的个体。遗传算法使用较小的相对容差来确定个体是重复的还是唯一的。如果HaveDuplicates真正的,然后遗传算法定位独特的个体,并对每个独特的个体只评估一次适应度函数。遗传算法将适应度和约束函数值复制到重复的个体。遗传算法每代都重复测试,直到所有个体都是唯一的。测试按顺序进行n * m *日志(m)操作,人口规模和n据nvar.若要在自定义绘图函数或自定义输出函数中重写此测试,请设置输出状态。HaveDuplicates

gamultiobj。国家结构gamultiobj,它是绘图、突变和输出函数的输入参数,包含以下字段:

  • 人口-这一代的人口

  • 分数-目前人口的分数,a人口——- - - - - -nObjectives矩阵,nObjectives目标的数量是多少

  • 一代-当前代号

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

  • StopFlag-停止的原因,一个字符向量

  • FunEval—功能评估累计次数

  • 选择-精英、交叉、突变选择个体的指标

  • 排名-总体中成员的等级向量

  • 距离-总体中每个成员到最近相邻成员的距离向量

  • AverageDistance的标准偏差(不是平均值)距离

  • 传播-向量,其中的条目是每一代的传播

  • mIneq-非线性不等式约束数

  • 微地震-非线性等式约束数

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

  • C-当前点的非线性不等式约束,aPopulationSize——- - - - - -mIneq矩阵

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

  • isFeas-可行性人口,逻辑向量与PopulationSize元素

  • maxLinInfeas-关于总体线性约束的最大不可行性

人口的选择

填充选项允许您指定遗传算法使用的填充参数。

PopulationType指定适应度函数的输入类型。类型及其限制为:

  • “doubleVector”-如果种群中的个体具有类型,则使用此选项.将此选项用于混合整数编程。这是默认值。

  • “位”-如果种群中的个体具有以下成分,则使用此选项01

    谨慎

    个体在位串人口是类型的载体,而不是字符串或字符。

    CreationFcn而且MutationFcn,使用“gacreationuniform”而且“mutationuniform”或自定义函数的句柄。为CrossoverFcn,使用“crossoverscattered”“crossoversinglepoint”“crossovertwopoint”,或自定义函数的句柄。你不能使用HybridFcn,遗传算法忽略所有约束,包括边界、线性约束和非线性约束。

  • “自定义”—自定义填充类型。在这种情况下,您还必须使用自定义CrossoverFcn而且MutationFcn.必须提供自定义创建函数或InitialPopulationMatrix.你不能使用HybridFcn,遗传算法忽略所有约束,包括边界、线性约束和非线性约束。

PopulationSize指定每一代有多少个体。在较大的种群规模下,遗传算法对解空间的搜索更加彻底,从而减少了算法返回局部最小值而不是全局最小值的几率。然而,较大的种群规模也会导致算法运行速度变慢。默认为'当numberOfVariables <= 5时为50,否则为200'

如果你设置PopulationSize对于一个向量,遗传算法会创建多个子种群,子种群的数量就是向量的长度。每个子总体的大小是向量的对应项。注意,这个选项没有用。看到迁移选项

CreationFcn指定用于创建初始填充的函数遗传算法.不指定创建函数与整数问题,因为遗传算法凌驾于你做出的任何选择之上。选择:

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

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

    谨慎

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

  • “gacreationlinearfeasible”是存在线性约束而没有整数约束时的默认值。这种选择创建了一个随机的初始种群,满足所有的边界和线性约束。如果存在线性约束,“gacreationlinearfeasible”在约束区域的边界上创建许多个体,并创建一个分散良好的种群。“gacreationlinearfeasible”忽略了InitialPopulationRange“gacreationlinearfeasible”调用linprog创建一个关于边界和线性约束的可行总体。

    有关显示其行为的示例,请参见自定义Plot函数和ga中的线性约束

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

  • 函数句柄允许您编写自己的创建函数,该函数必须生成您在其中指定的类型的数据PopulationType.例如,

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

    您的创建函数必须具有以下调用语法。

    函数Population = myfun(genome elength, FitnessFcn, options)

    函数的输入参数是:

    • Genomelength-适应度函数的自变量个数

    • FitnessFcn-适应度函数

    • 选项——选项

    函数返回人口,为遗传算法的初始总体。

    传递额外参数解释如何向函数提供附加参数。

    谨慎

    当您有边界或线性约束时,请确保您的创建函数创建的个体满足这些约束。否则,您的总体可能无法满足约束条件。

InitialPopulationMatrix指定遗传算法的初始填充。默认值为[],在这种情况下遗传算法使用默认值CreationFcn创建初始种群。控件中输入非空数组InitialPopulationMatrix,数组的值不能超过PopulationSize行,完全正确据nvar列,据nvar是变量的个数,第二个输入要多少遗传算法gamultiobj.如果你有部分初始人口,即小于PopulationSize行,然后遗传算法调用CreationFcn生成剩下的个体。

InitialScoreMatrix指定初始填充的初始分数。最初的分数也可能是不完整的。不指定整数问题的初始分数,因为遗传算法凌驾于你做出的任何选择之上。

InitialPopulationRange属性生成的初始填充中向量的范围gacreationuniform创建函数。你可以设置InitialPopulationRange是一个有两行和的矩阵据nvar列,其中的每一列都具有表单(磅;乌兰巴托),在那里下限是和吗乌兰巴托是该坐标中元素的上界。如果你指定InitialPopulationRange为了成为一个2乘1的向量,每一项都被展开成一个固定长度的行据nvar.如果没有指定InitialPopulationRange,默认为[10] -10;[1 e4 + 1; 1 e4 + 1)对于整数约束的问题),修改为匹配任何现有的边界。“gacreationlinearfeasible”忽略了InitialPopulationRange.看到设置初始范围举个例子。

健身缩放选项

适应度缩放将适应度函数返回的原始适应度分数转换为适合选择函数的范围内的值。

FitnessScalingFcn指定执行缩放的函数。选项有

  • “fitscalingrank”-默认适应度缩放功能,“fitscalingrank”它是根据每个学生的排名而不是分数来衡量原始分数的。个体的排名是它在排序分数中的位置。有地位的人r缩放分数是否成正比 1 / r .所以最适合的个体的缩放分数正比于1,其次最适合的个体的缩放分数正比于 1 / 2 等等。等级适应度缩放消除了原始分数扩散的影响。平方根使得排名靠后的个体得分与排名靠前的个体得分接近。有关更多信息,请参见健身比例

  • “fitscalingprop”-比例缩放使个体的缩放值与其原始适应度分数成比例。

  • “fitscalingtop”-顶级缩放对顶级个人一视同仁。您可以使用一个附加参数修改顶部缩放:

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

    数量指定分配正比例值的个人数量。数量可以是1到总体大小之间的整数,也可以是0到1之间的分数,指定总体大小的一个分数。默认值为0.4.每个产生后代的个体都被分配了一个相等的比例值,而其余的个体则被分配为0。缩放值的形式为[01/n 1/n 0 01/n 0 01/n…]。

  • “fitscalingshiftlinear”- Shift线性缩放缩放原始分数,使最适合的个体的期望等于一个常数称为乘以平均分。您可以修改参数:

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

    的默认值2

  • 函数句柄允许您编写自己的缩放函数。

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

    你的缩放函数必须有以下调用语法:

    函数期望= myfun(分数,nParents)

    函数的输入参数是:

    • 分数-标量向量,一个代表总体的每个成员

    • nParents-这个群体需要的父母数量

    函数返回期望,等长标量的列向量分数,给出总体中每个成员的比例值。元素的和期望必须等于nParents

    传递额外参数解释如何向函数提供附加参数。

看到健身比例获取更多信息。

选择选项

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

SelectionFcnOption指定选择函数。不要用于整数问题。

gamultiobj仅使用“selectiontournament”选择功能。

遗传算法选项是:

  • “selectionstochunif”- - -遗传算法默认选择功能,“selectionstochunif”,表示一条直线,其中每个父结点对应于长度与其缩放值成比例的直线的一段。算法沿着这条线以相同大小的步骤移动。在每一步中,算法从它所在的部分分配一个父节点。第一步是一个小于步长的均匀随机数。

  • “selectionremainder”-剩余选择从每个个体的缩放值的整数部分确定地分配父母,然后对剩余的小数部分使用轮盘选择。例如,如果一个个体的缩放值为2.3,则该个体作为父节点被列出两次,因为整数部分为2。根据缩放值的整数部分分配父结点后,随机选择其余父结点。在这一步中选择父元素的概率与其比例值的小数部分成正比。

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

  • “selectionroulette”-轮盘选择通过模拟轮盘来选择父母,轮盘对应个体的截面面积与个体的期望成正比。该算法使用一个随机数来选择一个概率等于其面积的部分。

  • “selectiontournament”-比赛选择选择每个家长大小玩家随机选择,然后从集合中选择最好的个体作为父母。大小至少是2。的默认值大小4.集大小为不同的值,如下所示:

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

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

  • 函数句柄使您能够编写自己的选择函数。

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

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

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

    遗传算法提供输入参数。期望nParents,选项.函数返回父节点的下标。

    函数的输入参数是:

    • 期望

      • 遗传算法期望是总体中每个成员的比例适应度的列向量。缩放来自于健身缩放选项

        提示

        你可以通过使用期望(:1).例如,编辑selectionstochunif或者其他内置的选择函数。

      • gamultiobj期望是一个矩阵,其第一列是个体的秩的负数,其第二列是个体的距离度量。看到多目标的选择

    • nParents-可选择的父母数量。

    • 选项-遗传算法选项

    函数返回父母,长度的行向量nParents包含所选父节点的索引。

    传递额外参数解释如何向函数提供附加参数。

看到选择获取更多信息。

复制选项

繁殖选项指定了遗传算法如何为下一代创造子代。

EliteCount指定保证能存活到下一代的个体数量。集EliteCount为小于或等于总体大小的正整数。默认值为装天花板(0.05 * PopulationSize)对于连续的问题,和0.05 *(默认PopulationSize)对于混合整数问题。

CrossoverFraction指定通过交叉产生的除精英子女外的下一代的比例。集CrossoverFraction之间的分数0而且1.默认值为0.8

看到交叉分数设置举个例子。

突变的选择

突变选项指定遗传算法如何在群体中的个体中进行小的随机变化,以创建突变子。突变提供了遗传多样性,使遗传算法能够搜索更广阔的空间。属性中指定突变函数MutationFcn选择。不要用于整数问题。

MutationFcn选项:

  • “mutationgaussian”-无约束问题的默认突变函数,“mutationgaussian”,将从均值为0的高斯分布中取的随机数加到父向量的每一项。该分布的标准偏差由参数决定规模而且缩小,而在InitialPopulationRange选择。集规模而且缩小如下:

    选项= optimoptions(“遗传算法”“MutationFcn”...{@mutationgaussian,缩放,收缩})
    • 规模参数决定了第一代的标准差。如果你设置InitialPopulationRange是一个2 × 1向量v时,父向量在各坐标处的初始标准差相同,由规模* (v (2) - v (1))

      如果你设置InitialPopulationRange成为一个矢量v有两行据nvar列,坐标处的初始标准差父向量的规模*(v(i,2) - v(i,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, rate})

    谨慎

    不要使用mutationuniform当你有边界或线性约束时。否则,您的总体将不一定满足约束条件。相反,使用“mutationadaptfeasible”或者一个满足线性约束的自定义变异函数。

  • “mutationadaptfeasible”,即存在约束时的默认突变函数,随机生成相对于上一次成功或不成功生成的自适应方向。突变选择满足边界和线性约束的方向和步长。

  • 函数句柄使您能够编写自己的突变函数。

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

    你的突变函数必须有这样的调用语法:

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

    函数的参数是

    • 父母-选择函数选择的父节点行向量

    • 选项——选项

    • 据nvar-变量的数量

    • FitnessFcn-适应度函数

    • 状态-包含当前代信息的结构。国家结构字段的描述。状态

    • thisScore-当前人群得分向量

    • thisPopulation-当前种群中个体的矩阵

    函数返回mutationChildren-突变的后代-作为一个矩阵,其中行对应子代。矩阵的列数是据nvar

    传递额外参数解释如何向函数提供附加参数。

    谨慎

    当您有边界或线性约束时,请确保突变函数创建的个体满足这些约束。否则,您的总体将不一定满足约束条件。

交叉选项

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

CrossoverFcn指定执行交叉的函数。不要用于整数问题。您可以从以下功能中选择:

  • “crossoverscattered”,是无线性约束问题的默认交叉函数,它创建一个随机二进制向量,并从第一个父结点选择向量为1的基因,从第二个父结点选择向量为0的基因,并将这些基因组合成子结点。例如,如果p1而且p2父母是

    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 = [a b 3 4 e 6 7 8]

    谨慎

    当你的问题有线性约束时,“crossoverscattered”可以给出一个分布不均匀的种群。在这种情况下,使用不同的交叉函数,例如“crossoverintermediate”

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

    • 从第一个父节点中选择编号小于或等于n的向量项。

    • 从第二个父节点中选择编号大于n的向量项。

    • 连接这些项以形成子向量。

      例如,如果p1而且p2父母是

      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]

    谨慎

    当你的问题有线性约束时,“crossoversinglepoint”可以给出一个分布不均匀的种群。在这种情况下,使用不同的交叉函数,例如“crossoverintermediate”

  • “crossovertwopoint”选择两个随机整数而且n之间的1而且据nvar.函数选择

    • 数小于等于的向量项从第一个父母

    • 向量项从m + 1n,包括从第二个父母

    • 编号大于的向量项n来自第一个父母。

    然后,该算法将这些基因串联起来,形成一个单一的基因。例如,如果p1而且p2父母是

    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”从创建子元素parent1而且parent2用下面的公式。

    Child = parent1 + rand ** (parent2 - parent1)

    的所有项在范围[0,1]中,生成的子节点位于通过将父节点置于相对顶点定义的超立方体内。如果不在这个范围内,子结点可能在超立方体之外。如果为标量,则所有子节点都位于父节点之间的这条线上。

  • “crossoverheuristic”返回一个位于包含两个父节点的直线上的子节点,在远离适合度值较差的父节点的方向上,该子节点距离适合度值较好的父节点有一小段距离。您可以通过参数指定子节点与较好的父节点之间的距离.的默认值是1.2。设置参数如下。

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

    如果parent1而且parent2父母,和parent1有更好的适应度值,函数返回子

    Child = parent2 + ratio * (parent1 - parent2);

    谨慎

    当你的问题有线性约束时,“crossoverheuristic”可以给出一个分布不均匀的种群。在这种情况下,使用不同的交叉函数,例如“crossoverintermediate”

  • “crossoverarithmetic”创建两个父结点的加权算术平均值的子结点。对于线性约束和边界子函数总是可行的。

  • 函数句柄允许您编写自己的交叉函数。

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

    交叉函数必须具有以下调用语法。

    xoverKids = myfun(父母,选项,nvars, FitnessFcn,...未使用,thisPopulation)

    函数的参数是

    • 父母-选择函数选择的父节点行向量

    • 选项——选项

    • 据nvar-变量的数量

    • FitnessFcn-适应度函数

    • 未使用的—未使用占位符

    • thisPopulation-表示当前人口的矩阵。矩阵的行数是PopulationSize列数是据nvar

    函数返回xoverKids-交叉子代-作为一个矩阵,其中行对应子代。矩阵的列数是据nvar

    传递额外参数解释如何向函数提供附加参数。

    谨慎

    当你有边界或线性约束时,确保你的交叉函数创建的个体满足这些约束。否则,您的总体将不一定满足约束条件。

迁移选项

请注意

亚种群参考并行处理的一种形式为遗传算法。遗传算法目前不支持此表单。金宝app在亚种群中,每个工蜂都有一些个体。这些个体是一个亚群体。工人独立于其他工人进化出子种群,除非迁移导致一些个体在工人之间迁移。

因为遗传算法目前不支持这种形式的并行处理,对设置有金宝app没有好处PopulationSize到一个向量,或设置MigrationDirectionMigrationInterval,或MigrationFraction选项。

迁移选项指定个体如何在亚种群之间移动。如果您设置,则会发生迁移PopulationSize是一个长度大于1的向量。当迁移发生时,一个亚群体中的最佳个体会取代另一个亚群体中的最差个体。从一个亚种群迁移到另一个亚种群的个体被复制。它们不会从源子种群中移除。

您可以通过以下三个选项控制迁移发生的方式:

  • MigrationDirection-迁移可以单向进行,也可以双向进行。

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

    • 如果你设置MigrationDirection“两个”,nth亚种群迁移到(n-1)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

options = optimoptions('ga','CreationFcn',{@gacreationnonlinearfeasible,……“UseParallel”,的确,“NumStartPts”,20});

多目标的选择

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

  • ParetoFraction-设置保持在第一个帕累托前沿的个体比例,同时求解器从更高的前沿选择个体。该选项是0到1之间的标量。

    请注意

    第一个帕累托前沿的个体比例可以超过ParetoFraction.这种情况发生在步骤6中其他等级的个体太少的情况下迭代

  • DistanceMeasureFcn-定义一个函数句柄,用于计算个体的距离测量,在决策变量空间(基因型,也称为设计变量空间)或函数空间(表型)中计算。例如,默认的距离测量函数为“distancecrowding”在函数空间中,也就是{@distancecrowding,“表现型”}

    “距离”衡量的是群体中每个个体的拥挤程度。在以下选项中选择:

    • “distancecrowding”,或等价的{@distancecrowding,“表现型”}-在适应度函数空间中测量距离。

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

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

      取消以下两行之一的注释,或使用两者的组合% y = score;%表型% y =流行;%基因型popSize = size(y,1);numData = size(y,2);维度数或适应度函数距离= 0 (popSize,1);%分配输出%这里计算距离

      gamultiobj传入人口流行中总体的计算得分分数的选项选项.你的距离函数返回从总体的每个成员到一个参考的距离,比如在某种意义上最近的邻居。例如,编辑内置文件distancecrowding.m

混合功能选项

遗传算法混合函数

混合函数是在遗传算法结束后运行的另一个最小化函数。方法中指定混合函数HybridFcn选择。不要用于整数问题。选项是

  • []—无混合功能。

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

  • “patternsearch”-使用模式搜索来执行有约束或无约束最小化。

  • “fminunc”-使用优化工具箱™功能fminunc执行无约束最小化。

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

请注意

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

您可以为混合功能设置单独的选项。使用optimsetfminsearch,或optimoptionsfminconpatternsearch,或fminunc.例如:

hybridopts = optimoptions('fminunc','Display','iter','Algorithm','准牛顿');
在遗传算法中包含混合选项选项如下:
options = optimoptions('ga',options,'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,用目标向量进行目标实现问题Fkj)和权向量pjk).

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

停止标准选项

停止条件决定了导致算法终止的原因。您可以指定以下选项:

  • MaxGenerations—遗传算法的最大迭代次数。默认为100 * numberOfVariables

  • MaxTime-遗传算法在停止前运行的最大时间(秒)抽搐而且toc.这个限制是在每次迭代之后强制执行的,所以遗传算法当迭代花费大量时间时,可能会超出限制。

  • FitnessLimit—当最佳适应度值小于或等于的值时,算法停止FitnessLimit.不适用于gamultiobj

  • MaxStallGenerations-如果最佳适应度函数值的平均相对变化超过,则算法停止MaxStallGenerations小于或等于FunctionTolerance.(如果StallTest选择是“geometricWeighted”,那么测试是针对a的几何加权平均相对变化。)对于带有非线性约束的问题,MaxStallGenerations应用于子问题(参见非线性约束求解算法).

    gamultiobj,则为相对变化的几何平均值传播帕累托解金宝搏官方网站MaxStallGenerations小于FunctionTolerance,最后的价差小于前一个的平均价差MaxStallGenerations,则算法停止。几何平均系数是1 / 2。扩散是帕累托锋运动的度量。看到gamultiobj算法

  • MaxStallTime—在指定的时间间隔内(以秒为单位),如果最佳适应度值没有改善,算法将停止MaxStallTime,以抽搐而且toc

  • FunctionTolerance-如果最佳适应度函数值的平均相对变化超过,则算法停止MaxStallGenerations小于或等于FunctionTolerance.(如果StallTest选择是“geometricWeighted”,那么测试是针对a的几何加权平均相对变化。)

    gamultiobj,则为相对变化的几何平均值传播帕累托解金宝搏官方网站MaxStallGenerations小于FunctionTolerance,最后的价差小于前一个的平均价差MaxStallGenerations,则算法停止。几何平均系数是1 / 2。扩散是帕累托锋运动的度量。看到gamultiobj算法

  • ConstraintTolerance- - -ConstraintTolerance不用作停止判据。它被用来确定关于非线性约束的可行性。同时,max (sqrt (eps), ConstraintTolerance)确定线性约束的可行性。

看到设置最大代数和失速代数举个例子。

输出函数选项

输出函数是遗传算法每代调用的函数。与其他求解器不同,a遗传算法输出函数不仅可以读取算法的状态值,还可以修改这些值。输出函数还可以根据您设置的条件暂停求解器。

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

对于多个输出函数,输入函数句柄的单元格数组:

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

若要查看可用于编写自己的输出函数的模板,请输入

编辑gaoutputfcntemplate

在MATLAB命令行。

有关示例,请参见遗传算法自定义输出函数

输出函数的结构

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

[state,options,optchanged] = myfun(options,state,flag)

MATLAB通过选项状态,国旗数据到输出函数,输出函数返回状态选项,optchanged数据。

请注意

要停止迭代,请设置状态。停止Flag到非空字符向量,例如“y”

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

  • 选项——选项

  • 状态-包含当前代信息的结构。国家结构字段的描述。状态

  • 国旗—算法当前状态:

    • “init”—初始化状态

    • “通路”-迭代状态

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

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

      • 遗传算法不接受更改选项,并忽略optchanged

      • 状态。NonlinIneq而且状态。NonlinEq字段不可用。

    • “完成”-最终状态

传递额外参数解释如何向函数提供附加参数。

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

  • 状态-包含当前代信息的结构。国家结构字段的描述。状态.要停止迭代,请设置状态。停止Flag到非空字符向量,例如“y”

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

  • optchanged—布尔标志,表示更改为选项.改变选项对于后续迭代,设置optchanged真正的

改变国家结构

谨慎

不小心改变状态结构会导致不一致或错误的结果。通常,您可以通过使用突变或交叉函数来实现相同或更好的状态修改,而不是改变图函数或输出函数中的状态结构。

遗传算法输出函数可以更改状态结构(见国家结构).在更改此结构中的值时要小心,因为您可以将不一致的数据传递回遗传算法

提示

如果输出结构更改人口字段,然后一定要更新分数场,可能还有最好的NonlinIneq,或NonlinEq字段,以便它们包含一致的信息。

要更新分数字段。人口场,首先计算种群的适应度函数值,然后计算种群的适应度缩放。看到健身缩放选项

显示到命令窗口选项

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

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

  • “关闭”或等价的“没有”—无显示。

  • “通路”—每次迭代都会显示相关信息。

  • “诊断”—每次迭代都会显示相关信息。此外,诊断还列出了一些问题信息和已从默认值更改的选项。

这两个“通路”而且“诊断”显示如下信息:

  • 一代-代数

  • f-count-适应度函数评价累计次数

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

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

  • 摊位代-自适应度函数最后一次改进以来的代数

当给定一个非线性约束函数时,“通路”而且“诊断”请勿显示意思是f (x),但会额外显示:

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

向量化和并行选项(用户功能评估)

您可以选择以串行、并行或向量化的方式计算适应度和约束函数。设置“UseVectorized”而且“UseParallel”选择与optimoptions

  • “UseVectorized”(默认),遗传算法每次在一个个体上调用适应度函数,因为它在种群中循环。(这个假设“UseParallel”的默认值.)

  • “UseVectorized”真正的遗传算法在一次对适应度函数的调用中,一次对整个种群调用适应度函数。

    如果存在非线性约束,适应度函数和非线性约束都需要向量化,以便算法以向量化的方式计算。

    看到向量化适应度函数举个例子。

  • UseParallel真正的遗传算法使用您建立的并行环境(请参阅如何在全局优化工具箱中使用并行处理).集UseParallel(默认)串行计算。

请注意

你不能同时使用向量化计算和并行计算。如果你设置“UseParallel”真正的而且“UseVectorized”真正的遗传算法以向量化的方式(而不是并行地)评估适应度和约束函数。

如何评估适应度和约束函数

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