我想寫一個簡單的通用並行代碼來最小化MATLAB中的函數。這個想法很簡單,主要有:優化,減少變量和MATLAB parfor
parfor k = 1:N
(...find a good solution xcurrent with cost fcurrent ...)
% keep best current value
fmin = min(fmin,fxcurrent)
end
這工作得很好,因爲FMIN是減少變量,因而我可以用這個結構來更新當前的最佳值。
但是,我無法找到保存(或存儲)最佳當前解決方案(「xcurrent」)的很好的優雅方式。
我如何跟蹤迄今爲止找到的最佳解決方案?換句話說,如果當前值嚴格小於fmin,如何保存xcurrent(受限於並行循環在MATLAB中施加的約束)?
[當然,串行版本是微不足道的,只是前面加上
if fxcurrent < fmin;
xbest = xcurrent;
end;
但這並不在PARFOR循環工作。]
浮現在腦海中的一些方法:
我可以只存儲所有的解決方案和成本(使用切片變量),但這是巨大的內存效率低下(迭代次數N非常大,而且解決方案本身非常大)。
類似地,我可以使用一個(或集矩陣)減少變量和做:
solutionset = [solutionset,xcurrent]
但這幾乎是壞在存儲器需求方面。
- 每當解決方案得到改進時,我也可以將xcurrent保存到磁盤。
我試圖尋找一個更簡單的解決方案,但沒有什麼是非常有用的。
這個問題似乎是明確的(所以它不像其他問題,輸出可能取決於迭代順序),但我找不到一個優雅的方式來做到這一點。
如果我錯過了明顯的事情,並提前致謝,請提前道歉!
這取決於您通過「保持跟蹤」所瞭解的內容。你只是想要某種顯示,只是現在的價值 - 或者你需要整個開發?請澄清。 – bdecaf 2012-03-02 16:06:25
謝謝。我只是想保存它,或者存儲它以備後用。我將編輯原始帖子以澄清。 – user1245359 2012-03-02 16:41:57
起初我會建議保留所有xcurrent,然後再做最低限度的搜索。但是你寫了一些關於記憶的東西 - N太大了? – bdecaf 2012-03-02 18:22:07