主要内容

遗传算法选项

遗传算法的选项

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

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

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

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

绘图选项

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

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

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

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

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

可用的绘图功能遗传算法gamultiobj

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

  • “gaplotstopping”绘图停止标准水平。

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

    • 红线表示变异儿童。

    • 蓝线表示交叉子结点。

    • 黑线表示精英人士。

  • “gaplotscores”绘制每一代个体的得分。

  • “gaplotdistance”绘制每代个体之间的平均距离。

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

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

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

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

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

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

  • “gaplotexpectation”绘制出每一代孩子的预期数量与原始分数的比值。

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

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

  • “gaplotpareto”为前两个或三个目标函数绘制帕累托前沿图。

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

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

  • “gaplotspread”绘制平均传播作为迭代次数的函数。

情节功能的结构

plot函数的第一行是这样的:

函数state = plotfun(options,state,flag)

函数的输入参数是

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

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

  • 国旗-描述算法目前所处的阶段。详情请参见输出功能选项

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

输出参数状态也是一种国家结构。传递输入参数,如果喜欢可以修改;看到改变国家结构.要停止迭代,请设置状态。停止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建立一个关于边界和线性约束的可行总体。

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

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

  • “gacreationuniformint”默认的创建函数是遗传算法当问题有整数约束时。该函数对无界组件应用人工绑定,在绑定范围内随机统一生成个体,然后强制执行整数约束。

    请注意

    当你的问题有整数约束时,遗传算法而且gamultiobj在每个迭代中强制执行整数约束、边界和所有线性约束。对于非默认的突变、交叉、创建和选择函数,遗传算法而且gamultiobj在函数操作后应用额外的可行性例程。

  • “gacreationsobol”默认的创建函数是gamultiobj当问题有整数约束时。创建函数使用一个准随机Sobol序列来生成一个分散良好的初始总体。总体在边界、线性约束和整数约束下是可行的。

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

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

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

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

    函数的输入参数是:

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

    • FitnessFcn-适应度函数

    • 选项——选项

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

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

    谨慎

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

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

InitialScoreMatrix指定初始总体的初始分数。最初的分数也可能是部分的。如果你的问题有非线性约束,那么算法不使用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(scores, nParents)

    函数的输入参数是:

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

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

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

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

看到健身比例更多信息。

选择选项

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

SelectionFcnOption指定选择函数。

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

