您使用的术语“随机匹配”应谨慎使用。我相信,正确的解释是从所有有效解决方案的集合中随机选择,所以基本上如果我们可以列举所有有效解决方案 - 我们可以轻松解决问题。
您正在寻找一个足够接近的解决方案,因此我们需要更好地定义什么是有效解决方案。我建议定义一些阈值(比如最多 1% 的错误)。
在您的示例中,有 4 个组(分配有衬衫样式 A/B/C/D 的组)。因此,有 2^4-1 种可能的人原型(喜欢/讨厌 A/B/C/D 中的每一个,假设任何人都喜欢至少一种衬衫款式)。每个原型人口都有给定的人口规模,每个原型可以分配到 4 个组中的一些(1 个或更多)。
目标是将每个原型的人口分成 4 个组,例如,每个组的大小介于 L 和 H 之间。
让我们正式化它。
问题陈述:
- 表示 A(0001),...,A(1111):15 个原型中每个原型的种群规模
- 表示G1(0001):分配给G1的A(0001)的大小等
给定
- L,H:常量
- A(0001),...,A(1111):15 个常量
我们的目标是找到所有整数解
G1(0001),G1(0011),G1(0101),G1(0111),G1(1001),G1(1011),G1(1101),G1(1111),
G2(0010),G2(0011),G2(0110),G2(0111),G2(1010),G2(1011),G2(1110),G2(1111),
G3(0100),G3(0101),G3(0110),G3(0111),G3(1100),G3(1101),G3(1110),G3(1111),
G4(1000),G4(1001),G4(1010),G4(1011),G4(1100),G4(1101),G4(1110),G4(1111)
受制于:
- G1(0001) = A(0001)
- G2(0010) = A(0010)
- G2(0011) + G1(0011) = A(0011)
- G3(0100) = A(0100)
- G3(0101) + G1(0101) = A(0101)
- G3(0110) + G2(0110) = A(0110)
- G3(0111) + G2(0101) + G1(0101) = A(0111)
- G4(1000) = A(1000)
- G4(1001) + G1(1001) = A(1001)
- G4(1010) + G2(1010) = A(1010)
- G4(1011) + G2(1011) + G1(1011) = A(1011)
- G4(1100) + G3(1100) = A(1100)
- G4(1101) + G3(1101) + G1(1101) = A(1101)
- G4(1110) + G3(1110) + G2(1110) = A(1110)
- G4(1111) + G3(1111) + G2(1111) + G1(1111) = A(1111)
- L
- L
- L
- L
现在我们可以使用整数规划求解器来完成这项工作。