我正在尝试解决真相出纳员/骗子的问题。对班级进行了调查。答案采用矩阵A的形式,其中A [i] [j]表示第i个学生对第j个学生的回答。如果该字符为“ L”,则表示他/她是骗子;如果是“ T”,则表示该学生是讲真话的人。
说真实话的人(T):他/她的所有回答都是正确的。 骗子(“ L”):( S)他至少做出了一个错误的答复。
例如1
TLLL
LTLL
LLTL
LLLT
类别包含至少3个和最多4个撒谎者,3是撒谎者的下限,而4是撒谎者的上限。
例如2
TLTLT
TTTTT
LLTLL
LLLLL
TLTLT
班级至少包含4个骗子,最多4个骗子
我不确定如何找到上下限,任何帮助将不胜感激。
答案 0 :(得分:0)
对于您给出的示例,您只需遵循逻辑,并假设一个特定的人为T即可看到结果。通常,您可以设置一个混合整数编程问题。
如果人i为L,则让x_i = 1,如果他为T,则使x_i = 0。然后根据每个人的语句创建线性函数。例如,从TLTLT创建:
f_1 = (x_1) + (1-x_2) + (x_3) + (1-x_4) + (x_5)
您可以看到图案。对于任何可行的赋值(即x变量和x值之间没有矛盾的x变量的设置),当且仅当f_1 = 0时,x_1 = 1;而当且仅当x_1 = 1时,x_1 = 1如果f_1> 0,或者由于所有都是整数,则f_1> = 1。这等效于f_i> = x_i和f_i <=(N + 1)x_i(其中N是人数)。现在您有了系统:
For all i=1,...,N
f_i>=x_i
f_i<=(N+1)x_i
x_i is 0 or 1
该系统的每个可行解决方案都对应一个可行的分配,反之亦然。
有了这些约束,只需最小化和最大化sum x_i
即可获得骗子数量的上限和下限。
答案 1 :(得分:0)
第一个示例:
对于第二个示例,需要更多的逻辑来找出: