我想反覆運行優化問題以進一步優化最終結果。使用scipy linprog進行優化的定點界限
本質上,目的是最大的一組變量(受不等式和等式約束),的最小化,然後最小化的最大的集不含最大值,,然後最大最小化設定排除最大的兩個數等等...
算法我心目中的是:
- 運行
scipy.linprog(..., bounds=[(-numpy.inf, numpy.inf), (-numpy.inf, numpy.inf), (-numpy.inf, numpy.inf), ...])
與所有變量無界,以最大限度地減少數字的最大值。 - 假設優化問題是可行且成功解決的,通過設置
bounds=[..., (opt_val, opt_val), ...]
將最大值修改爲opt_val
,其中所有其他變量的邊界爲(-numpy.inf, numpy.inf)
。 - 通過將
b_ub
的係數更改爲numpy.inf
,使對應於該變量的不等式約束無效。 - 帶有修改邊界和不等式向量的重新運行模擬。
這可以運行沒有錯誤,但它似乎是SciPy的/ numpy的明確忽略我放在變量的界限 - 我得到我已經「固定」不屬於相應opt_val
變量的結果。
scipy可以處理將變量限制爲單個浮點數的邊界嗎? 這是解決我的問題的最佳方法嗎?
我開發的代碼真的很廣泛,這就是爲什麼我沒有在這裏發佈,所以當然我不期望一個基於代碼的解決方案。我在這裏尋找的是一個是/否的答案,是否scipy能夠處理限制爲單個浮點的邊界間隔,以及在更高層次上,我是否擁有正確的方法。
https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.optimize.linprog.html的文檔沒有明確說明是否可以指定定點界限。
嘗試更好的LP解算器。 Scipy.optimize.linprog不是很健壯。 –
對於那些正在尋找一個來源,以verfiy @ ErwinKalvelagen的評論: http://stackoverflow.com/questions/43106053/why-does-scipy-optimize-linprog-return-a-solution-that-does-not-satisfy- constrai/43106433 – Charlie