遗传算法选项

优化应用程序vs.命令行

有两种方法可以指定遗传算法的选项,这取决于您是使用最优化应用程序还是调用函数ga伽默多布吉在命令行中:

  • 如果您正在使用优化应用程序(优化工具),从下拉列表中选择一个选项,或在文本字段中输入该选项的值。

  • 如果你打电话ga伽默多布吉在命令行,创建选择权使用函数最佳选择,详情如下:

    options=optimoptions('ga','Param1',value1',Param2',value2,…);%或options=options('gamultiobj','Param1',value1',Param2',value2,…);

    看到在命令行中设置选项例如。

在本节中,每个选项以两种方式列出:

  • 通过其标签,正如它出现在优化应用程序中

  • 按其在中的字段名选择权

例如:

  • 人口类型是优化应用程序中选项的标签。

  • 人口类型对应的字段是选择权

绘图选项

“打印选项”允许您在遗传算法运行时打印该算法中的数据。您可以通过单击停止打印窗口上的按钮。

绘图间隔(绘图间隔)指定连续调用plot函数之间的代数。

您可以在中选择以下任一绘图函数:绘制函数两者的窗格ga伽默多布吉:

  • 分数差异(“多样性”)绘制每一代得分的直方图。

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

  • 谱系学(“gaplotgenealogy”)绘制个人的系谱。从一代到下一代的线条按如下颜色编码:

    • 红线表示突变儿童。

    • 蓝线表示交叉儿童。

    • 黑线表示精英。

  • 分数(“高分”)绘制每代个体的得分。

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

  • 选择(“gaplotselection”)绘制父母的直方图。

  • 最大约束(“gaplotmaxconstr”)绘制每一代的最大非线性约束冲突。对于ga,只供增广拉格朗日(“auglag”)非线性约束算法(非线性约束约束算法)选择权。因此,不适用于整数约束问题,因为它们使用处罚(“惩罚”)非线性约束算法。

  • 自定义函数允许您使用自己的绘图函数。若要在使用优化应用程序时指定绘图功能,

    • 选择自定义函数

    • 进来@我的乐趣在文本框中,其中myfun是函数的名称。

    看到绘图函数的结构

以下绘图功能可用于ga仅:

  • 最佳健身(“gaplotbestf”)绘制最佳分数值和平均分数与生成的关系。

  • 最好的个人(“Gaplotbestiniv”)绘制每一代中具有最佳适应度函数值的个体向量项。

  • 预料(“期望值”)绘制每一代的预期儿童数量与原始分数。

  • 范围(“gaplotrange”)绘制每一代中的最小、最大和平均分数值。

以下绘图功能可用于伽默多布吉仅:

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

  • 平均帕累托距离(“间隔距离”)绘制一个柱状图,表示每个个体与其相邻个体之间的距离。

  • 等级分布图(“gaplotrankhist”)绘制个人等级的柱状图。排名1的个体处于帕累托前沿。等级2的个体低于至少一个等级1的个体,但不低于其他等级的任何个体,以此类推。

  • 平均帕累托价差(“gaplotspread”)将平均排列绘制为迭代次数的函数。

调用时显示绘图的步骤ga伽默多布吉从命令行中,设置绘图仪选项是内置打印函数名称或打印函数句柄。例如,要显示最佳拟合曲线图,请设置选择权详情如下:

选项=最佳选项('ga','PlotFcn','gaplotbestf');

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

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

哪里@plotfun1,@plotfun2等是绘图函数的函数句柄。

如果指定多个绘图函数,则所有绘图都将在同一窗口中显示为子绘图。右键单击任何子地块,以在单独的地物窗口中获得更大的版本。

绘图函数的结构

绘图函数的第一行具有以下形式:

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

函数的输入参数是

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

  • 状态-包含有关当前生成的信息的结构。国家结构描述状态

  • 旗帜-算法当前所处阶段的说明。有关详细信息,请参阅输出功能选项

传递额外参数(最优化工具箱)解释如何为函数提供附加参数。

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

