| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # train_all.sh โ ไธ้ฎๅนถ่กๅฏๅจๅ็ป DQN ็ฎๆณๅฏนๆฏๅฎ้ช๏ผtmux ๅค็ชๅฃ๏ผ | |
| # | |
| # ็จๆณ๏ผ | |
| # chmod +x train_all.sh && ./train_all.sh | |
| # | |
| # ไพ่ต๏ผ | |
| # - tmux๏ผbrew install tmux / apt install tmux๏ผ | |
| # - ๅทฒๆฟๆดป็ Python ่ๆ็ฏๅข๏ผๅ ๅซ torch / gymnasium / tensorboard ็ญ๏ผ | |
| # | |
| # ไบง็ฉ๏ผ | |
| # logs/train_<algo>.log โโ ๅ็ฎๆณๅฎๆด่ฎญ็ปๆฅๅฟ | |
| # runs/<algo>_<ts>/ โโ TensorBoard ไบไปถๆไปถ | |
| # results/best_model_<algo>.pth โโ ๅ็ฎๆณๆไผๆ้ | |
| # | |
| # ๆฅ็่ฟๅบฆ๏ผ | |
| # tmux attach -t maze_train # ๅจๅ pane ไน้ด Ctrl+b โ ๆนๅ้ฎๅๆข | |
| # tensorboard --logdir=runs # http://localhost:6006 | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| set -euo pipefail | |
| SESSION="maze_train" | |
| ALGOS=("vanilla" "double" "dueling" "double_dueling") | |
| SCRIPT="src/train.py" | |
| CONFIG="config.yaml" | |
| LOG_DIR="logs" | |
| # โโ ๆฃๆฅไพ่ต โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| command -v tmux >/dev/null 2>&1 || { echo "[ERROR] tmux ๆชๅฎ่ฃ "; exit 1; } | |
| command -v python >/dev/null 2>&1 || { echo "[ERROR] python ๆชๆพๅฐ"; exit 1; } | |
| [[ -f "$SCRIPT" ]] || { echo "[ERROR] ๆพไธๅฐ $SCRIPT๏ผ่ฏทๅจ้กน็ฎๆ น็ฎๅฝๆง่กๆฌ่ๆฌ"; exit 1; } | |
| [[ -f "$CONFIG" ]] || { echo "[ERROR] ๆพไธๅฐ $CONFIG"; exit 1; } | |
| mkdir -p "$LOG_DIR" results runs | |
| # โโ ๆๆญปๅๅๆง session๏ผ้ฟๅ ็ซฏๅฃ/ๆไปถๅฒ็ช๏ผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| tmux kill-session -t "$SESSION" 2>/dev/null || true | |
| # โโ ๅๅปบๆฐ session๏ผๅๅฐ๏ผๆ ้ๅ ๏ผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| tmux new-session -d -s "$SESSION" -x 220 -y 50 | |
| for i in "${!ALGOS[@]}"; do | |
| ALGO="${ALGOS[$i]}" | |
| LOG_FILE="${LOG_DIR}/train_${ALGO}.log" | |
| CMD="python ${SCRIPT} --config ${CONFIG} --algorithm ${ALGO} \ | |
| 2>&1 | tee ${LOG_FILE}; echo '[DONE] ${ALGO} ่ฎญ็ป็ปๆ'; exec bash" | |
| if [[ $i -eq 0 ]]; then | |
| # ็ฌฌไธไธช็ฎๆณๅค็จๅๅง pane๏ผwindow 0๏ผ | |
| tmux send-keys -t "${SESSION}:0" "$CMD" Enter | |
| else | |
| # ๅ็ปญ็ฎๆณๅๅผไธไธชๆฐ window | |
| tmux new-window -t "${SESSION}" | |
| tmux send-keys -t "${SESSION}:${i}" "$CMD" Enter | |
| fi | |
| # ็ปๆฏไธช window ๅๆๆไน็ๅๅญ | |
| tmux rename-window -t "${SESSION}:${i}" "$ALGO" | |
| done | |
| echo "============================================================" | |
| echo " โ ๅทฒๅจ tmux sessionใ${SESSION}ใไธญๅฏๅจ ${#ALGOS[@]} ็ปๅฎ้ช" | |
| echo "" | |
| echo " ๆฅ็่ฟๅบฆ๏ผtmux attach -t ${SESSION}" | |
| echo " ็ชๅฃๅๆข๏ผCtrl+b โ ๆฐๅญ้ฎ๏ผ0~$((${#ALGOS[@]}-1))๏ผ" | |
| echo " ๅ็ฆปไผ่ฏ๏ผCtrl+b d" | |
| echo "" | |
| echo " ๅฎๆถๆฅๅฟ๏ผtail -f logs/train_<algo>.log" | |
| echo " TensorBoard๏ผtensorboard --logdir=runs" | |
| echo "============================================================" | |