遗传算法选择

优化应用与命令行

有两种方法可以指定遗传算法的选项,这取决于您是使用优化应用程序还是调用函数遗传算法要么gamultiobj在命令行:

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

  • 如果你打电话遗传算法要么gamultiobj在命令行,创建选项使用函数optimoptions, 如下:

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

    看到在命令行设置选项举些例子。

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

  • 它的标签,因为它出现在优化应用程序

  • 通过在其字段名选项

例如:

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

  • PopulationType对应的场是选项

图解选项

绘图选项,在运行时,你从遗传算法的绘图数据。您可以通过点击在任何时间停止算法停止在绘图窗口按钮。

情节间隔PlotInterval)指定对plot函数的连续调用之间的代数。

方法中选择下列任何绘图函数绘制函数窗格两遗传算法gamultiobj

  • 分数多样性'gaplotscorediversity')绘制每一代分数的柱状图。

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

  • 家谱“gaplotgenealogy”)绘制个人谱系。从一代到下一代的代码行被用颜色编码如下:

    • 红线表示突变的孩子。

    • 蓝线表示交叉孩子。

    • 黑线表示精英个体。

  • 分数'gaplotscores')绘制每一代个体的分数。

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

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

  • 最大约束“gaplotmaxconstr”)绘制了最大非线性约束违反在每一代。为遗传算法,只适用于增广拉格朗日“auglag”非线性约束算法NonlinearConstraintAlgorithm)选项。因此,不适用于整数约束问题,因为它们使用点球'罚款')非线性约束算法。

  • 自定义函数让您使用自己的绘图函数。要指定plot函数(如果使用优化应用程序),

    • 选择自定义函数

    • 输入@myfun在文本框中,在那里myfun是函数的名称。

    看到情节功能的结构

在下图功能可用于遗传算法只要:

  • 最好的健身'gaplotbestf')绘制了最好的得分值和平均分数与一代。

  • 最好的个人'gaplotbestindiv')绘制每代适应度函数值最佳的个体的向量条目。

  • 期望'gaplotexpectation')绘制的孩子对每一代的原始分数的预期数量。

  • 范围'gaplotrange')绘制的最小值,最大值,和在每一代平均得分值。

在下图功能可用于gamultiobj只要:

  • 帕累托前沿'gaplotpareto')绘制帕累托前面针对第一两个目标函数。

  • 帕累托平均距离'gaplotparetodistance')绘制出每个个体与其邻居之间距离的柱状图。

  • 等级分布图“gaplotrankhist”)绘制个体等级的柱状图。排名1的个体位于帕累托边界。第2级的个人比至少一个第1级的个人低,但不低于任何其他职级的个人,等等。

  • 平均帕累托分布“gaplotspread”)地块的平均价差为迭代次数的函数。

调用时显示情节遗传算法要么gamultiobj从命令行设置PlotFcn选项为内置的plot函数名或plot函数的句柄。例如,要显示最佳适应度图,设置选项如下:

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

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

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

在哪里@ plotfun1@ plotfun2,等等都是函数处理的情节功能。

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

情节功能的结构

曲线函数的第一行有以下形式:

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

函数的输入参数是

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

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

  • - 舞台上的算法是目前在说明有关详情,请参阅输出函数的选择

传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。

输出参数状态是一个状态的结构为好。通过输入参数,如果你喜欢修改;看到改变国家结构。为了停止迭代,设置state.StopFlag到非空字符向量,例如'Y'

国家结构

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

  • 一代-目前的世代数。

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

  • StopFlag-停止的原因,字符矢量。

  • LastImprovement- 代处健身价值上的最新改进的发生。

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

  • 请接受我最美好的祝愿,- 包含在每一代的最佳得分矢量。

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

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

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

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

  • 人口-当代人口。

  • 分数- 当前人口的成绩。

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

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

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

  • HaveDuplicates- 逻辑值指示是否遗传算法增加了对初始种群重复的个体。遗传算法使用小的相对宽容,以确定一个人是否是重复的或独特的。如果HaveDuplicates真正,然后遗传算法定位独特的个人和每一个独特的个体计算适应度函数只有一次。遗传算法复制适应度和约束函数值以复制个体。遗传算法在每一代重复测试,直到所有个体都是唯一的。考试开始了n * m *日志(m)操作,人口规模和ñ据nvar。要覆盖此测试中的自定义绘图功能或自定义输出功能,设置输出state.HaveDuplicates

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

  • 人口-当代人口

  • 分数- 当前人口的比分,一个人口——- - - - - -nObjectives矩阵,nObjectives是目标的数量

  • 一代-现时的发电量

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

  • StopFlag-停止的原因,字符矢量

  • FunEval- 功能评估的累计数

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

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

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

  • AverageDistance- 标准差(非普通)距离

  • 传播- Vector中的项在每一代蔓延

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

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

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

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

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

  • isFeas-可行性人口,一个逻辑向量与PopulationSize分子

  • maxLinInfeas-在人口的线性约束条件下,最大的不可行性

