0

错字已修复

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

我的数据框在 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')
4

1 回答 1

0

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

(响应首先作为评论给出,现在转换为回答以快速关闭这个错字问题)。

于 2019-08-15T10:19:34.537 回答