求解混合互补模型时出错
Error when solving mixed complementarity model
直接使用PATH求解器,无法解决下面的问题。最初的问题来自 https://prod.sandia.gov/techlib-noauth/access-control.cgi/2015/155584.pdf ,似乎声称问题已解决。使用非线性结构可以求解。
很难判断这是 pyomo 还是 PATH 中的版本控制问题。
我是 运行 pyomo 5.5.x 和来自 http://pages.cs.wisc.edu/~ferris/path.html
的 pathampl
from pyomo.environ import *
from pyomo.mpec import *
model = ConcreteModel()
model.x1 = Var()
model.x2 = Var()
model.x3 = Var()
model.f1 = Complementarity(expr=complements(model.x1 >= 0,model.x1 + 2*model.x2 + 3*model.x3 >= 1))
model.f2 = Complementarity(expr=complements(model.x2 >= 0,model.x2 - model.x3 >= -1))
model.f3 = Complementarity(expr=complements(model.x3 >= 0,model.x1 + model.x2 >= -1))
from pyomo.opt import SolverFactory
opt = SolverFactory("pathampl")
results = opt.solve(model, load_solutions=True, tee=True)
#sends results to stdout
results.write()
对应的错误信息:
*** EXIT - infeasible.
Major Iterations. . . . 0
Minor Iterations. . . . 0
Restarts. . . . . . . . 0
Crash Iterations. . . . 0
Gradient Steps. . . . . 0
Function Evaluations. . 0
Gradient Evaluations. . 0
Basis Time. . . . . . . 0.000000
Total Time. . . . . . . 0.000000
Residual. . . . . . . . inf
WARNING: Loading a SolverResults object with a warning status into
model=unknown;
message from solver=Path 4.7.01\x3a Infeasible.; 0 iterations (0 for
crash); 0 pivots.; 0 function, 0 gradient evaluations.
# ==========================================================
# = Solver Results =
# ==========================================================
# ----------------------------------------------------------
# Problem Information
# ----------------------------------------------------------
Problem:
- Lower bound: -inf
Upper bound: inf
Number of objectives: 1
Number of constraints: 0
Number of variables: 6
Sense: unknown
# ----------------------------------------------------------
# Solver Information
# ----------------------------------------------------------
Solver:
- Status: warning
Message: Path 4.7.01\x3a Infeasible.; 0 iterations (0 for crash); 0 pivots.; 0 function, 0 gradient evaluations.
Termination condition: infeasible
Id: 201
Error rc: 0
Time: 0.37000012397766113
# ----------------------------------------------------------
# Solution Information
# ----------------------------------------------------------
Solution:
- number of solutions: 0
number of solutions displayed: 0
Displaying Solution
在没有人写出更好的答案的情况下,您可以尝试使用 SolverFactory('mpec_nlp').solve(model)
看看会发生什么。
如果您喜欢阅读 *.nl
文件,您还可以 model.write('tmp.nl')
查看通过 AMPL 接口生成的内容。
根据上面 Bethany Nicholson 的 post,使用 PATH 4.7.04 将解决问题。由于某种原因 4.7.01 returns 一个错误。
Qi Chen 的回复会解决问题,但是没有使用PATH
直接使用PATH求解器,无法解决下面的问题。最初的问题来自 https://prod.sandia.gov/techlib-noauth/access-control.cgi/2015/155584.pdf ,似乎声称问题已解决。使用非线性结构可以求解。
很难判断这是 pyomo 还是 PATH 中的版本控制问题。 我是 运行 pyomo 5.5.x 和来自 http://pages.cs.wisc.edu/~ferris/path.html
的 pathamplfrom pyomo.environ import *
from pyomo.mpec import *
model = ConcreteModel()
model.x1 = Var()
model.x2 = Var()
model.x3 = Var()
model.f1 = Complementarity(expr=complements(model.x1 >= 0,model.x1 + 2*model.x2 + 3*model.x3 >= 1))
model.f2 = Complementarity(expr=complements(model.x2 >= 0,model.x2 - model.x3 >= -1))
model.f3 = Complementarity(expr=complements(model.x3 >= 0,model.x1 + model.x2 >= -1))
from pyomo.opt import SolverFactory
opt = SolverFactory("pathampl")
results = opt.solve(model, load_solutions=True, tee=True)
#sends results to stdout
results.write()
对应的错误信息:
*** EXIT - infeasible.
Major Iterations. . . . 0
Minor Iterations. . . . 0
Restarts. . . . . . . . 0
Crash Iterations. . . . 0
Gradient Steps. . . . . 0
Function Evaluations. . 0
Gradient Evaluations. . 0
Basis Time. . . . . . . 0.000000
Total Time. . . . . . . 0.000000
Residual. . . . . . . . inf
WARNING: Loading a SolverResults object with a warning status into
model=unknown;
message from solver=Path 4.7.01\x3a Infeasible.; 0 iterations (0 for
crash); 0 pivots.; 0 function, 0 gradient evaluations.
# ==========================================================
# = Solver Results =
# ==========================================================
# ----------------------------------------------------------
# Problem Information
# ----------------------------------------------------------
Problem:
- Lower bound: -inf
Upper bound: inf
Number of objectives: 1
Number of constraints: 0
Number of variables: 6
Sense: unknown
# ----------------------------------------------------------
# Solver Information
# ----------------------------------------------------------
Solver:
- Status: warning
Message: Path 4.7.01\x3a Infeasible.; 0 iterations (0 for crash); 0 pivots.; 0 function, 0 gradient evaluations.
Termination condition: infeasible
Id: 201
Error rc: 0
Time: 0.37000012397766113
# ----------------------------------------------------------
# Solution Information
# ----------------------------------------------------------
Solution:
- number of solutions: 0
number of solutions displayed: 0
Displaying Solution
在没有人写出更好的答案的情况下,您可以尝试使用 SolverFactory('mpec_nlp').solve(model)
看看会发生什么。
如果您喜欢阅读 *.nl
文件,您还可以 model.write('tmp.nl')
查看通过 AMPL 接口生成的内容。
根据上面 Bethany Nicholson 的 post,使用 PATH 4.7.04 将解决问题。由于某种原因 4.7.01 returns 一个错误。
Qi Chen 的回复会解决问题,但是没有使用PATH