主要内容

遗传算法的选择

遗传算法选项

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

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

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

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

绘图选项

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

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

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

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

在哪里@plotfun1@plotfun2等等是绘图功能的功能处理。如果指定多个绘图功能,则所有绘图都显示为同一窗口中的子图。右键单击任何子图以在单独的数字窗口中获取更大的版本。

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

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

  • “gaplotstopping”地块停止标准水平。

  • 'gaplotgenealogy'绘制个人的家谱。从一代到下一代的线用颜色编码如下:

    • 红线表示突变儿童。

    • 蓝线表示跨界儿童。

    • 黑线表示精英人士。

  • “gaplotscores”绘制各一代人的分数。

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

  • 'Gaplotselection'绘制父母的直方图。

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

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

以下绘图功能可用于遗传算法只有:

  • “gaplotbestf”绘制最佳得分值和平均分数与一代。

  • “gaplotbestindiv”绘制个人的传感器条目,每代最佳健身功能值。

  • “gaplotexpectation”将每一代的预期子女数量与原始分数绘制成图。

  • “gaplotrange”绘制每个代的最小,最大和平均分数值。

以下绘图功能可用于gamultiobj只有:

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

  • “gaplotparetodistance”从其邻居绘制每个个人的距离的条形图。

  • “gaplotrankhist”绘制个体等级的直方图。1级的个体处于帕累托边界。2级的个人至少低于1级的个人,但不低于任何其他级别的个人,等等。

  • 'gaplotspread'将平均排列绘制为迭代次数的函数。

绘图功能的结构

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

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

函数的输入参数是

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

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

  • 旗帜—算法当前所处阶段的描述。有关详细信息,请参见输出函数的选择

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

输出参数状态是一个状态结构。通过输入参数,如果您愿意,修改;看到改变国家结构.要停止迭代,请设置状态。停止Flag转换为非空字符向量,例如“y”

国家结构

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

  • 一代- 当前的一代数。

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

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

  • LastImprovement-适应度值最后一次提高的代。

  • lastimprovementtime.- 最后发生了最后改进的时间。

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

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

  • 滑稽的-功能评估的累积数量。

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

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

  • 人口——当前一代人口。

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

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

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

  • EvalElites—表示是否的逻辑值遗传算法评估精英个人的健身功能。最初,这个值是真的.在第一代中,如果精英个体评估到其先前的值(表示健身功能是确定性的),则该值变为默认情况下为后续迭代。当EvalElites遗传算法不重新评估精英个体的适应度函数。您可以通过更改输出,在自定义绘图函数或自定义输出函数中重写此行为State.evalelites.

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

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

  • 人口——当前一代人口

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

  • 一代-当前代数

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

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

  • 滑稽的-函数计算的累计次数

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

  • 排名-人口中成员队伍的向量

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

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

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

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

  • MEQ.- 非线性平等约束的数量

  • 商场-非线性约束的总数,商场mIneq+MEQ.

  • C- 当前点的非线性不等式限制,a人群化——- - - - - -mIneq矩阵

  • 量表信-当前点a处的非线性等式约束人群化——- - - - - -MEQ.矩阵

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

  • maxLinInfeas-种群线性约束的最大不可行性

人口的选择

通过“总体选项”,可以指定遗传算法使用的总体参数。

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

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

  • “位”- 如果人口中的个人具有组件,请使用此选项01

    谨慎

    个人中的个人位字符串种群是类型的载体,而不是字符串或字符。

    创作MutationFcn,使用'gacreatuniform'“mutationuniform”或处理自定义功能。为CrossoverFcn,使用“交叉散射”“crossoversinglepoint”“crossovertwopoint”,或自定义函数的句柄。你不能用Hybridfcn.,遗传算法忽略所有约束,包括界限,线性约束和非线性约束。

  • “习俗”- 表示自定义种群类型。在这种情况下,您还必须使用自定义CrossoverFcnMutationFcn.您必须提供自定义创建函数或initialpopulationmatrix..你不能用Hybridfcn.,遗传算法忽略所有约束,包括界限,线性约束和非线性约束。

人群化指定每代中有多少个人。当种群规模较大时,遗传算法会更彻底地搜索解空间,从而减少算法返回不是全局最小值的局部最小值的可能性。但是,较大的总体规模也会导致算法运行较慢。默认值是'50 NumberoFvariables <= 5,否则200'

如果你设置人群化对于一个向量,遗传算法创建多个子种群,其数量是向量的长度。每个子种群的大小是向量的相应条目。请注意,此选项没有用处。看见迁移选项

创作指定为其创建初始填充的函数遗传算法.不要指定一个整数问题的创建函数,因为遗传算法凌驾于你的任何选择之上。选择:

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

  • 'gacreatuniform'创建具有统一分发的随机初始群体。当没有线性约束时或存在整数约束时,这是默认值。均匀分布在初始群体范围内(InitialPopulationRange).的默认值InitialPopulationRange[10] -10;对于每个组件,或者(-9999; 10001)当存在整数约束时。这些边界将被移动和缩放以匹配任何现有的边界UB.

    谨慎

    不要使用'gacreatuniform'当你有线性约束时。否则,总体可能不满足线性约束。

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

    有关显示其行为的示例,请参见自定义绘图函数和线性约束的遗传算法

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

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

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

    您的创建功能必须具有以下调用语法。

    函数人口= myfun(GenomeLength, FitnessFcn, options)

    函数的输入参数是:

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

    • FitnessFcn——适应度函数

    • 选项-选择权

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

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

    谨慎

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

initialpopulationmatrix.指定遗传算法的初始群体。默认值为[],那么遗传算法使用默认值创作创建初始人口。如果在initialpopulationmatrix.,则数组的个数不能超过人群化行,具体据nvar列,据nvar第二个输入是多少个变量遗传算法gamultiobj.如果你有一个部分初始人口,含义少于人群化行,然后遗传算法调用创作生成剩下的个人。

InitialScoreMatrix指定初始总体的初始得分。最初的分数也可能是部分的。不要指定整数问题的初始分数,因为遗传算法凌驾于你的任何选择之上。

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

健身缩放选项

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

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

  • “fitscalingrank”-默认适应度缩放函数,“fitscalingrank”,根据每个人的排名而不是分数来衡量原始分数。个体的等级是其在排序分数中的位置。有地位的人r比例分数与 1 / r .因此,最适合个人的缩放分数与1成比例,下一个最合适的缩放得分是成比例的 1 / 2 , 等等。等级健身缩放消除了原始分数的传播效果。与排名评分相比,平方根使得比分比得分更差差不等。有关更多信息,请参阅健身比例

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

  • “fitscalingtop”- 顶部缩放平均缩放顶部个体。您可以使用其他参数修改顶部缩放:

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

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

  • “FitScalingShift线性”-移位线性缩放缩放原始分数,使最适合的个体的期望等于一个常数乘以平均分数。您可以修改范围:

    选择= optimoptions (“遗传算法”'fitnesscalingfcn'......{@fitscalingshiftlinear,速率})

    的默认值2

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

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

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

    函数期望= myfun(scores, nParents)

    函数的输入参数是:

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

    • 坦率-人口中需要父母的数量

    函数返回期望,是一个长度相同标量的列向量分数,给出人口中每个成员的比例值。元素的和期望必须平等坦率

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

看到健身比例了解更多信息。

选择选项

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

SelectionFcn选项指定选择函数。不要使用整数问题。

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

遗传算法的选项是:

  • “selectionstochunif”-遗传算法默认选择功能,“selectionstochunif”,列出每个父级对应于与其缩放值成比例的长度行的一部分的线。该算法按照相同尺寸的步骤沿线移动。在每个步骤中,该算法将父级分配到它降落的部分。第一步是均匀随机数小于阶梯尺寸。

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

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

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

  • “selectiontournament”-锦标赛选择通过选择大小随机玩家,然后选择一个被设置为父母的最佳个人。大小必须至少为2。的默认值大小4.集大小得到如下不同的值:

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

    NonlinearConstraintAlgorithm点球遗传算法使用“selectiontournament”尺寸2

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

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

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

    函数父母= myfun(期望,午餐,选择)

    遗传算法提供输入参数期望坦率,选项.函数返回父类的索引。

    函数的输入参数是:

    • 期望

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

        提示

        您可以通过使用确保您有一个列矢量期望(:1).例如,编辑selectionstochunif或任何其他内置选择函数。

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

    • 坦率-要选择的父母数量。

    • 选项——遗传算法选项

    函数返回父母,一个长度的行向量坦率包含您选择的父级的索引。

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

