Python 有没有办法在纸浆中找到下一个最佳的解决方案?

Python 有没有办法在纸浆中找到下一个最佳的解决方案?,python,optimization,pulp,Python,Optimization,Pulp,我有一个非常简单的背包问题列在下面 df的示例如下所示: | weight | item | profit | |--------|-------|--------| | 1 | item1 | 3.977 | | 2 | item2 | 3.126 | | 3 | item3 | 2.698 | | 4 | item4 | 2.607 | | 5 | item5 | 2.569 | 目标是在选择四个组合权重>=10的项目时实现利润

我有一个非常简单的背包问题列在下面

df的示例如下所示:

| weight | item  | profit |
|--------|-------|--------|
| 1      | item1 | 3.977  |
| 2      | item2 | 3.126  |
| 3      | item3 | 2.698  |
| 4      | item4 | 2.607  |
| 5      | item5 | 2.569  |
目标是在选择四个组合权重>=10的项目时实现利润最大化。我要解决的代码如下:

prob = LpProblem("Weight",LpMaximize)
player_vars = [pulp.LpVariable(f'Item_{row.item}', cat='Binary') for row in df.itertuples()]

# total items  constraint
prob += pulp.lpSum(player_var for player_var in player_vars) == 4

# total weight constraint
prob += pulp.lpSum(df.Seed.iloc[i] * player_vars[i] for i in range(len(df))) >= 10

# problem
prob += pulp.lpSum([df.profit.iloc[i] * player_vars[i] for i in range(len(df))])

# solve and print the status
prob.solve()
print(LpStatus[prob.status])
    
#print results
    for i in range(len(df)):
        if player_vars[i].value() == 1:
            row = df.iloc[i]
            print(row.item, row.weight,row.profit)
我想知道是否有一种方法可以获得第二个最佳答案,比如使用纸浆?
谢谢

这样做的一种方法是重新解决问题,添加一个额外的约束,以禁止现有的最佳解决方案。例如,假设原始问题的解决方案存储为
player\u vars\u soln
,则您将添加一个约束:


prob+=pulp.lpSum(player_vars_soln[i]*player_vars[i]for i in range(len(df))一种方法是重新解决问题,添加一个附加约束以禁止现有的最佳解决方案。例如,假设原始问题的解决方案存储为
player\u vars\u soln
,则您将添加一个约束:


prob+=pulp.lpSum(player_vars_soln[i]*player_vars[i]for i in range(len(df)),实现这一点的一种方法是通过添加额外的约束来重新解决问题,以禁止现有的最佳解决方案。例如,假设原始问题的解决方案存储为
player\u vars\u soln
,那么您将添加一个约束:
pill.lpSum(player\u vars\u soln[i]*player\u vars[i]代表范围内的i(len(df))@kabdulla已经回答了这个问题(不应该是评论)这样做的一种方法是重新解决问题,添加一个额外的约束以禁止现有的最佳解决方案。例如,假设原始问题的解决方案存储为
player\u vars\u soln
,那么您将添加一个约束:
pill.lpSum(player\u vars\u soln[i]*player\u vars[i]代表范围内的i(len(df))@kabdulla已经回答了这个问题(不应该是评论)