人口选项

种群选项允许指定遗传算法使用的种群的参数。

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

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

  • 位串“位”) -使用此选项,如果在人群中的个人有组成部分是0要么1

    谨慎

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

    创建函数CreationFcn),变异函数MutationFcn), 采用统一的“gacreationuniform”“mutationuniform”) 要么习惯。为交叉功能CrossoverFcn), 采用零落'crossoverscattered'),单点“crossoversinglepoint”),两个点'crossovertwopoint'), 要么习惯。你不能使用混合功能遗传算法忽略所有约束,包括边界、线性约束和非线性约束。

  • 习惯——对交叉功能变异函数,使用习惯。为创建函数,要么使用习惯,或提供初始种群。你不能使用混合功能遗传算法忽略所有约束,包括边界、线性约束和非线性约束。

人口规模PopulationSize)指定有多少人有每一代。随着人口数量庞大,遗传算法更彻底地搜索解空间,从而减少了该算法返回局部最小值是不是全局最小的机会。然而,一个大的人口规模也导致算法运行更慢。

如果设置人口规模对于一个向量,遗传算法创建多个子种群,子种群的数量就是向量的长度。每个子总体的大小是向量的对应项。看到迁移选项

创建函数CreationFcn)指定用于创建初始群体中的功能遗传算法。不要指定整数的问题,因为一个创作功能遗传算法覆盖您所做的任何选择。选择:

  • []使用有关问题的默认创建功能。

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

    谨慎

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

  • 可行的人口“gacreationlinearfeasible”),当有线性约束和没有整数约束的缺省值,创建一个随机的初始群体,其满足所有边界和线性约束。如果存在线性约束,可行的人口创建于限制区域的界限许多人,并创造良好的人口分散。可行的人口忽略了初始范围InitialPopulationRange)。

    “gacreationlinearfeasible”调用linprog以创建相对于边界和线性约束可行人口。

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

  • 非线性可行的人口“gacreationnonlinearfeasible”的默认创建函数'罚款'非线性约束算法。有关详细信息,请参见约束参数

  • 习惯允许您编写自己的创建函数,该函数必须生成您在其中指定的类型的数据人口类型。,如果你使用的是优化应用程序指定创建功能,

    • 创建函数习惯

    • 函数名@myfun,在那里myfun是函数的名称。

    如果您正在使用遗传算法,组

    选项= optimoptions( 'GA', 'CreationFcn',@ myfun);

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

    功能人口= myfun(GenomeLength,FitnessFcn,选项)

    输入函数的自变量是:

    • Genomelength- 自变量的数目为健身功能

    • FitnessFcn——适应度函数

    • 选项——选项

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

    传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。

    谨慎

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

初始种群InitialPopulationMatrix)指定了遗传算法的初始群体。默认值是[], 在这种情况下遗传算法使用默认的创建函数创造一个初始种群。方法中输入非空数组初始种群字段,数组必须不超过人口规模行,并准确变量数列。如果你有一个局部初始种群,意思是小于人口规模行,那么遗传算法调用创建函数产生剩余的个体。

初始分数InitialScoreMatrix)指定初始总体的初始得分。最初的分数也可以是部分的。不指定初始分数与整数问题,因为遗传算法覆盖您所做的任何选择。

