【发布时间】:2018-11-10 22:43:26
【问题描述】:
通过定义一组变量和一组对这些变量的约束,我得到了以下需要将其表述为 CSP 问题的要求。但是,我在为我的问题制定约束和变量时遇到了麻烦。
一些信息:
问题的解决方案是作业列表:[Var, A1, A2, A3]
其中Var 是变量,A1、A2、A3 是有效赋值的有序序列。
要求:
- 在
problem.valid_assignments()中为每个变量分配一个值 - 每个变量的第一个赋值都在
problem.first_assignments() - 每个变量的赋值顺序都在
problem.valid_pairs()中(有些赋值不能跟其他) - 给定一个整数
K,连续赋值不能超过K,其中至少有一个不在problem.k_assignment()中 - 必须使用给定分配列表中的每个值:
problem.assignment。
可用约束:
-
NValues约束:给定required_values的列表、上限和下限,确保值在required_values中的变量的数量在边界之间。 -
AllDifferent约束:给定一组变量,强制它们的不等式。也就是说,集合中没有两个变量是相等的。 -
NotEqual约束:给定Var1,Var2,强制:Var1!=Var2
到目前为止:
- 每个
Var的变量,其域为problem.valid_assignments() - 每个
Var的变量,其域为problem.first_assignments() - 每个
Var的NValues约束,其范围为[Var],必需值problem.valid_assignments(Var),下限0,上限len(domain)。
其他信息:
解决方案是一个“分配列表”,对于每个
Var,我们返回[Var, A1, A2, A3],其中Var是分配的变量,A1到A3是满足给定条件的有效分配约束。确切的格式并不重要,因为我只是在寻找一个概念性的解决方案。此外,A1, A2, A3(又名Var的所有分配)显然必须在该变量的域中。 (域可以在变量之间重叠)。valid_pairs()返回元组列表[(A1, A2), (A2,A3)]。约束是这样的,即返回的解决方案列表(如上所述)必须具有连续的分配,这些分配形成由该函数给出的有效对。例如,如果解决方案是[Var, A1, A2, A4, A3]并且有效对是[(A1, A2), (A2,A3)],则解决方案不正确,因为(A2, A4) (A4, A3)不在列表中((A1, A2)但是是有效对)。本质上,我们正在寻找弧一致性。
【问题讨论】:
-
请详细说明“作业列表”,和“域”一样吗? en.wikipedia.org/wiki/…
-
另外,我不太明白“valid_pairs()”是什么。能举一正一反吗?
-
请播种我的最新编辑以进行澄清。 @MichaelVeksler
-
如果我为每个变量取一个随机值,从它的有效赋值列表中取一个,这个(变量及其值的)集合是否满足所有约束?
-
没有。它将仅满足将变量分配给有效(即可能)分配的基本约束。但是,不能保证那里的订单将满足其他约束(例如每一对都是有效的)。 @MichaelVeksler
标签: python search constraints backtracking constraint-programming