ฉันไม่สามารถพูดถึงอัลกอริทึมที่ใช้สำหรับ Deep Blue ได้ แต่ฉันจะพยายามอธิบายการปรับปรุงในการเขียนโปรแกรมหมากรุก ความเร็วคือการปรับปรุงที่ยิ่งใหญ่ที่สุด Deep Blue ใช้คอมพิวเตอร์เฉพาะโปรเซสเซอร์หลายตัวดังนั้นจึงไม่สามารถทำการเปรียบเทียบได้
https://chessprogramming.wikispaces.com/เป็นแหล่งข้อมูลยอดเยี่ยม แต่การสำรวจทำได้ยาก
มี 3 ฟังก์ชั่นหลักที่ปรับแต่งเพื่อปรับปรุงเอ็นจิ้นหมากรุกคือฟังก์ชั่นการประเมินการสร้างการย้ายและการค้นหา
การประเมินเป็นโปรแกรมที่ยากที่สุดเนื่องจากมีข้อยกเว้นมากมายสำหรับกฎ ด้วยพื้นที่ว่างบนฮาร์ดไดรฟ์ที่ถูกลงฟังก์ชั่น eval จะช่วยให้สามารถทำการประเมินข้อยกเว้นเพิ่มเติมได้
การสร้างการเคลื่อนย้ายพร้อมกับการสร้างและถอนการย้ายจะสิ้นเปลืองหน่วยความจำมากเพราะต้องมีการปรับรูปแบบล่วงหน้าหลายครั้ง ฟังก์ชั่นการสร้างที่พบมากที่สุดคือกล่องจดหมาย, bitboard, 0x88, 8x8, บอร์ดขยาย (10x10, 10x12) และอาร์เรย์ / ตารางการย้ายที่กำหนดไว้ล่วงหน้า (* ฉันใช้ตารางการย้ายแบบดัชนี) ความเห็นในปัจจุบันคือว่า bitboards นั้นเร็วกว่าและการใช้ magic bitboards จะเพิ่มความเร็วได้มากถึง 30% ดร. โรเบิร์ตไฮแอทศาสตราจารย์และผู้สร้างเครื่องมือหมากรุก cratfy อ้างว่าไม่มีการเพิ่มความเร็วอย่างมีนัยสำคัญ
ฟังก์ชั่นการค้นหาในช่วงต้นคือฟังก์ชั่นขั้นต่ำสูงสุด โดยพื้นฐานแล้วคุณพยายามเพิ่มคะแนนด้านข้างให้มากที่สุดเพื่อขยับและลดคะแนนของคู่ต่อสู้ Alpha-Beta เป็นการปรับปรุงครั้งแรก พวกเขาลดจำนวนการเคลื่อนไหวที่ถูกค้นหาโดยตารางการขนย้ายค่าการตัดหน้าต่างความทะเยอทะยานและการวิเคราะห์ประวัติศาสตร์ เหล่านี้คือการค้นหาความลึกครั้งแรก นอกจากนี้ยังมีการค้นหาในเชิงลึกที่วนซ้ำซึ่งพยายามค้นหาการเคลื่อนไหวที่ดีที่สุดหวังว่าการค้นหาการเคลื่อนไหวอื่น ๆ จะพิสูจน์ว่าไร้ประโยชน์
หมายเหตุ: ตารางดัชนีของฉัน GNUChess และ Jester ใช้ดัชนีอาร์เรย์เพื่อสร้างการเคลื่อนไหว พวกเขาเริ่มต้นเครื่องยนต์โดยการกรอกอาเรย์ด้วยการเคลื่อนไหวที่เป็นไปได้ ใช้เวลาหกชิ้นและคำนวณการเคลื่อนไหวทางกฎหมายที่มีอยู่ในแต่ละตาราง ดังนั้นแต่ละชิ้นจึงมีอาร์เรย์ [64] [8] ฉันใช้ความคิดนี้และบีบอัดมันเป็นดัชนีสองตัวและตาราง ตารางเก็บค่าซึ่งบอกว่าการเคลื่อนไหว 16 เป็นไปได้หรือไม่ดัชนีหนึ่งเก็บออฟเซ็ตของการย้ายและอีกอันหนึ่งเก็บมาสก์
ชดเชย [] = {-8, -1, 1, 8, -9, -7, 7, 9, -17, -15, -10, -6, -6, 6, 10, 15, 17};
mask [] = {1, 2, 4, 8, 16, 32, 64, 128, 256, ... };
จากนั้นการสร้างตัวเลื่อนแบบเลื่อนก็ง่ายพอ ๆ กับการค้นหาความถูกต้องของมาสก์ในการชดเชยกับตารางการย้าย