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

Я использую Pyomo и Baron в качестве решателя для задачи с нелинейной целевой функцией и некоторой двоичной переменной. Но когда я запускаю свой код, я получаю эту ошибку:

File "C:\Anaconda3\lib\site-packages\pyomo\core\base\PyomoModel.py", line 251, in load_from % str(results.solver.status))

ValueError: Cannot load a SolverResults object with bad status: aborted

мой код:

def PlatformModel():
    N = pyo.Set()
    J = pyo.Set()

    # Parameters
    B=100

    a = pyo.Param(N, J, within=pyo.NonNegativeReals, doc=" ")
    b=pyo.Param(N, J, within=pyo.NonNegativeReals, doc="")
    T = pyo.Param(N, within=pyo.NonNegativeReals, doc=" ")
    p_L=pyo.Param(J, within=pyo.NonNegativeReals, doc="")
    p_U=pyo.Param(J, within=pyo.NonNegativeReals, doc="")
    t_L=pyo.Param(J, within=pyo.NonNegativeReals, doc="")
    t_U=pyo.Param(J, within=pyo.NonNegativeReals, doc="")
    M=pyo.Param(N,J, within=pyo.NonNegativeReals, doc="")
    M_i=pyo.Param(N, within=pyo.NonNegativeReals, doc="")

    # Variables
    p=pyo.Var(N, J,  within=pyo.NonNegativeReals, doc="" )
    t=pyo.Var(N, J,  within=pyo.NonNegativeReals, doc="")
    lambda_kkt=pyo.Var(N,  within=pyo.NonNegativeReals, doc="" )
    x = pyo.Var (N, within=pyo.Boolean, doc="Binary variable x")
    y = pyo.Var (N, J, within=pyo.Boolean, doc="Binary variable y")

    # Constraints
    BudgetConstraint = pyo.Constraint(rule=lambda model: sum(sum(model.t[i,k] * model.p[i,k] for i in model.N) for k in model.J) <= Budget)
    tk_LConstraint=pyo.Constraint(J, rule=lambda model, k:sum(model.t[i,k] for i in model.N )>=model.t_L[k])
    tk_UConstraint=pyo.Constraint(J, rule=lambda model, k:sum(model.t[i,k] for i in model.N )<=model.t_U[k])

    P_LConstraint=pyo.Constraint(N, J, rule=lambda model, i, k:
                                            model.p[i,k]>= model.p_L[k])
    P_UConstraint=pyo.Constraint(N, J, doc="P_k_U", rule=lambda model, i, k:
                                            model.p[i,k]<= model.p_U[k])
    tConstraint_L=pyo.Constraint(N, J,rule=lambda model, i, k: model.t[i,k]>=0)
    tConstraint_U=pyo.Constraint(N, J, rule=lambda model, i, k: model.t[i,k]<=model.M[i,k]*model.y[i,k])
    LambdaConstraint_L=pyo.Constraint(N, rule=lambda model, i: model.lambda_kkt[i]>=0)
    LambdaConstraint_U=pyo.Constraint(N,  rule=lambda model, i: model.lambda_kkt[i]<=model.M_i[i]*model.x[i])
    C_Constraint_L=pyo.Constraint(N,J,doc="", rule=lambda model, i , k: 2*model.a[i,k]*model.t[i,k]+model.b[i,k]*model.t[i,k]-model.p[i,k]+model.lambda_kkt[i]>=0)
    C_Constraint_U=pyo.Constraint(N,J,doc="", rule=lambda model, i , k: 2*model.a[i,k]*model.t[i,k]+model.b[i,k]*model.t[i,k]-model.p[i,k]+model.lambda_kkt[i]<=model.M[i,k]*(1-model.y[i,k]))
    T_Constraint_L=pyo.Constraint(N, doc="", rule=lambda model, i: model.T[i]-(sum (model.t[i,k] for k in model.J))>=0 )
    T_Constraint_U=pyo.Constraint(N, doc="", rule=lambda model, i: model.T[i]-(sum (model.t[i,k] for k in model.J))<=model.M_i[i]*(1-model.x[i]) )


    Maximum_profit=pyo.Objective(rule=lambda model: sum(50*pyo.log10(1+sum(pyo.log10(1.0 + model.t[i,k]) for i in model.N)) for k in model.J) - sum(sum(model.t[i,k] * model.p[i,k] for k in model.J) for i in model.N),sense=-1)
    model = pyo.AbstractModel(name="simple1")

    # Sets
    model.N = N
    model.J = J
    #model.Job_Users = Job_Users


    # Parameters
    model.a = a
    model.b = b
    model.T = T
    model.p_L = p_L
    model.p_U = p_U
    model.t_L = t_L
    model.t_U = t_U
    model.t = t
    model.M = M
    model.M_i = M_i

    # Variables
    model.t = t
    model.p = p
    model.lambda_kkt=lambda_kkt
    model.x = x
    model.y = y

    # Constraints
    model.BudgetConstraint = BudgetConstraint
    model.tk_LConstraint = tk_LConstraint
    model.tk_UConstraint = tk_UConstraint
    model.P_LConstraint = P_LConstraint
    model.P_UConstraint = P_UConstraint
    model.tConstraint_L=tConstraint_L
    model.tConstraint_U=tConstraint_U
    model.LambdaConstraint_L=LambdaConstraint_L
    model.LambdaConstraint_U=LambdaConstraint_U
    model.C_Constraint_L = C_Constraint_L
    model.C_Constraint_U = C_Constraint_U
    model.T_Constraint_L = T_Constraint_L
    model.T_Constraint_U = T_Constraint_U

    # Objective
    model.Maximum_profit = Maximum_profit


    return model

def LoadPlatformData(file_name, model):
    dataUser = pyo.DataPortal()
    dataUser.load(filename=file_name, param=model.a, format="param")
    dataUser.load(filename=file_name, param=model.b, format="param")
    #dataUser.load(filename=file_name, param=model.c, format="param")
    dataUser.load(filename=file_name, param=model.T, format="param")
    dataUser.load(filename=file_name, param=model.p_L, format="param")
    dataUser.load(filename=file_name, param=model.p_U, format="param")
    dataUser.load(filename=file_name, param=model.t_L, format="param")
    dataUser.load(filename=file_name, param=model.t_U, format="param")
    dataUser.load(filename=file_name, param=model.M, format="param")
    dataUser.load(filename=file_name, param=model.M_i, format="param")

    return dataUser

PlatformModel=PlatformModel()
dataUser=LoadPlatformData('Platform.dat', PlatformModel)
instance = PlatformModel.create_instance(dataUser)
opt = SolverFactory('baron')
opt.solve(instance)

t=np.array([[0 for it2 in range(2)] for it1 in range(2)],dtype=float)
p=np.array([[0 for it2 in range(2)] for it1 in range(2)],dtype=float)
i1=0
for i in instance.N:
       k1=0
       for k in instance.J:
           t[i1][k1]=instance.t[i,k].value
           p[i1][k1]=instance.p[i,k].value
           k1+=1
       i1+=1
profit=C.PlatformRevenu(p,t)

Как я могу это исправить?

...