Я использую 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)
Как я могу это исправить?