初始范围InitialPopulationRange)指定由生成的初始填充中的向量的范围gacreationuniform创建功能。您可以设置初始范围是一个有两行和的矩阵变量数列,其中每一列的形式(磅;乌兰巴托),在那里在下部结合并乌兰巴托在上界在该坐标中的条目。如果您指定初始范围为了得到一个2×1的向量,每一项都被展开成一个长度为常数的行变量数。如果不指定初始范围,默认为[10]-10;[1 e4 + 1; 1 e4 + 1)对于整数约束的问题),修改为匹配任何现有的边界。

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

健身缩放选项

健身缩放转换由适应度函数在适合于选择功能的范围内返回到值的原始分数的健身。您可以指定在健身缩放选项健身比例窗格。

缩放功能FitnessScalingFcn)指定执行缩放功能。选项有

  • 'fitscalingrank') - 默认的适应度变换功能,,根据每个人的排名而不是分数来衡量原始分数。一个个体的等级是它在排序分数中的位置。有地位的人[R已缩放的得分成比例 1 / [R 。所以,最适合个人的比例分数成正比1,下一个最适合的比例分数成正比 1 / 2 等等。等级适合度尺度消除了原始分数的扩散效果。与排名得分相比,平方根使排名较低的个体在得分上更接近相等。有关更多信息,请参见健身比例

  • 成比例的'fitscalingprop') - 比例缩放使得个体正比于它的原始适应得分换算值。

  • 最佳'fitscalingtop') -最上面的量表平等地衡量最上面的个人。选择最佳显示一个附加字段,数量,它指定被分配正换算值的个体的数量。数量可以是一个从1到总体大小的整数,也可以是一个从0到1的分数,指定总体大小的一个分数。默认值是0.4。的个人的每一个产生后代​​被分配相等的换算值,而其余的被指定值为0的定标值的格式为[01 / N 1 / N 0 0 1 / N 0 0 1 / N ...]。

    要更改默认值数量在命令行,使用以下语法:

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

    在哪里数量是的价值数量

  • 改变线性“fitscalingshiftlinear”) - 移位线性缩放尺度原始分数,以使最适合的个体是对期望等于乘以平均得分的常数。您可以指定在恒马克斯存活率现场,当您选择其中显示改变线性。默认值是2

    的默认值马克斯存活率在命令行,可使用以下语法

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

    在哪里是的价值马克斯存活率

  • 习惯让你写你自己的缩放功能。要使用优化的应用程序指定的缩放功能,

    • 缩放功能习惯

    • 函数名@myfun,在那里myfun是函数的名称。

    如果您正在使用遗传算法在命令行,set

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

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

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

    输入函数的自变量是:

    • 分数- 标量为群体的每个成员的载体,一个

    • nParents- 从这一人群所需要的家长人数

    函数返回期望中,相同的长度的标量的列向量分数,给群体的每个成员的换算值。的项的总和期望必须等于nParents

    传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。

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

选择选项

选择选项指定遗传算法如何为下一代选择父代。方法中指定算法使用的函数选择功能SelectionFcn)的领域选择选项面板中。不要在整数问题中使用。

gamultiobj只使用比赛'selectiontournament')选择功能。

遗传算法选项有:

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

  • 'selectionremainder') -余数选择从每个个体的比例值的整数部分确定性地分配父母,然后使用轮盘赌选择的剩余小数部分。例如,如果一个个体的缩放值是2.3,那么该个体将作为父元素被列出两次,因为整数部分是2。在按比例值的整数部分分配双亲之后,随机选择其余的双亲。在这一步中选择父元素的概率与它的比例值的小数部分成正比。

  • 统一的'selectionuniform') -统一选择选择父母的期望和父母的数量。统一选择对于调试和测试非常有用,但不是一个非常有效的搜索策略。

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

  • 比赛'selectiontournament') -比赛选择通过选择选择每个父母比赛规模随机选择,然后从中选出最好的个体作为父母。比赛规模必须至少为2的默认值比赛规模4

    的默认值比赛规模在命令行上,使用语法

    选项= optimoptions( 'GA', 'SelectionFcn',... {@ selectiontournament,大小})

    在哪里尺寸是的价值比赛规模

    约束参数>非线性约束算法点球遗传算法使用比赛与大小2

  • 习惯使您能够编写自己的选择函数。要使用优化应用程序指定选择函数,

    • 选择功能习惯

    • 函数名@myfun,在那里myfun是函数的名称。

    如果您正在使用遗传算法在命令行,set

    选项= optimoptions( 'GA', 'SelectionFcn',@ myfun);

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

    函数双亲= myfun(期望,nParents,选项)

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

    输入函数的自变量是:

    • 期望

      • 遗传算法期望是群体的每个成员的经缩放的健身的列向量。缩放来自健身缩放选项

        小费

        可以使用以下命令确保有列向量期望(:1)。例如,编辑selectionstochunif或任何其他的内置选择功能。

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

    • nParents-可供选择的家长数目。

    • 选项- 遗传算法选项

    函数返回父母长度的行向量nParents包含您选择的父索引。

    传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。

