我是pyomo的新手,很抱歉,如果我在错误的位置发帖了。我试图在pyomo中使用ipopt来解决信任区域子问题,并且它不是从Solve函数返回的。相反,在solve函数中,它返回以下错误:
Traceback (most recent call last):
File "/work/research/line-search-dfo/pyomo/test/run_problem.py", line 73, in <module>
result = opt.solve(model)
File "/home/thallock/anaconda3/envs/trust_region/lib/python3.6/site-packages/pyomo/opt/base/solvers.py", line 659, in solve
default_variable_value=self._default_variable_value)
File "/home/thallock/anaconda3/envs/trust_region/lib/python3.6/site-packages/pyomo/core/base/PyomoModel.py", line 249, in load_from
% str(results.solver.status))
ValueError: Cannot load a SolverResults object with bad status: error
我的代码如下:
import pyomo.environ
from pyomo.core import *
from pyomo.opt import *
import numpy
center = numpy.array([
0.0015547982842035778,
1.2023159251392687e-06
])
A = numpy.array([
[-0.5, 1.0],
[-0.5, -1.0],
[1.0, 0.0],
[-1.0, 0.0],
[0.0, 1.0],
[0.0, -1.0]
])
b = numpy.array([
0.0,
0.0,
0.00719250839786401,
0.004082911829456855,
0.005638912429585571,
0.005636507797735293
])
include_point = numpy.array([
0.0015547982842035778,
1.2023159251392687e-06
])
tolerance = 1e-08
bbar = b - numpy.dot(A, center)
# scale
k = 1.0 / min(abs(bbar))
bbar = k * bbar
model = ConcreteModel()
model.q = Var(range(3))
model.constraints = ConstraintList()
for i in range(A.shape[0]):
model.constraints.add(
A[i, 0] ** 2 * model.q[0] +
2 * A[i, 0] * A[i, 1] * model.q[1] +
A[i, 1] ** 2 * model.q[2] <= bbar[i] * bbar[i] / 2
)
si = include_point - center
k2 = k * k
model.constraints.add(
-si[0] * model.q[1] * si[1] + si[0] * model.q[2] * si[0] +
si[1] * model.q[0] * si[1] - si[1] * model.q[1] * si[0] -
2 * model.q[0] * model.q[2] * k2 + 2 * model.q[1] * model.q[1] * k2 <= 0
)
model.constraints.add(model.q[0] >= 0.0)
model.constraints.add(model.q[2] >= 0.0)
def objective_rule(m):
return m.q[0] * m.q[2] - m.q[1] * m.q[1]
model.objective = Objective(rule=objective_rule, sense=maximize)
opt = SolverFactory('ipopt', executable='/home/thallock/anaconda3/envs/trust_region/bin/ipopt')
result = opt.solve(model)
我看到了与此相关的其他问题,其中一个与cplex超时有关,但似乎有些不同。如果我删除了在初始化k2之后直接添加的约束,或者如果我删除了后两个约束,那么它似乎可以工作。但是,我已经绘制了约束条件,并且我看不出是什么导致了问题。它还可以在其他几次迭代中解决相同的问题。
感谢您的任何帮助!