การสุ่มในการเล่นของเครื่องยนต์


11

ถ้าฉันให้เอนจิ้นสองตัวเล่นกันซึ่งมีสีเดียวกันเกมเดียวกันจะส่งผลทุกครั้งหรือไม่ ถ้าไม่การสุ่มเล่นในเครื่องยนต์มาจากไหน (ละเลยการเปิดหนังสือซึ่งถ้าฉันไม่ผิดหนังสือสามารถบอกให้เครื่องยนต์เลือกระหว่างการเคลื่อนไหวสองแบบโดยการสุ่มเนื่องจากมันดีพอ ๆ กัน)

ฉันสมมติว่ามีการสุ่มเพราะในการแข่งขัน Alphazero กับ Stockfish เราไม่ได้เกมเดียวกันเกิดขึ้นหลายครั้งติดต่อกัน อย่างไรก็ตามฉันไม่เข้าใจว่าทำไม วิธีที่น่าจะเป็นไปได้ที่จะทำเช่นนี้คือการทำให้เครื่องยนต์เล่น subpar move ในบางครั้งซึ่งดูเหมือน seppuku


AlphaZero เรียนรู้จากการเล่นดังนั้นหลังจากแต่ละเกมมีการอัปเดตโมเดลแล้ว
ferit

การเพิ่มค่าสุ่มเล็ก ๆ ในการประเมินผลเป็นวิธีหนึ่ง ฉันคิดว่า stockfish กำลังทำเช่นนั้น
hoacin

คำตอบ:


8

เกี่ยวกับ AlphaZero VS Stockfish แข่งขันคำถามนี้ได้รับการคุ้มครองที่นี่โดยSmallChess

AlphaZero กัน (ซึ่งมีผู้เชี่ยวชาญมอนเต้คาร์โล1ประจำในการสำรวจแนวของเล่น) ซึ่งทำให้ไม่เป็นอุปสรรค -โดยการก่อสร้างสำหรับปกติหมากรุก heuristic ตามเครื่องมือเช่น Stockfish และอื่น ๆ (แม้ว่าจะมีคนอื่น เอ็นจิ้นที่มีกิจวัตรประจำวันที่ใช้ MC, AFAIK Rybka เคยมีคุณสมบัติดังกล่าว) แหล่งที่มาของการสุ่มนั้นเป็นผลมาจากแง่มุมทางเทคนิคในการนำไปใช้มากกว่าการสุ่มโดยเจตนาที่จะนำเสนออัลกอริทึมในการตัดสินใจของเครื่องยนต์ บทคัดย่อพูดเหตุผลหนึ่งที่เป็นความจริงที่ว่าเครื่องยนต์ไม่ได้ทำงานในลักษณะที่ต่อเนื่องอย่างหมดจด (ดำเนินงานหนึ่งหลังจากงานอื่น ๆ ) แต่เพื่อให้เครื่องยนต์มีประสิทธิภาพมากขึ้นพวกเขาทำการค้นหาแบบขนานในกิ่งก้านของต้นไม้ที่เคลื่อนไหวได้ พวกเขาทำผ่านสิ่งที่เรียกว่ามัลติเธรด (หรือ- การประมวลผลแต่ที่แตกต่างกันเล็กน้อย) ดังนั้นเธรดจำนวนมากของ CPU จึงพร้อมกันดำเนินการการดำเนินการเพื่อค้นหาแผนผัง (และแคชการประเมินตำแหน่งที่เข้าชม) ดังนั้นให้นึกถึงแต่ละเธรดที่ได้รับมอบหมายแผนผังย่อย ปัญหาของการใช้งานประเภทนี้คือการดำเนินการโดยรวมของเธรดจะขึ้นอยู่กับเงื่อนไขทุกประเภท (เวลารอ, การสลับ RAM, ... ) ดังนั้นในที่สุดการเปลี่ยนแปลงหลักอาจถูกเลือกโดยไม่ได้รับอนุญาตอื่น ๆ ทั้งหมด กระทู้ที่จะเสร็จสิ้นการค้นหาของพวกเขา

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


1 : ร่วมกับความจริงที่ว่าผ่านการฝึกอบรมเพิ่มเติม (ตัวอย่างเช่นการเล่นด้วยตนเอง) เครือข่ายประสาทของมันยังคงพัฒนา (ปรับพารามิเตอร์ใหม่) หรือถ้าคุณจะฟังก์ชั่นการประเมินผลจะไม่มีคำจำกัดความคงที่และแน่นอน )

2 : แม้ในขณะที่คุณพูดในระดับเปิดด้วยสมุดเปิดบางครั้งก็มีการตัดสินใจแบบสุ่มโดยจงใจของเครื่องยนต์เป็นรูปแบบที่จะเลือก ในทำนองเดียวกันด้านนอกของช่วงเปิดอาจมีช่วงเวลาที่หลายรูปแบบมีการประเมินใกล้เคียงกัน (ภายในความละเอียดที่เลือกสำหรับ Eval) จากนั้นขึ้นอยู่กับการออกแบบมันอาจจะจบลงด้วยการเลือกหนึ่งแบบสุ่ม สุดท้ายที่ระดับการตั้งค่าเครื่องยนต์คุณจะต้องระมัดระวังเช่นกันเช่นความลึกของการค้นหาและไตร่ตรองเวลาที่เลือกสำหรับแต่ละเครื่องยนต์


6

ขอบคุณ @Phonon ที่ครอบคลุมคำตอบก่อนหน้าของฉันในรายละเอียด ฉันต้องการที่จะเพิ่มจุดหนึ่งที่มากขึ้น: ควบคุมเวลา

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

ลองตัวอย่าง ใช้ stockfish ในสถานีของคุณ ประเภท:

ไปเวลาหยุดพัก 20000

คำสั่งนี้สั่งให้เอ็นจิ้นทำการเคลื่อนที่หลังจาก 20 วินาที ผลลัพธ์ของฉัน:

info depth 23 seldepth 32 multipv 1 score cp 6 upperbound nodes 24325860 nps 1216171 hashfull 999 tbhits 0 time 20002 pv g1f3 d7d5
bestmove g1f3 ponder d7d5

การเคลื่อนไหวคือ 1.Nf3 ต่อไปฉันฆ่า Stockfish ของฉันเริ่มใหม่ อีกครั้ง 20 วินาที ฉันได้:

info depth 23 seldepth 32 multipv 1 score cp 20 nodes 26185280 nps 1309067 hashfull 999 tbhits 0 time 20003 pv d2d4
bestmove d2d4 ponder g8f6

มันคือ 1.d4! ตำแหน่งเดียวกันทั้งการค้นหา 20 วินาที!

คุณเห็นไหม? ทั้ง 20 วินาทีสำหรับการย้าย แต่เนื่องจากความผันผวนในระบบปฏิบัติการ Linux การรันครั้งที่สองของฉันทำให้การค้นหาลึกขึ้น (26185280> 24325860)

โปรดทราบว่าการทดลองเล็ก ๆ น้อย ๆ นี้ไม่ได้เกิดขึ้นแบบมัลติเธรด (จำนวนเธรด = 1) การทำมัลติเธรดจะทำให้สิ่งต่าง ๆ ไม่เป็นอุปสรรคมากยิ่งขึ้น

Stockfish ได้รับหนึ่งนาทีต่อการเคลื่อนไหวในการแข่งขัน Google AlphaZero จำนวนเธรดคือ 64 การตัดสินใจของ Stockfish ในการแข่งขันอาจไม่สามารถกำหนดได้


แท้จริงแล้วเป็นตัวอย่างและหมายเหตุที่ให้คำแนะนำ
user929304

ดี! ไอเดียเจ๋งที่จะโชว์เคสเคส 1 เธรด
Ellie

ขอบคุณสำหรับคำตอบ. คำถามติดตามโง่: อะไรคือโหนด (ในบริบทของเครื่องมือเล่นหมากรุก)?
เสน่ห์

@ user3727079 โหนดเป็นจุด (ตำแหน่งที่ไม่ซ้ำกัน) ในเกมต้นไม้ ตัวอย่างเช่นหากโหนดรูทเป็นตำแหน่งเริ่มต้นจะมีโหนดย่อย 20 โหนดซึ่งเป็นตำแหน่งทางกฎหมายที่ไม่ซ้ำกัน 20 อันดับซึ่งอยู่ห่างจากรูทหนึ่งครั้ง
Ellie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.