遗传算法通常运行得更快,如果你vectorize适应度函数。这意味着遗传算法只调用适应度函数一次,但期望适应度函数一次计算当前种群中所有个体的适应度。为了向量化适应度函数,
编写计算函数的文件,使其接受一个具有任意多行的矩阵,与总体中的个体相对应。例如,向量化函数
使用以下代码编写文件:
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
可以将其模式显示为行向量或列向量;对应的向量遗传算法
是总体向量,总是行。