看到选择欲获得更多信息。

复制选项

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

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

交叉部分CrossoverFraction)指定跨界产生的下一代(精英儿童除外)的比例。集交叉部分之间的一个分数01,无论是通过在文本框中输入级分或移动滑块。默认值是0.8

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

突变的选择

突变选项指定遗传算法如何对种群中的个体进行小的随机变化,从而产生突变子。突变提供了遗传多样性,使遗传算法能够搜索更广阔的空间。可以在。中指定突变函数变异函数MutationFcn)的领域突变选项面板中。不要在整数问题中使用。您可以从以下功能中选择:

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

    • 规模参数决定了第一代的标准差。如果设置初始范围是一个2×1矢量v,则初始标准差在父向量的所有坐标处均相同,由规模* (v (2) - v (1))

      如果设置初始范围是一个矢量v两行变量数列,初始标准偏差在坐标一世的父向量规模*(V(I,2) - V(I,1))

    • 收缩参数控制标准偏差为收缩一代如何去了。如果设置初始范围是一个2×1向量,标准偏差在ķ一代,σķ,在父向量的所有坐标下都是相同的,由递归公式给出

      σ ķ = σ ķ 1 1 收缩 ķ 一代又一代

      如果设置初始范围以与两行的矢量和变量数列,标准偏差为坐标一世在亲代载体的ķ一代,σ我,k,由递推公式给出

      σ 一世 ķ = σ 一世 ķ 1 1 收缩 ķ 一代又一代

      如果设置收缩1,算法线性收缩各坐标的标准差,直到最后一代达到0。负值为收缩导致标准差增大。

    两者的默认值规模收缩是1。要改变的默认值在命令行上,使用语法

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

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

    谨慎

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

  • 统一的“mutationuniform”) - 一致突变是一个两步骤的过程。首先,算法选择用于突变的个体,其中,每个条目具有的概率的向量的条目的一小部分被突变。的默认值0.01。在第二步骤中,该算法通过替换来自该条目的的范围内均匀地选择一个随机数的每个选定的条目。

    的默认值在命令行上,使用语法

    选项= optimoptions( 'GA', 'MutationFcn',{@mutationuniform,速率})

    在哪里是的价值

    谨慎

    不要使用mutationuniform当你有界限或线性约束时。否则,您的种群将不一定满足约束条件。

  • 自适应可行“mutationadaptfeasible”),当有约束时的默认突变函数,随机生成与最后一个成功或不成功生成相适应的方向。变异选择一个方向和步长,满足界限和线性约束。

  • 习惯使您能够编写自己的突变函数。要使用优化app指定突变函数,

    • 变异函数习惯

    • 函数名@myfun,在那里myfun是函数的名称。

    如果您正在使用遗传算法,组

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

    你突变的功能必须有这样的调用语法:

    功能mutationChildren = myfun(父母,选项,nvars,FitnessFcn,州,thisScore,thisPopulation)

    函数的参数是

    • 父母- 通过选择功能选择的父母行向量

    • 选项——选项

    • 据nvar-变量数量

    • FitnessFcn——适应度函数

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

    • thisScore- 当前人口的得分矢量

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

    函数返回mutationChildren-THE突变后代-为其中行对应于孩子的矩阵。矩阵的列的数目是变量数

    传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。

    谨慎

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

交叉选项

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

