Pyomo:我可以将哪些数据格式传递给 .create_instance()

Pyomo: What dataformats can I pass into .create_instance()

我想从 1 excel sheet(将来还有 1 个 csv 文件)导入参数和我想在代码中设置的一些参数。 我正在使用 pandas 导入这些值。但是我不知道如何将它们传递给实例。我尝试了各种选择,但我只是在猜测...... 我看到了可变的例子,但我无法理解和采纳它们。

import pandas as pd   
from pyomo.environ import *
from pyomo.opt import SolverFactory
from pyomo.core import Var

infinity = float('inf')

opt = SolverFactory('glpk') # GNU Linear Programming Kit for solving large-scale linear programming (LP), mixed integer programming (MIP), and other 


df1 = pd.read_excel("datosPvaD.xlsx")
df2 = pd.read_excel("otrosDatos.xlsx")
#demand = consumption['Consumo (Wh)']
#demand.index += 1
#demand_list = demand.tolist()
data1 = df1.to_dict()
#data2 = df2.to_dict(orient='index')
#data2 = df2.to_dict()

"""
# is the same as otros datos
data2 = {None: {
     'pRdImp': {None: 0.35},
     'pRdExp': {None: 0.1},
     'rend':  {None: 0.9},
     'CAB': {None: 0.082},
     'CABasic': {None: 0.082},
     'CAPV': {None: 0.224},
     'CI': {None: 0.06849},
     'M': {None: 1000},
     'dt': {None: 1},
}}
"""


data2 = {'pRdImp': 0.35,
     'pRdExp': 0.1,
     'rend': 0.9,
     'CAB': 0.08,
     'CABasic': 0.082,
     'CAPV':  0.224,
     'CI':  0.06849,
     'M':  1000,
     'dt':  1
}

#z = {**x, **y}
data = {**data1, **data2}

#from Fotovoltaica_V2_csvread import model # import model
from Fotovoltaica_V1 import model # import model

#instance = model.create_instance('Fotovoltaica_V2.dat')
#instance = model.create_instance(data)
instance = model.create_instance(data1,'Fotovoltaica_V2.dat')

看看这个例子:https://github.com/Pyomo/pyomo/blob/master/examples/doc/pyomobook/overview-ch/wl_excel.py

我建议在使用 Pandas 加载数据时使用 ConcreteModel 而不是 AbstractModel。数据框可以直接在约束中使用,而不是创建 Param 个对象。

如果没有看到整个模型很难判断,但您为 data2 注释掉的部分应该有效:

data2 = {
    None:{
        'param':{None:val},
        ...
    }
}

我假设您的所有参数都没有编入索引。如果它们被编入索引,那么您将需要如下内容:

model = AbstractModel()
model.t = Set()
model.thing = Param(t)

input_data = {
    None:{
        't':{None:[1, 2, 3]},
        'thing':{1:100, 2:200, 3:300}
    }
}

然后您可以通过调用创建一个模型实例 model.create_instance(input_data)

您可以像通常使用 pandas 一样将数据从 csv 导入 python,但是您需要做一些返工才能以正确的 pyomo 格式获取数据