วิธีที่แม่นยำในการประเมินตำแหน่งหมากรุกคืออะไร?


13

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

ในแง่อื่น ๆ เมื่อกำหนดค่ากระดานหมากรุกของคุณคุณจะตัดสินได้อย่างไรว่ามันเป็นไปเพื่อประโยชน์ของคุณและด้วยความมั่นใจในระดับใด

ตัวอย่างเช่น:

  • หากคุณเป็นเจ้าของศูนย์นี้ค่อนข้างดี
  • หากคุณมีชิ้นส่วนมากกว่าฝ่ายตรงข้ามของคุณมันค่อนข้างดี
  • หากคุณทำราชินีของคุณหายนี่จะไม่เป็นผลดี
  • หากคุณมีเบี้ยที่ใกล้เคียงกับการได้รับการเลื่อนตำแหน่งเป็นสิ่งที่ดี
  • ...

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

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


ฉันคิดว่าคำถามนี้จะทำได้ดีใน StackOverflow มีคำถามมากมายเกี่ยวกับ Chess AI อยู่แล้ว
xaisoft

3
ฉันคิดว่าจะโพสต์ไว้ที่ SO ก่อนหน้านี้ แต่ฉันเกือบจะแน่ใจว่ามันจะถูกปิดเพราะไม่สร้างสรรค์หรือไม่ใช่คำถามจริงที่นั่น บางทีถ้าฉันต้องการความสำคัญกับโค้ดมากขึ้น แต่ฉันคิดว่าสำหรับฟังก์ชั่นการประเมินผลนั้นต้องการความรู้เกี่ยวกับหมากรุกไม่มากเกี่ยวกับโค้ดหรืออัลกอริทึม
Charles Menguy

แม่นยำแค่ไหน วิธีที่แม่นยำเพียงอย่างเดียวคือคุณชนะหรือแพ้หรือเสมอกัน
edwina oliver

คำตอบ:


9

นี่เป็นจุดเริ่มต้นที่ดี การเปรียบเทียบวัสดุเป็นสิ่งสำคัญ (และง่าย) จากนั้นคุณสามารถปรับแต่งเพื่อพิจารณาแง่มุมของตำแหน่งเช่นอันดับเปิด / ไฟล์ / เส้นทแยงมุมโครงสร้างจำนำ ฯลฯ

https://www.chessprogramming.org/Evaluation


5

เมื่อเพิ่มคำตอบโดย @Eve Freeman ฉันขอแนะนำให้ค้นหาวิธีที่เครื่องมือคอมพิวเตอร์ที่ดีที่สุดในโลก Stockfish ประเมินตำแหน่งที่ได้รับ เนื่องจากซอร์สโค้ดเปิดอยู่คุณสามารถทำได้ฟรี ผมคิดว่าไฟล์ที่มีฟังก์ชั่นการประเมินผลที่คุณกำลังมองหาคือคนนี้


5

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

  • การพัฒนาไกลออกไป (ใกล้ชิดกับฝั่งตรงข้าม) ชิ้นส่วนจะดีกว่า
  • จำนำใกล้เคียงกับการส่งเสริมการขายเป็นสิ่งที่ดี
  • คะแนนของ Kings จะแยกจากกันตามระยะของเกม (เปิด, กลาง, จบเกม)
  • หากผู้เล่นมีบิชอปทั้งคู่นั่นจะได้รับโบนัส
  • หากผู้เล่นได้รับ castled รับโบนัส
  • เบี้ยที่แยกได้ (เบี้ยไม่มีอะไรอยู่รอบตัว) ไม่ดี
  • การจำนำสองเท่า (การจำนำสองไฟล์ในไฟล์เดียวกันโดยไม่มีช่องว่าง) ไม่ดี
  • การจำนำทั้ง 8 นั้นไม่จำเป็นต้องมีสิ่งที่ดีและถูกลงโทษ (พวกเขาเกะกะกระดานและเข้าไปขวางทาง)
  • ลองดูฟังก์ชั่นการประเมินที่ยอดเยี่ยมนี้ซึ่งใช้ด้วย
  • อธิการที่จำนำได้มากขึ้นในสี่เหลี่ยมสีเดียวกันกับอธิการถูกลงโทษ (พวกเขาไม่เก่งในสถานการณ์ที่แออัด)
  • ยังไม่ได้ใช้งาน แต่มีการวางแผน: อัศวินได้รับโบนัสในสถานการณ์ที่แออัดมากขึ้น

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

  • ปริมาณของวัสดุบนกระดาน (ทันทีที่ชิ้นส่วนใดถูกฆ่ามันจะทำเครื่องหมายว่าเป็นเกมที่ไม่ได้อยู่ในช่องเปิด)
  • จำนวนการเคลื่อนไหว (การเคลื่อนไหวน้อยกว่า 6 ครั้งเต็มคือการเปิดไม่ว่าอะไรจะเกิดขึ้น)
  • การเคลื่อนไหวของราชินี (ถ้าทั้งสองราชินีถูกย้ายทำเครื่องหมายว่าเกมเป็นเกมกึ่งกลาง)

คำตอบนี้อาจยาวเกินกำหนดและไม่อยู่ในหัวข้อ แต่ฉันหวังว่าจะเป็นประโยชน์


4

น่าแปลกที่มันกลับกลายเป็นว่าเครื่องยนต์ Minimax จะเล่นได้ดีพอสมควรเมื่อฟังก์ชั่นการประเมินผลเป็นแบบสุ่ม ; สิ่งนี้เรียกว่าเอฟเฟกต์บีลอ์และผลลัพธ์จากหลักการที่ว่าตำแหน่งที่ให้ทางเลือกแก่คุณมากขึ้น วิธีหนึ่งที่เหมาะสมในการสร้างการประเมินแบบสุ่มอย่างต่อเนื่องและมีประสิทธิภาพคือการสร้างแฮช Zobrist สำหรับตำแหน่ง (ใช้สัมประสิทธิ์ที่เลือกแบบสุ่มในช่วงเริ่มต้นของเกม) และได้รับการประเมินแบบสุ่มโดยตรงจากแฮช

ในตอนท้ายตรงข้ามของขนาดที่ AlphaZero และลีลาการดำเนินการประเมินผลที่มีความซับซ้อนอย่างยิ่งของแต่ละตำแหน่งการสืบค้นโดยใช้โครงข่ายประสาทเทียมขนาดใหญ่ มันเป็นไปไม่ได้ที่จะอธิบายในแง่ของมนุษย์ว่าเครือข่ายนี้ใช้งานได้อย่างมีประสิทธิภาพ แต่ก็มีประสิทธิภาพมากกว่าฟังก์ชั่นการประเมินของ Stockfish อย่างปฏิเสธไม่ได้ รายงานการวิจัยของ AlphaZero ระบุว่าวิธีนี้ใช้ได้ผลดีที่สุดกับการค้นหาต้นไม้แบบ Monte-Carlo แทนที่จะเป็น Minimax

หากในมืออื่น ๆ ที่คุณต้องการในการพัฒนาเครื่องมือการวิเคราะห์เพื่อช่วยให้ผู้เล่นของมนุษย์หรือการแสดงความเห็นเข้าใจความแตกต่างของตำแหน่งก็อาจจะคุ้มค่าที่จะใช้ฟังก์ชั่นการประเมินผลโดยใช้แบบเดิมที่จัดตั้งขึ้นค่าวัสดุและทฤษฎีตำแหน่ง ตัวอย่างที่ดีคือการกำหนดโดยInside Rebelของ Ed Schröder บันทึกคุณสมบัติการออกแบบที่สำคัญของเอ็นจิ้นที่ได้รับการยอมรับอย่างดีซึ่งใช้ในคอมพิวเตอร์หมากรุกหลายเครื่องของ Mephisto คุณอาจต้องการใช้การเรียนรู้ของเครื่องในระดับหนึ่งเพื่อกำหนดความสำคัญสัมพัทธ์ของแต่ละองค์ประกอบของฟังก์ชันการประเมินของคุณและแบ่งองค์ประกอบเหล่านี้ออกเป็นรายบุคคลเพื่อนำเสนอใน GUI


3

