Powerpoint - Choopan Rattanapoka

Download Report

Transcript Powerpoint - Choopan Rattanapoka

CONSTRAINT SATISFACTION PROBLEM (CSP)
Choopan Rattanapoka
357353 – Introduction to AI
Constraint Satisfaction Problem



ั ้ ๆ ว่า CSP
เรียกสน
เป็ นปั ญหาทางด ้านคณิตศาสตร์ ทีต
่ ้องการแก ้ปั ญหา
ทีม
่ ข
ี ้อกาหนด (constraint) โดยผลลัพธ์ทไี่ ด ้จะต ้อง
ไม่ขด
ั กับข ้อกาหนดทีว่ างไว ้ (satisfaction)
ปั ญหาของ CSP จะประกอบด ้วย
 จานวนตัวแปร
(variable) ทีแ
่ น่นอน
 แต่ละตัวแปรจะมีคา
่ ทีอ
่ ยูใ่ นโดเมน (domain) ทีม
่ ข
ี อบเขต
 เซต (set) ของข ้อกาหนดทีจ
่ ากัดค่าของตัวแปร
 คาตอบ (solution) จะมีได ้ต่อเมือ
่ ตัวแปรทุกตัวไม่ขด
ั กับ
constraint ทีม
่ ี
ตัวอย่าง 1 : 8-queen problem

Q



ให ้มองปั ญหาออกเป็ น 1 หลักต่อ queen
ค่าทีเ่ ก็บจะเป็ นค่าของแถวที่ queen ใน
หลักนัน
้ จะถูกวาง
จานวนตัวแปร มี 8 ตัว (8 หลัก)
โดเมนของตัวแปรตัง้ 8 ตัวเหมือนกัน
คือ 1-8
ข ้อกาหนด (constraint)
Xi = k → Xj != k ; for all j = 1 – 8, j != i
 Xi = ki, Xj = kj→ | i – j | != | ki – kj|
;for all j = 1 – 8, j != i

ตัวอย่าง 2 – Crossword Puzzle
1
2
4
6
3

จานวนตัวแปร มี 8 ตัว (8 คา)

โดเมนของตัวแปร

5
1, 2, 3, 8

7

8
4, 5


{‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
{‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
6, 7

{‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
AFT
HOSES LINE
ALE
KEEL
SAILS

1[3] = 2[1], 1[5] = 3[1]
EEL
KNOT
SHEET

4[2] = 2[3], 4[3] = 5[1], 4[4] = 3[3]
HEEL
LASER
STEER

7[1] = 2[4], 7[2] = 5[2], 7[3] = 3[4]
HIKE
LEE
TIE

8[1] = 6[2], 8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]

ข ้อกาหนด (constraint)
Back
ตัวอย่าง 3 – Map Coloring

E
D
A
B
C


E
D
A
C
B

ี า 3 ส ี (R,G,B)ให ้ระบายส ี
ให ้สม
่ งโดยห ้ามชอ
่ งที่
ลงในชอ
ติดกันมีสเี หมือนกัน
จานวนตัวแปร : 5 ตัว
โดเมนของแต่ละตัวแปร
เหมือนกันคือมี 3 ค่า {‘R’, ‘G’,
‘B’}
ข ้อกาหนด
A
!= B, A != C, A != D, A != E
 B != C, C != D, D != E
ปั ญหาในโลกความเป็ นจริง

CSP สามารถนาไปประยุกต์แก ้ไขปั ญหาได ้หลาย
ประเภท
 Scheduling
 Building
design
 Planning
 Optimization/Satisfaction
 Vision
 Graph
layout
 Network management
 VLSI design …etc…
Constraint Graph

ปั ญหาของ CSP ปกติจะแทนอยูใ่ นรูปของกราฟแบบ
ไม่มท
ี ศ
ิ ทาง (undirected graph) ทีเ่ รียกว่า
Constraint Graph
 โหนด(node)
ของกราฟคือตัวแปร
้ อ
ื่ ม (edge) คือ binary constraint
 เสนเช



Unary constraint สามารถทาได ้ด ้วยการกรองค่าใน
โดเมนสาหรับตัวแปรนัน
้ ๆ
ปกติการแก ้ไขปั ญหาแบบนีจ
้ ะเรียกว่า binary CSP
ถ ้า constraint มีระดับทีส
่ งู กว่าแค่ binary constraint ก็
สามารถแปลงให ้อยูใ่ นรูปแบบของ binary constraint
ได ้
ตัวอย่าง : Constraint Graph
E
D
A
4
B
D
3
C
6

E
7
Binary Constraint
1)
2)
3)
4)
5)
6)
7)
A != B
A != C
A != D
A != E
B != C
C != D
D != E
A
2
C
B
1
5
้
วิธท
ี ใี่ ชในการแก
้ปั ญหา CSP



