![](/img/trans.png)
[英]Why “No such file or directory” in pyomo when using ipopt solver?
[英]Using NEOS as a Pyomo solver
最近開始做一些OR,一直在嘗試用Pyomo和NEOS做一些優化問題。 我一直在關注 UT Austin Pyomo 的一堂課,當我的 GLPT 難以安裝時,我轉向了 NEOS。 我現在在收到 NEOS 的已解決答案時遇到了一些困難。
我到目前為止是這樣的:
from pyomo import environ as pe
import os
os.environ['NEOS_EMAIL'] = 'my registered email'
model = pe.ConcreteModel()
model.x1 = pe.Var(domain=pe.Binary)
model.x2 = pe.Var(domain=pe.Binary)
model.x3 = pe.Var(domain=pe.Binary)
model.x4 = pe.Var(domain=pe.Binary)
model.x5 = pe.Var(domain=pe.Binary)
obj_expr = 3 * model.x1 + 4 * model.x2 + 5 * model.x3 + 8 * model.x4 + 9 * model.x5
model.obj = pe.Objective(sense=pe.maximize, expr=obj_expr)
con_expr = 2 * model.x1 + 3 * model.x2 + 4 * model.x3 + 5 * model.x4 + 9 * model.x5 <= 20
model.con = pe.Constraint(expr=con_expr)
solver_manager = pe.SolverManagerFactory('neos')
results = solver_manager.solve(model, solver = "minos")
print(results)
我收到的回報是解決方案的數量 = 0,而我知道一個事實存在。 我也看到我沒有設置任何界限,那么我該怎么做呢? 再一次,我對此非常陌生,並且無法在其他地方找到任何關於此的文檔,或者我只是不知道如何查看。
謝謝你的幫助!
這是當前結果對象設計的“問題”。 由於歷史原因,該字段報告結果對象中包含的解數,而不是求解器生成的解數。 默認情況下,Pyomo 求解器直接將求解器返回的解加載到原始模型中(為了方便和效率)並且不在結果對象中返回它。 您可以通過向solve()
調用提供load_solutions=False
來更改該行為。
至於界限,你指的是什么界限? 使用Var()
聲明的bounds=
參數或domain=
參數設置變量邊界。 對於您的示例,因為變量被聲明為Binary
,所以它們的邊界都是[0..1]
。 通過解析求解器輸出來收集目標的邊界。 這取決於打擾您正在使用的求解器(許多不報告邊界信息),以及用於解析求解器結果的接口。
最后要注意的是,您正在向 LP/NLP 求解器 (minos) 發送 MIP 問題。 您將從求解器獲得二進制變量的小數值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.