ฉันคิดว่านักเขียนโปรแกรมหมากรุกมักจะไม่พึ่งพาความรู้ของผู้เล่นหมากรุกที่แข็งแกร่งเมื่อออกแบบฟังก์ชันการประเมินของพวกเขา แต่ลองใช้องค์ประกอบต่าง ๆ แทนแล้วทดสอบพวกเขาในเกมกับเครื่องมืออื่น ๆ และตัดสินใจว่าจะเก็บอะไรไว้ Larry Kaufman พูดถึงความยุติธรรมในมุมมองของเขาเกี่ยวกับความเข้าใจของมนุษย์ แต่ดูเหมือนว่าทั้ง Rajlich และ Dailey จะมุ่งเน้นผลลัพธ์เป็นอย่างมากและไม่ได้นำความคิดของ Kaufman มาใช้

บทความหนึ่งที่ฉันคิดว่าน่าสนใจคือ Zach Wegner เปรียบเทียบฟังก์ชั่นการประเมินผลของ Rybka และ Fruit หนึ่งในพื้นที่ที่ Rybka อาจเป็นตัวแทนก้าวไปข้างหน้าก็คือการรวมตัวกันของตารางความไม่สมดุลของวัสดุขึ้นอยู่กับการรวมกันของชิ้นส่วนที่เฉพาะเจาะจง ลิตรเขียนบทความเกี่ยวกับเรื่องนี้เช่นกัน

http://www.top-5000.nl/ZW_Rybka_Fruit.pdf http://danheisman.home.comcast.net/~danheisman/Articles/evaluation_of_material_imbalance.htm


0

ลิงค์นี้เป็นจุดเริ่มต้นที่ดีที่สุดของ IMHO ฉันใช้สิ่งนี้เป็นจุดเริ่มต้นสำหรับโปรแกรมหมากรุกของฉันเองและพบว่าเข้าใจง่ายและมีประโยชน์เช่นกัน

https://chessprogramming.wikispaces.com/Simplified+evaluation+function


2
คุณช่วยขยายเนื้อหาของลิงค์ให้สั้นลงได้ไหม?
Pablo S. Ocal

ไซต์ Wikispaces หมดอายุแล้ว ลิงก์ที่ถูกต้องไปยังบ้านใหม่: chessprogramming.org/Simplified_Evaluation_Function
Chromatix

0

สรุปวิธีการมาตรฐานในการปรับพารามิเตอร์ของโปรแกรมหมากรุกคือ:

  1. กำหนดพารามิเตอร์
  2. กำหนดพารามิเตอร์ที่ระบุ (เริ่มต้น) ค่า
  3. เรียกใช้เครื่องยนต์เพื่อดูว่ามันทำงานอย่างไร
  4. ปรับแต่งค่าพารามิเตอร์เพื่อพยายามปรับปรุงประสิทธิภาพ

จากนั้นทำซ้ำขั้นตอนที่ 3 และ 4 จนกว่าคุณจะบรรลุเป้าหมาย

วิธีการปกติในการทำเช่นนี้คือการตั้งค่าห้องปฏิบัติการที่เครื่องยนต์เผชิญหน้าในการแข่งขันเครื่องยนต์ มีการใช้เกมหลายเกมโดยที่เอ็นจิ้นเล่นทั้งสองสี ทัวร์นาเมนต์หลักที่น่าสนใจเกี่ยวข้องกับการใช้งานเครื่องยนต์พร้อมชุดค่าพารามิเตอร์ A กับเครื่องยนต์เดียวกันกับชุดค่าพารามิเตอร์ B

อย่างที่คุณสามารถเดาได้ผลลัพธ์จากวิธีการนี้ขึ้นอยู่กับ:

  • พารามิเตอร์ที่เลือก
  • วิธีระบุพารามิเตอร์
  • วิธีที่ค่าพารามิเตอร์เปลี่ยนแปลงตลอดการทดสอบ
  • เครื่องยนต์ทำงานอย่างไร (ความลึกเร่ จำกัด เวลา จำกัด ความไว ฯลฯ )

วิธีนี้ยังสิ้นเปลืองมากของเวลา

