这是我试图用Java实现的算法…
(没有完全正确地格式化,因此在这个链接上查看它可能会更容易,只需向上滚动半页,就可以从它带给您的http://artint.info/html/ArtInt_79.html#AC-3-fig

1: procedure GAC(V,dom,C)
2: Inputs
3: V: a set of variables
4: dom: a function such that dom ( X ) is the domain of variable X
5: C: set of constraints to be satisfied
6: Output
7: arc-consistent domains for each variable
8: Local
9: D X is a set of values for each variable X
10: TDA is a set of arcs
11: for each variable X do
12: D X ← dom ( X )
13: TDA ← {? X,c ?| c ∈ C and X ∈ scope ( c )}
14: while TDA ?= {} do
15: select ? X,c ? ∈ TDA;
16: TDA ← TDA \ {(X,c)} ;
17: ND X ← { x | x ∈ D X and some { X = x,Y 1 = y 1 ,...,Y k = y k } ∈ c where y i ∈ D Y i for all i }
18: if ND X ?= D X then
19: TDA ← TDA ∪ {? Z,c ? ?| X ∈ scope ( c ? ) , c ? is not c, Z ∈ scope ( c ? ) \ { X }}
20: D X ← ND X
21: return { D X | X is a variable }

我不明白16号线和17号线到底在做什么在第16行中,用“tda☆tda{(x,c)}”表示,反斜杠是否意味着我们从tda中删除了该弧?
然后,在第17行中,我们似乎在说,X的新域是旧域中已经存在的东西,以及所有满足/不满足约束的东西基本正确吗?

最佳答案

第16行是可变的集合差:从集合中移除(X,c)
第17行是SET Builder符号:SET TDA(我相信这意味着“新的域ND X”)到所有元素的集合[cc],其中Xx的域中,并且存在一组相等的对,这是集合x的元素,并且包括Xc,通过X=x,这些对满足Y1=y1对于所有Y_k=y_k。换句话说,这是一个对sety_i\in domain(Y_i)的特殊过滤查询。
第17行有点不明确,因为从未指定过i=1,2,...k在这种情况下,人们通常可以自由地推断它可以接受任何值。因此,对于任意数目的c对,内集可以是k{X=x}等。

关于algorithm - 在Java中实现“广义弧一致性”算法有些困难,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33882552/

10-10 09:17