Constraint Satisfaction Problem (CSP)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Application Development Overview Nithi Thanon Computer Science Prince of Songkla University.
Advertisements

Chapter 8 : Logic Modeling & Data Modeling
Stack.
Linked-List (รายการโยง)
INC 551 Artificial Intelligence
INC 551 Artificial Intelligence
Image Processing & Computer Vision
Image Processing & Computer Vision
การเขียนผังงานแบบโครงสร้าง
Computer Architecture and Assembly Language
Asst.Prof. Dr.Surasak Mungsing
Asst.Prof. Dr.Surasak Mungsing
CSC201 Analysis and Design of Algorithms Greedy, Divide and Conquer
ธนาวินท์ รักธรรมานนท์
Week-4, Create, Grant, Trigger DBMS 3/53. From MySQL 5.5 Manual.
คิว ลักษณะการทำงานของ Queue การดำเนินการของ Queue การตรวจสอบ Queue
บทที่ 5 Link List Link List.
คำสั่งควบคุมขั้นตอน Flow control statements
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรที่ ๑ ทักษะการโปรแกรม เบื้องต้น วันที่สาม.
สาขาวิชาเทคโนโลยี สารสนเทศ คณะเทคโนโลยีสารสนเทศ และการสื่อสาร.
Computer Programming Asst. Prof. Dr. Choopan Rattanapoka
บทที่ 6 พจนานุกรมข้อมูล และ คำอธิบายกระบวนการ
Introduction to ARTIFICIAL Intelligence
Linked List (2) Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
Trees Hierarchical Structures. Outlines Definition of trees Modeling by trees Properties of trees Applications – Binary search trees – Prefix codes –
Timed Math Quiz. โปรแกรมสุ่มคำนวณเลขแข่งกับ เวลา.
NOTE: To change the image on this slide, select the picture and delete it. Then click the Pictures icon in the placeholder to insert your own image. แนวทางการขับเคลื่อน.
วัตถุประสงค์การเรียนรู้
ความก้าวหน้าการพัฒนากฎหมาย ที่อยู่ในความรับผิดชอบของกรมอนามัย
การประมวลผลแบบวน ( LOOP )
การทดสอบซอฟต์แวร์ Software Testing
Integrity Constraints
Concept of Programing.
Chapter Objectives Chapter Outline
Data Structure & Algorithm Concept
การวิเคราะห์และออกแบบขั้นตอนวิธี
การแสดงขั้นตอนวิธีด้วยรหัสเทียม (Pseudo-Code)
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913
PHP (2) - condition - loop
13 October 2007
Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913
DEADLOCKS Advanced Operating System Operating System Technology
บทที่ 2 ขั้นตอนการทำงาน (Algorithm)
การออกแบบระบบ System Design.
Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 13 การเขียนรหัสเทียม (Pseudo Code)
Asst.Prof. Dr.Surasak Mungsing
Network programming Asst. Prof. Dr. Choopan Rattanapoka
Data Structure and Algorithm
Techniques Administration
Problem Solving ขั้นตอนวิธีและการแก้ปัญหาสำหรับวิทยาการคอมพิวเตอร์
การเขียนโปรแกรมคอมพิวเตอร์
การเขียนโปรแกรมย่อย.
รอบสามประเมินกลุ่มตัวบ่งชี้ที่ 1-5)
เซต (SET) เราไม่สามารถให้คำจำกัดความกับค่าว่าเซตหรือสมาชิก
การประเมิน RF 4.1 โรคไม่ติดต่อรอบ 2
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 11: เทคนิคการออกแบบขั้นตอนวิธีตอนวิธี Greedy,
บทที่ 9 การอธิบายกระบวนการแบบต้นไม้.
การบังคับชำระหนี้ Subtitle NOTE:
อุทธรณ์,ฎีกา.
ขั้นตอนการเขียนโปรแกรมคอมพิวเตอร์
กิจกรรมที่ 9 การสร้างตัวแปร ใน Scratch.
ข้อเสนอโครงสร้างการแบ่งส่วนราชการ ภายใน กรมทรัพยากรทางทะเลและชายฝั่ง
การเขียนโปรแกรมภาษา Java (ต่อ)
狗隻的訓練 聖士提反女子中學附屬小學 孫晞庭.
การวิเคราะห์และออกแบบขั้นตอนวิธี
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 12: เทคนิคการออกแบบขั้นตอนวิธีตอนวิธี Dynamic.
ขั้นตอนการทำเรื่องการเรียนรู้ร่วมการทำงาน (พ.ค. – ก.ย. 62 )
อัลกอริทึม (Algorithm) ???
ใบสำเนางานนำเสนอ:

Constraint Satisfaction Problem (CSP) 030523111 – Introduction to Artificial Intelligence Asst. Prof. Dr. Choopan Rattanapoka

Constraint Satisfaction Problem เรียกสั้นๆ ว่า CSP เป็นปัญหาทางด้านคณิตศาสตร์ ที่ต้องการแก้ปัญหาที่มีข้อกำหนด (constraint) โดยผลลัพธ์ที่ได้จะต้องไม่ขัดกับข้อกำหนดที่วางไว้ (satisfaction) ปัญหาของ CSP จะประกอบด้วย จำนวนตัวแปร (variable) ที่แน่นอน แต่ละตัวแปรจะมีค่าที่อยู่ในโดเมน (domain) ที่มีขอบเขต เซต (set) ของข้อกำหนดที่จำกัดค่าของตัวแปร คำตอบ (solution) จะมีได้ต่อเมื่อตัวแปรทุกตัวไม่ขัดกับ constraint ที่มี

ตัวอย่าง 1 : 8-queen problem ให้มองปัญหาออกเป็น 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 Q

ตัวอย่าง 2 – Crossword Puzzle จำนวนตัวแปร มี 8 ตัว (8 คำ) โดเมนของตัวแปร 1, 2, 3, 8 {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’} 4, 5 {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’} 6, 7 {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’} ข้อกำหนด (constraint) 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] 1 2 3 4 5 6 7 8 AFT HOSES LINE ALE KEEL SAILS EEL KNOT SHEET HEEL LASER STEER HIKE LEE TIE Back

ตัวอย่าง 3 – Map Coloring ให้สีมา 3 สี (R,G,B)ให้ระบายสีลงในช่อง โดยห้ามช่องที่ติดกันมีสีเหมือนกัน จำนวนตัวแปร : 5 ตัว โดเมนของแต่ละตัวแปรเหมือนกันคือมี 3 ค่า {‘R’, ‘G’, ‘B’} ข้อกำหนด A != B, A != C, A != D, A != E B != C, C != D, D != E E D A B C E D A B C

ปัญหาในโลกความเป็นจริง 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 E 7 D A B 4 D B 3 1 A C 6 5 2 Binary Constraint C 1) A != B 2) A != C 3) A != D 4) A != E 5) B != C 6) C != D 7) D != E

วิธีที่ใช้ในการแก้ปัญหา CSP Generate and Test Backtracking Consistency Driven Techniques

เวลาที่ใช้ในการค้นหานานมาก Generate and Test เทคนิคที่ใช้กันบ่อยเรียกว่า Brute Force สุ่มหรือวนสร้างผลลัพธ์มา จากนั้นเอามาตรวจสอบกับข้อกำหนดที่ได้ตั้งไว้ E D C B A A = ‘R’, B = ‘R’, C = ‘R’, D = ‘R’, E = ‘R’ ผิดข้อกำหนด A != B A = ‘R’, B = ‘R’, C = ‘R’, D = ‘R’, E = ‘G’ ผิดข้อกำหนด A != B A = ‘R’, B = ‘R’, C = ‘R’, D = ‘R’, E = ‘B’ ผิดข้อกำหนด A != B A = ‘R’, B = ‘R’, C = ‘R’, D = ‘G’, E = ‘R’ ผิดข้อกำหนด A != B … … เวลาที่ใช้ในการค้นหานานมาก …

Backtracking ตรวจสอบข้อกำหนดของแต่ละตัวแปรก่อนกำหนดค่า จากนั้นลงไปหาค่า สำหรับตัวแปรถัดไป ถ้าพบทางตันจะย้อนกลับมาใส่ค่าใหม่ E D C B A E D C B A E D C B A E D C B A มีปัญหาในการทดลองค่าที่ผิดซ้ำแล้วซ้ำเล่า การเริ่มต้นค้นหาค่าในตำแหน่งที่ไม่ดีจะทำให้ทำงานนานมาก E D C B A E D C B A E D C B A E D C B A E D C B A E D C B A

ปรับปรุงให้ Backtracking มีประสิทธิภาพ สามารถที่จะตรวจสอบว่าข้อมูลเหล่านี้ไม่ถูกต้องตามข้อกำหนดก่อนค้นหา ? ค่าตัวแปรไหนที่ควรจะแก้ต่อไป ? ควรจะเรียงลำดับของค่าแบบไหนให้ได้ผลลัพธ์เร็วที่สุด ?

Consistency Driven เป็นวิธีที่ใช้สำหรับตัดค่าในโดเมนที่ผิดข้อกำหนดออกก่อนการค้นหา จะมีประโยชน์มากกับปัญหาที่ซับซ้อน เทคนิคนี้จะประกอบด้วย 2 ส่วน Node consistency เป็นการจัดการที่ง่ายคือการตัดค่าในโดเมนที่ไม่เหมาะสมกับโหนดนั้นทิ้ง เช่นใน ตัวอย่างที่ 2 ได้ตัด ค่าในโดเมนของแต่ละโหนดออกเหลือเฉพาะค่าที่มีจำนวนตัวอักษรเท่ากับที่โหนดนั้นๆ ต้องการ Arc consistency Arc(Di, Dj) จะเป็น arc consistent ได้ต่อเมื่อทุกค่า x ในโดเมน Di จะต้องมีบางค่า y ใน โดเมน Dj อยู่ที่ Di = x และ Dj = y ที่ไม่ขัดกับข้อกำหนด Arc consistency คิดในรูปแบบของกราฟที่มีทิศทางเพราะฉะนั้นถึง Arc(Di, Dj) จะเป็น arc consistent แต่ Arc(Dj, Di) อาจจะไม่ใช่ก็ได้

เขียน Constraint Graph โดเมนของตัวแปร 1, 2, 3, 8 {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’} 4, 5 {‘HEEL’, ‘HIKE’, ‘KEEL’, ‘KNOT’, ‘LINE’} 6, 7 {‘AFT, ‘ALE’, ‘EEL’, ‘LEE’, ‘TIE’} 1 2 3 4 5 6 7 8 7 AFT HOSES LINE ALE KEEL SAILS EEL KNOT SHEET HEEL LASER STEER HIKE LEE TIE 5 6 2 4 ข้อกำหนด (constraint) 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] 8 1 3

Algorithm ตรวจสอบ Arc Consistency (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; i = 1 j = 2 1 3 5 7 8 2 6 4 D1 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’} D2 = {‘HOSES’, ‘LASER’, ‘SAILS’, ‘SHEET’, STEER’} Constraint 1[3] = 2[1]

Algorithm ตรวจสอบ Arc Consistency (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; i = 2 j = 1 1 3 5 7 8 2 6 4 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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

สรุป Algorithm AC-1 สามารถช่วยค้นหาผลลัพธ์ได้ แต่ประสิทธิภาพยังไม่ดีเนื่องจากการเปลี่ยนแปลงของคู่หนึ่งในกราฟจะมีผล ให้ต้องเริ่มตรวจสอบ arc consistency ใหม่ทั้งหมด (ทุกคู่ของ edge ในกราฟ) ถ้า REVISE(Di, Dj) มีการลดค่าใน Di ก็ควรตรวจสอบเพิ่มแค่คู่ของ (Di, Dm) ไม่จำเป็นต้องตรวจสอบ (Dm, Di) Algorithm ใหม่มีชื่อว่า AC-3 โดยเป็นการลดคู่ตรวจสอบลงจาก 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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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)} 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 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) } 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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

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 Q = {(D3, D8), (D5, D8), (D6, D8) } , (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’} 1 3 5 7 8 2 6 4 ข้อกำหนด (constraint) 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]

ข้อจำกัดของ Algorithm AC-3 ปัญหา Map coloring สามารถใช้ Ac-3 แก้ได้ไหม ? 5 4 3 2 1 1 2 3 4 5 1 3 2 4 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 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 != 3, 1 != 4, 1 != 5, 2 != 3, 3 != 4, 4 != 5

Forward Checking คำนิยาม : หลังจากที่ตัวแปร X ถูกใส่ค่า v ให้ตรวจสอบค่าของตัวแปร Y ที่เชื่อมต่อกับ X และลบค่าในโดเมนของตัวแปร Y ที่ขัดกับค่าของ v วิธีนี้จะเป็นการช่วยตัดค่าข้อมูลในโดเมนออกก่อนทำการค้นหา เพื่อลด ขนาดข้อมูลในการค้นหา ให้ได้ผลลัพธ์ดีขึ้น และจะหยุดการทำต่อเมื่อไม่มีค่าสำหรับตัวแปรที่เหมาะสม

ตัวอย่าง 1 : Forward Checking 3 2 4 5 5 4 3 2 1 1 2 3 4 5 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1

ตัวอย่าง 2 : Forward Checking (1) NT Q WA NW SA V T Constraint Graph

ตัวอย่าง 2 : Forward Checking (2) NT SA Q NW V T WA Q V NT SA NW 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 WA(1) Q(2) V(3) NT(4) SA(5) NW(6) T(7) 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’} D2 = {‘R’, ‘G’, ‘B’} D3 = {‘R’, ‘G’, ‘B’} D4 = {‘R’, ‘G’, ‘B’} D5 = {‘R’, ‘G’, ‘B’} D6 = {‘R’, ‘G’, ‘B’} D7 = {‘R’, ‘G’, ‘B’}

ตัวอย่าง: AC3-FC WA(1) Q(2) V(3) NT(4) SA(5) NW(6) T(7) 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’} D2 = {‘R’, ‘G’, ‘B’} D3 = {‘R’, ‘G’, ‘B’} D4 = {‘R’, ‘G’, ‘B’} D5 = {‘R’, ‘G’, ‘B’} D6 = {‘R’, ‘G’, ‘B’} D7 = {‘R’, ‘G’, ‘B’}

ปรับปรุงให้ Backtracking มีประสิทธิภาพ สามารถที่จะตรวจสอบว่าข้อมูลเหล่านี้ไม่ถูกต้องตามข้อกำหนดก่อนค้นหา ? ค่าตัวแปรไหนที่ควรจะแก้ต่อไป ? ควรจะเรียงลำดับของค่าแบบไหนให้ได้ผลลัพธ์เร็วที่สุด ?

Variable and Value Ordering การเลือกตัวแปรที่จะทำการกำหนดค่าในการค้นหา มีผลเป็นอย่างมากในการทำให้ปัญหา ที่ต้องการแก้ไขถูกแก้ไขเร็วขึ้น วิธีการเลือกตัวแปรที่จะใช้ในการกำหนดค่าที่นิยมใช้อาศัยหลักการของ “First-fail” (จะ ไปสู่จุดหมายได้จะต้องลองไปทางที่มีโอกาสล้มเหลวมากที่สุดก่อน) หรือเรียกว่า Minimum Remaining Value (MRV) Heuristic ซึ่งก็คือ เลือกตัวแปรที่เหลือค่าในโดเมนน้อยที่สุดขึ้นมาทำงานก่อน ในกรณีที่มีตัวแปรที่มีค่าในโดเมนเท่ากัน จะนับ degree heuristic คือเลือกตัวแปรที่ มี constraint มากที่สุดขึ้นมาใช้งานก่อน เมื่อทำการเลือกตัวแปรที่จะทำการค้นหาได้แล้ว ต่อไปก็คือเลือกค่าที่จะให้ตัวแปรนั้นใช้ จะ อาศัยหลักการที่เรียกว่า Least Constraint Value คือเลือกค่าที่ให้กระทบกับเพื่อน บ้านน้อยที่สุด

ตัวอย่าง: AC3-FC (Variable & Value Ordering) WA NT SA Q NW V T WA(1) Q(2) V(3) NT(4) SA(5) NW(6) T(7) 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’} D2 = {‘R’, ‘G’, ‘B’} D3 = {‘R’, ‘G’, ‘B’} D4 = {‘R’, ‘G’, ‘B’} D5 = {‘R’, ‘G’, ‘B’} D6 = {‘R’, ‘G’, ‘B’} D7 = {‘R’, ‘G’, ‘B’}

ปรับปรุงให้ 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 X1 { 1 , 2 , 3 , 4 } X2 { 1 , 2 , 3 , 4 } X3

แบบฝึกหัดทำส่ง แก้ปัญหาการจัดตารางห้องเรียน มีจำนวนวิชาเรียนทั้งหมด 4 วิชา C1, C2, C3, C4 มีรายละเอียดดังนี้ มีจำนวนห้องเรียนทั้งหมด 3 ห้อง R1, R2, R3 มีข้อกำหนดดังต่อไปนี้ แต่ละวิชาจะต้องมีห้องเรียน 1 ห้องใน R1,R2 หรือ R3 R3 เล็กเกิน ไม่สามารถใช้สอนวิชา C3 ได้ R2 และ R3 เล็กเกิน ไม่สามารถสอนวิชา C4 ได้ กำหนดให้ C1-C4 เป็นตัวแปร และ R1-R3 เป็นค่าในโดเมน Class Time C1 8.00 – 10.30 C2 9.00 – 11.30 C3 10.00 - 12.30 C4 11.00 – 13.30 จงเขียนค่าในโดเมนของแต่ละตัวแปรที่ใช้หลักการ node consistency แล้ว เขียนข้อกำหนด(constraint) ให้อยู่ในรูปของตัวแปร เขียน Constraint graph เขียนขั้นตอนการแก้ปัญหา CSP