国家结构

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

  • 一代—当前代数。

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

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

  • 最后改进-最后一次适应值改善发生的世代。

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

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

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

  • FunEval-函数计算的累计次数。

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

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

  • 人口-当代人口。

  • 分数-目前人口的分数。

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

  • NonlinEq-当前点的非线性等式约束,仅在指定非线性约束函数时出现,不存在整数变量,旗帜不是“打断”非线性约束约束算法“auglag”

  • 蒸发岩-逻辑值,指示是否ga评估精英个体的适应度函数。最初,该值为符合事实的. 在第一代中,如果精英个体评估到其先前的值(这表明适应度函数是确定的),则该值变为错误的默认情况下为后续迭代。当蒸发岩错误的,ga不重新评估精英个人的适应度函数。您可以通过更改输出在自定义绘图函数或自定义输出函数中重写此行为州立大学

  • 有重复的-逻辑值,指示是否ga为初始总体添加重复的个体。ga使用较小的相对公差来确定个体是重复的还是唯一的。如果有重复的符合事实的然后ga定位唯一个体,并对每个唯一个体仅评估一次适应度函数。ga复制适应度和约束函数值到复制个体。ga每一代都重复这个测试,直到所有的个体都是独一无二的。测试按顺序进行n*m*log(m)操作,M是人口规模和Nnvars. 要在自定义打印函数或自定义输出函数中替代此测试,请设置输出州立大学错误的

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

  • 人口-当代人口

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

  • 一代-当前代数

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

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

  • FunEval-功能评估的累积次数

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

  • 等级-人口中成员队伍的向量

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

  • 平均距离-标准偏差(非平均值)距离

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

  • 米内克-非线性不等式约束个数

  • mEq-非线性等式约束数

  • 商场-非线性约束的总数,商场=米内克+mEq

  • C-当前点的非线性不等式约束人口规模-借-米内克矩阵

  • Ceq-当前点的非线性等式约束,a人口规模-借-mEq矩阵

  • 伊斯费亚斯-人口的可行性,一个逻辑向量人口规模元素

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

人口选择

通过填充选项,可以指定遗传算法使用的填充参数。

人口类型(人口类型)指定适应度函数的输入类型。类型及其限制为:

  • 双矢量(“双向量”)-如果群体中的个体具有类型双重的.在混合整数规划中使用此选项。这是默认值。

  • 位串(“位字符串”) -如果种群中的个体具有以下组成部分,则使用此选项01.

    小心

    在一个位串人口是一种类型的媒介双重的,而不是字符串或字符。

    对于创造功能(CreationFcn)及突变函数(突变),使用制服(“gacreationuniform”“变异制服”)或风俗. 对于交叉函数(交叉),使用分散的(“交叉散射”),单点(“交叉点”),两个点(“交叉点”),或风俗. 您不能使用混合函数ga忽略所有约束,包括边界、线性约束和非线性约束。

  • 风俗-为了交叉函数突变函数使用风俗. 对于创造功能,要么使用风俗,或提供初始种群. 您不能使用混合函数ga忽略所有约束,包括边界、线性约束和非线性约束。

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

如果你设定人口规模对于一个向量,遗传算法创建多个子种群,其数量是向量的长度。每个子种群的大小是向量的相应条目。看见迁移选项

