【问题标题】:Scipy minimisation optimisation row-wise on DataFrameDataFrame 上的 Scipy 最小化优化逐行
【发布时间】:2019-12-21 19:09:11
【问题描述】:

错字已修复

我需要为我的时间序列中的每个时间步执行最小化优化。优化根据行中不同列中的值和一系列不等式约束来设置价格。

我的数据框在 48 年的时间序列中具有以下列:

['CAPEX_TOT', 'CAPEX_R', 'CAPEX_WS', 'debt_BP', 'principal','interest',
   'debt_service', 'debt_EP', 'OPEX', 'OPEX_R', 'OPEX_WS',
   'DELIVERY_BAWSCA', 'DELIVERY_OTHER_DEMAND',
   'DELIVERY_SAN_FRANCISCO_CITY', 'DELIVERIES_WS', 'DELIVERIES_R',
   'PRICE_crR', 'PRICE_crWS', 'REVENUE', 'FUND_BALANCE_BP',
   'FUND_BALANCE_EP']

PRICE_crR 和 PRICE_crWS 代表两个不同客户类别的价格,纯粹基于成本回收。优化必须寻求实现成本回收(下面代码中的第一个约束),同时观察下面代码中的第二个和第三个约束表示的几个关键策略约束。

这是我目前所拥有的。

要最小化的目标函数

finance_df['revenue_R'] = finance_df.apply(lambda row: row * row.DELIVERIES_R)

约束

cons = ({'type': 'ineq', 'fun': finance_df.apply(lambda row: row - row.price_crR, axis=1)},
    {'type': 'ineq', 'fun': finance_df.apply(lambda row: ((row * row.DELIVERIES_R) - row.OPEX_R + OTHER_REVENUE)\
                                            / (debt_CAPEX_ratio * row.debt_service), axis=1)},
    {'type': 'ineq', 'fun': finance_df.apply(lambda row: (1.05 * row.price_crR) - row, axis=1)})

非消极约束

bnds = ((0, None), (0, None))

一系列初始最佳猜测

price_0 = [7, 7.5, 8, 8.5, 9, 9.5, 10]

优化函数

res = minimize(finance_df['revenue_R'], price_0, method='SLSQP', bounds=bnds, constraints=cons)

运行上述脚本时,我收到以下错误消息:

    ("'Series' object has no attribute 'DELIVERIES_R'", 'occurred at index CAPEX_TOT')

【问题讨论】:

  • finance_df.apply(lambda row: row * row.DELIVERIES_R)?您需要指定轴,如 df.apply(fun, 1) 轴 1 以获取行,否则您将获得列(轴 0)。

标签: python optimization scipy scipy-optimize scipy-optimize-minimize


【解决方案1】:

问题是由不正确的值引起的,finance_df.apply(lambda row: row * row.DELIVERIES_R)。 与跨行迭代(DataSeries)不同,跨表迭代(DataFrame)需要按行指定轴= 1,即df.apply(fun, axis=1),否则您将获得列(轴0)并且作为列和错误您锯。

(最初以评论形式给出的响应,现在转换为快速关闭这个错字问题的答案)。

【讨论】:

  • 谢谢!我修正了错字并重新运行,我收到以下错误:'错误的项目数通过了 21,位置意味着 1'
  • 这意味着你应该给一件,但你给的太多了。我不知道发生在哪里,但是约束字典中的“有趣”值不是可调用的,而是 DataSeries。也许在那里?
猜你喜欢
  • 2018-07-30
  • 1970-01-01
  • 2018-03-17
  • 2019-07-20
  • 2012-08-24
  • 2018-02-16
  • 2021-04-05
  • 2019-11-18
  • 1970-01-01
相关资源
最近更新 更多