0
|project|loc_Bangalore|loc_Pune|cat_s|cat_c|
|:------|:-----------:|:------:|:---:|:---:|
|abc    |1            |0       |0    |1    |
|Sys    |1            |0       |0    |1    |
|Syst   |0            |1       |1    |0    |
|EPS    |1            |0       |0    |1    |
|foss   |1            |0       |0    |1    |
|opc    |0            |1       |1    |0    |

给定

在上面 df 1 为真,0 为假。我必须从给定的df中选择所有项目,满足以下条件: 1.total project selected count<=4((banglore location project+pune location project+cat_s project+cat_c project)<=4)

2.在所选项目中的项目数应如下: 1.banglore location project<=3 2.pune location project <=1 3.cat_s project<=1 4.cat_c project<=3

我必须选择同时满足这两个条件的项目。我无法为此编写方程式。请帮助我解决这个问题。

4

1 回答 1

0

我认为你很接近。你没有显示你从上面得到的答案,但我猜你得到了一堆疯狂的整数值,包括负值,因为你的决策变量没有界限,所以它可能在区域 __ 中选择 -568 个项目.

第一个问题:当变量代表是/否类型的决定时,您应该将其设为二元变量。改变这个:

proj_vars = pulp.LpVariable.dicts("project",project_list,cat='Integer')

至:

proj_vars = pulp.LpVariable.dicts("project",project_list,cat='Binary')

第二个问题:现在,您缺少一个目标函数……您所拥有的只是一堆“上限”,并且模型(至少您发布的那篇文章)没有增加(或分配)项目的动机。您将其作为最小化模型....您要最小化什么?

根据您的描述,您似乎想要做最大数量的项目,受制于您的限制。所以要做到这一点,你必须:添加一个简单的目标,它只是项目的总和,并将问题转化为最大化问题。说得通?

于 2021-06-10T16:04:34.170 回答