Python Pyomo混凝土模型中的约束表示问题。警告:以LP格式写入的空约束块-解算器可能出错

Python Pyomo混凝土模型中的约束表示问题。警告:以LP格式写入的空约束块-解算器可能出错,python,pandas,optimization,pyomo,Python,Pandas,Optimization,Pyomo,我是Python新手,正在尝试在Pyomo中将一个小的优化问题表述为一个具体的模型。到目前为止,我一直在使用Matlab(和Yalmip)来解决优化问题,我发现公式非常独特 我得到的第一个警告是“以LP格式编写的空约束块-解算器可能会出错”,我不确定这意味着什么,以及我的约束是否以错误的方式表达 对你们大多数人来说,这可能是一个“微不足道”的问题,如果你们能告诉我哪里做错了什么,我会非常高兴。优化运行,但没有为决策变量设计值 以下是输出: “编写了280328行GLPK单纯形优化器,v4.65

我是Python新手,正在尝试在Pyomo中将一个小的优化问题表述为一个具体的模型。到目前为止,我一直在使用Matlab(和Yalmip)来解决优化问题,我发现公式非常独特

我得到的第一个警告是“以LP格式编写的空约束块-解算器可能会出错”,我不确定这意味着什么,以及我的约束是否以错误的方式表达

对你们大多数人来说,这可能是一个“微不足道”的问题,如果你们能告诉我哪里做错了什么,我会非常高兴。优化运行,但没有为决策变量设计值

以下是输出:

“编写了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))
非常感谢你的帮助