看到选择了解更多信息。

复制选项

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

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

交叉分数指定跨界产生的下一代(精英子女除外)的比例。集交叉分数是一个分数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。

    谨慎

    不要使用umatationgaussian.当您有界限或线性约束时。否则,您的总体将不一定满足约束条件。相反,使用'umatationAptfeasible'或者满足线性约束的自定义突变函数。

  • “mutationuniform”- 均匀突变是两步过程。首先,该算法选择个体的v型突变的分数,每个条目都有概率被突变。的默认值0.01.在第二步中,算法用从该条目的范围中一致选择的随机数替换每个选中的条目。

    修改。的默认值

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

    谨慎

    不要使用mutationuniform当您有界限或线性约束时。否则,您的总体将不一定满足约束条件。相反,使用'umatationAptfeasible'或者满足线性约束的自定义突变函数。

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

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

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

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

    函数mutationChildren = myfun(parents, options, nvars, FitnessFcn, state, thisScore, thisPopulation)

    函数的参数是

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

    • 选项-选择权

    • 据nvar-变量数量

    • FitnessFcn——适应度函数

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

    • thisScore-当前人口的分数向量

    • 这个群体-当前人口中的个体矩阵

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

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

    谨慎

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

交叉选项

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

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

  • “交叉散射”,这是无线性约束问题的默认交叉函数,它创建一个随机的二进制向量,并选择向量为1的来自第一个父代的基因,以及向量为0的来自第二个父代的基因,并将这些基因组合成子基因。例如,如果p1p2是父母

    p1=[AB c d e f g h]p2=[1 2 3 4 5 6 7 8]

    二进制向量为[1 1 0 0 1 0 0],函数返回以下子元素:

    [a b 3 4 e 6 7 8]

    谨慎

    当您的问题有线性约束时,“交叉散射”可以给出一个不良的人口。在这种情况下,使用不同的交叉功能,例如“crossoverintermediate”

  • “crossoversinglepoint”选择介于1和之间的随机整数n据nvar然后

    • 从第一个父项中选择要少于或等于n的向量条目。

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

    • 将这些条目连接起来形成子向量。

      例如,如果p1p2是父母

      p1=[AB c d e f g h]p2=[1 2 3 4 5 6 7 8]

    如果交叉点是3,函数返回下面的子结点。

    child=[ABC45678]

    谨慎

    当您的问题有线性约束时,“crossoversinglepoint”可以给出一个不良的人口。在这种情况下,使用不同的交叉功能,例如“crossoverintermediate”

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

    • 编号小于或等于的向量项来自第一个父母

    • 编号为M + 1n,包容,来自第二个父母

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

    然后,该算法将这些基因连接起来,形成一个单独的基因。例如,如果p1p2是父母

    p1=[AB 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 (“遗传算法”“交叉路口”......{@crossoverintermediate,比});

    “crossoverintermediate”parent1parent2使用下面的公式。

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

    如果所有的条目比率当位于[0,1]范围内时,生成的子节点位于父节点相对顶点所定义的超立方体内。如果比率不在这个范围内,则子空间可能位于超立方体之外。如果比率是一个标量,那么所有的孩子都躺在父母之间的界线上。

  • “交叉启发式”返回一个位于包含两个父节点的行上的子节点,与适应度值较好的父节点在远离适应度值较差的父节点的方向上有一小段距离。您可以通过参数指定子节点与较好的父节点之间的距离比率.的默认值比率是1.2。设置比率参数如下所示。

    选择= optimoptions (“遗传算法”“交叉路口”......{@交叉电流,比率});

    如果parent1parent2是父母,还是parent1有较好的健身值,功能还孩子吗

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

    谨慎

    当您的问题有线性约束时,“交叉启发式”可以给出一个不良的人口。在这种情况下,使用不同的交叉功能,例如“crossoverintermediate”

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

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

    选择= optimoptions (“遗传算法”“交叉路口”,@ myfun);

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

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

    函数的参数是

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

    • 选项- 选项

    • 据nvar-变量数量

    • FitnessFcn——适应度函数

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

    • 这个群体- 代表当前群体的矩阵。矩阵的行数是人群化列数是据nvar

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

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

    谨慎

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

迁移选项

请注意

亚种群请参阅遗传算法的并行处理形式。遗传算法目前不支持此表格。金宝app在亚步骤中,每个工人都举办了许多人。这些人是亚贫困。除了迁移导致一些人在工人之间旅行之外,工人独立于其他工人发展亚居民。

因为遗传算法目前不支持这种形式的并行处理,有没有好金宝app处设置人群化为向量,或设置MigrationDirectionMigrationIntervalMigrationFraction选项。

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

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

  • MigrationDirection- 迁移可以在一个或两个方向上进行。

    • 如果你设置MigrationDirection“前进”,迁移发生在最后的亚群体中。那就是n次种群迁移到(n+1) th亚群。

    • 如果你设置MigrationDirection“两个”,nth亚种群迁移至n-1)th和the (n+1) th亚群。

    迁移包裹在亚种群的末端。也就是说,最后一个亚种群迁移到第一个亚种群,而第一个亚种群可能迁移到最后一个亚种群。

  • MigrationInterval—指定迁移之间经过多少代。例如,如果你设置MigrationInterval20在美国,迁徙每20代发生一次。

  • MigrationFraction- 指定亚步骤之间移动的人有多少。MigrationFraction指定两个子种群中较小的子种群移动的比例。例如,如果个体从50个个体的子群体迁移到100个个体的子群体,并且设置MigrationFraction0.1,迁移的个体数为0.1*50=5。

