如何在Python中创建动态求解器优化功能

问题描述

现在,我有一个关于动态约束的问题。我有原始价格,但是我需要检查它们是否遵循业务规则,当发生违规时,我会更改价格,但是我希望总的绝对更改最小化。

我的表格列如下:

  • 项目:字符串
  • 大小:浮动
  • 总金额:整数
  • 原始价格:浮动价
  • Optimal_Price:浮点型(空白,因为这是决策变量)
  • D1(空白,但有公式可以实现)
  • D2(相同)
  • 绝对(空白,这是决策变量,也是目标列)

这是我的问题:

  • 决策变量:
  1. 最优价格
  2. 绝对值(但这仍然是线性函数,请参见以下内容)
  • 目标:最小化Absolute_value的总和。 SUM(绝对)
  • 约束:
  1. 绝对值> =差异_1
  2. 绝对值> =差异_2
  3. 最优价格> = 0
  4. 相同项目,较大尺寸的最佳价格> =较小尺寸的最佳价格
  5. 大小相同,商品也有价格规则

就目前而言,我正在尝试实现前三个约束。我可以在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]))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...