pyomo ValueError: Невозможно загрузить объект SolverResults с плохим состоянием: ошибка - PullRequest
0 голосов
/ 14 октября 2018

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

Спасибо за любую помощь!

...