跳到主要內容
ByteArena 使用文檔

從編寫、測試到競技,快速上手 ByteArena。

瞭解如何創建智能體、理解判題限制、調試對局並提升排名。

平臺概覽

ByteArena 是一個面向回合制棋類智能體的編程競技平臺。你提交源碼後,判題系統會在隔離環境中運行它,並記錄結果、資源使用、日誌、回放和排名。

1. 選擇

選擇遊戲,閱讀規則和 API。

2. 編寫

實現並提交你的決策邏輯。

3. 優化

分析回放,挑戰更多對手。

快速開始

  1. 打開“全部遊戲”並選擇一個競技場。
  2. 閱讀遊戲規則、輸入狀態、合法着法格式和示例。
  3. 選擇支持的語言,實現必需的決策函數。
  4. 提交源碼,等待編譯和校驗。
  5. 發起對局,然後查看狀態、日誌和回放。

重要提示

程序必須嚴格輸出當前遊戲要求的着法格式。stdout 中的額外文本可能導致原本正確的着法被判爲無效。

對局如何運行

每個回合中,runner 會使用當前遊戲狀態啓動你的智能體,等待一次決策,驗證輸出,執行着法,然後推進遊戲。除非遊戲 API 明確保證,否則不要假設內存中的變量會跨回合保留。

  1. 讀取當前回合的棋盤和元數據。
  2. 在配置的限制內計算一個合法動作。
  3. 僅將規定的決策寫入 stdout。
  4. 可選的調試信息請寫入 stderr。

時間與內存限制

限制適用於一次決策步驟,而不是整場對局。具體數值顯示在各遊戲頁面上,並會在創建判題任務時固定。

限制適用範圍超限結果
時間(ms)單個回合超出時間限制(TLE),通常判負
內存(KB)單個回合超出內存限制(MLE),通常判負
輸出單個回合輸出可能被截斷或拒絕

排行榜中的“平均用時”和“平均內存”使用相同單位:毫秒和千字節。

調試

從回放開始

  1. 打開已完成的對局,選擇“回放”。
  2. 逐步查看,找到棋盤第一次與預期不符的位置。
  3. 檢查日誌中的運行錯誤、無效着法、TLE 或 MLE 信息。

將調試輸出寫入 stderr

判題系統從 stdout 解析着法。調試輸出應寫入 stderr,以免破壞着法格式。

import sys
print("board=", board, file=sys.stderr)

C/C++: fprintf(stderr, ...) / std::cerr   Java: System.err.println(...)

排行榜與排名

排名指標使用你與每位對手的最新一組非錦標賽雙回合對局。每組通常包含一局 A 方和一局 B 方,用於降低先手偏差。

計入統計的對局

  • 與每位對手的最新有效非錦標賽對局組會被計入。
  • 錦標賽對局不影響普通排行榜。
  • 即使更新的對局組取代舊數據用於排名計算,歷史對局仍會保留。

指標與排序

勝率會綜合你實際作爲兩方時的勝率。排名相同時,依次比較更高勝率、更低平均用時和更低平均內存。如果最近完成的對局尚未出現,請點擊“刷新”。

遊戲得分

每場完成的對局都會保存雙方得分。得分含義取決於遊戲;排行榜得分是聚合排名指標,不是所有遊戲通用的原始分。

遊戲得分含義
TicTacToe勝者 1 分,負者 0 分;和局爲 0-0。
Trap Gomoku最長連續棋子數;5 表示達成勝利連線。
XGame終局棋盤上完整 X 圖案的數量。
Tessella基於喫子的得分;分數越高表示消滅的對方棋子越多。
入門教程

井字棋:構建一個不敗的智能體

A 方使用 X 並先行,B 方使用 O。目標是連成三子。可以先實現隨機合法着法,再逐步加入更強的規則。

  1. 如果當前可以立即獲勝,執行該着法。
  2. 否則,阻止對手下一步立即獲勝。
  3. 創造雙重威脅,或阻止對手的雙重威脅。
  4. 優先選擇中心,然後是對角、空角,最後是邊格。

如需完美對弈,可以在較小的遊戲樹上實現 minimax:勝局給正分,負局給負分,和局爲零。

def choose_move(board, legal_moves):
    move = find_winning_move(board, legal_moves, me)
    if move is not None:
        return move
    move = find_winning_move(board, legal_moves, opponent)
    if move is not None:
        return move
    return best_positional_move(board, legal_moves)

常見問題

爲什麼智能體會在回合之間“忘記”數據?

每次決策可能在新進程中運行。請從提供的棋盤和元數據重建狀態,不要依賴全局變量。

“未輸出決策”和“無效着法”是什麼意思?

你的程序可能沒有輸出所需決策、輸出格式錯誤、選擇了已佔用或越界的位置,或將調試文本混入了 stdout。

爲什麼排行榜上沒有我?

你需要在該遊戲中至少完成一場可計入的非錦標賽對局。如果對局剛結束,請稍等片刻後點擊“刷新”。