ในช่วงต้นเกมมีวิธีการที่แตกต่างกันอย่างไร?


15

เราทุกคนรู้ว่ารุกฆาตที่สั้นที่สุดที่เป็นไปได้คือ 4 ชั้น:

  1. f3 e5

  2. g4 Qh5 #

นี่ไม่ใช่คำสั่งย้ายที่เป็นไปได้เท่านั้น ในความเป็นจริงมี 8 ขึ้นอยู่กับว่าสีขาวย้าย f หรือ g จำนำก่อนไม่ว่าเขาจะย้าย f จำนำไป f3 หรือ f4 และว่าสีดำเล่น e6 หรือ e5 แน่นอนว่านี่เป็นเพียงเศษเสี้ยวเล็ก ๆ ของการเคลื่อนไหว 4-ply ที่เป็นไปได้ แต่สิ่งเหล่านี้เป็นสิ่งเดียวที่จบเกม

สิ่งที่ฉันกำลังมองหาคือสำหรับเร่จำนวนน้อยลำดับการเคลื่อนไหวหลายจุดสิ้นสุดในรุกฆาตเทียบกับไม่สิ้นสุดในรุกฆาต นึกคิดสิ่งที่ฉันต้องการคือบางสิ่งตามแนวของ

  • 4 ชั้น: ลำดับ X ที่ไม่ใช่รุกฆาต, 8 คู่หู 4 ชั้น
  • 5 ชั้น: ลำดับ Y ที่ไม่ใช่การรุกฆาต, 8 รุกฆาต 4 ชั้น, N รุกฆาต 5 ชั้น
  • 6 ชั้น: ลำดับ Z ที่ไม่ใช่รุกฆาต, 8 รุกฆาต 4 ชั้น, N รุกฆาต 5 ชั้น, M รุกฆาต 6 ชั้น

และเพื่อให้ลึกที่สุดเท่าที่จะทำได้

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


1
คำถามที่เกี่ยวข้อง (แต่ไม่เหมือนกัน) ซึ่งคุณอาจสนใจ: Chess.stackexchange.com/questions/24359/…
itub

2
ตามบริบทของคำถามของคุณคุณอาจสนใจที่จะรู้ว่าเกมสามารถจบลงด้วยการเล่นซ้ำเนื่องจากการเล่นซ้ำที่ประมาณ 8 ชั้น
DM

1
ฉันไม่คิดว่าข้อมูลที่คุณขอที่นี่เพียงพอที่จะให้ขอบเขตที่ถูกต้องสำหรับความน่าจะเป็นในคำถาม Math.SE คุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างของโครงสร้างเกม (สำหรับตัวอย่างตัวอย่างให้พิจารณาเกมที่มีตัวเลือกที่เป็นไปได้สองทางสำหรับการย้ายครั้งแรก: A และ B หากการย้ายครั้งแรกคือ A จะมีตัวเลือกที่เป็นไปได้ 1 ล้านตัวที่แตกต่างกันสำหรับการย้ายครั้งที่สอง การเลื่อนครั้งที่สองที่เป็นไปได้คือ C ตอนนี้เกมมี 1,000,001 การเคลื่อนไหวสองจังหวะที่เป็นไปได้ แต่ความน่าจะเป็นของผู้เล่นสุ่มที่จบลงด้วยการเล่นตามลำดับ B, C คือ 50%)
Ilmari Karonen

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

คำตอบ:


26

ไม่มีการรุกฆาตจาก 0-3 ชั้น

4 ply: 8 checkmates, 197,281 total nodes
5 ply: 347 checkmates, 4,865,609 total nodes
6 ply: 10,828 checkmates, 119,060,324 total nodes
7 ply: 435,767 checkmates, 3,195,901,860 total nodes
8 ply: 9,852,036 checkmates, 84,998,978,956 total nodes
9 ply: 400,191,963 checkmates, 2,439,530,234,167 total nodes

"รุกฆาต" คือจำนวนของการตรวจสอบการย้ายที่ทำในชั้นสุดท้าย ดังนั้นสำหรับ 5 ชั้นมี 347 ลำดับการตรวจสอบความยาวที่แน่นอน 5

