我正在编写一个简单的遗传算法(GA)。可能有无数地方我不必要地使用了for循环。我想要一些关于如何提高 MATLAB 效率的提示以及我的问题的答案。据我所知,我已经成功了,但我不确定。这段代码定义的区域是单点交叉
这是我尝试过的...
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”是两个二进制编码染色体之间需要单点交叉的点。
- 'popSize' 是人口的大小,我的代码要求为偶数
- 'isolate' 定义了需要相互交换的 2 行的部分
- 'chromoParent' 是需要通过单点交叉改变的初始种群
- 'chromoChild' 是结果人口
- 'chromoParent' 和 'chromoChild' 都由一个大小为 popSize x 25 二进制字符的数组表示
你能在我思考这个问题的方式中发现一个错误吗?什么是最有效的方式(在计算时间)来实现同样的事情?如果您可以尽可能广泛,这将有所帮助,以便我可以开始将我在这里学到的原则应用到我的其余代码中。
谢谢你。