Generate and Test
Backtracking
Consistency Driven Techniques
Generate and Test

เทคนิคทีใ่ ชกั้ นบ่อยเรียกว่า Brute Force
่ หรือวนสร ้างผลลัพธ์มา
 สุม
E
D
ข ้อกาหนดทีไ่ ด ้ตัง้ ไว ้
A
C
B
จากนัน
้ เอามาตรวจสอบกับ
A = ‘R’, B = ‘R’, C = ‘R’, D = ‘R’, E = ‘R’
A = ‘R’, B = ‘R’, C = ‘R’, D = ‘R’, E = ‘G’
A = ‘R’, B = ‘R’, C = ‘R’, D = ‘R’, E = ‘B’
A = ‘R’, B = ‘R’, C = ‘R’, D = ‘G’, E = ‘R’
…
…
…
ผิดข ้อกาหนด A
!= B
ผิดข ้อกาหนด A
!= B
ผิดข ้อกาหนด A
!= B
ผิดข ้อกาหนด A
!= B
้
เวลาทีใ่ ชในการค
้นหา
นานมาก
Backtracking

ตรวจสอบข ้อกาหนดของแต่ละตัวแปรก่อนกาหนดค่า
จากนัน
้ ลงไปหาค่าสาหรับตัวแปรถัดไป ถ ้าพบทาง
่ า่ ใหม่E
ตันจะย ้อนกลับมาใสค
D
C
E
D
C
E
D
C
E
A B
D
C
E
D
C
A B
D
C
C
D
C
E
A B
D
E
E
A B
A B
E
A B
A B
D
C
A B
E
A B
D
A B
• มีปัญC หาในการ
ทดลองค่าทีผ
่ ด
ิ ซ้า
แล ้วซ้าเล่า
• การเริม
่ ต ้นค ้นหาค่า
ในตาแหน่งทีไ่ ม่ดจ
ี ะ
ทาให ้ทางานนาน
ปรับปรุงให ้ Backtracking มี
ิ ธิภาพ
ประสท


มีเทคนิคพืน
้ ฐานทีใ่ ชช้ ว่ ยปรับปรุง Backtracking ให ้มี
ิ ธิภาพมากขึน
ประสท
้ ในการค ้นหาคาตอบ
เทคนิคเหล่านีม
้ าชว่ ยแก ้ปั ญหาทีเ่ กิดขึน
้ กับ
่
Backtracking เชน
 สามารถทีจ
่ ะตรวจสอบว่าข ้อมูลเหล่านีไ
้ ม่ถก
ู ต ้องตาม
ข ้อกาหนดก่อนค ้นหา ?
 ค่าตัวแปรไหนทีค
่ วรจะแก ้ต่อไป ?
 ควรจะเรียงลาดับของค่าแบบไหนให ้ได ้ผลลัพธ์เร็วทีส
่ ด
ุ
?
Consistency Driven



เป็ นวิธท
ี ใี่ ชส้ าหรับตัดค่าในโดเมนทีผ
่ ด
ิ ข ้อกาหนดออก
ก่อนการค ้นหา
ั ซอน
้
จะมีประโยชน์มากกับปั ญหาทีซ
่ บ
เทคนิคนีจ
้ ะประกอบด ้วย 2 สว่ น

Node consistency


เป็ นการจัดการทีง่ า่ ยคือการตัดค่าในโดเมนทีไ่ ม่เหมาะสมกับโหนดนัน
้
่ ใน ตัวอย่างที่ 2 ได ้ตัดค่าในโดเมนของแต่ละโหนดออกเหลือ
ทิง้ เชน
เฉพาะค่าทีม
่ จ
ี านวนตัวอักษรเท่ากับทีโ่ หนดนัน
้ ๆ ต ้องการ
Arc consistency


