【问题标题】:Constraint Satisfaction Problem formulation约束满足问题公式化
【发布时间】:2018-11-10 22:43:26
【问题描述】:

通过定义一组变量和一组对这些变量的约束,我得到了以下需要将其表述为 CSP 问题的要求。但是,我在为我的问题制定约束和变量时遇到了麻烦。

一些信息: 问题的解决方案是作业列表:[Var, A1, A2, A3] 其中Var 是变量,A1A2A3 是有效赋值的有序序列。

要求:

  • problem.valid_assignments() 中为每个变量分配一个值
  • 每个变量的第一个赋值都在problem.first_assignments()
  • 每个变量的赋值顺序都在problem.valid_pairs()中(有些赋值不能跟其他)
  • 给定一个整数K,连续赋值不能超过K,其中至少有一个不在problem.k_assignment()中
  • 必须使用给定分配列表中的每个值:problem.assignment

可用约束:

  • NValues 约束:给定required_values 的列表、上限和下限,确保值在required_values 中的变量的数量在边界之间。
  • AllDifferent 约束:给定一组变量,强制它们的不等式。也就是说,集合中没有两个变量是相等的。
  • NotEqual 约束:给定 Var1Var2,强制:Var1 != Var2

到目前为止:

  • 每个Var 的变量,其域为problem.valid_assignments()
  • 每个Var 的变量,其域为problem.first_assignments()
  • 每个VarNValues 约束,其范围为[Var],必需值problem.valid_assignments(Var),下限0,上限len(domain)

其他信息:

  • 解决方案是一个“分配列表”,对于每个Var,我们返回[Var, A1, A2, A3],其中Var 是分配的变量,A1A3 是满足给定条件的有效分配约束。确切的格式并不重要,因为我只是在寻找一个概念性的解决方案。此外,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


【解决方案1】:
  • 我们可以使用NValues 约束,其范围是所有变量,域是每个可能的赋值(为每个赋值创建一个约束)。这可确保在设置为上限和下限为 1 时分配所有值。

  • 我们可以使用 Neq 约束并稍作修改,通过为其提供有效分配的元组来确保正确的排序。

  • 我们可以再次使用NValues 约束来确保k_assignment 的要求,通过传递下限1 和K 上限以及域K_assignments

  • 以同样的方式,我们可以使用NValues 约束和域problem.first_assignments() 进行第一次分配。还有一个域problem.valid_assignments() 来填空。

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多