พื้นที่เก็บข้อมูลนี้มีการใช้งานกลไกหมากรุกโดยใช้ Minimax การตัดแต่ง Alpha-Beta และอัลกอริธึม การค้นหา Quiescence สมุดบันทึก Jupyter ภายใน Docker Container ใช้สำหรับการเข้ารหัส Jupyter Notebook ทั้งหมดมีจำหน่ายในรูปแบบอิมเมจนักเทียบท่าด้วย
ตรวจสอบเอกสารโครงการเพื่อดูการวิเคราะห์โดยละเอียด
docker pull codewithnk/chess-engine-using-python:latest
docker run -p 8888:8888 -v $( pwd ) codewithnk/chess-engine-using-python:latest
แก่นแท้ของการเล่นหมากรุกใน minmax โดยปกติ Minmax จะเชื่อมโยงชิ้นส่วนสีดำเข้ากับ MAX และชิ้นส่วนสีขาวจะเชื่อมโยงเข้ากับ MIN และจะประเมินจากมุมมองสีขาวเสมอ
อัลกอริธึม Minmax เป็นอัลกอริธึมการค้นหาฝ่ายตรงข้ามในทฤษฎีเกม มันใช้แผนผังเกมและรวมถึงผู้เล่นสองคน MIN และ MAX ผู้เล่นทั้งสองพยายามทำให้การกระทำของผู้อื่นเป็นโมฆะ Max พยายามทำให้ผลลัพธ์สูงสุด ในขณะที่ MIN พยายามย่อผลลัพธ์ให้เล็กสุด ผู้เล่นทั้งสองเล่นสลับกัน ภายใต้สมมติฐานว่าทั้งคู่เล่นได้อย่างเหมาะสมที่สุด การเล่นที่เหมาะสมที่สุดหมายถึงผู้เล่นทั้งสองคนกำลังเล่นตามกฎ กล่าวคือ MIN กำลังลดผลลัพธ์ให้เหลือน้อยที่สุด และ MAX กำลังเพิ่มผลลัพธ์ให้สูงสุด
อัลกอริธึม minmax ใช้แนวทาง Depth First Search เพื่อค้นหาผลลัพธ์ นอกจากนี้ยังใช้การย้อนรอยและการเรียกซ้ำอีกด้วย อัลกอริทึมจะสำรวจจนถึงโหนดเทอร์มินัล จากนั้นจะย้อนรอยในขณะที่เปรียบเทียบค่าลูกทั้งหมด มันจะเลือกค่าต่ำสุดหรือสูงสุดตามตาของใคร จากนั้นจะเผยแพร่ค่ากลับไปยังพาเรนต์ ใช้ฟังก์ชันการประเมินแบบคงที่เพื่อกำหนดค่าที่โหนดแต่ละโหนด มันใช้ประโยชน์จากเกม Zero-Sum
Ches Engine โดยใช้ Minmax
Minmax ใช้ Depth First Search (DFS) บน Game Tree ดังนั้นความซับซ้อนของเวลาของอัลกอริทึม minmax คือ O(b**m) โดยที่ b คือปัจจัยการแตกแขนงของแผนผังเกม และ m คือความลึกสูงสุดของแผนผัง
ความซับซ้อนของพื้นที่ของอัลกอริธึม minmax ก็คล้ายคลึงกับ DFS ซึ่งก็คือ O(bm) โดยที่ b คือปัจจัยการแตกแขนงของแผนผังเกม และ m คือความลึกสูงสุดของแผนผัง
อัลกอริธึม Minmax เสร็จสมบูรณ์ มันจะพบวิธีแก้ปัญหาอย่างแน่นอน ถ้ามี ในแผนผังการค้นหาที่มีขอบเขตจำกัด
อัลกอริธึม Minmax จะเหมาะสมที่สุดหากทั้งสองฝ่ายเล่นได้อย่างเหมาะสมที่สุด
อัลกอริธึม minmax สามารถปรับให้เหมาะสมได้โดยการตัดกิ่งไม่กี่สาขา กิ่งที่ตัดแต่งแล้วเป็นกิ่งที่ไม่ส่งผลต่อผลลัพธ์ มันจะปรับปรุงความซับซ้อนของเวลา minmax เวอร์ชันนี้เรียกว่า minmax พร้อมการตัดแต่งอัลฟ่าเบต้า มันถูกเรียกว่าเป็นอัลกอริทึมอัลฟาเบต้า
ในการตัดแต่งกิ่ง Alpha-Beta มีสองค่าคือ Alpha และ Beta ต่อไปนี้เป็นจุดที่ควรพิจารณาเกี่ยวกับอัลฟ่าและเบต้า:
ในขณะที่การย้อนรอยเฉพาะค่าโหนดเท่านั้นที่จะถูกส่งผ่านไปยังพาเรนต์ ไม่ใช่ค่าอัลฟ่าและเบต้า
เงื่อนไขสำหรับการตัดแต่งกิ่งอัลฟ่าเบต้า:
α >= β
ประสิทธิผลของอัลกอริธึมอัลฟ่า-เบต้านั้นขึ้นอยู่กับลำดับการเคลื่อนที่เป็นอย่างมาก มันมีบทบาทสำคัญในความซับซ้อนของเวลาและพื้นที่
ในบางกรณี ไม่มีการตัดโหนดหรือแผนผังย่อยออกจากแผนผังเกม ในกรณีนี้ การเคลื่อนไหวที่ดีที่สุดจะเกิดขึ้นในแผนผังย่อยทางขวาของ Game Tree ซึ่งจะส่งผลให้ความซับซ้อนของเวลาเพิ่มขึ้น
ในกรณีนี้ จำนวนสูงสุดของโหนดและแผนผังย่อยจะถูกตัดออก การเคลื่อนไหวที่ดีที่สุดเกิดขึ้นในทรีย่อยด้านซ้าย จะช่วยลดความซับซ้อนของเวลาและพื้นที่
Chess Engine ที่ใช้ Alpha-Beta Pruning
อัลฟ่าเบต้าอัลกอริธึม ยังใช้ Depth First Search (DFS) บน Game Tree อีกด้วย
อัลกอริธึมอัลฟ่า-เบต้าเสร็จสมบูรณ์ มันจะพบวิธีแก้ปัญหาอย่างแน่นอน ถ้ามี ในแผนผังการค้นหาที่มีขอบเขตจำกัด
อัลกอริธึมอัลฟ่า-เบต้าจะเหมาะสมที่สุดหากทั้งสองฝ่ายเล่นได้อย่างเหมาะสมที่สุด
Quiescence Search เป็นการปรับเปลี่ยนที่อยู่ด้านบนของการตัดแต่งอัลฟ่าเบต้าด้วยค่าต่ำสุด-สูงสุด Quiscence ความหมายคือ ความเงียบ การค้นหานี้จะประเมินเฉพาะการเคลื่อนไหวที่เงียบๆ เท่านั้น กล่าวอีกนัยหนึ่ง หลังจากความลึกระดับหนึ่ง ระบบจะใช้เฉพาะการเคลื่อนไหวแบบจับเพื่อคำนวณการเคลื่อนไหวถัดไป การค้นหาความสงบสามารถหลีกเลี่ยงเอฟเฟกต์ขอบฟ้าได้
เอฟเฟ็กต์ขอบฟ้าเกิดขึ้นเมื่อเราค้นหาเพียงความลึกระดับหนึ่งเท่านั้น แต่อาจเกิดขึ้นได้ว่าหากเรามองลึกลงไปอีกระดับหนึ่ง การเคลื่อนที่ก็อาจได้คะแนนน้อยลง การค้นหาความสงบจะใช้เพียงการเคลื่อนไหวเพื่อจับภาพเพื่อป้องกันสิ่งนี้ การค้นหาแบบสงบยังช่วยลดปัจจัยการแตกแขนงในระดับต่างๆ ส่งผลให้อัลกอริธึมรวดเร็ว
อัลกอริธึมการค้นหาแบบ Quiescence ยังใช้ Depth First Search (DFS) บน Game Tree อีกด้วย
อัลกอริธึมการค้นหา Quiescence เสร็จสมบูรณ์ มันจะพบวิธีแก้ปัญหาอย่างแน่นอน ถ้ามี ในแผนผังการค้นหาที่มีขอบเขตจำกัด
อัลกอริธึมการค้นหาแบบเงียบจะเหมาะสมที่สุดหากทั้งสองฝ่ายเล่นได้อย่างเหมาะสมที่สุด