Arc(Di, Dj) จะเป็ น arc consistent ได ้ต่อเมือ
่ ทุกค่า x ในโดเมน Di
จะต ้องมีบางค่า y ในโดเมน Dj อยูท
่ ี่ Di = x และ Dj = y ทีไ่ ม่ขด
ั กับ
ข ้อกาหนด
Arc consistency คิดในรูปแบบของกราฟทีม
่ ท
ี ศ
ิ ทางเพราะฉะนัน
้ ถึง
เขียน Constraint Graph
1
2
3

โดเมนของตัวแปร

4
6
5
1, 2, 3, 8

7

8
4, 5


AFT
HOSES
LINE
ALE
KEEL
SAILS
EEL
KNOT
SHEET
HEEL
LASER
STEER
HIKE
LEE
TIE

{‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
{‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
6, 7

{‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
ข ้อกาหนด (constraint)
7
5
6
2
4
8
1

1[3] = 2[1], 1[5] = 3[1]

4[2] = 2[3], 4[3] = 5[1], 4[4] = 3[3]

7[1] = 2[4], 7[2] = 5[2], 7[3] = 3[4]

8[1] = 6[2], 8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
3
Algorithm ตรวจสอบ Arc Consistency
(1)
i=1
j=2
procedure REVISE(Di, Dj)
DELETE = false
for each X in Di do
if ไม่มค
ี า่ Y ใน Dj ทีท
่ าให ้ (X,Y) consistent
then
delete X from Di
DELETE = true
end if
end for
return DELETE;
end REVISE;
7
5
6
2
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
Constraint 1[3] = 2[1]
4
8
1
3
Algorithm ตรวจสอบ Arc Consistency
(2)
i=2
j=1
procedure REVISE(Di, Dj)
DELETE = false
for each X in Di do
if มีไม่มค
ี า่ Y ใน Dj ทีท
่ าให ้ (X,Y) consistent
then
delete X from Di
DELETE = true
end if
end for
return DELETE;
end REVISE;
7
5
6
2
4
8
1
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
Constraint 1[3] = 2[1]
แค่ REVISE ไม่เพียงพอต่อการตรวจสอบ
consistency ทัง้ หมดเนือ
่ งจากหลังจาก
ตรวจสอบ arc อืน
่ จะทาให ้สามารถตัดค่า
ออกได ้อีก
AC-1 Algorithm (1)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (2)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (3)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (4)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (5)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (6)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (7)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (8)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (9)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (10)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (11)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (12)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (13)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (14)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (15)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (16)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (17)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (18)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (19)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (20)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (21)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (22)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (23)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (24)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (25)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-1 Algorithm (26)
procedure AC-1
Q = { (Di, Dj) ใน arcs(G) }
repeat
CHANGE = false
for each (Di, Dj) in Q do
CHANGE = REVISE(Di, Dj)
or CHANGE
end for
until not(CHANGE)
end AC-1
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
สรุป Algorithm AC-1




สามารถชว่ ยค ้นหาผลลัพธ์ได ้
ิ ธิภาพยังไม่ดเี นือ
แต่ประสท
่ งจากการเปลีย
่ นแปลง
ของคูห
่ นึง่ ในกราฟจะมีผลให ้ต ้องเริม
่ ตรวจสอบ arc
consistency ใหม่ทงั ้ หมด (ทุกคูข
่ อง edge ในกราฟ)
ถ ้า REVISE(Di, Dj) มีการลดค่าใน Di ก็ควรตรวจสอบ
เพิม
่ แค่คข
ู่ อง (Di, Dm) ไม่จาเป็ นต ้องตรวจสอบ (Dm,
Di)
ื่ ว่า AC-3 โดยเป็ นการลดคู่
Algorithm ใหม่มช
ี อ
ตรวจสอบลงจาก Algorithm AC-1
AC-3 Algorithm (1)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (2)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (3)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D3), (D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (4)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D2,D1), (D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)} ,(D1,D2) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (5)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D2,D4),
(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6)} ,(D1,D2) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (6)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D2,D7), (D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6), (D1,D2) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (7)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D2,D8), (D3,D1), (D3,D4),
(D3,D7), (D3,D8), (D4,D2), (D4,D3),
(D4,D5), (D5,D4), (D5,D7), (D5,D8),
(D6,D8), (D7,D2), (D7,D3), (D7,D5),
(D8,D2), (D8,D3), (D8,D5), (D8,D6), (D1,D2) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (8)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D3,D1), (D3,D4), (D3,D7), (D3,D8),
(D4,D2), (D4,D3), (D4,D5), (D5,D4),
(D5,D7), (D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2) },(D1,D3) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (9)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D3,D4), (D3,D7), (D3,D8),
(D4,D2), (D4,D3), (D4,D5), (D5,D4),
(D5,D7), (D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (10)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D3,D7), (D3,D8),
(D4,D2), (D4,D3), (D4,D5), (D5,D4),
(D5,D7), (D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (11)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D3,D8),
(D4,D2), (D4,D3), (D4,D5), (D5,D4),
(D5,D7), (D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (12)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D4,D2), (D4,D3), (D4,D5), (D5,D4),
(D5,D7), (D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3) ,}
(D2,D4), (D3,D4) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (13)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D4,D3), (D4,D5), (D5,D4),
(D5,D7), (D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (14)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D4,D5), (D5,D4),
(D5,D7), (D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (15)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D5,D4),
(D5,D7), (D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (16)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D5,D7), (D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4) }, (D4,D5) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (17)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D5,D8), (D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3),
(D2, D4),(D3, D4),(D4,D5) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (18)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D6,D8), (D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3),
(D2, D4),(D3, D4),(D4,D5) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (19)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D7,D2),
(D7,D3), (D7,D5), (D8,D2), (D8,D3),
(D8,D5), (D8,D6), (D1,D2), (D1,D3),
(D2, D4),(D3, D4),(D4,D5) },
(D2,D7), (D3,D7), (D5,D7) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (20)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D7, D3), (D7, D5), (D8,D2), (D8,D3),
(D8, D5), (D8, D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4), (D4,D5),
(D2, D7), (D3, D7), (D5, D7) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (21)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D7, D5), (D8,D2), (D8,D3),
(D8, D5), (D8, D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4), (D4,D5),
(D2, D7), (D3, D7), (D5, D7) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (22)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D8,D2), (D8,D3),
(D8, D5), (D8, D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4), (D4,D5),
(D2, D7), (D3, D7), (D5, D7) },
(D2,D8), (D3,D8), (D5,D8), (D6, D8) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (23)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D8,D3),
(D8, D5), (D8, D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4), (D4,D5),
(D2, D7), (D3, D7), (D5, D7),
(D2, D8), (D3, D8), (D5, D8), (D6, D8) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (24)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D8, D5), (D8, D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4), (D4,D5),
(D2, D7), (D3, D7), (D5, D7),
(D2, D8), (D3, D8), (D5, D8), (D6, D8) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (25)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D8, D6), (D1,D2), (D1,D3),
(D2, D4), (D3, D4), (D4,D5),
(D2, D7), (D3, D7), (D5, D7),
(D2, D8), (D3, D8), (D5, D8), (D6, D8) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (26)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D1,D2), (D1,D3),
(D2, D4), (D3, D4), (D4,D5),
(D2, D7), (D3, D7), (D5, D7),
(D2, D8), (D3, D8), (D5, D8), (D6, D8) }
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
AC-3 Algorithm (27)
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
7
5
6
2
4
3
(D1,D3), (D4,D3), (D7,D3), (D8, D3) }
D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D3 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
D4 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D5 = {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’}
D6 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D7 = {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’}
D8 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’}
ข ้อกาหนด (constraint)
8
1
Q = {(D3, D8), (D5, D8), (D6, D8) ,}
1[3] = 2[1],
4[2] = 2[3],
7[1] = 2[4],
8[1] = 6[2],
1[5] = 3[1]
4[3] = 5[1], 4[4] = 3[3]
7[2] = 5[2], 7[3] = 3[4]
8[3] = 2[5], 8[4] = 5[3], 8[5] = 3[5]
ข ้อจากัดของ Algorithm AC-3

