Python 3.x 如何找到满足要求的项目组合?

Python 3.x 如何找到满足要求的项目组合?,python-3.x,satisfiability,constraint-satisfaction,Python 3.x,Satisfiability,Constraint Satisfaction,我对编程相当陌生,所以我希望有人能给我指出正确的方向 我有一份约2400人的名单,每个人至少有23个条件中的一个(如果他们有条件,每个人的条件为1,如果他们没有条件,则为0) 例如,如果Jon有条件1、5和6,Jon的输出将是{1,0,0,0,1,1,0,0…} 然后,我会得到一份清单,列出每种情况下需要多少人。因此,如果条件1的期望人数是10人,条件2的期望人数是5人,我希望10人有条件1,5人有条件2(一个人可以计算条件1和条件2,如果他们都有) 此外,我必须准确选择30人,并尽可能接近所需

我对编程相当陌生,所以我希望有人能给我指出正确的方向

我有一份约2400人的名单,每个人至少有23个条件中的一个(如果他们有条件,每个人的条件为1,如果他们没有条件,则为0)

例如,如果Jon有条件1、5和6,Jon的输出将是{1,0,0,0,1,1,0,0…}

然后,我会得到一份清单,列出每种情况下需要多少人。因此,如果条件1的期望人数是10人,条件2的期望人数是5人,我希望10人有条件1,5人有条件2(一个人可以计算条件1和条件2,如果他们都有)

此外,我必须准确选择30人,并尽可能接近所需的条件数量,严格限制一个条件必须至少有3人,但不超过10人

有没有办法做到这一点?如果有,我将如何着手?我试着用蛮力强迫这样做,但大量的组合使我无法得到解决方案

编辑:下面是一个小示例,其中列出了5个人和4个条件:

Person 1:{1,0,0,1}
Person 2:{0,1,1,1}
Person 3:{0,0,0,1}
Person 4:{1,0,0,0}
Person 5:{1,0,0,1}

所需的条件数{2,1,1,2}。我的想法是,我需要选择3个人,并尽可能接近所需数量的条件。在本例中,将选择人员1、2和4。我必须将这个想法扩展到一个2400人的列表,有23个条件,并选择30人(尽管它应该能够扩展到任何列表大小和任何数量的条件),并且不知道是否有30个成员的组合会导致完全匹配


这有助于澄清问题吗?

这个问题可以通过约束编程轻松解决。因为您使用的是Python,所以可以使用。在2400人的情况下,您将有30个决策变量,每个变量都有2400个值的域。您的目标是最小化您的解决方案与理论最优解决方案之间的差异(分数为0表示所有23个条件都完全满足)。通过使用约束编程,这可以通过几十行代码来实现。解算器将负责搜索策略和其他细节。

这个问题可以通过约束编程轻松解决。因为您使用的是Python,所以可以使用。在2400人的情况下,您将有30个决策变量,每个变量都有2400个值的域。您的目标是最小化您的解决方案与理论最优解决方案之间的差异(分数为0表示所有23个条件都完全满足)。通过使用约束编程,这可以通过几十行代码来实现。解算器将负责搜索策略和其他细节。

问题说明听起来有点含糊不清。有两种类型的问题,一种是你需要选择满足条件的人,另一种是你需要选择30个满足条件的人,
i
j
k
。。或者尽可能多地考虑其中的条件?第一种似乎很简单。你应该用一个小例子来说明你想要什么。例如,您可以使用5个人和3个条件。您想在纯python-3.x代码中实现这一点,或者您愿意使用一些现成的库,例如z3py或?我愿意使用任何有助于实现这一点的东西。问题规范听起来有点含糊不清。有两种类型的问题,一种是你需要选择满足条件的人,另一种是你需要选择30个满足条件的人,
i
j
k
。。或者尽可能多地考虑其中的条件?第一种似乎很简单。你应该用一个小例子来说明你想要什么。例如,您可以使用5个人和3个条件。您希望在纯python-3.x代码中实现这一点,或者您愿意使用一些现成的库,例如z3py或?我愿意使用任何有助于实现这一点的工具。