從編寫、測試到競技,快速上手 ByteArena。
瞭解如何創建智能體、理解判題限制、調試對局並提升排名。
平臺概覽
ByteArena 是一個面向回合制棋類智能體的編程競技平臺。你提交源碼後,判題系統會在隔離環境中運行它,並記錄結果、資源使用、日誌、回放和排名。
1. 選擇
選擇遊戲,閱讀規則和 API。
2. 編寫
實現並提交你的決策邏輯。
3. 優化
分析回放,挑戰更多對手。
快速開始
- 打開“全部遊戲”並選擇一個競技場。
- 閱讀遊戲規則、輸入狀態、合法着法格式和示例。
- 選擇支持的語言,實現必需的決策函數。
- 提交源碼,等待編譯和校驗。
- 發起對局,然後查看狀態、日誌和回放。
重要提示
程序必須嚴格輸出當前遊戲要求的着法格式。stdout 中的額外文本可能導致原本正確的着法被判爲無效。
對局如何運行
每個回合中,runner 會使用當前遊戲狀態啓動你的智能體,等待一次決策,驗證輸出,執行着法,然後推進遊戲。除非遊戲 API 明確保證,否則不要假設內存中的變量會跨回合保留。
- 讀取當前回合的棋盤和元數據。
- 在配置的限制內計算一個合法動作。
- 僅將規定的決策寫入 stdout。
- 可選的調試信息請寫入 stderr。
時間與內存限制
限制適用於一次決策步驟,而不是整場對局。具體數值顯示在各遊戲頁面上,並會在創建判題任務時固定。
| 限制 | 適用範圍 | 超限結果 |
|---|---|---|
| 時間(ms) | 單個回合 | 超出時間限制(TLE),通常判負 |
| 內存(KB) | 單個回合 | 超出內存限制(MLE),通常判負 |
| 輸出 | 單個回合 | 輸出可能被截斷或拒絕 |
排行榜中的“平均用時”和“平均內存”使用相同單位:毫秒和千字節。
調試
從回放開始
- 打開已完成的對局,選擇“回放”。
- 逐步查看,找到棋盤第一次與預期不符的位置。
- 檢查日誌中的運行錯誤、無效着法、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。目標是連成三子。可以先實現隨機合法着法,再逐步加入更強的規則。
- 如果當前可以立即獲勝,執行該着法。
- 否則,阻止對手下一步立即獲勝。
- 創造雙重威脅,或阻止對手的雙重威脅。
- 優先選擇中心,然後是對角、空角,最後是邊格。
如需完美對弈,可以在較小的遊戲樹上實現 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。
爲什麼排行榜上沒有我?
你需要在該遊戲中至少完成一場可計入的非錦標賽對局。如果對局剛結束,請稍等片刻後點擊“刷新”。