ปั ญหา Map coloring สามารถใช ้ Ac-3 แก ้ได ้ไหม ?
5
4 1 2
3
5
4
1
1
2
3
4
5
2
3
procedure AC-3
Q = { (Di, Dj) ใน arcs(G) }
while not Q empty
select and delete (Dk, Dm) from Q;
if REVISE(Dk, Dm) then
Q = Q union {(Dx, Dk) ใน arc(G)}
end if
end while
end AC-3
Q = {(D1, D2), (D1, D3), (D1, D4), (D1, D5),
(D2, D1), (D2, D3), (D3, D1), (D3, D2),
(D3, D4), (D4, D1), (D4, D3), (D4, D5),
(D5, D1), (D5, D4) }
D1 = {‘R’, ‘G’, ‘B’}
D2 = {‘R’, ‘G’, ‘B’}
D3 = {‘R’, ‘G’, ‘B’}
D4 = {‘R’, ‘G’, ‘B’}
D5 = {‘R’, ‘G’, ‘B’}
ข ้อกาหนด (constraint)
1 != 2,
1 != 4,
2 != 3,
4 != 5
1 != 3,
1 != 5,
3 != 4,
Forward Checking

คำนิ ยำม :
่ า่ v
X ถูกใสค
ื่ มต่อกับ X
 ให ้ตรวจสอบค่าของตัวแปร Y ทีเ่ ชอ
 และลบค่าในโดเมนของตัวแปร Y ทีข
