我正在编写一个简单的Genetic Algorithm(GA)代码。可能有无数区域我不必要地使用for循环。我想了解一些如何提高MATLAB效率以及回答我的问题的技巧。据我所知,我已经成功,但我不确定。此代码定义的区域是单点crossover
这是我尝试过的......
crossPoints=randi([1 24],popSize/2,1);
for popNo=2:2:popSize
isolate=chromoParent(popNo-1:popNo,crossPoints(popNo/2,1)+1:end);
isolate([1 2],:)=isolate([2 1],:);
chromoParent(popNo-1:popNo,crossPoints(popNo/2,1)+1:end)=isolate;
end
chromoChild=chromoParent;
你能否发现我正在考虑这个问题的错误?实现同样的事情的最有效方式(在计算时间内)是什么?如果你能够尽可能广泛,这将有所帮助,这样我就可以开始将我在这里学到的原则应用到我的其余代码中。
谢谢。
答案 0 :(得分:2)
您的代码看起来很好。如果需要,可以通过一些非常简单的索引将循环中的指令减少到一行:
chromoParent( popNo-1:popNo, crossPoints(popNo/2,1)+1:end) = ...
chromoParent(popNo:-1:popNo-1,crossPoints(popNo/2,1)+1:end);
这可能会略微加快,但与任何优化一样,您应该首先对其进行分析(我的猜测是这些行对整个CPU时间贡献很小)。