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

问题描述 投票:0回答:2

我想从1 excel表中导入参数,(以后也是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')
pyomo data-import
2个回答
0
投票

在没有看到整个模型的情况下很难分辨,但是您为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格式,你需要做一些小的修改工作


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.