簡體   English   中英

在Java中實現“廣義弧一致性”算法有些困難

[英]Having some difficulty implementing a 'generalized arc consistency' algorithm in Java

這是我正在嘗試用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行到底在做什么。 通過“ TDA←TDA \\ {(X,c)};” 在第16行中,反斜杠是否表示我們從TDA中刪除了該弧?

然后,在第17行中,似乎我們要說的是X的新域是舊域中已經存在的任何域,並與所有滿足/不滿足約束的事物進行“與”運算。 這基本上是正確的嗎?

第16行是可變的集合差異:從集合TDA刪除(X,c)

第17行是設置生成器的符號:將ND X (我認為這意味着類似“ X新域”)設置為所有元素x的集合,其中xX的域中,並且還存在一組相等的對集c元素,其中包括X=xY1=y1直到Y_k=y_k ,其中這些對滿足所有i=1,2,...k y_i\\in domain(Y_i) 換句話說,這是對c集的過濾式查詢。

第17行有點模棱兩可,因為從未指定k 在這種情況下,通常可以隨意推斷它可以取任何值。 因此,內部集合可以是{X=x}{X=x,Y1=y1}等等,具有任意數量的Y_=y_對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM