2017-05-08 71 views
0

我想反覆運行優化問題以進一步優化最終結果。使用scipy linprog進行優化的定點界限

本質上,目的是最大的一組變量(受不等式和等式約束),的最小化,然後最小化的最大的集不含最大值,,然後最大最小化設定排除最大的兩個數等等...

算法我心目中的是:

  1. 運行scipy.linprog(..., bounds=[(-numpy.inf, numpy.inf), (-numpy.inf, numpy.inf), (-numpy.inf, numpy.inf), ...])與所有變量無界,以最大限度地減少數字的最大值。
  2. 假設優化問題是可行且成功解決的,通過設置bounds=[..., (opt_val, opt_val), ...]將最大值修改爲opt_val,其中所有其他變量的邊界爲(-numpy.inf, numpy.inf)
  3. 通過將b_ub的係數更改爲numpy.inf,使對應於該變量的不等式約束無效。
  4. 帶有修改邊界和不等式向量的重新運行模擬。

這可以運行沒有錯誤,但它似乎是SciPy的/ numpy的明確忽略我放在變量的界限 - 我得到我已經「固定」不屬於相應opt_val變量的結果。

scipy可以處理將變量限制爲單個浮點數的邊界嗎? 這是解決我的問題的最佳方法嗎?

我開發的代碼真的很廣泛,這就是爲什麼我沒有在這裏發佈,所以當然我不期望一個基於代碼的解決方案。我在這裏尋找的是一個是/否的答案,是否scipy能夠處理限制爲單個浮點的邊界間隔,以及在更高層次上,我是否擁有正確的方法。

https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.optimize.linprog.html的文檔沒有明確說明是否可以指定定點界限。

+0

嘗試更好的LP解算器。 Scipy.optimize.linprog不是很健壯。 –

+0

對於那些正在尋找一個來源,以verfiy @ ErwinKalvelagen的評論: http://stackoverflow.com/questions/43106053/why-does-scipy-optimize-linprog-return-a-solution-that-does-not-satisfy- constrai/43106433 – Charlie

回答

0

事實證明,這是放寬不平等約束的問題。我錯誤地放寬了所有的關於固定變量的限制,反而我需要放寬的一些的限制。

@ ErwinKalvelagen的評論仍然值得注意。