约束参数

约束参数是指非线性约束求解器。具体算法请参见非线性约束求解算法

在非线性约束算法中进行选择NonlinearConstraintAlgorithm选项“auglag”(增强拉格朗日)或“惩罚”(点球算法)。

增广拉格朗日遗传算法

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

  • PenaltyFactor-当问题没有解决到要求的精度和约束条件不满足时,增加惩罚参数。PenaltyFactor必须大于1,并具有默认值100

点球算法

惩罚算法使用“gacreationnonlinearfeasible”默认创建函数。这个创建函数使用铁铬镍铁合金寻找可行的个体。“gacreationnonlinearfeasible”开始铁铬镍铁合金从各种初始点的范围内InitialPopulationRange选择。可选地,“gacreationnonlinearfeasible”能跑铁铬镍铁合金在起始点上平行。

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

名称 价值
SolverOpts 铁铬镍铁合金选项,使用optimoptions优化集
UseParallel 真的、运行铁铬镍铁合金在起始点上平行的;默认是
numstartpts. 起始点的数目,为正整数总和(人口化)价值。

在单元格数组中同时包含名称-值对@gacreationnonlinearfeasible.

选项= Optimoptions('ga','creationfcn',{@gacreationnonlinearfeasible.,……“UseParallel”,的确,“NumStartPts”,20});

多目标的选择

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

  • ParetoFraction-设置个人的分数保持在第一个帕累托前线,而求解器选择个人从更高的前线。这个选项是0到1之间的标量。

    请注意

    第一个帕累托前沿的个体比例可以超过ParetoFraction.当第6步中其他级别的人太少时,就会发生这种情况迭代

  • DistanceMeasureFcn-定义一个函数的句柄,该函数计算个人的距离,计算在决策变量空间(基因型,也称为设计变量空间)或功能空间(表型)。例如,默认的距离度量函数为“distancecrowding”在函数空间中,这与{@distancecrowding,'epotype'}

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

    • “distancecrowding”,或等同的{@distancecrowding,'epotype'}- 测量健身功能空间的距离。

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

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

      取消下面两行中的一行的注释,或者使用这两行的组合% y = score;% phenotype % y = pop;%基因型popSize = size(y,1);%个人数量numData = size(y,2);%维数或适应度函数的距离=零(popSize,1);在这里分配输出计算距离

      gamultiobj通过人口流行音乐,计算的人口的分数分数,和选项选项.distance函数返回从种群中的每个成员到一个引用的距离,例如在某种意义上最近的邻居。例如,编辑内置文件distancecrowding.m

混合功能选项

遗传算法混合函数

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

  • []—无混合功能。

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

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

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

  • “fmincon”- 使用优化工具箱功能铁铬镍铁合金执行约束最小化。

请注意

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

您可以为混合函数设置单独的选项。采用优化集fminsearchoptimoptions铁铬镍铁合金patternsearchFminunc..例如:

hybridopts = optimoptions(“fminunc”,“显示”,“通路”,“算法”,“拟牛顿”);
在遗传算法中包含混合选项选项如下:
选择= optimoptions(“遗传算法”,选项,HybridFcn, {@fminunc, hybridopts});
hybridopts必须在你设置之前存在选项

看到遗传算法中的混合方案了一个例子。看到何时使用混合函数

gamultiobj混合函数

混合函数是在多目标遗传算法结束后运行的另一个极小化函数。可以指定hybrid功能“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选择是'几何不一致',那么测试是针对a几何加权平均相对变化。)对于非线性约束的问题,MaxStallGenerations应用于子问题(请参见非线性约束求解算法).

    gamultiobj的相对变化的几何平均值传播帕累托解金宝搏官方网站MaxStallGenerations少于FunctionTolerance,最终的展点小于最后一个平均值MaxStallGenerations,然后算法停止。几何平均系数是1 / 2。这种蔓延是帕累托前沿运动的一种度量。看到gamultiobj算法

  • MaxStallTime—如果在指定的以秒为单位的时间间隔内,最佳适应度值没有改善,则算法停止MaxStallTime,用…来衡量抽搐toc

  • FunctionTolerance—当最佳适应度函数值的平均相对变化超过时,算法停止MaxStallGenerations是小于还是等于FunctionTolerance.(如果StallTest选择是'几何不一致',那么测试是针对a几何加权平均相对变化。)

    gamultiobj的相对变化的几何平均值传播帕累托解金宝搏官方网站MaxStallGenerations少于FunctionTolerance,最终的展点小于最后一个平均值MaxStallGenerations,然后算法停止。几何平均系数是1 / 2。这种蔓延是帕累托前沿运动的一种度量。看到gamultiobj算法

  • 约束特许-约束特许不被用作停止标准。它用于确定相对于非线性约束的可行性。还,max (sqrt (eps), ConstraintTolerance)确定线性约束的可行性。

看到设置“最大代数”和“Stall代数”了一个例子。

输出函数的选择

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

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

有关多个输出功能,请输入Cell函数句柄:

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

要查看您可以使用的模板来编写自己的输出功能,请输入

编辑gaoutputfcntemplate

在matlab命令行。

例如,请参见遗传算法的自定义输出函数

输出函数的结构

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

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

matlab通过了选项状态,旗帜数据到输出函数,然后输出函数返回状态选项,optchanged数据。

请注意

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

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

  • 选项-选择权

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

  • 旗帜—算法当前状态:

    • “初始化”——初始化状态

    • “通路”——迭代状态

    • “中断”- 对非线性受限问题的子问题的迭代“auglag”非线性约束算法。当旗帜“中断”

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

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

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

    • “完成”- 最终状态

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

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

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

  • 选项- 由输出函数修改的选项。此参数是可选的。

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

改变国家结构

谨慎

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

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

提示

如果您的输出结构改变人口字段,然后确保更新分数领域,可能是最好NonlinIneqNonlinEq字段,以便它们包含一致的信息。

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

显示到命令窗口选项

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

  • '最后'(默认)-显示停止的原因。

  • “关闭”或同等“没有”—无回显信息。

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

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

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

  • 一代- 生成号码

  • F计数-适应度函数评估的累计次数

  • 最好的f (x)- 最佳健身功能值

  • 意思是f(x)- 平均健身功能值

  • 摊位代- 自健身功能的最后改进以来世代数量

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

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

向量化和并行选项(用户函数评估)

您可以选择以串行、并行或矢量化方式计算适应度和约束函数。设定'undervectorized'“UseParallel”选择optimoptions

  • 'undervectorized'(默认),遗传算法当它在种群中循环时,每次调用一个个体的适应度函数。(这个假设“UseParallel”是其默认值.)

  • 'undervectorized'真的遗传算法立即呼叫整个人口的健身功能,单一呼叫适合函数。

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

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

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

请注意

不能同时使用矢量化计算和并行计算。如果你设定“UseParallel”真的'undervectorized'真的遗传算法以向量化的方式,而不是并行地评估适应度和约束函数。

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

使用vectorized 使用vectorized真的
UseParallel 串行 矢量化
UseParallel真的 平行 矢量化