【发布时间】:2021-06-28 13:31:42
【问题描述】:
我是 Pyomo 的新手,我正在尝试根据预算优化投资。
我有一个总预算,我想找到在不同媒体上分配预算的最佳方式。
例如:total_budget = 5000 --> tv = 3000,电影院 = 500,广播 = 1500。
我正在努力将预算与相应的收入“联系起来”。
媒体有不同的回报曲线(在达到一定预算之前投资特定媒体可能会更好,然后再投资其他媒体)。
不同媒体的收入由如下函数返回:tv_1k_revenue = calculate_revenue(budget=1000, media="tv")
假设我唯一的限制是简化问题的总预算(我可以管理我认为的其他限制)。
到目前为止,这是我的代码:
model = pyo.ConcreteModel(doc="Optimization model")
# Declaration of possible budgets
model.S1 = Set(initialize=[*df.TV_Budget.values])
model.tv_budget = Var(model.S1, initialize=0.0)
model.S2 = Set(initialize=[*df.Cinema_Budget.values])
model.cinema_budget = Var(model.S2, initialize=0.0)
model.S3 = Set(initialize=[*df.Radio_Budget.values])
model.radio_budget = Var(model.S3, initialize=0.0)
# Objective function
def func_objective(model):
objective_expr = sum(model.tv_revenue +
model.cinema_revenue +
model.radio_revenue)
return objective_expr
model.objective = pyo.Objective(rule=func_objective, sense=pyo.maximize)
所以我的问题是,如何声明 model.tv_revenue、model.cinema_revenue、model.radio_revenue,以便优化电视、电影和广播预算,以最大限度地提高电视、电影、广播产生的总收入?
现在我为每个媒体创建了一个包含预算和收入列的 DataFrame,但最好的方法应该是使用我的calculate_revenue 函数并在每个媒体预算上设置bounds=(min_budget, max_budget)。
感谢您的帮助!
【问题讨论】:
-
这里没有足够的信息来帮助您。每个“预算”都只是一个数量吗?您似乎在为它们索引而苦苦挣扎。这是必需的吗?是否有时间段或预算?如果您添加一些有关问题性质的其他信息,您要尝试使用它做什么,并添加数据框的 sn-p,那将很有帮助。 :)
-
我同意@AirSquid。关于数据集、参数和约束的信息不足。
-
@AirSquid 我添加了更多细节,希望对您有所帮助。谢谢你的回答!
标签: python optimization pyomo maximize