pyomo ValueError:无法加载状态错误的SolverResults对象:error

时间:2018-10-14 16:59:55

标签: python pyomo ipopt

我是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之后直接添加的约束,或者如果我删除了后两个约束,那么它似乎可以工作。但是,我已经绘制了约束条件,并且我看不出是什么导致了问题。它还可以在其他几次迭代中解决相同的问题。

感谢您的任何帮助!

0 个答案:

没有答案
相关问题