Pyomo: Какие форматы данных я могу передать в .create_instance () - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу импортировать параметры из 1 листа Excel (в будущем также 1 CSV-файл) и некоторые параметры, которые я хочу установить в коде.Я импортирую эти значения, используя панд.Но чем я не знаю, как передать их в экземпляр.Я пробовал разные варианты, но я только догадывался ... Я видел переменные примеры, но я не в состоянии понять и принять их.

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')

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Трудно сказать, не видя всей вашей модели, но закомментированный вами раздел для 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)

Вы можете импортировать данные из csv в python, как это обычно делается с пандами, но затем вам нужно будет немного переделать, чтобы получить их в правильном формате pyomo

0 голосов
/ 30 апреля 2019

Взгляните на этот пример: https://github.com/Pyomo/pyomo/blob/master/examples/doc/pyomobook/overview-ch/wl_excel.py

Я бы предложил использовать ConcreteModel вместо AbstractModel при использовании Pandas для загрузки данных. Вместо создания Param объектов информационный кадр может использоваться непосредственно в Ограничении.

...