创造功能(CreationFcn)指定为创建初始填充的函数ga. 不要指定有整数问题的创建函数,因为ga凌驾于你的任何选择之上。选择:

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

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

    小心

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

  • 可行总体(“gacreationlinearfeasible”),当存在线性约束且没有整数约束时,默认值创建满足所有边界和线性约束的随机初始总体。如果存在线性约束,可行总体在约束区域的边界上创建多个个体,并创建分布良好的总体。可行总体忽视初始范围(InitialPopulationRange).

    “gacreationlinearfeasible”调用线性规划问题创建关于边界和线性约束的可行总体。

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

  • 非线性可行总体(“GACreationNonlinearFasible”的默认创建函数“惩罚”非线性约束算法。有关详细信息,请参阅约束参数

  • 风俗允许您编写自己的创建函数,该函数必须生成您在人口类型。若要指定创建函数(如果您正在使用优化应用程序),

    • 创造功能风俗

    • 函数名@我的乐趣哪里myfun是函数的名称。

    如果您正在使用ga设置

    选项=最佳选项('ga','CreationFcn',@myfun);

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

    函数总体=myfun(GenomeLength、FitnessFcn、选项)

    函数的输入参数为:

    • 基因组长度-适应度函数的自变量数

    • FitnessFcn-适应度函数

    • 选择权——选项

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

    传递额外参数(最优化工具箱)解释如何为函数提供附加参数。

    小心

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

初始种群(初始填充矩阵)指定遗传算法的初始总体。默认值为[],那么ga使用默认的创造功能创建初始种群。属性中输入非空数组初始种群字段中,数组的人口规模行,准确地说变量数柱。如果你有部分的初始人口,即少于人口规模行,然后遗传算法调用创造功能生成剩余的个体。

初分(初始得分矩阵)指定初始总体的初始得分。最初的分数也可能是部分的。不要指定整数问题的初始分数,因为ga凌驾于你的任何选择之上。

初始范围(InitialPopulationRange)指定由生成的初始总体中向量的范围间隙均匀创建函数。您可以设置初始范围是一个有两行和两行的矩阵变量数列,其中每列的形式为(磅;乌兰巴托)哪里是下限和乌兰巴托是该坐标中项目的上限。如果您指定初始范围要成为一个2乘1的向量,每个条目将扩展为一个长度不变的行变量数. 如果未指定初始范围,默认为[10] -10;([-1e4+1;1e4+1]对于整数约束问题),修改为匹配任何现有边界。

看到设置初始范围举个例子。

适应度缩放选项

适应度缩放将适应度函数返回的原始适应度分数转换为适合选择函数的范围内的值。可以在中指定适合度缩放的选项健身比例窗玻璃

标度函数(FitnessScalingFcn)指定执行缩放的函数。选择是

  • 等级(“fitscalingrank”)-默认的适应度缩放函数,等级,根据每个个体的等级而不是其得分来衡量原始得分。个体的等级是其在排序得分中的位置。具有等级的个体R比例分数与 1. / R 因此,最适合的个体的标度得分与1成正比,其次最适合的个体的标度得分与1成正比 1. / 2. ,依此类推。排名适合度缩放可消除原始分数分散的影响。平方根使排名较差的个人的分数与排名分数相比更接近相等。有关更多信息,请参阅健身比例

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

  • 顶部(“fitscalingtop”) -顶级规模对顶级个人一视同仁。选择顶部显示附加字段,,指定分配正比例值的个体数量。可以是从1到总体大小的整数,也可以是从0到1的分数,指定总体大小的分数。默认值为0.4. 每个产生后代的个体都被分配了一个相等的缩放值,而其余个体被分配了值0。缩放值的形式为[01/n 1/n 0 0 1/n 0 1/n…]。

    更改的默认值的步骤在命令行中,使用以下语法:

    options=optimoptions('ga','FitnessScalingFcn',{@fitscalingtop,quantity})

    哪里价值是多少

  • 线性移位(“fitscalingshiftlinear”)-Shift线性比例缩放原始分数,使最适合的个体的期望值等于常数乘以平均分数。您可以在最大存活率字段,选择时将显示该字段线性移位. 默认值为2.

    修改。的默认值最大存活率在命令行中,使用以下语法

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

    哪里速度价值是多少最大存活率

  • 风俗您可以编写自己的缩放函数。要使用优化应用程序指定缩放函数,

    • 标度函数风俗

    • 函数名@我的乐趣哪里myfun是函数的名称。

    如果您正在使用ga在命令行中,设置

    options=optimoptions('ga','FitnessScalingFcn',@myfun);

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

    功能期望=myfun(分数、nParents)

    函数的输入参数为:

    • 分数-一种标量向量,每一个标量代表人口中的一个成员

    • NPARES-这一群体所需的父母人数

    函数返回预料,一个标量的列向量,其长度与分数,给出人口中每个成员的比例值。项的项之和预料必须相等NPARES

    传递额外参数(最优化工具箱)解释如何为函数提供附加参数。

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

选择选项

选择选项指定遗传算法如何为下一代选择父代。可以指定算法在中使用的函数选择函数(选择FCN)字段选择选项窗格。不要与整数问题一起使用。

伽默多布吉只使用锦标赛(“选择锦标赛”)选择功能。

对于ga这些选择包括:

  • 随机均匀(“selectionstochunif”)-该ga默认选择功能,随机均匀,显示一条线,其中每个父级对应于线的长度与其比例值成比例的一段。算法以等长步沿直线移动。在每个步骤中,算法从它所在的部分分配一个父节点。第一步是一个小于步长的均匀随机数。

  • 余数('选择余数')-余数选择从每个个体的缩放值的整数部分确定地分配父对象,然后对剩余的小数部分使用轮盘赌选择。例如,如果某个个体的缩放值为2.3,则该个体将作为父对象列出两次,因为整数部分为2。根据缩放值的整数部分指定父对象后,随机选择其余父对象。在此步骤中选择父级的概率与其标度值的分数部分成正比。

  • 制服(“选择制服”) -统一选拔根据期望和家长人数来选择家长。统一选择对于调试和测试很有用,但不是一种非常有效的搜索策略。

  • 轮盘赌(“选择轮盘赌”)-轮盘赌选择通过模拟轮盘赌轮来选择双亲,轮盘赌轮对应于个体的部分面积与个体的期望成比例。该算法使用随机数选择概率等于其面积的部分之一。

  • 锦标赛(“选择锦标赛”) -比赛选择通过选择来选择每个家长比赛规模随机选择玩家,然后从中选出最好的一个人作为家长。比赛规模必须至少为2。的默认值比赛规模4.

    修改。的默认值比赛规模在命令行中,使用以下语法

    options=optimoptions('ga','SelectionFcn',…{@SelectionTornament,size})

    哪里大小价值是多少比赛规模

    约束参数>非线性约束算法处罚,ga使用锦标赛大小2.

  • 风俗允许您编写自己的选择函数。要使用优化应用程序指定选择函数,

    • 选择函数风俗

    • 函数名@我的乐趣哪里myfun是函数的名称。

    如果您正在使用ga在命令行中,设置

    options=optimoptions('ga','SelectionFcn',@myfun);

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

    function parent = myfun(期望,nParents,选项)

    ga提供输入参数预料,NPARES选择权. 函数返回父对象的索引。

    函数的输入参数为:

    • 预料

      • 对于ga,预料是人口中每个成员的标度适应度的列向量。缩放来自于适应度缩放选项

        提示

        您可以通过使用期望值(:,1). 例如编辑所选内容,使其符合要求或任何其他内置选择功能。

      • 对于伽默多布吉,预料是一个矩阵,它的第一列是个体秩的负数,第二列是个体的距离度量。看到多目标选择

    • NPARES-要选择的父母数量。

    • 选择权-遗传算法选择权

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

    传递额外参数(最优化工具箱)解释如何为函数提供附加参数。

看到选择了解更多信息。

复制选项

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

精英计数(精英帐户)指定保证存活到下一代的个体数。设置精英计数是小于或等于总体大小的正整数。默认值为装天花板(0.05 * PopulationSize)对于连续问题,以及0.05 *(默认PopulationSize)对于混合整数问题。

交叉部分(交叉分数)具体说明了除精英子女外,跨界生育的下一代所占的比例。集交叉部分介于01.,在文本框中输入分数或移动滑块。默认值为0.8

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

突变的选择

突变选项指定了遗传算法如何对种群中的个体进行微小的随机改变,从而产生突变后代。突变提供了遗传多样性,使遗传算法的搜索空间更加广阔。中指定突变函数突变函数(突变)字段突变选项窗格。不要与整数问题一起使用。您可以从以下功能中进行选择:

  • 高斯分布(“mutationgaussian”) -无约束问题的默认突变函数,高斯分布,将一个平均值为0的高斯分布中的随机数添加到父向量的每个条目中。这个分布的标准差由参数决定规模收缩,选择时将显示高斯分布,由初始范围设置在人口选项。

    • 这个规模参数确定第一代时的标准偏差。如果你设定初始范围是一个2乘1的向量v,初始标准偏差在父向量的所有坐标处都相同,由下式给出规模* (v (2) - v (1))

      如果你设定初始范围作为向量v两排一排变量数列,坐标处的初始标准偏差父向量的规模*(v(i,2)-v(i,1))

    • 这个收缩参数控制标准偏差随着世代的推移而收缩的方式。如果你设定初始范围若为2×1矢量,则为K一代,σK,在父向量的所有坐标处都相同,并由递归公式给出

      σ K = σ K 1. ( 1. 收缩 K 世代 )

      如果你设定初始范围是一个有两行和两行的向量变量数列,坐标处的标准偏差父向量在K一代,σi、 k,由递推公式给出

      σ , K = σ , K 1. ( 1. 收缩 K 世代 )

      如果你设定收缩1.,算法将每个坐标的标准差线性缩小,直到最后一代达到0为止。的负值收缩导致标准差增大。

    两者的默认值规模收缩是1。要更改命令行中的默认值,请使用以下语法

    options = optimoptions('ga','MutationFcn',…{@mutationgaussian,规模,缩小})

    哪里规模缩小的价值规模收缩,分别。

    小心

    不要使用mutationgaussian当你有边界或线性约束时。否则,您的总体将不一定满足约束条件。

  • 制服(“变异制服”)-均匀突变是一个两步过程。首先,该算法选择一部分个体的向量条目进行变异,每个条目都有一个概率速度的默认值速度0.01. 在第二步中,算法将每个选定条目替换为从该条目范围内均匀选择的随机数。

    修改。的默认值速度在命令行中,使用以下语法

    options = optimoptions('ga','MutationFcn', {@mutationuniform, rate})

    哪里速度价值是多少速度

    小心

    不要使用突变均匀当你有边界或线性约束时。否则,您的总体将不一定满足约束条件。

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

  • 风俗使您能够编写自己的变异函数。要使用优化应用程序指定变异函数,

    • 突变函数风俗

    • 函数名@我的乐趣哪里myfun是函数的名称。

    如果您正在使用ga设置

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

    变异函数必须具有以下调用语法:

    函数mutationChildren=myfun(父项、选项、NVAR、FitnessFcn、状态、thisScore、thisPopulation)

    函数的参数是

    • 父母-由选择函数选择的父对象的行向量

    • 选择权——选项

    • nvars-变量数量

    • FitnessFcn-适应度函数

    • 状态-包含有关当前生成的信息的结构。国家结构描述状态

    • 这个分数-当前人口的得分向量

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

    函数返回突变儿童-突变的后代作为矩阵,其中行对应于子代。矩阵的列数为变量数

    传递额外参数(最优化工具箱)解释如何为函数提供附加参数。

    小心

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

交叉选项

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

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

  • 分散的(“交叉散射”),无线性约束问题的默认交叉函数,创建一个随机二元向量,并从第一个父代选择向量为1的基因,从第二个父代选择向量为0的基因,并组合这些基因以形成子代。例如,如果p1p2他们是父母吗

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

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

    child1=[AB34E678]

    小心

    不要使用“交叉散射”当您有线性约束时。否则,您的人口将不一定满足约束。

  • 单点(“交叉点”)选择介于1和之间的随机整数n变量数然后

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

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

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

      例如,如果p1p2他们是父母吗

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

    交叉点为3,函数返回以下子级。

    child=[ABC45678]

    小心

    不要使用“交叉点”当您有线性约束时。否则,您的人口将不一定满足约束。

  • 两个点(“交叉点”)选择两个随机整数MN之间1.变量数。该函数选择

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

    • 从中编号的向量项m + 1N,包含在内,来自第二个父级

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

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

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

    交叉点为3和6,函数返回以下子级。

    child=[ABC456GH]

    小心

    不要使用“交叉点”当您有线性约束时。否则,您的人口将不一定满足约束。

  • 中间的(“交叉中间体”),存在线性约束时的默认交叉函数,通过对父项进行加权平均来创建子项。可以通过单个参数指定权重,比率,可以是标量或长度为的行向量变量数.默认值是一个全部为1的向量。函数创建from的子对象parent1parent2使用以下公式。

    child=parent1+rand*比率*(父母2-父母1)

    如果比率如果在[0,1]范围内,则生成的子体位于通过将父体放置在相反顶点定义的超立方体内。如果比率如果不在该范围内,则儿童可能位于超立方体之外。如果比率是一个标量,则所有的子对象都位于父对象之间的直线上。

    修改。的默认值比率在命令行中,使用以下语法

    options=options('ga','CrossoverFcn',…{@crossoverintermediate,ratio});

    哪里价值是多少比率

  • 启发式(“crossoverheuristic”)返回一个子对象,该子对象位于包含两个父对象的线上,距离具有较好适应度值的父对象较远,方向距离具有较差适应度值的父对象较远。您可以通过参数指定子级与更好的父级之间的距离比率,选择时会显示启发式.的默认值比率是1.2。如果parent1parent2是父母吗parent1具有更好的适应值,函数返回子函数

    child=parent2+R*(parent1-parent2);

    修改。的默认值比率在命令行中,使用以下语法

    选项=最优选项('ga','CrossoverFcn',…{@crossoverheuristic,ratio});

    哪里价值是多少比率

  • 算术(“交叉算术”)产生的子女是父母双方的加权算术平均数。对于线性约束和边界,子结点总是可行的。

  • 风俗允许您编写自己的交叉函数。要使用优化应用程序指定交叉函数,

    • 交叉函数风俗

    • 函数名@我的乐趣哪里myfun是函数的名称。

    如果您正在使用ga设置

    options=options('ga','CrossoverFcn',@myfun);

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

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

    函数的参数是

    • 父母-由选择函数选择的父对象的行向量

    • 选择权-选择权

    • nvars-变量数量

    • FitnessFcn-适应度函数

    • 未使用-未使用占位符

    • 这个群体-表示当前总体的矩阵。矩阵的行数为人口规模列数为变量数

    函数返回xoverKids-交叉子代作为矩阵,其中行对应于子代。矩阵的列数为变量数

    传递额外参数(最优化工具箱)解释如何为函数提供附加参数。

    小心

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

迁移选项

请注意

亚种群参考遗传算法的一种并行处理形式。ga目前不支持此表单。在亚群体中,每个工人万博1manbetx都有若干个人。这些个体是一个亚群体。工人独立于其他工人进化亚群体,除非移民导致一些人在工人之间旅行。

因为ga目前不支持这种形式的并行处理,设置没有万博1manbetx好处人口规模到向量,或设置迁移方向,迁移间隔,或迁移分数选项。

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

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

  • 方向(迁移方向) -迁移可以发生在一个或两个方向。

    • 如果你设定方向向前地(“前进”),迁移发生在最后一个子种群。就是Nth亚群迁移到(N+1) th亚群。

    • 如果你设定方向二者都(“都是”),即Nth子种群迁移到两个(N–1)第三方和第三方(N+1) th亚群。

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

  • 间隔(迁移间隔)-指定迁移之间的代传递次数。例如,如果设置间隔20.,迁徙每20代发生一次。

  • 小部分(迁移分数)-指定在子种群之间移动的个体数。小部分指定移动的两个子种群中较小者的分数。例如,如果个体从50个个体的子群体迁移到100个个体的子群体,则设置小部分0.1,迁移的个体数为0.1*50=5。

约束参数

约束参数指的是非线性约束解算器。有关算法的详细信息,请参阅非线性约束求解算法

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

增广拉格朗日遗传算法

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

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

惩罚算法

惩罚算法使用GACreation非线性可行默认情况下创建函数。此创建函数使用fmincon寻找可行的个体。GACreation非线性可行开始fmincon从边界内的各种初始点InitialPopulationRange选项或者,GACreation非线性可行可以运行fmincon在初始点上平行。

您可以为其指定调整参数GACreation非线性可行使用以下名称-值对。

的名字 价值
SolverOpts fmincon选项,创建使用最佳选择optimset
使用并行 符合事实的fmincon在初始点上平行;默认为错误的
纽姆斯塔普茨 起始点的数目,为正整数总和(人口规模)在价值上。

在单元格数组中包括名称-值对以及@gacreationnonlinearfeasible

选项=最佳选项('ga','CreationFcn'{@gacreationnonlinearfeasible,... 'UseParallel',true,'numstartps',20});

多目标选择

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

  • 帕累托分离-设置当解算器从较高的前沿选择个体时,保持在第一个帕累托前沿的个体分数。此选项是介于0和1之间的标量。

    请注意

    第一个帕累托前沿上的个体分数可以超过帕累托分离. 在的步骤6中,如果其他级别的个人太少,则会发生这种情况迭代

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

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

    • “距离拥挤”,或等价物{@distancecrowding,'epotype'}-在适应度函数空间中测量距离。

    • {@distancecrowding,'genetic'}-在决策变量空间中测量距离。

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

      函数距离=距离函数(pop、分数、选项)%取消注释以下两行中的一行,或使用这两行的组合%y=分数;%表型%y=pop;%基因型大小=大小(y,1);%个体数量numData=大小(y,2);%维度数或适应度函数距离=零(popSize,1);%在此处分配输出%计算距离

      伽默多布吉人口过多流行音乐,人口的计算得分分数,以及选择权. 距离函数返回从人口中的每个成员到引用的距离,例如某种意义上的最近邻居。例如,编辑内置文件距离拥挤

混合功能选项

ga混合函数

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

  • []-没有混合功能。

  • fminsearch(“fminsearch”)-使用MATLAB®作用fminsearch执行无约束最小化。

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

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

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

请注意

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

可以为混合功能设置单独的选项。使用optimset对于fminsearch,或最佳选择对于fmincon,模式搜索,或fminunc. 例如:

hybridopts=optimoptions('fminunc','Display','iter','Algorithm','quasi-newton');
在遗传算法中包含混合选项选择权详情如下:
options=options('ga',options,'HybridFcn',{@fminunc,hybridopts});
杂交种在设置之前必须存在选择权

看到遗传算法中的混合方案举个例子。看见何时使用混合功能

伽默多布吉混合函数

混合函数是多目标遗传算法终止后运行的另一个最小化函数。可以指定混合函数福格拉坦在里面混合函数(杂交)选项。

作为多目标混合函数使用时,解算器执行以下操作:

  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).

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