交叉功能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 = [A B 3 4 E 6 7 8]

    谨慎

    不要使用'crossoverscattered'当你有线性约束。否则,您的种群将不一定满足约束条件。

  • 单点“crossoversinglepoint”)选择1和之间的随机整数n变量数然后

    • 从第一个父元素中选择编号小于或等于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”当你有线性约束。否则,您的种群将不一定满足约束条件。

  • 两个点'crossovertwopoint')选择两个随机整数ñ之间1变量数。功能选择

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

    • 向量项编号m + 1ñ,包括来自第二父母的

    • 矢量条目编号大于ñ来自第一个父母。

    然后,该算法串接这些基因,以形成一个单一的基因。例如,如果P1P2是我的父母

    P1 = [A B C d E F G H] P2 = [1 2 3 4 5 6 7 8]

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

    child = [a b c 4 5 6 g h]

    谨慎

    不要使用'crossovertwopoint'当你有线性约束。否则,您的种群将不一定满足约束条件。

  • 中间“crossoverintermediate”),当存在线性约束时的默认交叉函数,通过对父类求加权平均值来产生子类。你可以用一个参数来指定权重,,它可以是一个标量,也可以是一个长度的行向量变量数。默认值是所有1的向量。该函数从parent1parent2使用下面的公式。

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

    如果所有的条目在[0,1]范围内,生成的子数据集位于超立方体中,超立方体的定义是将父数据集放置在相反的顶点上。如果是不是在这个范围内,孩子可能在于超立方体之外。如果是标量,那么所有的孩子趴在父母之间的界线。

    的默认值在命令行上,使用语法

    选项= optimoptions( 'GA', 'CrossoverFcn',... {@crossoverintermediate,比});

    在哪里是的价值

  • 启发式“crossoverheuristic”)返回一个孩子,包含两个父母的谎言就行了,一个小的距离与方向从与糟糕的适应值父远越好适应值父之遥。您可以指定孩子有多远是从更好的家长通过参数,当您选择时将出现启发式。的默认值是1.2。如果parent1parent2是父母,和parent1具有更好的适应度值,函数返回子对象

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

    的默认值在命令行上,使用语法

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

    在哪里是的价值

  • 算术“crossoverarithmetic”)创建的子元素是双亲的加权算术平均值。对于线性约束和界限,子结点总是可行的。

  • 习惯使您可以编写自己的交叉功能。要使用优化的应用程序指定交叉功能,

    • 交叉功能习惯

    • 函数名@myfun,在那里myfun是函数的名称。

    如果您正在使用遗传算法,组

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

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

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

    函数的参数是

    • 父母- 通过选择功能选择的父母行向量

    • 选项——选项

    • 据nvar-变量数量

    • FitnessFcn——适应度函数

    • 没用过- 未使用占位符

    • thisPopulation-表示当前人口的矩阵。矩阵的行数是人口规模列数是变量数

    函数返回xoverKids——交叉分支——作为一个矩阵,其中行对应于子元素。矩阵的列的数目是变量数

    传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。

    谨慎

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

迁移选项

请注意

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

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

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

您可以控制迁移是如何发生的由以下三个字段移民选择面板:

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

    • 如果设置方向向前“前进”),迁移就朝着最后亚群的地方。那就是ñ第一个亚种群迁移到(ñ1)个亚群。

    • 如果设置方向“两个”)时,ñth亚群迁移进入两个(ñ-1)th和(ñ1)个亚群。

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

  • 时间间隔MigrationInterval) -指定在迁移之间传递多少代。例如,如果你设置时间间隔20.在美国,每隔20代就有一次迁徙。

  • 分数MigrationFraction) - 指定许多人亚群之间如何移动。分数指定的两个亚群的是移动的小的分数。例如,如果个人从50个人的一个亚群迁移到100个人的一个亚群和设置分数0.1中,个人数,该数是迁移0.1 * 50 = 5。

约束参数

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

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

增广拉格朗日遗传算法

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

  • 惩罚因子PenaltyFactor) - 增加时,问题不就解决了所需的精度和约束不满意惩罚参数。惩罚因子必须大于1,并有一个默认100

惩罚算法

惩罚算法使用gacreationnonlinearfeasible默认创建函数。这个创建函数使用fmincon寻找可行的个体。gacreationnonlinearfeasible开始fmincon从边界内的各种初始点InitialPopulationRange选项。(可选)gacreationnonlinearfeasible可以运行fmincon平行于初始点。

您可以指定调整参数gacreationnonlinearfeasible使用下面的名称 - 值对。

的名字
SolverOpts fmincon选项,创建使用optimoptions要么optimset
UseParallel 真正、运行fmincon在初始点上平行;默认是
NumStartPts 起始点的个数,一个正整数到总和(PopulationSize)在的价值。