่ ด
ั กับค่าของ v
 หลังจากทีต
่ วั แปร


วิธน
ี จ
ี้ ะเป็ นการชว่ ยตัดค่าข ้อมูลในโดเมนออกก่อนทา
การค ้นหา เพือ
่ ลดขนาดข ้อมูลในการค ้นหา ให ้ได ้
ผลลัพธ์ดข
ี น
ึ้
และจะหยุดการทาต่อเมือ
่ ไม่มค
ี า่ สาหรับตัวแปรที่
เหมาะสม
ตัวอย่าง 1 : Forward Checking
5
4 1 2
3
5
4 1 2
3
5
4 1 2
3
5
4 1 2
3
5
4 1 2
3
5
4 1 2
3
1
2
3
4
5
4
1
3
5
2
ตัวอย่าง 2 : Forward Checking (1)
NT
WA
Q
NW
SA
V
T
Constraint Graph
ตัวอย่าง 2 : Forward Checking (2)
NT
WA
WA
Q
V
NT
SA
NW
T
Q
NW
SA
V
T
• Forward Checking ชว่ ยตัดค่าของตัวแปรทีย
่ ังไม่ถก
ู
ค ้นได ้ แต่ไม่สามารถตรวจสอบปั ญหาได ้
ปรับปรุง Forward Checking ด ้วย
AC-3

เพือ
่ ให ้ Algorithm : Forward Checking มี
ิ ธิภาพมากขึน
ประสท
้ โดยการตรวจสอบ arc
consistency(AC-3) เพือ
่ ค ้นหาความผิดพลาดก่อน
procedure
ทางานขัน
้ ต่
อไป AC3-FC
Q = { (Di, Dj) ใน arcs(G) }
consistent = true
while not Q empty AND consistent
select and delete (Dk, Dm) from Q
if REVISE(Dk, Dm) then
consistent = not Dk empty AND
consistent
end if
end while
return consistent
end AC3-FC
ตัวอย่าง: AC3-FC
NT
WA
WA(1)
Q(2)
V(3)
NT(4)
SA(5)
NW(6)
T(7)
Q
NW
SA
V
T
procedure AC3-FC
Q = { (Di, Dj) ใน arcs(G) }
consistent = true
while not Q empty AND consistent
select and delete (Dk, Dm) from Q
if REVISE(Dk, Dm) then
consistent = not Dk empty
AND consistent
end if
end while
return consistent
end AC3-FC
Q = {(D1, D4), (D1, D5), (D2, D4), (D2, D5), (D2, D6), (D3, D6),
(D3, D5), (D4, D1), (D4, D2), (D4, D5), (D5, D1), (D5, D2),
(D5, D3), (D5, D4), (D5, D6), (D6, D2), (D6, D3), (D6, D5) }
D1 = {‘R’, ‘G’, ‘B’}
D3 = {‘R’, ‘G’, ‘B’}
D5 = {‘R’, ‘G’, ‘B’}
D7 = {‘R’, ‘G’, ‘B’}
D2 = {‘R’, ‘G’, ‘B’}
D4 = {‘R’, ‘G’, ‘B’}
D6 = {‘R’, ‘G’, ‘B’}
ตัวอย่าง: AC3-FC
NT
WA
WA(1)
Q(2)
V(3)
NT(4)
SA(5)
NW(6)
T(7)
Q
NW
SA
V
T
procedure AC3-FC
Q = { (Di, Dj) ใน arcs(G) }
consistent = true
while not Q empty AND consistent
select and delete (Dk, Dm) from Q
if REVISE(Dk, Dm) then
consistent = not Dk empty
AND consistent
end if
end while
return consistent
end AC3-FC
Q = {(D1, D4), (D1, D5), (D2, D4), (D2, D5), (D2, D6), (D3, D6),
(D3, D5), (D4, D1), (D4, D2), (D4, D5), (D5, D1), (D5, D2),
(D5, D3), (D5, D4), (D5, D6), (D6, D2), (D6, D3), (D6, D5) }
D1 = {‘R’, ‘G’, ‘B’}
D3 = {‘R’, ‘G’, ‘B’}
D5 = {‘R’, ‘G’, ‘B’}
D7 = {‘R’, ‘G’, ‘B’}
D2 = {‘R’, ‘G’, ‘B’}
D4 = {‘R’, ‘G’, ‘B’}
D6 = {‘R’, ‘G’, ‘B’}
ปรับปรุงให ้ Backtracking มี
ิ ธิภาพ
ประสท


