Python Pyomo混凝土模型中的约束表示问题。警告:以LP格式写入的空约束块-解算器可能出错
我是Python新手,正在尝试在Pyomo中将一个小的优化问题表述为一个具体的模型。到目前为止,我一直在使用Matlab(和Yalmip)来解决优化问题,我发现公式非常独特 我得到的第一个警告是“以LP格式编写的空约束块-解算器可能会出错”,我不确定这意味着什么,以及我的约束是否以错误的方式表达 对你们大多数人来说,这可能是一个“微不足道”的问题,如果你们能告诉我哪里做错了什么,我会非常高兴。优化运行,但没有为决策变量设计值 以下是输出:Python Pyomo混凝土模型中的约束表示问题。警告:以LP格式写入的空约束块-解算器可能出错,python,pandas,optimization,pyomo,Python,Pandas,Optimization,Pyomo,我是Python新手,正在尝试在Pyomo中将一个小的优化问题表述为一个具体的模型。到目前为止,我一直在使用Matlab(和Yalmip)来解决优化问题,我发现公式非常独特 我得到的第一个警告是“以LP格式编写的空约束块-解算器可能会出错”,我不确定这意味着什么,以及我的约束是否以错误的方式表达 对你们大多数人来说,这可能是一个“微不足道”的问题,如果你们能告诉我哪里做错了什么,我会非常高兴。优化运行,但没有为决策变量设计值 以下是输出: “编写了280328行GLPK单纯形优化器,v4.65
“编写了280328行GLPK单纯形优化器,v4.65 1行,140161列,1个非零预处理…~0:obj=8.150400000e+01 infeas=0.000e+00 LP预处理器找到的最优解使用时间:0.0秒”
以及守则:
# import statements
import pandas as pd
import pyomo.environ as pe
model = pe.ConcreteModel(name="(example)") # defining optimization model as concrete model
# importing data
data_1 = pd.read_csv("example_1.csv", sep=",", header=0,
names=["header1",
"header2",
"header3",
"header4"],
dtype={"header3": float})
p_pv1 = data_1.header3.repeat(4).tolist()
p_pv1 = pd.Series(p_pv1)
data_2 = pd.read_csv("example_2.csv", sep=",", header=0,
names=["header1",
"header2",
"header3",
"header4"],
dtype={"header3": float})
p_pv2 = data_2.header3.repeat(4).tolist()
p_pv2 = pd.Series(p_pv2)
data_3 = pd.read_excel("example_3.xlsx", header=0,
names=["header1",
"header2",
"header3",
"header4"],
dtype={"header3": float})
load1 = data_3.header3 * 4
data_4 = pd.read_excel("example_4.xlsx", header=0,
names=["header1",
"header2",
"header3",
"header4"],
dtype={"header3": float})
load2 = data_4.header3 * 4
# defining time steps (with maximum T and model.time as Set)
T = 35040
# cost data
c1 = 16.84
c2 = 6.79
c3 = 8.33
model.time = pe.RangeSet(1, T, doc='Set of time steps')
model.p_g1 = pe.Var(model.time, domain=pe.NonNegativeReals)
model.p_pv1_self = pe.Var(model.time, domain=pe.NonNegativeReals)
model.p_pv1_2other = pe.Var(model.time, domain=pe.NonNegativeReals)
model.p_pv1_2g = pe.Var(model.time, domain=pe.NonNegativeReals)
model.p_g2 = pe.Var(model.time, domain=pe.NonNegativeReals)
model.p_pv2_self = pe.Var(model.time, domain=pe.NonNegativeReals)
model.p_pv2_2other = pe.Var(model.time, domain=pe.NonNegativeReals)
model.p_pv2_2 = pe.Var(model.time, domain=pe.NonNegativeReals)
def costs(m):
return sum(m.p_g1[t] + m.p_g2[t] for t in m.time) * c1 / 4000 \
+ c2 * 12 \
+ sum(m.p_pv2_2other[t] + m.p_pv1_2other[t] for t in m.time) * c3 / 4000
model.OBJ = pe.Objective(rule=costs)
def load1_rule(m, t):
return load1[t] == m.p_pv1_self[t] + m.p_g1[t] + m.p_pv2_2other[t] # for t in model.x
model.load1_rule = model.Constraint(model.time, rule=load1_rule) # adding constraints
def load2_rule(m, t):
return load2[t] == m.p_pv2_self[t] + m.p_g2[t] + m.p_pv1_2other[t]
model.load2_rule = model.Constraint(model.time, rule=load2_rule)
def p_pv1_rule(m, t):
return p_pv1[t] == m.p_pv1_self[t] + m.p_pv1_2other[t] + m.p_pv1_2g[t]
model.p_pv1_rule = model.Constraint(model.time, rule=p_pv1_rule)
def p_pv2_rule(m, t):
return p_pv2[t] == m.p_pv2_self[t] + m.p_pv2_2other[t] + m.p_pv2_2g[t]
model.p_pv2_rule = model.Constraint(model.time, rule=p_pv2_rule)
opt = pe.SolverFactory("glpk")
results = opt.solve(model, tee=True)
print('\nobjective_object.value')
print(pe.value(model.OBJ))
非常感谢你的帮助