【发布时间】:2020-03-16 09:10:10
【问题描述】:
我有一个 target = 50 和 achieved = 44 一个输入数据框:
Yearly_value headroom
2020 1 0
2021 2 0
2022 1 0
2023 3 4
2024 1 5
2025 1 6
我想优化 1 个变量列表(元组?)x,y 以便:
achieved + sum([ (x[year]*8760 + y[year]*3132) * df['Yearly_value'][year] for year in df.index]) = target-
x + y is as small as possible因为每一个 x 和 y 我都要付出代价
在约束下:
[(x[year] + y[year]) <= headroom[year] for year in df.index]x >= 0 & y >= 0 for each x, y in list
我在尝试:
bnds=()
for year in [2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030]:
bound = (0, headroom[year]), (0, headroom[year])
bnds= bnds + (bound,)
def diff(param):
x, y= param
return abs(target - achieved - sum(df['Yearly_value']*[x + y]))
x0 = [(1,1),(1,1),(1,1),(1,1),(1,1),(1,1)]
res = minimize(diff, x0, bounds=bnds)
我不知道如何包含 x + y 应该尽可能小,并且我不断收到如下错误:
---> 18 x, y = param
19 return abs(target - achieved - sum(df['Yearly_value']*[x + y]))
20 ValueError: too many values to unpack (expected 2)
有什么帮助吗?谢谢
【问题讨论】:
标签: python pandas loops optimization