มีเทคนิคพืน
้ ฐานทีใ่ ชช้ ว่ ยปรับปรุง Backtracking ให ้มี
ิ ธิภาพมากขึน
ประสท
้ ในการค ้นหาคาตอบ
เทคนิคเหล่านีม
้ าชว่ ยแก ้ปั ญหาทีเ่ กิดขึน
้ กับ
่
Backtracking เชน
 สามารถทีจ
่ ะตรวจสอบว่าข ้อมูลเหล่านีไ
้ ม่ถก
ู ต ้องตาม
ข ้อกาหนดก่อนค ้นหา ?
 ค่าตัวแปรไหนทีค
่ วรจะแก ้ต่อไป ?
 ควรจะเรียงลาดับของค่าแบบไหนให ้ได ้ผลลัพธ์เร็วทีส
่ ด
ุ
?
Variable and Value Ordering





การเลือกตัวแปรทีจ
่ ะทาการกาหนดค่าในการค ้นหา มีผลเป็ น
อย่างมากในการทาให ้ปั ญหาทีต
่ ้องการแก ้ไขถูกแก ้ไขเร็วขึน
้
้
้
ั
วิธก
ี ารเลือกต ัวแปรทีจ
่ ะใชในการก
าหนดค่าทีน
่ ย
ิ มใชอาศ
ย
่ ด
หลักการของ “First-fail” (จะไปสูจ
ุ หมายได ้จะต ้องลองไปทาง
ทีม
่ โี อกาสล ้มเหลวมากทีส
่ ด
ุ ก่อน) หรือเรียกว่า Minimum
Remaining Value (MRV) Heuristic
่
่ ดขึนมำ
้
ซงึ่ ก็คอ
ื เลือกต ัวแปรทีเหลื
อค่ำในโดเมนน้อยทีสุ
ทำงำนก่อน
ในกรณีทม
ี่ ต
ี ัวแปรทีม
่ ค
ี า่ ในโดเมนเท่ากัน จะนับ degree
้
heuristic คือเลือกตัวแปรทีม
่ ี constraint มากทีส
่ ด
ุ ขึน
้ มาใชงาน
ก่อน
เมือ
่ ทาการเลือกต ัวแปรทีจ
่ ะทาการค ้นหาได ้แล ้ว ต่อไปก็คอ
ื
ั หลักการทีเ่ รียกว่า Least
เลือกค่ำทีจ
่ ะให ้ตัวแปรนัน
้ ใช ้ จะอาศย
ตัวอย่าง: AC3-FC (Variable & Value Ordering)
NT
WA
WA(1)
Q(2)
V(3)
NT(4)
SA(5)
NW(6)
T(7)
Q
NW
SA
V
T
procedure AC3-FC
Q = { (Di, Dj) ใน arcs(G) }
consistent = true
while not Q empty AND consistent
select and delete (Dk, Dm) from Q
if REVISE(Dk, Dm) then
consistent = not Dk empty
AND consistent
end if
end while
return consistent
end AC3-FC
Q = {(D1, D4), (D1, D5), (D2, D4), (D2, D5), (D2, D6), (D3, D6),
(D3, D5), (D4, D1), (D4, D2), (D4, D5), (D5, D1), (D5, D2),
(D5, D3), (D5, D4), (D5, D6), (D6, D2), (D6, D3), (D6, D5) }
D1 = {‘R’, ‘G’, ‘B’}
D3 = {‘R’, ‘G’, ‘B’}
D5 = {‘R’, ‘G’, ‘B’}
D7 = {‘R’, ‘G’, ‘B’}
D2 = {‘R’, ‘G’, ‘B’}
D4 = {‘R’, ‘G’, ‘B’}
D6 = {‘R’, ‘G’, ‘B’}
ปรับปรุงให ้ Backtracking มี
ิ ธิภาพ
ประสท


