Skip to content

Commit a42cdbc

Browse files
committed
benchmark: create running scripts for benchmarking
1 parent 90f01ab commit a42cdbc

File tree

283 files changed

+8764
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

283 files changed

+8764
-1
lines changed

benchmarks/Box2D/LunarLander-v3/learning_curves.pdf renamed to benchmarks/Box2D/LunarLander-v3/learning_curves_LunarLander-v3.pdf

15.5 KB
Binary file not shown.

benchmarks/Box2D/LunarLander-v3/plot_LunarLander.py renamed to benchmarks/Box2D/LunarLander-v3/plot_LunarLander-v3.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def main():
5959
plt.xlabel("Step")
6060
plt.ylabel("Average Return")
6161
plt.tight_layout()
62-
plt.savefig("learning_curves.pdf", dpi=200)
62+
plt.savefig("learning_curves_LunarLander-v3.pdf", dpi=200)
6363
# plt.show()
6464

6565

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
# Run all benchmark scripts under Box2D/LunarLander-v3.
5+
# This script assumes the directory layout:
6+
# benchmarks/Box2D/LunarLander-v3/{iql,qmix,vdn}/run_*_LunarLander-v3.sh
7+
8+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9+
ROOT_DIR="${SCRIPT_DIR}"
10+
11+
# List the per-algorithm scripts you want to run (in order).
12+
SCRIPTS=(
13+
"${ROOT_DIR}/a2c/run_a2c_LunarLander-v3.sh"
14+
"${ROOT_DIR}/c51/run_c51_LunarLander-v3.sh"
15+
"${ROOT_DIR}/double_dqn/run_ddqn_LunarLander-v3.sh"
16+
"${ROOT_DIR}/dqn/run_dqn_LunarLander-v3.sh"
17+
"${ROOT_DIR}/drqn/run_drqn_LunarLander-v3.sh"
18+
"${ROOT_DIR}/dueling_dqn/run_dueldqn_LunarLander-v3.sh"
19+
"${ROOT_DIR}/noisy_dqn/run_noisydqn_LunarLander-v3.sh"
20+
"${ROOT_DIR}/perdqn/run_perdqn_LunarLander-v3.sh"
21+
"${ROOT_DIR}/pg/run_pg_LunarLander-v3.sh"
22+
"${ROOT_DIR}/ppg/run_ppg_LunarLander-v3.sh"
23+
"${ROOT_DIR}/ppo/run_ppo_LunarLander-v3.sh"
24+
"${ROOT_DIR}/qrdqn/run_qrdqn_LunarLander-v3.sh"
25+
"${ROOT_DIR}/sac/run_sac_LunarLander-v3.sh"
26+
)
27+
28+
29+
START_ALL=$(date +%s)
30+
echo "============================================================"
31+
echo "[Benchmark SUITE START] Box2D / LunarLander-v3"
32+
echo " Time: $(date '+%Y-%m-%d %H:%M:%S')"
33+
echo "============================================================"
34+
35+
for s in "${SCRIPTS[@]}"; do
36+
if [ ! -f "$s" ]; then
37+
echo "[ERROR] missing script: $s" >&2
38+
exit 2
39+
fi
40+
if [ ! -x "$s" ]; then
41+
# Allow running even if executable bit is not set.
42+
chmod +x "$s" || true
43+
fi
44+
45+
echo ""
46+
echo "------------------------------------------------------------"
47+
echo "[RUN] $s"
48+
echo " Time: $(date '+%Y-%m-%d %H:%M:%S')"
49+
echo "------------------------------------------------------------"
50+
51+
bash "$s"
52+
53+
done
54+
55+
END_ALL=$(date +%s)
56+
ELAPSED=$((END_ALL - START_ALL))
57+
58+
echo ""
59+
echo "============================================================"
60+
echo "[Benchmark SUITE END] Box2D / LunarLander-v3"
61+
echo " Time: $(date '+%Y-%m-%d %H:%M:%S')"
62+
echo " Elapse: ${ELAPSED}s"
63+
echo "============================================================"
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import os
2+
import glob
3+
import pandas as pd
4+
import seaborn as sns
5+
import matplotlib.pyplot as plt
6+
from typing import Optional
7+
8+
sns.set(style="darkgrid")
9+
10+
algorithm_legend = {
11+
'iddpg': 'IDDPG',
12+
'iql': 'IQL',
13+
'maddpg': 'MADDPG',
14+
'mappo': 'MAPPO',
15+
'masac': 'MASAC',
16+
'matd3': 'MATD3',
17+
'qmix': 'QMIX',
18+
'vdac': 'VDAC',
19+
'vdn': 'VDN',
20+
'wqmix': 'WQMIX'
21+
}
22+
23+
24+
def load_algo_curves(
25+
algo_dir: Optional[str] = None,
26+
algo_name: Optional[str] = None
27+
) -> pd.DataFrame:
28+
all_dfs = []
29+
csv_files = glob.glob(os.path.join(algo_dir, "results", "seed_*", "learning_curve.csv"))
30+
31+
for seed_id, csv_path in enumerate(csv_files):
32+
df = pd.read_csv(csv_path)
33+
34+
df = df.iloc[:, :2]
35+
df.columns = ["step", "avg_return"]
36+
37+
df["algorithm"] = algo_name
38+
df["seed"] = seed_id
39+
all_dfs.append(df)
40+
41+
return pd.concat(all_dfs, ignore_index=True)
42+
43+
44+
def main():
45+
root = os.getcwd()
46+
47+
dfs = []
48+
for algo in ["a2c", "dqn", "ppo"]:
49+
dfs.append(load_algo_curves(os.path.join(root, algo), algorithm_legend[algo]))
50+
51+
data = pd.concat(dfs, ignore_index=True)
52+
53+
plt.figure(figsize=(8, 5))
54+
55+
sns.lineplot(
56+
data=data,
57+
x="step",
58+
y="avg_return",
59+
hue="algorithm",
60+
estimator="mean",
61+
errorbar="sd", # mean ± std
62+
linewidth=2,
63+
)
64+
65+
plt.title("simple_spread_v3")
66+
plt.xlabel("Step")
67+
plt.ylabel("Average Return")
68+
plt.tight_layout()
69+
plt.savefig("learning_curves_simple_spread_v3.pdf", dpi=200)
70+
# plt.show()
71+
72+
73+
if __name__ == "__main__":
74+
main()
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
6+
PROJECT_ROOT="${SCRIPT_DIR}/../../../"
7+
PYTHON=python
8+
9+
ALGO="a2c"
10+
ENV="MuJoCo"
11+
ENV_ID="Ant-v5"
12+
CONFIG_PATH="${SCRIPT_DIR}/${ALGO}_${ENV_ID}.yaml"
13+
14+
OUT_ROOT="${SCRIPT_DIR}/results"
15+
16+
17+
for SEED in 1 2 3 4 5; do
18+
WORKDIR="${OUT_ROOT}/seed_${SEED}"
19+
mkdir -p "${WORKDIR}"
20+
21+
echo "========== [Benchmark START] seed=${SEED} =========="
22+
23+
START_TIME=$(date +%s)
24+
if ${PYTHON} "${PROJECT_ROOT}/train.py" \
25+
--algo "${ALGO}" \
26+
--env "${ENV}" \
27+
--env-id "${ENV_ID}" \
28+
--seed "${SEED}" \
29+
--config-path "${CONFIG_PATH}"\
30+
--result-path "${OUT_ROOT}/seed_${SEED}"; then
31+
END_TIME=$(date +%s)
32+
ELAPSED=$((END_TIME - START_TIME))
33+
STATUS="SUCCESS"
34+
else
35+
STATUS="FAILED"
36+
fi
37+
38+
echo "========== [Benchmark END] seed=${SEED} | status=${STATUS} | time=${ELAPSED}s =========="
39+
echo
40+
done
File renamed without changes.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
6+
PROJECT_ROOT="${SCRIPT_DIR}/../../../"
7+
PYTHON=python
8+
9+
ALGO="ddpg"
10+
ENV="MuJoCo"
11+
ENV_ID="Ant-v5"
12+
CONFIG_PATH="${SCRIPT_DIR}/${ALGO}_${ENV_ID}.yaml"
13+
14+
OUT_ROOT="${SCRIPT_DIR}/results"
15+
16+
17+
for SEED in 1 2 3 4 5; do
18+
WORKDIR="${OUT_ROOT}/seed_${SEED}"
19+
mkdir -p "${WORKDIR}"
20+
21+
echo "========== [Benchmark START] seed=${SEED} =========="
22+
23+
START_TIME=$(date +%s)
24+
if ${PYTHON} "${PROJECT_ROOT}/train.py" \
25+
--algo "${ALGO}" \
26+
--env "${ENV}" \
27+
--env-id "${ENV_ID}" \
28+
--seed "${SEED}" \
29+
--config-path "${CONFIG_PATH}"\
30+
--result-path "${OUT_ROOT}/seed_${SEED}"; then
31+
END_TIME=$(date +%s)
32+
ELAPSED=$((END_TIME - START_TIME))
33+
STATUS="SUCCESS"
34+
else
35+
STATUS="FAILED"
36+
fi
37+
38+
echo "========== [Benchmark END] seed=${SEED} | status=${STATUS} | time=${ELAPSED}s =========="
39+
echo
40+
done
File renamed without changes.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
6+
PROJECT_ROOT="${SCRIPT_DIR}/../../../"
7+
PYTHON=python
8+
9+
ALGO="ppo"
10+
ENV="MuJoCo"
11+
ENV_ID="Ant-v5"
12+
CONFIG_PATH="${SCRIPT_DIR}/${ALGO}_${ENV_ID}.yaml"
13+
14+
OUT_ROOT="${SCRIPT_DIR}/results"
15+
16+
17+
for SEED in 1 2 3 4 5; do
18+
WORKDIR="${OUT_ROOT}/seed_${SEED}"
19+
mkdir -p "${WORKDIR}"
20+
21+
echo "========== [Benchmark START] seed=${SEED} =========="
22+
23+
START_TIME=$(date +%s)
24+
if ${PYTHON} "${PROJECT_ROOT}/train.py" \
25+
--algo "${ALGO}" \
26+
--env "${ENV}" \
27+
--env-id "${ENV_ID}" \
28+
--seed "${SEED}" \
29+
--config-path "${CONFIG_PATH}"\
30+
--result-path "${OUT_ROOT}/seed_${SEED}"; then
31+
END_TIME=$(date +%s)
32+
ELAPSED=$((END_TIME - START_TIME))
33+
STATUS="SUCCESS"
34+
else
35+
STATUS="FAILED"
36+
fi
37+
38+
echo "========== [Benchmark END] seed=${SEED} | status=${STATUS} | time=${ELAPSED}s =========="
39+
echo
40+
done
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
6+
PROJECT_ROOT="${SCRIPT_DIR}/../../../"
7+
PYTHON=python
8+
9+
ALGO="sac"
10+
ENV="MuJoCo"
11+
ENV_ID="Ant-v5"
12+
CONFIG_PATH="${SCRIPT_DIR}/${ALGO}_${ENV_ID}.yaml"
13+
14+
OUT_ROOT="${SCRIPT_DIR}/results"
15+
16+
17+
for SEED in 1 2 3 4 5; do
18+
WORKDIR="${OUT_ROOT}/seed_${SEED}"
19+
mkdir -p "${WORKDIR}"
20+
21+
echo "========== [Benchmark START] seed=${SEED} =========="
22+
23+
START_TIME=$(date +%s)
24+
if ${PYTHON} "${PROJECT_ROOT}/train.py" \
25+
--algo "${ALGO}" \
26+
--env "${ENV}" \
27+
--env-id "${ENV_ID}" \
28+
--seed "${SEED}" \
29+
--config-path "${CONFIG_PATH}"\
30+
--result-path "${OUT_ROOT}/seed_${SEED}"; then
31+
END_TIME=$(date +%s)
32+
ELAPSED=$((END_TIME - START_TIME))
33+
STATUS="SUCCESS"
34+
else
35+
STATUS="FAILED"
36+
fi
37+
38+
echo "========== [Benchmark END] seed=${SEED} | status=${STATUS} | time=${ELAPSED}s =========="
39+
echo
40+
done

0 commit comments

Comments
 (0)