问题描述
现在,我有一个关于动态约束的问题。我有原始价格,但是我需要检查它们是否遵循业务规则,当发生违规时,我会更改价格,但是我希望总的绝对更改最小化。
我的表格列如下:
- 项目:字符串
- 大小:浮动
- 总金额:整数
- 原始价格:浮动价
- Optimal_Price:浮点型(空白,因为这是决策变量)
- D1(空白,但有公式可以实现)
- D2(相同)
- 绝对(空白,这是决策变量,也是目标列)
这是我的问题:
- 决策变量:
- 最优价格
- 绝对值(但这仍然是线性函数,请参见以下内容)
- 目标:最小化Absolute_value的总和。 SUM(绝对)
- 约束:
- 绝对值> =差异_1
- 绝对值> =差异_2
- 最优价格> = 0
- 相同项目,较大尺寸的最佳价格> =较小尺寸的最佳价格
- 大小相同,商品也有价格规则
就目前而言,我正在尝试实现前三个约束。我可以在Excel中轻松完成此操作,但是很难将其移至Python。
这是问题,我尝试计算Difference_1和Difference_2,但它要求我将决策变量(即最佳价格)带入函数中。功能就像:
- 差异_1 =(原始价格-最优价格)*总金额
- 差异_2 =(最优价格-原始价格)*总金额
我们为什么这样做是为了获得线性解而不是使用绝对函数。
我试图使用纸浆来创建此优化功能,但是当我尝试将LpVariable添加到差分计算中时,
for i in range(df.shape[0]):
D1[i] = (Opt_Price[i]-df['Original_Price'][i])*df['Total_Amount'][i]
D2[i] = (df['Original_Price'][i]-Opt_Price[i])*df['Total_Units'][i]
说
TypeError: 'LpVariable' object is not subscriptable
我也尝试过:
D1 = (Opt_Price-df['Original_Price'])*df['Total_Amount']
D2 = (df['Original_Price']-Opt_Price)*df['Total_Amount']
谢谢!
解决方法
似乎您使Opt_Price
成为一个LpVariable,而不是包含它们的字典。使用LpVariable.dicts
从键列表中创建变量字典是相当标准的,例如:
Opt_Price = LpVariable.dics("optprices",range(df.shape[0]))