Home    Previous page ขั้นตอนวิธีประเภทศึกษาสำนึก Heuristic Next page
Heuristic
ในบางครั้งการทราบว่าปัญหาที่เราเผชิญอยู่นั้นยากในการแก้ เราอาจต้องการหาเพียงวิธีการที่สามารถหาผลเฉลยหรือคำตอบ ที่ยอมรับได้ โดยอาจไม่ใช่วิธีที่ดีที่สุดจริง หรือแม้แต่คำตอบอาจไม่ตอบคำถามที่ต้องการอย่างแท้จริง
คำว่า Heuristic algorithm หรือ Heuristic ในที่นี้เราหมายถึง วิธีการหรือขั้นตอนวิธีที่สามารถหาคำตอบที่ดี หรืออาจได้ คำตอบที่เหมาะสมที่สุดในกรณีที่เราโชคดี หรือในบางครั้งอาจไม่ได้คำตอบที่ดี หรือเหมาะที่สุด ในกรณีที่โชคร้าย Heuristic อาจมีทั้งแบบ deterministic หรือ probabilistic

การระบายสีของกราฟ
กำหนดกราฟไม่มีทิศทาง G = (V, E) เราต้องการระบายสีจุดยอดของ V โดยบังคับว่าสำหรับจุดยอดที่ติดกัน (adjacent) ต้องไม่มีสีที่เหมือนกัน ปัญหาคือเราต้องการทราบจำนวนสีน้อยที่สุดที่ต้องการใช้ ค่าต่ำสุดนี้เราเรียกว่า chromatic number ของกราฟ ตัวอย่างเช่นกราฟข้างล่าง G เราสามารถใช้สองสีในการระบายได้ แต่ H เราต้องใช้สามสี


เราพบว่าปัญหาในการหาจำนวนสีในการระบายที่น้อยที่สุดเป็นปัญหา NP-hard
วิธีหนึ่งที่เรานำมาใช้ในการแก้ปัญหานี้คือ การใช้ greedy heuristic
Color_greedy(G)
ข้อมูลเข้า G แทนกราฟไม่มีทิศทาง
ข้อมูลออก การระบายสีและจำนวนสีที่ใช้
1. Set k = 0
2. while all vertices in G have not been colored 
3.    Choose the new color k+1
4    For each v in G
5        If v is not a neighbours of last painted k-1
6            then painted v using k
7        endif
8    endfor
9 endwhile
นั่นคือ เราเริ่มจากเลือกสีแรก แล้วทำการระบายให้กับจุดยอดให้มากที่สุด เท่าที่จะมากได้ แล้วเราค่อยทำการเลือกสีใหม่ แล้วทำซ้ำอย่างนี้ไปเรื่อย ๆ เราจะได้ว่าวิธีการนี้บางครั้งให้คำตอบที่ดีที่สุด บางครั้งไม่ใช่ ตัวอย่างเช่น
ถ้าเราระบายสีโดยใช้ Color_greedy(G) ตามลำดับของจุดยอด 1, 2, 3, 4, 5 เราจะได้คำตอบที่ดีที่สุดคือ 2 สี แต่ถ้าเราระบายสีตามลำดับของจุดยอด 1, 5, 2, 3, 4 เราจะได้คำตอบที่ต่างออกไปและไม่เป็นคำตอบที่ดีที่สุด
เราสามารถแสดงได้ว่า สำหรับกราฟ G ใด ๆ จะมีลำดับของจุดยอดที่ทำให้ขั้นตอนวิธี Color_greedy หาคำตอบที่ดีที่สุดได้ ดังนั้น เราอาจหวังได้ว่าสำหรับกราฟรูปใด ๆ เราอาจโชคดีสามารถหาคำตอบที่ดีที่สุดตามที่ต้องการได้
  • การพิสูจน์ เราสมมติว่า G เป็นกราฟซึ่งต้องการจำนวนสีที่น้อยที่สุดคือ k
  • สมมติว่าเรามีผู้วิเศษคนหนึ่งบอกว่า วิธีการระบายสีโดยใช้ k สีให้เราทราบ
  • เราสามารถทราบลำดับของจุดยอดที่จะทำให้ขั้นตอนวิธี Color_greedy ได้คำตอบที่ดีที่สุด
  • เราทำการเลือกสีแรก แล้วนำจุดยอดทั้งหมดที่ใช้สีแรก มากำหนดเป็นลำดับแรก เลือกสีที่สองและกำหนดจุดยอดให้เรียงต่อไป อย่างนี้เรื่อย ๆ เราจะได้ลำดับของจุดยอดที่ต้องการ
  • ถ้าเราใช้ขั้นตอนวิธี Color_greedy กับลำดับนี้เราจะพบว่า Color_greedy จะให้จำนวนสีเท่ากับ k ตามที่ต้องการ
แต่เราก็พบว่า เราสามารถสร้างกราฟ ที่ทำให้ขั้นตอนวิธีนี้แย่ที่สุดเท่าที่เราต้องการ นั่นคือ เราสามารถสร้างกราฟที่ใช้สีเพียง k สี แต่ถ้าเราใช้ขั้นตอนวิธี Color_greedy จะใช้ c สี โดยที่ c/k จะมีขนาดใหญ่เท่าไหร่ก็ได้
  • วิธีการพิสูจน์นี้คือ เราสามารถสร้างกราฟ G ที่มีจุดยอด 2 n โดยที่เราให้จุดยอดเหล่านั้นเรียงลำดับ 1, 2, 3, ..., 2 n
  • เราจะสร้างด้านเชื่อมระหว่าง จุดยอดที่เป็นเลขคี่กับทุกจุดยอดที่เป็นเลขคู่ และทำลักษณะนี้ในทำนองเดียวกับจุดยอดที่เป็นเลขคู่ เราจะได้ bipartite กราฟ ซึ่งจุดยอดสามารถแบ่งออกเป็นสองเซต N1 กับ N2
  • กราฟนี้สามารถระบาย โดยใช้เพียงสองสีเท่านั้น
  • สำหรับขั้นตอนวิธี Color_greedy เมื่อใช้กับลำดับ 1, 2, 3, ..., 2 n เราพบว่า เราต้องใช้ สีทั้งหมด n สี
  • นั่นคือเราสามารถ สร้างกราฟที่ทำให้จำนวนสีที่ต้องใช้มีจำนวนมาก ตามที่ต้องการได้

การหาเส้นทางเดินของคนขายของ (Traveling Salesperson)
กำหนดเมือง 1, 2, ..., n เมืองที่เราทราบระยะทางระหว่างสองเมืองใด ๆ คนขายของต้องการเดินทางจากเมืองหนึ่งไปอีก เมืองหนึ่งจนครบทุกเมือง เพียงครั้งเดียว แล้วย้อนกลับมาเมืองเริ่มต้น โดยให้มีระยะทางในการเดินทั้งหมดสั้นที่สุด กำหนดว่าระยะทางทั้งหมดไม่เป็น จำนวนลบ
เราพบว่าปัญหานี้เป็นปัญหา NP-hard และขั้นตอนวิธีที่หาผลเฉลยนั้นยังไม่สามารถใช้ได้กับปัญหาที่มี n ขนาดใหญ่ ถ้าเรากำหนดให้แต่ละเมืองเขียนแทนด้วยจุดยอด และระยะทางระหว่างเมืองคือน้ำหนักของด้านระหว่างจุดยอดนั้น เราพบว่าปัญหา TSP คือการหา Hamiltonian cycle ที่มีผลรวมของน้ำหนักต่ำที่สุด
ตัวอย่างเช่น เรามีเมืองหกเมืองที่มีระยะดังนี้

From To 2 3 4 5 6
1 3 10 11 7 25
2 8 12 9 26
3 9 4 20
4 5 15
5 18
เราได้เส้นทางเดินที่ต่ำที่สุดคือ 58 โดยเดินทางจาก 1 ไป 2 ไป 3 ไป 6 ไป 4 ไป 5 ไป 1
วิธี Greedy heuristic เราอาจกำหนดโดยให้เริ่มจากจุดยอดใด ๆ โดยในการเลือกเมืองถัดไป เราเลือกระยะทางที่สั้นที่สุดในขณะนั้นไปยังเมือง ที่ยังไม่เคยไปมาก่อน
ถ้าเราใช้วิธีนี้กับตัวอย่างข้างต้นโดยเริ่มที่ 1 เราจะได้ทัวร์คือ 1, 2, 3, 5, 4, 6, 1 ซึ่งใช้ระยะทางทั้งหมด 60 ไม่ใช่คำตอบที่ดีที่สุด แต่ค่าที่ได้ก็ไม่ห่างจากค่าที่ดีที่สุดมากนัก

Home | Previous | Next


© Copyright by กรุง สินอภิรมย์สราญ