【发布时间】:2013-02-13 20:16:58
【问题描述】:
我正在编写一个简单的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;
- 其中,“crossPoints”是单点交叉点 需要在两个二进制编码的chromosomes 之间。
- 'popSize' 是population 的大小,我的代码要求 是偶数
- 'isolate' 定义了需要交换的 2 行的部分 彼此相伴
- 'chromoParent' 是初始种群,需要 由单点交叉改变
- 'chromoChild' 是结果人口
- “chromoParent”和“chromoChild”都由一个数组表示 大小,popSize x 25 个二进制字符
你能发现我思考这个问题的方式有错误吗?什么是最有效的方式(在计算时间)来实现同样的事情?如果您可以尽可能广泛,这将有所帮助,以便我可以开始将我在这里学到的原则应用到我的其余代码中。
谢谢。
【问题讨论】:
标签: matlab for-loop swap genetic-algorithm memory-efficient