包括在一个单元阵列连同名称 - 值对@gacreationnonlinearfeasible

选项= optimoptions( 'GA', 'CreationFcn',{@gacreationnonlinearfeasible,... 'UseParallel',真正的 'NumStartPts',20});

多目标选项

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

  • ParetoFraction- 设置个人的分数保持在第一Pareto前沿,而从更高的战线上求解器选择个人。该选项是0和1之间的标量。

    请注意

    在第一个帕累托前沿的个体比例可以超过ParetoFraction。当有其他队伍太少个人的第6步出现这种情况迭代

  • DistanceMeasureFcn- 定义的句柄功能,个人的单位计算距离度量,在决策变量空间计算(基因型,也称为设计变量空间),或在功能空间(表型)。例如,默认的距离测量功能是“distancecrowding”在功能空间,这是相同的{@ distancecrowding, '表型'}

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

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

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

    • @distancefunction- 使用下面的模板写一个自定义的距离函数。

      函数距离= distancefunction(pop,score,options) %取消下面两行的注释,或者使用两个% y = score的组合;%表现型% y = pop;%基因型popSize =大小(y,1);个体数% numData =个体大小(y,2);维数或适应度函数距离= 0 (popSize,1);在这里分配输出%计算距离

      gamultiobj通过人口流行,计算出的成绩为人口分数,并在选项选项。您的距离函数返回从群体的每个成员的距离的基准,例如在某种意义上最近邻。举个例子,编辑内置的文件distancecrowding.m

混合功能选项

遗传算法混合功能

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

  • []-无混合函数。

  • fminsearch“fminsearch”) -使用MATLAB®功能fminsearch执行无约束极小化。

  • patternsearch“patternsearch”) - 使用模式搜索到执行受限或无约束极小化。

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

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

请注意

确保您的混合功能接受你的问题的制约。除此以外,遗传算法抛出一个错误。

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

hybridopts = optimoptions( 'fminunc', '显示', 'ITER', '算法', '准牛顿');
在遗传算法中包含混合选项选项如下:
选项= optimoptions( 'GA',选项 'HybridFcn',{@ fminunc,hybridopts});
hybridopts必须存在你之前设置选项

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

gamultiobj混合功能

混合函数是在多目标遗传算法终止后运行的另一个最小化函数。你可以指定混合函数fgoalattain混合功能HybridFcn)选项。

在用作多目标混合功能,解算器执行以下操作:

  1. 在计算解决方案的最大和每个目标函数的最小值。金宝搏官方网站对于目标Ĵ在解决方案ķ,让

    F 最大 Ĵ = 最大 ķ F ķ Ĵ F 最小值 Ĵ = 最小值 ķ F ķ Ĵ

  2. 计算总重量的各溶液ķ

    w ^ ķ = Ĵ F 最大 Ĵ F ķ Ĵ 1 + F 最大 Ĵ F 最小值 Ĵ

  3. 计算的权重为每个目标函数Ĵ在每一个解决方案ķ

    p Ĵ ķ = w ^ ķ F 最大 Ĵ F ķ Ĵ 1 + F 最大 Ĵ F 最小值 Ĵ

  4. 对于每一个解决方案ķ,用目标向量执行目标达成问题FķĴ)和加权矢量pĴķ)。

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