停止条件选项

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

  • 世代(最大世代)-指定遗传算法要执行的最大迭代次数。默认值是100*numberOfVariables

  • 时间限制(MaxTime) -指定遗传算法在停止之前运行的最大时间(以秒为单位)抽搐toc.这个限制在每次迭代之后都会执行,所以ga当迭代花费大量时间时,可能会超过限制。

  • 适应极限(适用范围)-如果最佳适应值小于或等于适应极限.不适用于伽默多布吉

  • 失速世代(麦克斯泰尔一代)-如果最佳适应度函数值的平均相对变化超过失速世代小于或等于功能公差. (如果失速试验(失速试验)选项“geometricWeighted”,那么测试是针对几何加权平均相对变化。)对于非线性约束问题,失速世代应用于子问题(请参见非线性约束求解算法).

    对于伽默多布吉,如果传播关于Pareto解的几个性质万博 尤文图斯失速世代小于功能公差,最后的价差小于前一个价差的平均价差失速世代,则算法停止。几何平均系数为½。价差是衡量帕累托前沿运动的指标。看见gamultiobj算法

  • 失速时间限制(最大失速时间)-如果在由指定的时间间隔(以秒为单位)内最佳适应值没有改善,则算法停止失速时间限制,用…来衡量抽搐toc

  • 功能公差(功能公差)-如果最佳适应度函数值的平均相对变化超过失速世代小于或等于功能公差. (如果失速试验选择是“geometricWeighted”,那么测试是针对几何加权平均相对变化。)

    对于伽默多布吉,如果传播关于Pareto解的几个性质万博 尤文图斯失速世代小于功能公差,最后的价差小于前一个价差的平均价差失速世代,则算法停止。几何平均系数为½。价差是衡量帕累托前沿运动的指标。看见gamultiobj算法

  • 约束公差(约束耐受性)-该约束公差不用作停止标准。它被用来确定关于非线性约束的可行性。同时,最大值(sqrt(eps),约束公差)确定关于线性约束的可行性。

