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 格式获取数据
我想从 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 格式获取数据