主要内容

向量化适应度函数

Vectorize速度

遗传算法通常运行得更快,如果你vectorize适应度函数。这意味着遗传算法只调用适应度函数一次,但期望适应度函数一次计算当前种群中所有个体的适应度。为了向量化适应度函数,

  • 编写计算函数的文件,使其接受一个具有任意多行的矩阵,与总体中的个体相对应。例如,向量化函数

    f x 1 x 2 x 1 2 2 x 1 x 2 + 6 x 1 + x 2 2 6 x 2

    使用以下代码编写文件:

    z = x(: 1)。^2 - 2*x(:,1) *x(:,2) + 6*x(:,1) + x(:,2)。^ 2 - 6 * x (:, 2);

    的第一个条目中的冒号x的所有行x,所以x (: 1)是一个向量。的.^.*操作符对向量执行元素级操作。

  • 在命令行中,设置UseVectorized选项真正的使用optimoptions

  • 优化活动编辑器任务,确保算法设置>向量化计算函数设置有一个复选标记。

    向量化的求值函数显示一个复选标记

请注意

适应度函数和任何非线性约束函数必须接受任意数目的行来使用Vectorize选择。遗传算法有时甚至在向量化计算期间也会计算单行。

下面在命令行运行的比较显示了向量化在速度上的改进。

选择= optimoptions (“遗传算法”“PopulationSize”, 2000);抽搐;ga (@rastriginsfcn 20 ,[],[],[],[],[],[],[], 选项);toc优化终止:最大数量一代又一代超过了。运行时间12.054973秒。选择= optimoptions(选项,“UseVectorized”,真正的);抽搐;ga (@rastriginsfcn 20 ,[],[],[],[],[],[],[], 选项);toc
优化终止:超过了最大代数。运行时间是1.860655秒。

矢量化的约束

如果存在非线性约束,则目标函数和非线性约束都需要向量化,算法才能进行向量化计算。

向量化目标和约束函数包含一个如何为求解器向量化两者的示例patternsearch.的语法几乎相同遗传算法.唯一的区别是patternsearch可以将其模式显示为行向量或列向量;对应的向量遗传算法是总体向量,总是行。

相关的话题