2012-01-14 165 views
3

我有一個目標函數B(s,r,l),我計算了s = 1,...,10,r = 1,...,10和l = 0.1的結果:0.1:10。對於每個s,我通過sizeof(l)矩陣生成10個。我想編寫一個搜索代碼,以便它返回最小的B值。更清晰的形式搜索最佳點搜索算法

Minimize B(s1,r1,l1)+B(s2,r2,l2)+B(s3,r3,l3) 

s.t s1+s2+s3 = 10 

r1 +r2 +r3 = 15 

l1+l2+l3 = 30 

s1,s2,s3,r1,r2,r3,l1,l2,l3 >=0 
s and r are integer. 

什麼是上述問題的最佳搜索算法?

回答

3

我會建議讓l3,r3,s3依賴於另一個變量的選擇。例如,如果l1 = 1l2 = 2它意味着l3 = 30 - 1 - 2。所以你只剩下6個參數來搜索。
然後您應該使用某種非線性優化方法,如fminsearh。根據這6個參數定義你的功能。
如果你的函數是平滑的,整數解決方案應該接近真正的解決方案。

爲了處理非零條件,您可以簡單地給任何給出負輸出的輸入提供一個巨大的錯誤。

所以,你應該功能是這樣的:

function d = f(l1,l2,s1,s2,r1,r2) 
     l3 = 30 - l1 - l2; 
     r3 = 15 - r1 - r2; 
     s3 = 10 - s1 - s2; 
     z = B(s1,r1,l1)+B(s2,r2,l2)+B(s3,r3,l3); 
     if z<0 
      d = 10^20; 
     else 
      d = z; 
     end 
end 

最後,嘗試檢查所有的整數解的 - 嘗試每個值四捨五入爲地板小區。將會有2^6個可能性。

+0

這是一個鼓舞人心的評論。我正在研究類似的代碼。基本上,我爲s,r,l的各種組合生成了我的「B」。然後我在這些矩陣中搜索。還有路要走。但感謝評論 – sosruko 2012-01-15 15:50:49

+0

@sosruko,歡迎來到SO。沒有必要感謝,接受,而不是評論是有幫助的。 – 2012-01-15 16:07:54