ล่าสุด (และวิธีการที่เป็นนวัตกรรม) ได้รับการพัฒนาในปี 2010 โดยนักวิจัยที่ใช้เทคนิค Algorithm ทางพันธุกรรมเพื่อ) ระบุพารามิเตอร์และ b) ปรับค่าพารามิเตอร์ ผู้ตรวจสอบใช้เครื่องยนต์เป็นอันดับแรกโดยเริ่มจากค่าพารามิเตอร์ที่กำหนดกับชุดของเกมปรมาจารย์เพื่อดูว่าสามารถเลือก "การเคลื่อนไหวที่ดีที่สุด" ได้อย่างมีประสิทธิภาพหรือไม่ "ย้ายที่ดีที่สุด" ถูกกำหนดตามการย้ายที่ปรมาจารย์ทำ * ทุกครั้งที่มีการบันทึก จากนั้นพยายามตั้งค่าพารามิเตอร์อื่นและประสิทธิภาพสัมพัทธ์เทียบกับการรันก่อนหน้านี้ถูกกำหนด

จากนั้นจึงทดลองวิธีการเชิงโปรแกรมในการรวมค่าพารามิเตอร์โดยใช้หลักการทางพันธุกรรมของขั้นตอนการเอาชีวิตรอดของ "fittest" ที่นี่ "fittest" หมายถึงสิ่งที่สร้างผลลัพธ์ที่ใกล้เคียงที่สุดในอุดมคติ (มันก็เกิดขึ้นเป็นปุนในเทคนิคทางสถิติของ "กำลังสองน้อยที่สุด" การถดถอยเทคนิคที่ใช้ในการตัดสินคุณภาพของการประมาณค่า)

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

ในโครงการวิจัยนี้มีการใช้พารามิเตอร์ 36 ตัวรวมถึงค่าวัสดุทั้งหมดของชิ้นส่วนและเกณฑ์การประเมินเชิงกลยุทธ์ที่ใช้กันทั่วไปหลายอย่างเช่นเบี้ยย้อนหลังสี่เหลี่ยมที่อ่อนแอคู่บิชอปและอื่น ๆ อย่างไรก็ตามนักวิจัยได้เพิ่มพารามิเตอร์ใหม่บางอย่างเช่น "ความกดดันจากกษัตริย์", "ความคล่องตัว" สำหรับชิ้นส่วนแต่ละประเภท, โกงไฟล์ที่อยู่ติดกับกษัตริย์, โกงในไฟล์กึ่งเปิด, ROOK โจมตีกษัตริย์ใน - / b- / g- / h-file, แยกระหว่างการจำนำที่ผ่านมาและการปกป้องกษัตริย์และอื่น ๆ

น่าเสียดายที่นักวิจัยไม่ได้อธิบายรายละเอียดเกี่ยวกับวิธีที่พวกเขาคิดค่าพารามิเตอร์นี้และพารามิเตอร์ทางเลือกที่พวกเขาอาจทดสอบและปฏิเสธ มันจะสมเหตุสมผลที่จะสมมติว่าพวกเขาเริ่มต้นด้วยชุดที่มีขนาดใหญ่กว่ามากและตัดสินใจ (ผ่านการทดลองและข้อผิดพลาด) ซึ่งอันใดที่มีผลต่อประสิทธิภาพการทำงานมากที่สุด

ถ้าเสียงเหมือนมันอาจจะมีประโยชน์แล้วคุณจะพบการวิจัยที่นี่

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

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

จุดนั้นดรนันน์ยกให้เห็นว่าวิธีการเริ่มต้นของนักวิจัยในการตั้งค่าพารามิเตอร์เครื่องยนต์โดยพวกเขาจะต้องย้ายแกรนด์มาสเตอร์เลียนแบบอาจจะมีข้อบกพร่องเพราะการเล่นของมนุษย์เป็นข้อบกพร่อง ในความเป็นจริงมันเป็นที่ยอมรับกันดีว่าเครื่องยนต์แล้วเล่นได้ดีกว่ามนุษย์

ดังนั้นบางทีอาจจะเป็นวิธีการที่ดีในการตั้งค่าพารามิเตอร์ที่เริ่มต้นจะตรงกับเครื่องยนต์ใหม่กับเครื่องยนต์ที่มีอยู่เหนือกว่า


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