看到设置最大生成数举个例子。

输出功能选项

输出函数是遗传算法在每一代调用的函数。与所有其他解算器不同,aga输出函数不仅可以读取算法状态的值,还可以修改这些值。

要使用优化应用程序指定输出函数,

  • 选择自定义函数

  • 进来@我的乐趣在文本框中,其中myfun是函数的名称。写myfun具有恰当的语法

  • 要在输出函数中传递额外参数,请使用匿名函数(优化工具箱)。

  • 对于多个输出函数,输入输出函数句柄的单元格数组:{@myfun1,@myfun2,…}

在命令行中,设置

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

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

options=optimoptions('ga','OutputFcn',{@myfun1,@myfun2,…});

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

编辑gaoutputfcntemplate

在MATLAB命令行中。

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

输出函数的结构

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

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

MATLAB通过了选择权,状态旗帜数据传输到输出函数,输出函数返回状态,选择权选择更改数据

请注意

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

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

  • 选择权——选项

  • 状态-包含有关当前生成的信息的结构。国家结构描述状态

  • 旗帜-算法的当前状态:

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

    • “国际热核实验堆”-迭代状态

    • “打断”-非线性约束问题的子问题的迭代“auglag”非线性约束算法。当旗帜“打断”:

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

      • ga不接受更改选择权,忽略了选择更改

      • 这个state.nonlineq状态。NonlinEq字段不可用。

    • “完成”——最终状态

