Я новичок в pyomo, и мне жаль, если я пишу это не в том месте.Я пытаюсь использовать ipopt в pyomo для решения подзадачи области доверия, и он не возвращается из функции решения.Вместо этого, находясь в функции решения, он возвращает следующую ошибку:
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, или если я удаляю оба из последних двух ограничений, это, кажется, работает.Тем не менее, я наметил ограничения, и я не вижу, что вызвало бы проблему.Это также может решить эту проблему на нескольких других итерациях.
Спасибо за любую помощь!