1
我在編碼一個簡單的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;
- 其中,「交叉點」是在該點兩個二進制之間的單點交叉 編碼爲chromosomes是必需的。
- 「popSize」是population的大小,通過我的代碼需要 是偶數
- 「分離」定義的它們都需要彼此
- 「chromoParent被交換 2行的部分'是被要求是 由單點交叉
- 改變初始羣體‘chromoChild’被所得的人口
- 兩個‘chromoParent’和‘chromoChild’由 大小的數組來表示,popSize×25二進制字符
你能指出我在思考這個問題的方式有錯誤?什麼是最有效的方法(在計算時間)實現相同的事情?如果你可以儘可能廣泛,這將有助於我開始將我在這裏學習的原則應用於我的其他代碼。
謝謝。
不知道你所說的什麼'你應該第一個配置文件它。如果這是一個簡單的概念,你可以告訴我嗎?或者如果涉及更多,也許你可以指向我一個很好的資源。謝謝。 – 2013-02-13 23:20:07
@DeanKayton:當您配置文件代碼,你測量每行的執行時間,它允許你確定你的代碼的瓶頸。 [這裏的文件鏈接到Matlab的分析器(http://www.mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html) – Jonas 2013-02-13 23:29:54