Первый пользователь pyomo здесь.
У меня есть функция, определяющая модель
def define_problem(SET_gen, SET_time, SET_buses, demand):
model = pyo.ConcreteModel()
#Define sets
model.SET_GEN = pyo.Set(initialize = SET_gen) #Set of generators
model.SET_TIME = pyo.Set(initialize = SET_time) #Set of hours
model.SET_BUSES = pyo.Set(initialize = SET_buses) #Set of buses
#Define parameters
model.DEMAND = pyo.Param(model.SET_BUSES, model.SET_TIME, initialize = demand_init)
...
Аргумент "требование" в функции - это фрейм данных pandas.
Функция Demand_init определяется следующим образом
def demand_init(model, bus, t, data = demand):
if(bus in set(data.columns)):
return data.loc[t,bus]
return 0.0
Он должен определить модель параметра.DEMAND для каждого часа и каждой шины как соответствующую «ячейку» в запросе DataFrame и 0, если шина не находится в DataFrame. РЕДАКТИРОВАТЬ: определяется вне функции define_problem.
Но это не работает. Как я могу определить параметры моей функции из фрейма данных pandas?
РЕДАКТИРОВАТЬ: Спасибо за ответы!
Фрейм данных спроса выглядит так:
Bus1 Bus10 Bus11 Bus12 ... Bus6 Bus7 Bus8 Bus9
Hour ...
1 0.0 9.00 3.50 6.10 ... 11.20 0.0 0.0 29.50
2 0.0 7.34 2.85 4.97 ... 9.13 0.0 0.0 24.06
3 0.0 6.45 2.51 4.37 ... 8.03 0.0 0.0 21.14
4 0.0 5.78 2.25 3.92 ... 7.20 0.0 0.0 18.95
5 0.0 5.56 2.16 3.77 ... 6.92 0.0 0.0 18.22
[5 rows x 14 columns]
«T» и «шина», которые должны попасть в функцию require_init, - это числа в индексе и имена столбцов во фрейме данных. Они находятся в наборах model.SET_HOURS и model.SET_BUSES соответственно.
bus
иt
передаются вашейdemand_init
функции. Наконец, вам может быть полезно просмотреть этот пост, в котором описывается как создать минимальный, полный и проверяемый пример. - person James Dellinger   schedule 07.02.2019rule
не будет передавать функции дополнительные аргументы. Было бы разумнее определить ваш запрос require_init в define_problem - person Qi Chen   schedule 07.02.2019