ค่าเหล่านี้มาจาก: https://www.chessprogramming.org/Perft_Results

ขณะนี้ไม่มีข้อมูลรุกฆาตสำหรับ 10 ชั้นขึ้นไปสันนิษฐานเนื่องจากทรัพยากรการคำนวณที่จำเป็น

ในการรับข้อมูลที่เฉพาะเจาะจงมากขึ้น (เช่นตัวบรรทัด) คุณจะต้องเขียนโปรแกรม perft ของคุณเองซึ่งจะบันทึกบรรทัดที่ลงท้ายด้วย checkmate


13

ลำดับของจำนวนเต็มนี้เรียกว่าA079485ในสารานุกรมออนไลน์ของ Integer Sequences (OEIS) และตัวเลขที่มากถึงและรวมถึง 13 ply ซึ่งเป็นที่รู้จักโดยมีการอ้างอิงต่าง ๆ


REFERENCES Homer Simpson, Chess Review, Jan-Feb 1982. ตกลงฉันทำส่วนนั้นขึ้นมา แต่มันคงจะเป็นเรื่องตลก ...
ไมเคิล

OEIS มีทุกอย่างจริงเหรอ?
eyeballfrog

8

ต่อไปนี้เป็นโปรแกรม Python แบบง่าย ๆ ที่ตอบคำถาม แต่ช้าใช้เวลา 40 นาทีในการรัน 5 plies บนแล็ปท็อปของฉัน (และเพิ่มขึ้นอย่างน้อย 30-fold ต่อ ply เพิ่มเติม) สิ่งที่ดีคือมันพิมพ์เกมออกมาถ้าคุณต้องการมัน ฉันสามารถโพสต์ผลลัพธ์ได้ที่นี่ แต่ไม่ต้องการคำตอบแบบยาว 347 บรรทัด ... :-)

import chess
from chess import pgn

def dfs(board, depth):
    global n
    result = board.result(claim_draw=True)
    if result != '*':
        game = pgn.Game.from_board(board)
        print(game.mainline())
    elif depth > 0:
        moves = list(board.legal_moves)
        for move in moves:
            n += 1
            board.push(move)
            dfs(board, depth-1)
            board.pop()

n = 0
try:
    board = chess.Board()
    dfs(board, 4)
except KeyboardInterrupt:
    pass
print(n, 'positions checked')

สำหรับการอ้างอิงในอนาคตคุณสามารถโยนสิ่งต่างๆเช่นผลลัพธ์ที่ pastebin.com เลือกไม่หมดอายุ
Jason C

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

7

คนอันดับต้น ๆ ที่ฉันรู้สำหรับการวิเคราะห์แบบนี้คือFrançois Labelle ซึ่งได้คำนวณตัวเลขจำนวนมากที่เกี่ยวข้องกับหมากรุก (รวมถึงการประเมินอัตราการเติบโตสูงสุดของจำนวนเกมหมากรุกที่เป็นหน้าที่ของชั้น) และโดยเฉพาะอย่างยิ่งได้คำนวณ จำนวน Checkmates ถึงชั้น 13 สำหรับค่าขึ้นไปชั้น 12 ดูรูปในhttp://wismuth.com/chess/chess.html

จากนั้นที่http://wismuth.com/chess/statistics-games.htmlเขาให้ตัวเลขเฉพาะมากถึง 13 ซึ่งมี 346,742,245,764,219 เกมรุกฆาตอย่างเห็นได้ชัด

สำหรับจำนวนเกมทั้งหมดเขาเสนอราคาผลลัพธ์จากผู้อื่นที่เพิ่มขึ้นเป็น 15 (!) แต่ฉันคิดว่าพวกเขาไม่ได้ติดตามเพื่อนร่วมด่าน

จากประเภทที่ 5-13 มีโอกาส 1 ครั้งใน 10,000 ครั้งที่การเคลื่อนไหวจะส่งคู่ครอง แต่ดูเหมือนว่าจะง่ายขึ้นอย่างมากที่จะผสมพันธุ์เป็นสีขาวเมื่อเทียบกับสีดำ:

กราฟของโอกาสและโอกาส

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

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

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