遗传算法选项是:

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

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

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

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

  • “selectiontournament”-赛事选择通过选择的方式选择每位家长大小玩家随机选择,然后从集合中选出最好的一个作为父母。大小必须至少是2。的默认值。大小4.集大小不同的值如下:

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

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

  • 请注意

    当你的问题有整数约束时,遗传算法而且gamultiobj在每个迭代中强制执行整数约束、边界和所有线性约束。对于非默认的突变、交叉、创建和选择函数,遗传算法而且gamultiobj在函数操作后应用额外的可行性例程。

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

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

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

    函数parents = 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, scale, shrink})
    • 规模参数确定第一代的标准差。如果你设置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”的默认突变函数gamultiobj遗传算法当存在非整数约束时,随机生成自适应于上一个成功或不成功生成的方向。突变选择一个满足边界和线性约束的方向和步长。

  • “mutationpower”默认的变异函数是遗传算法而且gamultiobj当问题有整数约束时。力量突变使亲本发生突变,x,通过以下。对于父组件的每个组件,子元素的Th分量由:

    mutationChild(i) = x(i) - s(x(i) - lb(i))如果T < r

    = x(i) + s(ub(i) - x(i))如果T >= r

    在这里,t缩放距离是x(我)下界的第Th分量,磅(我)年代随机变量是从一个功率分布和r是从均匀分布中抽取的随机数。

    这个函数可以处理Lb (i) = ub(i).方法生成新的子节点分量设为磅(我),等于乌兰巴托(我).有关这个交叉函数的更多信息,请参阅以下参考资料的第2.1节:

    Kusum Deep, Krishna Pratap Singsh, M. L. Kansal, C. Mohan。求解整数和混合整数优化问题的实数编码遗传算法。应用数学与计算学报,32(2009),456 - 456。

    请注意

    当你的问题有整数约束时,遗传算法而且gamultiobj在每个迭代中强制执行整数约束、边界和所有线性约束。对于非默认的突变、交叉、创建和选择函数,遗传算法而且gamultiobj在函数操作后应用额外的可行性例程。

  • “mutationpositivebasis”-这个突变函数类似于正交的MADS步骤,修改了线性约束和边界。

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

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

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

    函数mutationChildren = myfun(parents, options, nvars, FitnessFcn, state, 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],函数返回以下子函数:

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

    儿童= [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]的范围内,生成的子节点位于通过将父节点放在相反顶点定义的超立方体内。如果不在这个范围内,孩子们可能躺在超立方体之外。如果是一个标量,那么所有子节点都位于父节点之间的直线上。

  • “crossoverlaplace”是问题具有整数约束时的默认交叉函数。拉普拉斯交叉使用以下任一公式(随机选择)生成子:

    xOverKid = p1 + bl*abs(p1 - p2)

    xOverKid = p2 + bl*abs(p1 - p2)

    在这里,p1p2是孩子的父母xOverKid而且提单是否从a生成随机数拉普拉斯分布.有关这个交叉函数的更多信息,请参阅以下参考资料的第2.1节:

    Kusum Deep, Krishna Pratap Singsh, M. L. Kansal, C. Mohan。求解整数和混合整数优化问题的实数编码遗传算法。应用数学与计算学报,32(2009),456 - 456。

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

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

    如果parent1而且parent2是父母,和parent1有较好的适应度值,函数还孩子吗

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

    谨慎

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

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

  • 请注意

    当你的问题有整数约束时,遗传算法而且gamultiobj在每个迭代中强制执行整数约束、边界和所有线性约束。对于非默认的突变、交叉、创建和选择函数,遗传算法而且gamultiobj在函数操作后应用额外的可行性例程。

  • 函数句柄使您能够编写自己的交叉函数。

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

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

    xoverKids = myfun(parents, options, nvars, FitnessFcn,...未使用,thisPopulation)

    函数的参数是

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

    • 选项——选项

    • 据nvar-变量的数量

    • FitnessFcn-适应度函数

    • 未使用的-没有使用占位符

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

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

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

    谨慎

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

迁移选项

请注意

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

因为遗传算法目前是否不支持这种形式的并行处理,有没有好处设置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 = pop;%基因型popSize = size(y,1);numData = size(y,2);%维度数或适应度函数距离=零(popSize,1);分配输出%在这里计算距离

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

混合功能选项

遗传算法混合函数

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

  • []-无混合功能。

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

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

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

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

请注意

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

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

混合选项= 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,用目标向量求解目标达成问题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,然后算法停止。几何平均系数是½。价差是衡量帕累托前沿移动的指标。看到gamultiobj算法

  • MaxStallTime—如果在以秒为单位的时间间隔内,最佳适应度值没有提高,则算法停止MaxStallTime,以抽搐而且toc

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

    gamultiobj的相对变化的几何平均值传播帕累托解MaxStallGenerations小于FunctionTolerance最后的价差小于最后的平均价差MaxStallGenerations,然后算法停止。几何平均系数是½。价差是衡量帕累托前沿移动的指标。看到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真正的

改变国家结构

谨慎

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

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

提示

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

更新分数字段更改后的人口场中,首先计算总体的适应度函数值,然后计算总体的适应度尺度。看到健康缩放选项

显示到命令窗口选项

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

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

  • “关闭”或者是同等的“没有”—无显示信息。

  • “通路”—每次迭代显示信息。

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

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

  • 一代-代号

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

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

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

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

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

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

此外,“通路”而且“诊断”在迭代显示之前显示问题信息,例如问题类型以及创建、突变、交叉和选择函数遗传算法gamultiobj是使用。

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

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

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

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

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

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

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

请注意

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

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

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