将权重添加到Python / PuLP中的整数线性编程中

时间:2019-03-19 22:40:59

标签: python optimization pulp

我已经成功地使用整数线性编程来解决以下问题(加上一些硬/软约束)来解决插槽填充问题。

def opt(A, max=float('inf'),
                         min=0):
        """Find the optimal solution 
        M, N = len(A), len(A[0])

        # Create problem:
        prob = pulp.LpProblem("optimiser", pulp.LpMaximize)

        # Create variables:
        x = pulp.LpVariable.dicts("x", itertools.product(range(M), range(N)),
                                  cat=pulp.LpBinary)

        # Constraints

具体来说,我具有一系列ID(M),以及一系列相关的产品(N),尽管最初将多个IDS附加到产品上,但在过程结束时只能将其分配给一个ID。到目前为止,我已经能够做到这一点。

ID  Product
1   100
1   200
1   300
2   100
2   200
3   100
4   500
4   200
5   600
6   600

这些被转换为二进制矩阵,以便分配最多6个可用插槽(由软件约束控制的最小最大值),它可以作为基本的优化器正常工作,但是我需要添加一些额外的规则。

例如,我想将权重添加到某些产品(它们各自具有分配的分数作为单独的变量),并且我需要优先考虑将得分最高的产品优先添加到广告位中。

ID  Product Score
1   100     5
1   200     5
1   300     2
2   100     5
2   200     5
3   100     5
4   500     1
4   200     5
6   600     4
6   600     4

因此,我想优先考虑那些得分为5的产品,然后将其首先分配给ID。一旦所有这些都放入,则下一个降序得分,依此类推。

所以

  1. 在这里有可能吗,以及如何到达那里的任何想法?
  2. 如果需要,我可以添加其他加权变量吗?
  3. 如果无法使用ILP,还有其他建议吗? (希望不是O / T)

我非常感谢您的帮助。

0 个答案:

没有答案