如何在Python中创建动态求解器(优化函数)



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

我的表列如下所示:

  • 项目:字符串
  • 尺寸:浮动
  • 合计装载量:Int
  • Original_Price:浮动
  • Optimal_Price:Float(空白,因为这是决策变量(
  • D1(空白,但有公式可获取(
  • D2(相同(
  • 绝对(空白,这是决策变量也是目标列(

这是我的问题:

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

目前,我正在努力实现前三个约束。我可以在Excel中很容易地做到这一点,但很难将其转移到Python中。

问题是,我试图计算Difference_1和Difference_2,但它要求我将决策变量,即最优价格引入函数中。功能类似:

  • Difference_1=(original_price-optimal_price(*total_amount
  • 差异_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]))

最新更新