【问题标题】:optimize.minimize with for loop - python, pandasoptimize.minimize 与 for 循环 - python,pandas
【发布时间】:2020-03-16 09:10:10
【问题描述】:

我有一个 target = 50achieved = 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


    【解决方案1】:

    您的设计向量(包括初始猜测 x0)应该是一维向量。错误来自于此。改写成x0 = [1, 1, 1, ... 1]

    在您的diff 函数中,您可以从param 获取xy 作为偶数和奇数元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2020-07-10
      • 2021-05-26
      • 2014-06-28
      • 1970-01-01
      相关资源
      最近更新 更多