停止条件的选择

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

  • 一代又一代MaxGenerations) -指定遗传算法执行的最大迭代次数。默认值是100个* numberOfVariables

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

  • 健身极限FitnessLimit) - 该算法停止,如果最好的适应度值小于或等于的值健身极限。不适用于gamultiobj

  • 摊位代MaxStallGenerations) -如果最优适应度函数值的平均相对变化超过,算法停止摊位代小于或等于功能公差。(如果失速测试StallTest)选项“geometricWeighted”,则测试为几何加权平均相对变化。)对于非线性约束的问题,摊位代适用于子问题(见非线性约束求解算法)。

    gamultiobj中,如果在相对变化的几何平均传播帕累托解决方案的上金宝搏官方网站摊位代小于功能公差,而最后的利差比最后一次的平均利差要小摊位代,则算法停止。几何平均系数为1/2。价差是帕累托前沿的运动的度量。看到gamultiobj算法

  • 失速时间限制MaxStallTime) - 该算法停止,如果在对一个时间间隔的最佳适合度值通过指定没有改善以秒失速时间限制,由抽搐TOC

  • 功能公差FunctionTolerance) -如果最优适应度函数值的平均相对变化超过,算法停止摊位代小于或等于功能公差。(如果StallTest选项“geometricWeighted”,则测试为几何加权平均相对变化。)

    gamultiobj中,如果在相对变化的几何平均传播帕累托解决方案的上金宝搏官方网站摊位代小于功能公差,而最后的利差比最后一次的平均利差要小摊位代,则算法停止。几何平均系数为1/2。价差是帕累托前沿的运动的度量。看到gamultiobj算法

  • 约束宽容ConstraintTolerance) - 的约束宽容不用作停止标准。它被用来确定关于非线性约束的可行性。同时,MAX(开方(EPS),ConstraintTolerance)根据线性约束确定可行性。

看到代集最大数量的一个例子。

输出函数的选择

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

要使用优化的应用程序指定输出功能,

  • 选择自定义函数

  • 输入@myfun在文本框中,在那里myfun是函数的名称。写myfun适当的语法

  • 为了将额外的参数输出功能,用途匿名函数(优化工具箱)。

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

在命令行,set

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

对于多输出功能,输入功能把手的单元阵列:

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

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

编辑gaoutputfcntemplate

在MATLAB命令行。

对于一个示例,请参见自定义输出函数的遗传算法

输出函数的结构

你的输出功能必须具备以下调用语法:

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

MATLAB传递选项状态数据到输出函数,然后输出函数返回状态选项optchanged数据。

请注意

为了停止迭代,设置state.StopFlag到非空字符向量,例如'Y'

输出功能具有以下输入参数:

  • 选项——选项

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

  • -算法的当前状态:

    • '在里面'——初始化状态

    • 'ITER'- 迭代状态

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

      • 的值状态场施加于子问题的迭代。

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

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

    • “完成”——最终状态

传递额外的参数(Optimization Toolbox)说明如何向函数提供附加参数。

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

  • 状态- 包含有关当前一代的信息结构。国家结构描述了状态。为了停止迭代,设置state.StopFlag到非空字符向量,例如'Y'

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

  • optchanged-布尔标志,指示更改到选项。改变选项对于随后的迭代,集optchanged真正

改变国家结构

谨慎

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

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

小费

如果输出结构更改人口场,则一定要更新分数场,也可能是请接受我最美好的祝愿,NonlinIneq,或NonlinEq字段,以便它们包含一致的信息。

更新分数改变后场人口场,首先计算群体的适应度函数值,则计算为人口健身缩放。看到健身缩放选项

显示到命令窗口选项

水平显示'显示')指定在遗传算法运行时在命令行显示多少信息。可用的选项有

  • “关”) -不显示输出。

  • 迭代'ITER') -信息显示在每个迭代。

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

  • 最后'最后') - 原因是显示停止。

迭代诊断显示以下信息:

  • 一代代数量

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

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

  • 平均数F(X)- 平均适应度函数值

  • 摊位代-代数自上次改进后的适应度函数

当指定了非线性约束函数时,迭代诊断不显示平均数F(X),但将附加地显示:

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

的默认值水平显示

  • 在优化app中

  • '最后'在选择使用创建optimoptions

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

您可以选择以串行、并行或向量化的方式评估适应度和约束函数。选项中提供了这些选项用户函数评价部分的选项窗格中优化应用程序,或通过设置“UseVectorized”“UseParallel”选择与optimoptions

  • 评估健身和约束功能“UseVectorized”)是在串行),遗传算法在遍历种群时,每次只对一个个体调用适应度函数。(在命令行,假设是这样“UseParallel”是否为其默认值。)

  • 评估健身和约束功能“UseVectorized”)是矢量真正),遗传算法一次对整个人群调用适应度函数,即,只需调用一次适应度函数。

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

    看到矢量化的健身功能的一个例子。

  • 评估健身和约束功能UseParallel)是并行真正),遗传算法使用您建立的并行环境(参见如何使用全局优化工具箱并行处理)。在命令行,setUseParallel计算顺序。

请注意

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

健身和约束函数的评估方式

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