Try   HackMD

Linux 核心專題: 井字遊戲模組

執行人: Willsonbo

Reviewed by Terry7Wei7

改進MTCS過程中可以產生圖表,數據化比較實際提升了多少

任務概述

重做第六次作業,彙整其他學員成果,降低核心模組的延遲,並強化整體井字遊戲的效率。

二補數數值範圍

TODO: 重做第六次作業並彙整其他學員的成果

Homework6: MTCS floating point (IEEE 754) -> fixed point arithmetics; Linux kernel module, computing on two CPUs; CMWQ; 重現 vax-r 的實驗,指出可改進之處;

注意術語:

  • schedule 是「排程」,而非「調度」
  • thread 是「執行緒」,而非「線程」

務必使用本課程教材規範的術語。

  • - 前往 GitHub,搜索並 fork simrupt 專案。
    Simrupt 是由 simulate 和 interrupt 兩個單字組合而來的專案名稱,其主要目的是模擬 IRQ(Interrupt Request)事件,用於展示和研究 Linux 核心中的一些機制。具體來說,simrupt 的應用涵蓋了以下幾個方面:
  1. IRQ(Interrupt Request): 模擬硬件中斷請求,幫助開發者理解和測試中斷處理邏輯。
  2. SoftIRQ: 處理軟件中斷,通常用於處理需要快速完成的任務,但可以延遲到稍後處理。
  3. Tasklet: 一種基於 softirq 的低優先級的機制,適用於需要在中斷上下文之外執行的任務。
  4. Workqueue: 用於將任務推遲到內核執行緒 中執行,適合於更長時間的任務處理。

繼續讀->tttsimrupt/githubsimrupt講解

將你的投入彙整到本頁面。

  • - 將第三次作業中的 AI 程式碼整合進專案中,其中一個演算法必須是 Monte Carlo Tree Search (MCTS),另一個可參考第三次作業或 jserv/ttt 專案中的 ELO rating system。

TODO: 如何改進 MTCS?

避免張貼 ChatGPT 的輸出,課程教材已提供若干第一手材料,務必優先閱讀。

注意術語:

  • schedule 是「排程」,而非「調度」
  • thread 是「執行緒」,而非「線程」

務必使用本課程教材規範的術語。

用定點數實作蒙地卡羅樹狀演算法(MTCS)

蒙地卡羅演算法由四個步驟組成分別是

  • Selection:選擇要進行展開下一層的葉節點。
  • Expansion:展開下一層。
  • Rollout (playout, simulation):估這個節點的 value
  • Backpropagation:向上更新。

其中蒙地卡羅演算法會在 selection 節點選擇上使用 UCT 公式選擇節點,故嘗試利用定點數實作UCT,然而利用定點數會遇到的問題是要如何選擇小數表可以被定義的最小位數,並選擇對應的 scalling factors

注意書寫規範。

因此我們必須知道原本UCT所會計算到的最小位數,故我嘗試輸出uct_score每次迴圈的值將其紀錄並透過圖片輸出,以觀察其數值分佈

TODO: 改進棋盤更新並降低核心模組的延遲

參考資料
https://liaowc.github.io/blog/mcts-monte-carlo-tree-search/