传递额外参数(最优化工具箱)解释如何为函数提供附加参数。

输出函数将以下参数返回给ga:

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

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

  • 选择更改-布尔标志,指示对选择权. 改变选择权对于后续迭代,设置选择更改符合事实的

改变国家结构

小心

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

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

提示

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

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

显示到命令窗口选项

显示级别(“显示”)指定运行遗传算法时命令行上显示的信息量。可用的选项包括

  • (“关”)—无回显信息。

  • 迭代的(“国际热核实验堆”) -信息显示在每个迭代。

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

  • 最终的(“决赛”)-显示停止的原因。

二者都迭代的诊断显示以下信息:

  • 一代-代数

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

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

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

  • 失速世代-自上次适应度函数改进以来的代数

当指定非线性约束函数时,迭代的诊断不要显示平均f(x),但将另外显示:

  • 最大约束-最大非线性约束违反

的默认值显示级别

  • 在优化应用程序中

  • “决赛”在使用创建的选项中最佳选择

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

您可以选择以串行、并行或矢量化方式计算适应度和约束函数。这些选项在用户功能评估部分的选项窗格,或通过设置“UseVectorized”“使用并行”选项与最佳选择

  • 评估适应度和约束函数(“UseVectorized”)是连续(错误的),ga在循环遍历总体时,每次对一个个体调用适应度函数。(在命令行中,假定“使用并行”为其默认值错误的.)

  • 评估适应度和约束函数(“UseVectorized”)是矢量化(符合事实的),ga立即调用整个种群的适应度函数,即,在对适应度函数的单个调用中。

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

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

  • 评估适应度和约束函数(使用并行)是并行(符合事实的),ga使用您建立的并行环境并行调用fitness函数(请参见如何在全局优化工具箱中使用并行处理)。在命令行中,设置使用并行错误的按顺序计算。

请注意

不能同时使用向量化和并行计算。如果你设定“使用并行”符合事实的“UseVectorized”符合事实的,ga以矢量化的方式而不是并行地评估适应度和约束函数。

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

使用矢量化=错误的 使用矢量化=符合事实的
使用并行=错误的 电视连续剧 量化的
使用并行=符合事实的 平行的 量化的