测试封面问题可以定义如下:
假设我们有一组n
疾病和一组m
测试我们可以检查症状。我们还给出了以下内容:
n
x n
矩阵A
其中A[i][j]
是二进制值,表示对患者进行j
测试的结果i
疾病(1表示阳性结果,0表示阴性); j
,c_j
;那任务是找到一组能够以最低成本唯一识别每种n
疾病的测试。
此问题可以表示为整数线性程序,我们希望最小化目标函数\sum_{j=1}^{m} c_j x_j
,如果我们选择在集合中包含测试x_j
,则j
= 1 ,否则为0。
我的问题是:
这个问题的线性约束是什么?
顺便说一句,我认为这个问题是NP难的(一般是整数线性规划)。
答案 0 :(得分:0)
如果我是正确的,你只需要确保
\sum_j x_j.A_ij >= 1 forall i
答案 1 :(得分:-1)
让T
成为删除所有j
的{{1}} A
列j
所产生的矩阵,使x_j
= 0。
然后选择一组能够唯一区分任何两种疾病的测试,相当于确保T
的每一行都是唯一的。
当且仅当k
适用于所有l
时,请注意两行(T[k][j] XOR T[l][j]) = 0
和j
相同。
所以,我们想要的约束是
\sum_{j=1}^{m} x_j(A[k][j] XOR A[l][j]) >= 1
适用于所有
1 <= k <= m
和1 <= l <= 1
,k != l
。
请注意,上述约束是线性的,因为我们可以预先计算系数(A[k][j] XOR A[l][j])
。