มีเทคนิคพืน
้ ฐานทีใ่ ชช้ ว่ ยปรับปรุง Backtracking ให ้มี
ิ ธิภาพมากขึน
ประสท
้ ในการค ้นหาคาตอบ
เทคนิคเหล่านีม
้ าชว่ ยแก ้ปั ญหาทีเ่ กิดขึน
้ กับ
่
Backtracking เชน
 สามารถทีจ
่ ะตรวจสอบว่าข ้อมูลเหล่านีไ
้ ม่ถก
ู ต ้องตาม
ข ้อกาหนดก่อนค ้นหา ?
 ค่าตัวแปรไหนทีค
่ วรจะแก ้ต่อไป ?
 ควรจะเรียงลาดับของค่าแบบไหนให ้ได ้ผลลัพธ์เร็วทีส
่ ด
ุ
?
แบบฝึ กหัด : 4 Queens Problem




แก ้ปั ญหา 4 queens ด ้วย AC3-FC โดย
ให ้ประยุกต์ใช ้ Variable Ordering และ
Value Ordering ตามความเหมาะสม
จานวนตัวแปร มี 4 ตัว (4 หลัก)
โดเมนของตัวแปรตัง้ 4 ตัวเหมือนกัน
คือ 1-4 (แถว)
ข ้อกาหนด (constraint)
Xi = k → Xj != k ; for all j = 1 – 4, j != i
 Xi = ki, Xj = kj→ | i – j | != | ki – kj|
;for all j = 1 – 4, j != i

วิธแ
ี ก ้ปั ญหา 4 Queens
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
Q
X1
{1,2,3,4}
X2
{1,2,3,4}
X3
{1,2,3,4}
X4
{1,2,3,4}
แบบฝึ กหัดทาสง่

แก ้ปั ญหาการจัดตารางห ้องเรียน

มีจานวนวิชาเรียนทัง้ หมด 4 วิชา C1, C2, C3, C4 มีรายละเอียดดังนี้


1. จงเขียนค่าในโดเมนของ
แต่ละตัวแปรทีใ่ ช ้
Class
Time
C1
8.00 – 10.30
หลักการ node
C2
9.00 – 11.30
consistency แล ้ว
C3
10.00 - 12.30
2. เขียนข ้อกาหนด
C4
11.00 – 13.30
(constraint) ให ้อยูใ่ นรูป
มีจานวนห ้องเรียนทัง้ หมด 3 ห ้อง R1, R2, R3 ของตัวแปร
3. เขียน Constraint graph
มีข ้อกาหนดดังต่อไปนี้
้ ตอนการ
 แต่ละวิชาจะต ้องมีห ้องเรียน 1 ห ้องใน R1,R24.
หรือ เขี
R3 ยนขัน
แก ้ปั ญหา CSP
้
 R3 เล็กเกิน ไม่สามารถใชสอนวิ
ชา C3 ได ้


R2 และ R3 เล็กเกิน ไม่สามารถสอนวิชา C4 ได ้
กาหนดให ้ C1-C4 เป็ นตัวแปร และ R1-R3 เป็ นค่าในโดเมน