อัลกอริทึม: ค่าใช้จ่ายด้านคอมพิวเตอร์และการคิดตาม Heuristics

อัลกอริทึม: ค่าใช้จ่ายด้านคอมพิวเตอร์และการติดตามพฤติกรรมตามตัวอักษร ->

บ่อยครั้งคุณพบว่า heuristic approach หนึ่งที่อาศัย เกี่ยวกับการค้นพบตัวเองและสร้างผลลัพธ์ที่มีประโยชน์พอสมควร (ไม่จำเป็นต้องเหมาะสม แต่ดีพอ) เป็นวิธีที่คุณต้องการแก้ปัญหาอย่างแท้จริง การเรียกใช้อัลกอริทึมเพื่อดำเนินการบางอย่างที่จำเป็นสำหรับคุณจะช่วยประหยัดเวลาและความพยายามเนื่องจากคุณสามารถสร้างอัลกอริทึมที่ดูรูปแบบได้ดีกว่ามนุษย์

ดังนั้นการค้นพบตัวเองเป็นกระบวนการที่ช่วยให้อัลกอริทึมสามารถแสดงเส้นทางที่เป็นประโยชน์สำหรับโซลูชัน (แต่คุณต้องอาศัยสัญชาตญาณของมนุษย์และเข้าใจว่าโซลูชันเหมาะสมหรือไม่) ส่วนต่อไปนี้อธิบายถึงเทคนิคที่คุณสามารถใช้ในการคำนวณต้นทุนของอัลกอริทึมโดยใช้ heuristics เพื่อหาวิธีการค้นพบประโยชน์ที่แท้จริงของโซลูชันใดก็ได้

พื้นที่ปัญหา

พื้นที่ปัญหา

คือสภาพแวดล้อมที่มีการค้นหาวิธีแก้ไขปัญหา ชุดของรัฐและผู้ประกอบการที่ใช้ในการเปลี่ยนแปลงรัฐเหล่านี้เป็นพื้นที่ปัญหา ตัวอย่างเช่นพิจารณาเกมไพ่ที่มีแปดกระเบื้องในกรอบ 3 x-3 กระเบื้องแต่ละชิ้นจะแสดงส่วนหนึ่งส่วนของภาพและกระเบื้องเริ่มต้นในบางลำดับแบบสุ่มเพื่อให้ภาพมีการ scrambled เป้าหมายคือการย้ายกระเบื้องแต่ละครั้งเพื่อวางไพ่ทั้งหมดตามลำดับที่ถูกต้องและเปิดเผยภาพ

การรวมกันของรัฐเริ่มต้น, กระเบื้องแบบสุ่มและสถานะเป้าหมาย - ไพ่ในลำดับที่เฉพาะเจาะจง - คือ

ปัญหาอินสแตนซ์

คุณสามารถแสดงกราฟฟิกปริศนาได้โดยใช้ กราฟพื้นที่ปัญหา แต่ละโหนดของกราฟพื้นที่ปัญหาจะแสดงสถานะ (แปดกระเบื้องในตำแหน่งหนึ่ง ๆ ) ขอบแสดงการดำเนินการเช่นเพื่อย้ายหมายเลขกระเบื้องแปดขึ้น เมื่อคุณย้ายกระเบื้องแปดขึ้นภาพจะเปลี่ยนไป - จะย้ายไปอยู่ในสถานะอื่น

การชนะเกมโดยการย้ายจากรัฐเริ่มต้นสู่สถานะเป้าหมายไม่ได้เป็นการพิจารณาเท่านั้น ในการแก้ปัญหาเกมได้อย่างมีประสิทธิภาพคุณต้องดำเนินการอย่างน้อยที่สุดในการย้ายซึ่งหมายถึงการใช้ตัวดำเนินการที่น้อยที่สุด จำนวนขั้นต่ำที่ใช้ในการแก้ปริศนาคือความลึกของปัญหา

คุณต้องพิจารณาปัจจัยต่างๆเมื่อแสดงปัญหาเป็นช่องว่าง ตัวอย่างเช่นคุณต้องพิจารณาจำนวนโหนดสูงสุดที่จะพอดีกับหน่วยความจำซึ่งแสดงถึงความซับซ้อนของพื้นที่

เมื่อคุณไม่สามารถใส่โหนดทั้งหมดในหน่วยความจำได้ในครั้งเดียวเครื่องคอมพิวเตอร์จะต้องจัดเก็บโหนดบางส่วนไว้ในตำแหน่งที่ตั้งอื่น ๆ เช่นฮาร์ดไดรฟ์ซึ่งสามารถชะลอขั้นตอนการทำงานได้อย่างมากคุณต้องพิจารณาความ ความซับซ้อนของเวลา ซึ่งเป็นจำนวนโหนดที่สร้างขึ้นเพื่อแก้ไขปัญหา นอกจากนี้คุณควรคำนึงถึงปัจจัย branching factor ซึ่งเป็นจำนวนเฉลี่ยของโหนดที่สร้างขึ้นในกราฟพื้นที่ปัญหาเพื่อแก้ปัญหา การสุ่มและได้รับพรจากโชค การแก้ปัญหาการค้นหาด้วยเทคนิคการใช้กำลังเดรัจฉานเป็นไปได้ ข้อดีของวิธีนี้คือคุณไม่จำเป็นต้องมีความรู้เกี่ยวกับโดเมนใด ๆ เพื่อใช้อัลกอริทึมเหล่านี้ อัลกอริทึมแบบ brute-force มีแนวโน้มที่จะใช้วิธีที่ง่ายที่สุดในการแก้ปัญหา ข้อเสียคือวิธีการแบบเดียรัจฉานทำงานได้ดีสำหรับจำนวนโหนดเท่านั้น นี่คือบางส่วนของขั้นตอนวิธีการค้นหา brute-force ทั่วไป:

การค้นหาแบบกว้าง ๆ :

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

  • การค้นหาความชัดลึก: เทคนิคนี้เริ่มต้นที่โหนดรากและสำรวจชุดโหนดย่อยที่เชื่อมต่อกันจนกว่าจะถึงโหนดใบ ดำเนินการสาขาโดยสาขาจนกว่าจะพบทางออก ข้อเสียของอัลกอริทึมนี้คือไม่สามารถตรวจสอบโหนดที่ซ้ำกันได้ซึ่งหมายความว่าอาจข้ามเส้นทางโหนดเดียวกันมากกว่าหนึ่งครั้ง ในความเป็นจริงอัลกอริทึมนี้อาจไม่พบทางออกเลยซึ่งหมายความว่าคุณต้องกำหนดจุดตัดเพื่อไม่ให้เกิดอัลกอริธึมจากการค้นหาแบบอนันต์ ข้อดีของวิธีนี้ก็คือประสิทธิภาพของหน่วยความจำ
  • การค้นหาแบบสองทิศทาง: เทคนิคนี้ค้นหาพร้อมกันจากโหนดรากและโหนดปลายทางจนกระทั่งทั้งสองเส้นทางการค้นหาตรงกลาง ข้อได้เปรียบของแนวทางนี้ก็คือเวลาที่มีประสิทธิภาพเพราะพบว่าโซลูชันนี้เร็วกว่าโซลูชันอื่น ๆ ของ Brute-Force นอกจากนี้ยังใช้หน่วยความจำได้อย่างมีประสิทธิภาพกว่าวิธีอื่น ๆ และมักจะหาทางออก ข้อเสียเปรียบหลักคือความซับซ้อนของการใช้งานแปลเป็นวัฏจักรการพัฒนาที่ยาวขึ้น
  • การใช้ heuristic และค่าใช้จ่าย สำหรับบางคนคำว่า

heuristic

ก็ฟังดูซับซ้อน มันจะง่ายเพียงแค่บอกว่าอัลกอริธึมทำให้เดาได้จากการศึกษาแล้วลองอีกครั้งเมื่อมันล้มเหลว แตกต่างจากวิธี brute-force, algorithm heuristic เรียนรู้ พวกเขายังใช้ฟังก์ชันต้นทุนเพื่อสร้างทางเลือกที่ดีกว่า ดังนั้นอัลกอริทึมฮิวริสติกมีความซับซ้อนมากขึ้น แต่ก็มีข้อได้เปรียบในการแก้ปัญหาที่ซับซ้อน เช่นเดียวกับอัลกอริธึมแบบ brute-force มีขั้นตอนวิธีการแก้ปัญหาแบบฮิวริสติกจำนวนมากและแต่ละชุดมีข้อดีข้อเสียและความต้องการพิเศษ รายการต่อไปนี้อธิบายถึงขั้นตอนวิธีการค้นพบที่พบได้ทั่วไปไม่กี่ขั้นตอน: การค้นหาพฤติกรรมบริสุทธิ์: อัลกอริทึมจะขยายโหนดตามลำดับค่าใช้จ่ายจะมีสองรายการ รายการที่ปิดมีโหนดที่ได้สำรวจไว้แล้ว รายการเปิดประกอบด้วยโหนดที่ต้องสำรวจ ในขั้นตอนแต่ละครั้งอัลกอริทึมจะขยายโหนดที่มีต้นทุนต่ำที่สุด โหนดย่อยทั้งหมดจะอยู่ในรายการที่ถูกปิดและคำนวณค่าใช้จ่ายโหนดย่อยของแต่ละโหนด อัลกอริทึมจะส่งโหนดย่อยที่มีต้นทุนต่ำกลับไปที่รายการเปิดและลบโหนดย่อยด้วยค่าใช้จ่ายสูง ดังนั้นอัลกอริทึมจะทำการค้นหาโซลูชันโดยใช้ค่าใช้จ่ายที่ชาญฉลาด

  • การค้นหา A *: อัลกอริทึมจะติดตามค่าโหนดเมื่อสำรวจโดยใช้สมการดังนี้:
  • f ( n ) = g n ) + h ( n ) โดยที่ n คือตัวระบุโหนด
    • g (
    • n ) คือค่าใช้จ่ายในการเข้าถึงโหนดจนถึงปัจจุบัน h (
    • n ) คือค่าใช้จ่ายโดยประมาณที่จะบรรลุเป้าหมายจากโหนด f (
    • n ) คือค่าใช้จ่ายโดยประมาณของเส้นทางจาก n ไปจนถึงเป้าหมาย แนวคิดคือการค้นหาเส้นทางที่มีแนวโน้มมากที่สุดก่อนและหลีกเลี่ยงเส้นทางที่มีราคาแพง การค้นหาที่ดีที่สุดครั้งแรกที่โลภ:

อัลกอริทึมเลือกเส้นทางที่ใกล้เคียงกับเป้าหมายโดยใช้สมการดังนี้:

  • f ( n ) = h < ( n ) อัลกอริธึมเฉพาะนี้สามารถหาคำตอบได้อย่างรวดเร็ว แต่ยังสามารถติดค้างอยู่ในลูปได้ดังนั้นคนจำนวนมากจึงไม่คิดว่าวิธีที่ดีที่สุดในการหาโซลูชัน