2012-08-25 35 views
1

我想實現在C#中的算法,裏面有一些數學函數,如:在C#中有直接的方法來優化數學函數或最小化表達式中的參數嗎?

最小化||許(I) - ΣjAJ(我)BJ || 2 +β|| (i)|| 1

但我不確定在C#中是否有任何直接方法用於優化,我在論壇中找不到任何東西,或者您可以提供任何建議來解決此優化問題在C#中!?

+2

(i)您正在尋找一個具有C#接口/ C#綁定的**求解器**。 (ii)我瞭解你的函數中的第一項(最小二乘法)。我不明白這個詞以beta開頭。你能解釋一下嗎? (iii)如果您只需要最小二乘方,那麼爲此找到/接口特定求解器應該不會太困難。如果你真的需要一般的非線性優化,我會推薦[IPOPT](https://projects.coin-or.org/Ipopt/),但我相信這會對你的情況有所幫助。我不知道IPOPT的C#接口有多好。 – Ali

回答

4

有幾個求解器使用C#綁定,可能是適合你的問題,例如:

  • MS Solver Foundation,微軟的平臺數學優化,提供解決者大範圍的問題,包括無約束和約束最小二乘。一些努力挖掘API,但在返回衍生品是自動計算等。
  • ALGLIB提供了一個大範圍的不同優化器,可在C#
  • IPOPT在Ali的評論中被提及。我開發了IPOPT的C#綁定,可以下載here。我當然有偏見,但我個人認爲API相當簡單。如果您使用csipopt,則需要手動提供衍生產品。 (實際上還有一個庫合併了csipopt和提供了自動派生計算)由Michael Powell開發。我已經將這些解決方案移植到C#,100%託管代碼。 C#COBYLA2項目可用here,C#BOBYQA項目可用here