【问题标题】:Pulp: Setting Constraints that are not lpSum based but rather in a range?纸浆:设置不是基于 lpSum 而是在一个范围内的约束?
【发布时间】:2020-05-18 17:31:54
【问题描述】:

我试图理解 python 中的纸浆库,特别是在定义不涉及 lpSum 并且只是变量之一的直接界限的约束方面。

orders_dict_test = {"Orders": [11, 22, 33, 44, 55, 66, 77],
                    "Num_Days": [1, 2, 2, 3, 3, 5, 6]}

如何使用“Num_Days”创建纸浆约束,我们只想包含“订单”,其中“Num_Days”>= 1 且

我只是很难理解不涉及 lpSum 的约束,因为我看到的许多示例都集中在这一点上。

任何资源或帮助都会很棒。

谢谢。

【问题讨论】:

  • 我不完全知道你想在这里实现什么。首先写下问题的数学模型可能会有所帮助。这通常会使将其转录成 Pulp/Python 更容易一些。

标签: python optimization pulp minimization


【解决方案1】:

我不完全理解这个问题,或者你想要达到的目标。一般来说,虽然在创建约束时,您可以对变量“集合”做两件事(集合只是变量的集合,您可以以任何您喜欢的方式定义)。

您可以对该组变量求和,也可以对该组中的每个变量应用一个约束。

因此,对于您的示例,创建满足orders_dict_test['Num_Days'] >= 1 and <= 4 的变量子集非常简单,然后您可以对该子集求和或对该子集中的每个变量应用约束。

下面的代码将创建一个满足该约束的 ('orders', 'ndays') 元组列表。提取实际变量将取决于您如何定义它们。我建议您可能需要某个描述的唯一键。

orders_dict_test = {"Orders": [11, 22, 33, 44, 55, 66, 77],
                    "Num_Days": [1, 2, 2, 3, 3, 5, 6]}

print([(o, nd) for o, nd in zip(orders_dict_test['Orders'], orders_dict_test['Num_Days']) if nd >= 1 and nd<= 4])

【讨论】:

  • 我明白你在说什么,所以实现这一点的一种方法是编写 prob += orders_dict_test['Num_Days'] >= 1 和
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
相关资源
最近更新 更多