feat: 添加模型评估脚本并更新实验报告

- 添加 evaluate_checkpoints.py 脚本,用于评估训练过程中的检查点模型
- 更新 generate_plots.py 以支持从真实评估结果生成图表
- 更新实验报告内容,包含具体实验结果数据和分析
- 添加中文支持并更新作者信息
- 生成评估结果JSON文件和相应图表
This commit is contained in:
2026-05-01 18:44:22 +08:00
parent cb0195135e
commit 1c1cccd3f6
25 changed files with 961 additions and 528 deletions
@@ -0,0 +1,107 @@
"""评估所有检查点并生成评估曲线数据"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import torch
import numpy as np
import json
from src.network import QNetwork
from src.utils import make_env, get_device
def evaluate_model(model_path, env, device, num_actions, num_episodes=10):
"""评估单个模型"""
state_shape = (4, 84, 84)
q_network = QNetwork(state_shape, num_actions).to(device)
checkpoint = torch.load(model_path, map_location=device, weights_only=False)
q_network.load_state_dict(checkpoint['q_network'])
q_network.eval()
rewards = []
for _ in range(num_episodes):
state, _ = env.reset()
episode_reward = 0
done = False
while not done:
with torch.no_grad():
state_tensor = torch.from_numpy(state).float().unsqueeze(0).to(device)
q_values = q_network(state_tensor)
action = q_values.argmax(dim=1).item()
state, reward, terminated, truncated, _ = env.step(action)
done = terminated or truncated
episode_reward += reward
rewards.append(episode_reward)
return np.mean(rewards), np.std(rewards)
def main():
# 获取设备
device = get_device()
# 创建环境
env = make_env("ALE/SpaceInvaders-v5", gray_scale=True, resize=True, frame_stack=4)
num_actions = env.action_space.n
# 检查点列表
checkpoints = [
("models/dqn_step_100000.pt", 100000),
("models/dqn_step_200000.pt", 200000),
("models/dqn_step_400000.pt", 400000),
("models/dqn_step_600000.pt", 600000),
("models/dqn_step_800000.pt", 800000),
("models/dqn_step_1000000.pt", 1000000),
("models/dqn_step_1200000.pt", 1200000),
("models/dqn_step_1400000.pt", 1400000),
("models/dqn_step_1600000.pt", 1600000),
("models/dqn_step_1800000.pt", 1800000),
("models/dqn_step_2000000.pt", 2000000),
("models/dqn_best.pt", -1), # 最佳模型
("models/dqn_final.pt", -2), # 最终模型
]
results = []
for model_path, step in checkpoints:
if not os.path.exists(model_path):
print(f"跳过 {model_path}(不存在)")
continue
print(f"\n评估 {model_path}...")
avg_reward, std_reward = evaluate_model(
model_path, env, device, num_actions, num_episodes=10
)
results.append({
"model": model_path,
"step": step,
"avg_reward": float(avg_reward),
"std_reward": float(std_reward)
})
print(f" 平均回报: {avg_reward:.2f} ± {std_reward:.2f}")
# 保存结果
output_file = "evaluation_results.json"
with open(output_file, "w", encoding="utf-8") as f:
json.dump(results, f, indent=2, ensure_ascii=False)
print(f"\n结果已保存到 {output_file}")
# 打印汇总
print("\n" + "=" * 60)
print("评估汇总:")
print("=" * 60)
for r in results:
step_str = f"Step {r['step']:>10,}" if r['step'] > 0 else f"{'Best' if r['step'] == -1 else 'Final':>15}"
print(f"{step_str}: 平均回报 = {r['avg_reward']:.2f} ± {r['std_reward']:.2f}")
if __name__ == "__main__":
main()
@@ -0,0 +1,80 @@
[
{
"model": "models/dqn_step_100000.pt",
"step": 100000,
"avg_reward": 17.8,
"std_reward": 5.2306787322488075
},
{
"model": "models/dqn_step_200000.pt",
"step": 200000,
"avg_reward": 14.0,
"std_reward": 6.603029607687671
},
{
"model": "models/dqn_step_400000.pt",
"step": 400000,
"avg_reward": 16.4,
"std_reward": 4.24735211631906
},
{
"model": "models/dqn_step_600000.pt",
"step": 600000,
"avg_reward": 19.0,
"std_reward": 4.123105625617661
},
{
"model": "models/dqn_step_800000.pt",
"step": 800000,
"avg_reward": 13.2,
"std_reward": 3.944616584663204
},
{
"model": "models/dqn_step_1000000.pt",
"step": 1000000,
"avg_reward": 15.7,
"std_reward": 4.960846701924985
},
{
"model": "models/dqn_step_1200000.pt",
"step": 1200000,
"avg_reward": 18.4,
"std_reward": 6.216108107168021
},
{
"model": "models/dqn_step_1400000.pt",
"step": 1400000,
"avg_reward": 14.2,
"std_reward": 4.467661580737736
},
{
"model": "models/dqn_step_1600000.pt",
"step": 1600000,
"avg_reward": 17.8,
"std_reward": 4.686149805543993
},
{
"model": "models/dqn_step_1800000.pt",
"step": 1800000,
"avg_reward": 21.5,
"std_reward": 4.984977432245807
},
{
"model": "models/dqn_step_2000000.pt",
"step": 2000000,
"avg_reward": 14.6,
"std_reward": 5.276362383309167
},
{
"model": "models/dqn_best.pt",
"step": -1,
"avg_reward": 19.9,
"std_reward": 6.920260110718383
},
{
"model": "models/dqn_final.pt",
"step": -2,
"avg_reward": 11.3,
"std_reward": 3.3778691508109073
}
]
@@ -8,13 +8,13 @@ from collections import defaultdict
def load_training_logs(log_file): def load_training_logs(log_file):
"""加载训练日志 """Load training logs
Args: Args:
log_file: 日志文件路径 log_file: Log file path
Returns: Returns:
logs: 训练日志字典 logs: Training logs dict
""" """
logs = defaultdict(list) logs = defaultdict(list)
@@ -28,14 +28,14 @@ def load_training_logs(log_file):
def smooth_data(data, window=100): def smooth_data(data, window=100):
"""平滑数据 """Smooth data
Args: Args:
data: 原始数据 data: Raw data
window: 平滑窗口大小 window: Smoothing window size
Returns: Returns:
smoothed: 平滑后的数据 smoothed: Smoothed data
""" """
if len(data) < window: if len(data) < window:
return data return data
@@ -49,13 +49,13 @@ def smooth_data(data, window=100):
def plot_training_curves(rewards, losses, q_values, save_dir="plots"): def plot_training_curves(rewards, losses, q_values, save_dir="plots"):
"""绘制训练曲线 """Plot training curves
Args: Args:
rewards: 回报列表 rewards: Reward list
losses: 损失列表 losses: Loss list
q_values: Q值列表 q_values: Q-value list
save_dir: 保存目录 save_dir: Save directory
""" """
os.makedirs(save_dir, exist_ok=True) os.makedirs(save_dir, exist_ok=True)
@@ -66,18 +66,18 @@ def plot_training_curves(rewards, losses, q_values, save_dir="plots"):
ax1 = axes[0, 0] ax1 = axes[0, 0]
if len(rewards) > 0: if len(rewards) > 0:
episodes = range(1, len(rewards) + 1) episodes = range(1, len(rewards) + 1)
ax1.plot(episodes, rewards, alpha=0.3, color="blue", label="原始数据") ax1.plot(episodes, rewards, alpha=0.3, color="blue", label="Raw Data")
smoothed_rewards = smooth_data(rewards, window=100) smoothed_rewards = smooth_data(rewards, window=100)
ax1.plot( ax1.plot(
episodes, episodes,
smoothed_rewards, smoothed_rewards,
color="red", color="red",
linewidth=2, linewidth=2,
label="平滑曲线 (window=100)", label="Smoothed (window=100)",
) )
ax1.set_xlabel("Episode", fontsize=12) ax1.set_xlabel("Episode", fontsize=12)
ax1.set_ylabel("回报", fontsize=12) ax1.set_ylabel("Reward", fontsize=12)
ax1.set_title("训练回报曲线", fontsize=14) ax1.set_title("Training Reward Curve", fontsize=14)
ax1.legend(fontsize=10) ax1.legend(fontsize=10)
ax1.grid(True, alpha=0.3) ax1.grid(True, alpha=0.3)
@@ -85,12 +85,12 @@ def plot_training_curves(rewards, losses, q_values, save_dir="plots"):
ax2 = axes[0, 1] ax2 = axes[0, 1]
if len(losses) > 0: if len(losses) > 0:
steps = range(1, len(losses) + 1) steps = range(1, len(losses) + 1)
ax2.plot(steps, losses, alpha=0.3, color="green", label="原始数据") ax2.plot(steps, losses, alpha=0.3, color="green", label="Raw Data")
smoothed_losses = smooth_data(losses, window=100) smoothed_losses = smooth_data(losses, window=100)
ax2.plot(steps, smoothed_losses, color="red", linewidth=2, label="平滑曲线") ax2.plot(steps, smoothed_losses, color="red", linewidth=2, label="Smoothed")
ax2.set_xlabel("训练步数", fontsize=12) ax2.set_xlabel("Training Steps", fontsize=12)
ax2.set_ylabel("损失", fontsize=12) ax2.set_ylabel("Loss", fontsize=12)
ax2.set_title("训练损失曲线", fontsize=14) ax2.set_title("Training Loss Curve", fontsize=14)
ax2.legend(fontsize=10) ax2.legend(fontsize=10)
ax2.grid(True, alpha=0.3) ax2.grid(True, alpha=0.3)
@@ -98,12 +98,12 @@ def plot_training_curves(rewards, losses, q_values, save_dir="plots"):
ax3 = axes[1, 0] ax3 = axes[1, 0]
if len(q_values) > 0: if len(q_values) > 0:
steps = range(1, len(q_values) + 1) steps = range(1, len(q_values) + 1)
ax3.plot(steps, q_values, alpha=0.3, color="purple", label="原始数据") ax3.plot(steps, q_values, alpha=0.3, color="purple", label="Raw Data")
smoothed_q = smooth_data(q_values, window=100) smoothed_q = smooth_data(q_values, window=100)
ax3.plot(steps, smoothed_q, color="red", linewidth=2, label="平滑曲线") ax3.plot(steps, smoothed_q, color="red", linewidth=2, label="Smoothed")
ax3.set_xlabel("训练步数", fontsize=12) ax3.set_xlabel("Training Steps", fontsize=12)
ax3.set_ylabel("平均Q值", fontsize=12) ax3.set_ylabel("Average Q Value", fontsize=12)
ax3.set_title("平均Q值变化", fontsize=14) ax3.set_title("Average Q Value", fontsize=14)
ax3.legend(fontsize=10) ax3.legend(fontsize=10)
ax3.grid(True, alpha=0.3) ax3.grid(True, alpha=0.3)
@@ -116,18 +116,18 @@ def plot_training_curves(rewards, losses, q_values, save_dir="plots"):
color="red", color="red",
linestyle="--", linestyle="--",
linewidth=2, linewidth=2,
label=f"均值: {np.mean(rewards):.1f}", label=f"Mean: {np.mean(rewards):.1f}",
) )
ax4.axvline( ax4.axvline(
np.median(rewards), np.median(rewards),
color="green", color="green",
linestyle="--", linestyle="--",
linewidth=2, linewidth=2,
label=f"中位数: {np.median(rewards):.1f}", label=f"Median: {np.median(rewards):.1f}",
) )
ax4.set_xlabel("回报", fontsize=12) ax4.set_xlabel("Reward", fontsize=12)
ax4.set_ylabel("频次", fontsize=12) ax4.set_ylabel("Frequency", fontsize=12)
ax4.set_title("回报分布", fontsize=14) ax4.set_title("Reward Distribution", fontsize=14)
ax4.legend(fontsize=10) ax4.legend(fontsize=10)
ax4.grid(True, alpha=0.3) ax4.grid(True, alpha=0.3)
@@ -136,19 +136,19 @@ def plot_training_curves(rewards, losses, q_values, save_dir="plots"):
# 保存图片 # 保存图片
save_path = os.path.join(save_dir, "training_curves.png") save_path = os.path.join(save_dir, "training_curves.png")
plt.savefig(save_path, dpi=300, bbox_inches="tight") plt.savefig(save_path, dpi=300, bbox_inches="tight")
print(f"训练曲线已保存到: {save_path}") print(f"Training curves saved: {save_path}")
plt.close() plt.close()
def plot_epsilon_decay(epsilon_start, epsilon_end, decay_steps, save_dir="plots"): def plot_epsilon_decay(epsilon_start, epsilon_end, decay_steps, save_dir="plots"):
"""绘制ε衰减曲线 """Plot epsilon decay curve
Args: Args:
epsilon_start: ε初始值 epsilon_start: Initial epsilon value
epsilon_end: ε最终值 epsilon_end: Final epsilon value
decay_steps: 衰减步数 decay_steps: Decay steps
save_dir: 保存目录 save_dir: Save directory
""" """
os.makedirs(save_dir, exist_ok=True) os.makedirs(save_dir, exist_ok=True)
@@ -157,40 +157,39 @@ def plot_epsilon_decay(epsilon_start, epsilon_end, decay_steps, save_dir="plots"
fig, ax = plt.subplots(figsize=(10, 6)) fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(steps / 1e6, epsilons, color="blue", linewidth=2) ax.plot(steps / 1e6, epsilons, color="blue", linewidth=2)
ax.set_xlabel("训练步数 (百万)", fontsize=12) ax.set_xlabel("Training Steps (Million)", fontsize=12)
ax.set_ylabel("Epsilon (ε)", fontsize=12) ax.set_ylabel("Epsilon", fontsize=12)
ax.set_title("Epsilon衰减曲线", fontsize=14) ax.set_title("Epsilon Decay Curve", fontsize=14)
ax.grid(True, alpha=0.3) ax.grid(True, alpha=0.3)
ax.set_ylim(0, 1.1) ax.set_ylim(0, 1.1)
# 标注关键点
ax.axhline(y=epsilon_end, color="red", linestyle="--", alpha=0.5) ax.axhline(y=epsilon_end, color="red", linestyle="--", alpha=0.5)
ax.text( ax.text(
decay_steps * 0.8 / 1e6, decay_steps * 0.8 / 1e6,
epsilon_end + 0.05, epsilon_end + 0.05,
f"最终值: {epsilon_end}", f"Final: {epsilon_end}",
fontsize=10, fontsize=10,
color="red", color="red",
) )
save_path = os.path.join(save_dir, "epsilon_decay.png") save_path = os.path.join(save_dir, "epsilon_decay.png")
plt.savefig(save_path, dpi=300, bbox_inches="tight") plt.savefig(save_path, dpi=300, bbox_inches="tight")
print(f"ε衰减曲线已保存到: {save_path}") print(f"Epsilon decay curve saved: {save_path}")
plt.close() plt.close()
def plot_evaluation_results(eval_rewards, save_dir="plots"): def plot_evaluation_results(eval_rewards, save_dir="plots"):
"""绘制评估结果 """Plot evaluation results
Args: Args:
eval_rewards: 评估回报列表 [(step, reward), ...] eval_rewards: Evaluation reward list [(step, reward), ...]
save_dir: 保存目录 save_dir: Save directory
""" """
os.makedirs(save_dir, exist_ok=True) os.makedirs(save_dir, exist_ok=True)
if not eval_rewards: if not eval_rewards:
print("没有评估数据") print("No evaluation data")
return return
steps, rewards = zip(*eval_rewards) steps, rewards = zip(*eval_rewards)
@@ -203,10 +202,9 @@ def plot_evaluation_results(eval_rewards, save_dir="plots"):
color="blue", color="blue",
linewidth=2, linewidth=2,
markersize=8, markersize=8,
label="评估回报", label="Eval Reward",
) )
# 添加趋势线
if len(rewards) > 1: if len(rewards) > 1:
z = np.polyfit(steps, rewards, 1) z = np.polyfit(steps, rewards, 1)
p = np.poly1d(z) p = np.poly1d(z)
@@ -217,27 +215,27 @@ def plot_evaluation_results(eval_rewards, save_dir="plots"):
color="red", color="red",
linewidth=2, linewidth=2,
alpha=0.7, alpha=0.7,
label="趋势线", label="Trend Line",
) )
ax.set_xlabel("训练步数 (百万)", fontsize=12) ax.set_xlabel("Training Steps (Million)", fontsize=12)
ax.set_ylabel("平均回报", fontsize=12) ax.set_ylabel("Average Reward", fontsize=12)
ax.set_title("评估回报变化", fontsize=14) ax.set_title("Evaluation Reward", fontsize=14)
ax.legend(fontsize=10) ax.legend(fontsize=10)
ax.grid(True, alpha=0.3) ax.grid(True, alpha=0.3)
save_path = os.path.join(save_dir, "evaluation_results.png") save_path = os.path.join(save_dir, "evaluation_results.png")
plt.savefig(save_path, dpi=300, bbox_inches="tight") plt.savefig(save_path, dpi=300, bbox_inches="tight")
print(f"评估结果已保存到: {save_path}") print(f"Evaluation results saved: {save_path}")
plt.close() plt.close()
def generate_sample_plots(save_dir="plots"): def generate_sample_plots(save_dir="plots"):
"""生成示例图表(用于报告) """Generate sample plots for report
Args: Args:
save_dir: 保存目录 save_dir: Save directory
""" """
os.makedirs(save_dir, exist_ok=True) os.makedirs(save_dir, exist_ok=True)
@@ -270,21 +268,119 @@ def generate_sample_plots(save_dir="plots"):
eval_rewards = [50, 100, 150, 180, 190, 195] eval_rewards = [50, 100, 150, 180, 190, 195]
plot_evaluation_results(list(zip(eval_steps, eval_rewards)), save_dir) plot_evaluation_results(list(zip(eval_steps, eval_rewards)), save_dir)
print(f"\n示例图表已生成到: {save_dir}/") print(f"\nSample plots generated: {save_dir}/")
def generate_real_plots(eval_results_file="evaluation_results.json", save_dir="plots"):
"""Generate plots from real evaluation results
Args:
eval_results_file: Evaluation results JSON file
save_dir: Save directory
"""
os.makedirs(save_dir, exist_ok=True)
# 加载评估结果
if not os.path.exists(eval_results_file):
print(f"评估结果文件不存在: {eval_results_file}")
return
with open(eval_results_file, "r") as f:
results = json.load(f)
# 分离各检查点的结果(排除best和final)
checkpoint_results = [r for r in results if r["step"] > 0]
checkpoint_results.sort(key=lambda x: x["step"])
steps = [r["step"] for r in checkpoint_results]
rewards = [r["avg_reward"] for r in checkpoint_results]
stds = [r["std_reward"] for r in checkpoint_results]
# 绘制评估曲线(带误差棒)
fig, ax = plt.subplots(figsize=(10, 6))
ax.errorbar(
np.array(steps) / 1e6,
rewards,
yerr=stds,
fmt="o-",
color="blue",
linewidth=2,
markersize=8,
capsize=5,
label="Eval Reward (mean ± std)",
)
# 添加趋势线
if len(steps) > 1:
z = np.polyfit(steps, rewards, 1)
p = np.poly1d(z)
ax.plot(
np.array(steps) / 1e6,
p(steps),
"--",
color="red",
linewidth=2,
alpha=0.7,
label="Trend Line",
)
ax.set_xlabel("Training Steps (Million)", fontsize=12)
ax.set_ylabel("Average Reward", fontsize=12)
ax.set_title("Evaluation Reward Over Training", fontsize=14)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
save_path = os.path.join(save_dir, "evaluation_curve.png")
plt.savefig(save_path, dpi=300, bbox_inches="tight")
print(f"Evaluation curve saved: {save_path}")
plt.close()
# 绘制标准差变化
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(
np.array(steps) / 1e6,
stds,
"s-",
color="green",
linewidth=2,
markersize=8,
label="Standard Deviation",
)
ax.set_xlabel("Training Steps (Million)", fontsize=12)
ax.set_ylabel("Reward Std Dev", fontsize=12)
ax.set_title("Evaluation Reward Standard Deviation", fontsize=14)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
save_path = os.path.join(save_dir, "evaluation_std.png")
plt.savefig(save_path, dpi=300, bbox_inches="tight")
print(f"Evaluation std saved: {save_path}")
plt.close()
# 打印汇总信息
best_result = max(checkpoint_results, key=lambda x: x["avg_reward"])
print(f"\n最佳检查点: Step {best_result['step']:,}")
print(f" 平均回报: {best_result['avg_reward']:.2f} ± {best_result['std_reward']:.2f}")
if __name__ == "__main__": if __name__ == "__main__":
import argparse import argparse
parser = argparse.ArgumentParser(description="生成训练图表") parser = argparse.ArgumentParser(description="Generate training plots")
parser.add_argument("--log-file", type=str, default=None, help="训练日志文件路径") parser.add_argument("--log-file", type=str, default=None, help="Training log file path")
parser.add_argument("--save-dir", type=str, default="plots", help="图表保存目录") parser.add_argument("--eval-results", type=str, default=None, help="Evaluation results JSON file")
parser.add_argument("--sample", action="store_true", help="生成示例图表") parser.add_argument("--save-dir", type=str, default="plots", help="Plot save directory")
parser.add_argument("--sample", action="store_true", help="Generate sample plots")
args = parser.parse_args() args = parser.parse_args()
if args.sample: if args.sample:
generate_sample_plots(args.save_dir) generate_sample_plots(args.save_dir)
elif args.eval_results:
generate_real_plots(args.eval_results, args.save_dir)
elif args.log_file: elif args.log_file:
logs = load_training_logs(args.log_file) logs = load_training_logs(args.log_file)
plot_training_curves( plot_training_curves(
@@ -294,4 +390,4 @@ if __name__ == "__main__":
args.save_dir, args.save_dir,
) )
else: else:
print("请指定 --log-file 或 --sample 参数") print("Please specify --log-file, --eval-results, or --sample")
Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 KiB

After

Width:  |  Height:  |  Size: 653 KiB

@@ -1,7 +1,7 @@
\relax \relax
\providecommand\hyper@newdestlabel[2]{} \providecommand\hyper@newdestlabel[2]{}
\providecommand\HyField@AuxAddToFields[1]{} \providecommand*\HyPL@Entry[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{} \HyPL@Entry{0<</S/D>>}
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}{section.1}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}{section.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Game Selection and Challenges}{1}{subsection.1.1}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Game Selection and Challenges}{1}{subsection.1.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Motivation}{1}{subsection.1.2}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Motivation}{1}{subsection.1.2}\protected@file@percent }
@@ -28,15 +28,19 @@
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Training Performance}{4}{subsection.4.1}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Training Performance}{4}{subsection.4.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Training curves showing reward, loss, and Q-value evolution}}{5}{figure.caption.4}\protected@file@percent } \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Training curves showing reward, loss, and Q-value evolution}}{5}{figure.caption.4}\protected@file@percent }
\newlabel{fig:training_curves}{{1}{5}{Training curves showing reward, loss, and Q-value evolution}{figure.caption.4}{}} \newlabel{fig:training_curves}{{1}{5}{Training curves showing reward, loss, and Q-value evolution}{figure.caption.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Evaluation Results}{5}{subsection.4.2}\protected@file@percent } \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Evaluation reward at different training checkpoints with standard deviation error bars}}{5}{figure.caption.5}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {4}{\ignorespaces Evaluation results}}{5}{table.caption.5}\protected@file@percent } \newlabel{fig:evaluation_curve}{{2}{5}{Evaluation reward at different training checkpoints with standard deviation error bars}{figure.caption.5}{}}
\newlabel{tab:evaluation}{{4}{5}{Evaluation results}{table.caption.5}{}} \@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Epsilon decay curve during training}}{6}{figure.caption.6}\protected@file@percent }
\newlabel{fig:epsilon_decay}{{3}{6}{Epsilon decay curve during training}{figure.caption.6}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Evaluation Results}{6}{subsection.4.2}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {4}{\ignorespaces Evaluation results at different training checkpoints}}{6}{table.caption.7}\protected@file@percent }
\newlabel{tab:evaluation}{{4}{6}{Evaluation results at different training checkpoints}{table.caption.7}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Comparison with Baselines}{6}{subsection.4.3}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Comparison with Baselines}{6}{subsection.4.3}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {5}{\ignorespaces Comparison with baselines}}{6}{table.caption.6}\protected@file@percent } \@writefile{lot}{\contentsline {table}{\numberline {5}{\ignorespaces Comparison with baselines}}{6}{table.caption.8}\protected@file@percent }
\newlabel{tab:comparison}{{5}{6}{Comparison with baselines}{table.caption.6}{}} \newlabel{tab:comparison}{{5}{6}{Comparison with baselines}{table.caption.8}{}}
\@writefile{toc}{\contentsline {section}{\numberline {5}Discussion}{6}{section.5}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {5}Discussion}{7}{section.5}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Performance Analysis}{6}{subsection.5.1}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Performance Analysis}{7}{subsection.5.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Limitations}{6}{subsection.5.2}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Limitations}{7}{subsection.5.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Potential Improvements}{6}{subsection.5.3}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Potential Improvements}{7}{subsection.5.3}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6}Conclusion}{7}{section.6}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {6}Conclusion}{7}{section.6}\protected@file@percent }
\gdef \@abspage@last{7} \gdef \@abspage@last{8}
@@ -0,0 +1,167 @@
PWD D:/Code/doing_exercises/programs/外教作业外快/强化学习个人项目报告(Atari 游戏方向)/tex
INPUT d:/settings/Language/texlive/2025/texmf.cnf
INPUT d:/settings/Language/texlive/2025/texmf-dist/web2c/texmf.cnf
INPUT d:/settings/Language/texlive/2025/texmf-var/web2c/pdftex/pdflatex.fmt
INPUT report.tex
OUTPUT report.log
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/article.cls
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/article.cls
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/size11.clo
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/size11.clo
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/size11.clo
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/map/fontname/texfonts.map
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmr10.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/inputenc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/inputenc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/fontenc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/fontenc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/jknappen/ec/ecrm1095.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/keyval.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/keyval.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/graphics.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/graphics.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/trig.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/trig.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-def/pdftex.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-def/pdftex.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-def/pdftex.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsmath.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amstext.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsgen.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsbsy.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsopn.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/amsfonts.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/amssymb.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/booktabs/booktabs.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/booktabs/booktabs.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/iftex/iftex.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/iftex/iftex.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/pdfescape/pdfescape.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/infwarerr/infwarerr.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hycolor/hycolor.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/refcount/refcount.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/refcount/refcount.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/kvoptions/kvoptions.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/etoolbox/etoolbox.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/etoolbox/etoolbox.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/stringenc/stringenc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/stringenc/stringenc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/pd1enc.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/pd1enc.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/pd1enc.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/intcalc/intcalc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/puenc.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/puenc.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/puenc.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/url/url.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/url/url.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/bitset/bitset.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/bitset/bitset.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/atbegshi/atbegshi.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/atbegshi-ltx.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/atbegshi-ltx.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/hpdftex.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/hpdftex.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/hpdftex.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/atveryend/atveryend.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/atveryend-ltx.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/atveryend-ltx.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/float/float.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/float/float.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/caption.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/caption.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/caption3.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/caption3.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/subcaption.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/subcaption.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/geometry/geometry.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/geometry/geometry.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/generic/iftex/ifvtex.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/setspace/setspace.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/setspace/setspace.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
INPUT ./report.aux
INPUT ./report.aux
INPUT report.aux
OUTPUT report.aux
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
INPUT ./report.out
INPUT ./report.out
INPUT report.out
INPUT report.out
OUTPUT report.pdf
INPUT ./report.out
INPUT ./report.out
OUTPUT report.out
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/jknappen/ec/ecrm1728.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/jknappen/ec/ecrm1200.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmr12.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmr8.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmr6.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmmi12.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmmi8.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmmi6.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmsy8.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmsy6.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/cm/cmex10.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsa.fd
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsa.fd
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsa.fd
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsb.fd
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsb.fd
INPUT d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsb.fd
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm
INPUT d:/settings/Language/texlive/2025/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm7.tfm
@@ -1,8 +1,9 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.27 (TeX Live 2025) (preloaded format=pdflatex 2025.6.5) 1 MAY 2026 10:33 This is XeTeX, Version 3.141592653-2.6-0.999997 (TeX Live 2025) (preloaded format=xelatex 2025.6.5) 1 MAY 2026 18:08
entering extended mode entering extended mode
restricted \write18 enabled. restricted \write18 enabled.
file:line:error style messages enabled.
%&-line parsing enabled. %&-line parsing enabled.
**report.tex **report
(./report.tex (./report.tex
LaTeX2e <2024-11-01> patch level 2 LaTeX2e <2024-11-01> patch level 2
L3 programming layer <2025-01-18> L3 programming layer <2025-01-18>
@@ -11,223 +12,302 @@ Document Class: article 2024/06/29 v1.4n Standard LaTeX document class
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/size11.clo (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/size11.clo
File: size11.clo 2024/06/29 v1.4n Standard LaTeX file (size option) File: size11.clo 2024/06/29 v1.4n Standard LaTeX file (size option)
) )
\c@part=\count196 \c@part=\count192
\c@section=\count197 \c@section=\count193
\c@subsection=\count198 \c@subsection=\count194
\c@subsubsection=\count199 \c@subsubsection=\count195
\c@paragraph=\count266 \c@paragraph=\count196
\c@subparagraph=\count267 \c@subparagraph=\count197
\c@figure=\count268 \c@figure=\count198
\c@table=\count269 \c@table=\count199
\abovecaptionskip=\skip49 \abovecaptionskip=\skip49
\belowcaptionskip=\skip50 \belowcaptionskip=\skip50
\bibindent=\dimen141 \bibindent=\dimen141
) (d:/settings/Language/texlive/2025/texmf-dist/tex/xelatex/xecjk/xeCJK.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/l3kernel/expl3.sty
Package: expl3 2025-01-18 L3 programming layer (loader)
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
File: l3backend-xetex.def 2024-05-08 L3 backend support: XeTeX
\g__graphics_track_int=\count266
\l__pdf_internal_box=\box52
\g__pdf_backend_annotation_int=\count267
\g__pdf_backend_link_int=\count268
))
Package: xeCJK 2022/08/05 v3.9.1 Typesetting CJK scripts with XeLaTeX
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/ctex/ctexhook.sty
Package: ctexhook 2022/07/14 v2.5.10 Document and package hooks (CTEX)
) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
Package: xtemplate 2024-08-16 L3 Experimental prototype document functions
) )
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/inputenc.sty \l__xeCJK_tmp_int=\count269
Package: inputenc 2024/02/08 v1.3d Input encoding file \l__xeCJK_tmp_box=\box53
\inpenc@prehook=\toks17 \l__xeCJK_tmp_dim=\dimen142
\inpenc@posthook=\toks18 \l__xeCJK_tmp_skip=\skip51
\g__xeCJK_space_factor_int=\count270
\l__xeCJK_begin_int=\count271
\l__xeCJK_end_int=\count272
\c__xeCJK_CJK_class_int=\XeTeXcharclass1
\c__xeCJK_FullLeft_class_int=\XeTeXcharclass2
\c__xeCJK_FullRight_class_int=\XeTeXcharclass3
\c__xeCJK_HalfLeft_class_int=\XeTeXcharclass4
\c__xeCJK_HalfRight_class_int=\XeTeXcharclass5
\c__xeCJK_NormalSpace_class_int=\XeTeXcharclass6
\c__xeCJK_CM_class_int=\XeTeXcharclass7
\c__xeCJK_HangulJamo_class_int=\XeTeXcharclass8
\l__xeCJK_last_skip=\skip52
\c__xeCJK_none_node=\count273
\g__xeCJK_node_int=\count274
\c__xeCJK_CJK_node_dim=\dimen143
\c__xeCJK_CJK-space_node_dim=\dimen144
\c__xeCJK_default_node_dim=\dimen145
\c__xeCJK_CJK-widow_node_dim=\dimen146
\c__xeCJK_normalspace_node_dim=\dimen147
\c__xeCJK_default-space_node_skip=\skip53
\l__xeCJK_ccglue_skip=\skip54
\l__xeCJK_ecglue_skip=\skip55
\l__xeCJK_punct_kern_skip=\skip56
\l__xeCJK_indent_box=\box54
\l__xeCJK_last_penalty_int=\count275
\l__xeCJK_last_bound_dim=\dimen148
\l__xeCJK_last_kern_dim=\dimen149
\l__xeCJK_widow_penalty_int=\count276
LaTeX template Info: Declaring template type 'xeCJK/punctuation' taking 0
(template) argument(s) on line 2396.
\l__xeCJK_fixed_punct_width_dim=\dimen150
\l__xeCJK_mixed_punct_width_dim=\dimen151
\l__xeCJK_middle_punct_width_dim=\dimen152
\l__xeCJK_fixed_margin_width_dim=\dimen153
\l__xeCJK_mixed_margin_width_dim=\dimen154
\l__xeCJK_middle_margin_width_dim=\dimen155
\l__xeCJK_bound_punct_width_dim=\dimen156
\l__xeCJK_bound_margin_width_dim=\dimen157
\l__xeCJK_margin_minimum_dim=\dimen158
\l__xeCJK_kerning_total_width_dim=\dimen159
\l__xeCJK_same_align_margin_dim=\dimen160
\l__xeCJK_different_align_margin_dim=\dimen161
\l__xeCJK_kerning_margin_width_dim=\dimen162
\l__xeCJK_kerning_margin_minimum_dim=\dimen163
\l__xeCJK_bound_dim=\dimen164
\l__xeCJK_reverse_bound_dim=\dimen165
\l__xeCJK_margin_dim=\dimen166
\l__xeCJK_minimum_bound_dim=\dimen167
\l__xeCJK_kerning_margin_dim=\dimen168
\g__xeCJK_family_int=\count277
\l__xeCJK_fam_int=\count278
\g__xeCJK_fam_allocation_int=\count279
\l__xeCJK_verb_case_int=\count280
\l__xeCJK_verb_exspace_skip=\skip57
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/fontspec/fontspec.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
Package: xparse 2024-08-16 L3 Experimental document command parser
) )
Package: fontspec 2024/05/11 v2.9e Font selection for XeLaTeX and LuaLaTeX
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
Package: fontspec-xetex 2024/05/11 v2.9e Font selection for XeLaTeX and LuaLaTeX
\l__fontspec_script_int=\count281
\l__fontspec_language_int=\count282
\l__fontspec_strnum_int=\count283
\l__fontspec_tmp_int=\count284
\l__fontspec_tmpa_int=\count285
\l__fontspec_tmpb_int=\count286
\l__fontspec_tmpc_int=\count287
\l__fontspec_em_int=\count288
\l__fontspec_emdef_int=\count289
\l__fontspec_strong_int=\count290
\l__fontspec_strongdef_int=\count291
\l__fontspec_tmpa_dim=\dimen169
\l__fontspec_tmpb_dim=\dimen170
\l__fontspec_tmpc_dim=\dimen171
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/fontenc.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/fontenc.sty
Package: fontenc 2021/04/29 v2.0v Standard LaTeX package Package: fontenc 2021/04/29 v2.0v Standard LaTeX package
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/fontspec/fontspec.cfg))) (d:/settings/Language/texlive/2025/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg
File: xeCJK.cfg 2022/08/05 v3.9.1 Configuration file for xeCJK package
))
Package fontspec Info:
(fontspec) Could not resolve font "SimSun/BI" (it probably doesn't
(fontspec) exist).
Package fontspec Info:
(fontspec) Could not resolve font "SimSun/B" (it probably doesn't
(fontspec) exist).
Package fontspec Info:
(fontspec) Could not resolve font "SimSun/I" (it probably doesn't
(fontspec) exist).
Package fontspec Info:
(fontspec) Font family 'SimSun(0)' created for font 'SimSun' with
(fontspec) options [Script={CJK}].
(fontspec)
(fontspec) This font family consists of the following NFSS
(fontspec) series/shapes:
(fontspec)
(fontspec) - 'normal' (m/n) with NFSS spec.:
(fontspec) <->"SimSun/OT:script=hani;language=dflt;"
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/graphicx.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/graphicx.sty
Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/keyval.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC) Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks19 \KV@toks@=\toks17
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/graphics.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/graphics.sty
Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR) Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/trig.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics/trig.sty
Package: trig 2023/12/02 v1.11 sin cos tan (DPC) Package: trig 2023/12/02 v1.11 sin cos tan (DPC)
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-cfg/graphics.c
fg
File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
) )
Package graphics Info: Driver file: pdftex.def on input line 106. Package graphics Info: Driver file: xetex.def on input line 106.
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-def/xetex.def
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/graphics-def/pdftex.def File: xetex.def 2022/09/22 v5.0n Graphics/color driver for xetex
File: pdftex.def 2024/04/13 v1.2c Graphics/color driver for pdftex
)) ))
\Gin@req@height=\dimen142 \Gin@req@height=\dimen172
\Gin@req@width=\dimen143 \Gin@req@width=\dimen173
) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsmath.sty ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsmath.sty
Package: amsmath 2024/11/05 v2.17t AMS math features Package: amsmath 2024/11/05 v2.17t AMS math features
\@mathmargin=\skip51 \@mathmargin=\skip58
For additional information on amsmath, use the `?' option. For additional information on amsmath, use the `?' option.
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amstext.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amstext.sty
Package: amstext 2021/08/26 v2.01 AMS text Package: amstext 2021/08/26 v2.01 AMS text
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsgen.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsgen.sty
File: amsgen.sty 1999/11/30 v2.0 generic functions File: amsgen.sty 1999/11/30 v2.0 generic functions
\@emptytoks=\toks20 \@emptytoks=\toks18
\ex@=\dimen144 \ex@=\dimen174
)) )) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsbsy.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsbsy.sty
Package: amsbsy 1999/11/29 v1.2d Bold Symbols Package: amsbsy 1999/11/29 v1.2d Bold Symbols
\pmbraise@=\dimen145 \pmbraise@=\dimen175
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsopn.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsmath/amsopn.sty
Package: amsopn 2022/04/08 v2.04 operator names Package: amsopn 2022/04/08 v2.04 operator names
) )
\inf@bad=\count270 \inf@bad=\count292
LaTeX Info: Redefining \frac on input line 233. LaTeX Info: Redefining \frac on input line 233.
\uproot@=\count271 \uproot@=\count293
\leftroot@=\count272 \leftroot@=\count294
LaTeX Info: Redefining \overline on input line 398. LaTeX Info: Redefining \overline on input line 398.
LaTeX Info: Redefining \colon on input line 409. LaTeX Info: Redefining \colon on input line 409.
\classnum@=\count273 \classnum@=\count295
\DOTSCASE@=\count274 \DOTSCASE@=\count296
LaTeX Info: Redefining \ldots on input line 495. LaTeX Info: Redefining \ldots on input line 495.
LaTeX Info: Redefining \dots on input line 498. LaTeX Info: Redefining \dots on input line 498.
LaTeX Info: Redefining \cdots on input line 619. LaTeX Info: Redefining \cdots on input line 619.
\Mathstrutbox@=\box52 \Mathstrutbox@=\box55
\strutbox@=\box53 \strutbox@=\box56
LaTeX Info: Redefining \big on input line 721. LaTeX Info: Redefining \big on input line 721.
LaTeX Info: Redefining \Big on input line 722. LaTeX Info: Redefining \Big on input line 722.
LaTeX Info: Redefining \bigg on input line 723. LaTeX Info: Redefining \bigg on input line 723.
LaTeX Info: Redefining \Bigg on input line 724. LaTeX Info: Redefining \Bigg on input line 724.
\big@size=\dimen146 \big@size=\dimen176
LaTeX Font Info: Redeclaring font encoding OML on input line 742. LaTeX Font Info: Redeclaring font encoding OML on input line 742.
LaTeX Font Info: Redeclaring font encoding OMS on input line 743. LaTeX Font Info: Redeclaring font encoding OMS on input line 743.
\macc@depth=\count275 \macc@depth=\count297
LaTeX Info: Redefining \bmod on input line 904. LaTeX Info: Redefining \bmod on input line 904.
LaTeX Info: Redefining \pmod on input line 909. LaTeX Info: Redefining \pmod on input line 909.
LaTeX Info: Redefining \smash on input line 939. LaTeX Info: Redefining \smash on input line 939.
LaTeX Info: Redefining \relbar on input line 969. LaTeX Info: Redefining \relbar on input line 969.
LaTeX Info: Redefining \Relbar on input line 970. LaTeX Info: Redefining \Relbar on input line 970.
\c@MaxMatrixCols=\count276 \c@MaxMatrixCols=\count298
\dotsspace@=\muskip17 \dotsspace@=\muskip17
\c@parentequation=\count277 \c@parentequation=\count299
\dspbrk@lvl=\count278 \dspbrk@lvl=\count300
\tag@help=\toks21 \tag@help=\toks19
\row@=\count279 \row@=\count301
\column@=\count280 \column@=\count302
\maxfields@=\count281 \maxfields@=\count303
\andhelp@=\toks22 \andhelp@=\toks20
\eqnshift@=\dimen147 \eqnshift@=\dimen177
\alignsep@=\dimen148 \alignsep@=\dimen178
\tagshift@=\dimen149 \tagshift@=\dimen179
\tagwidth@=\dimen150 \tagwidth@=\dimen180
\totwidth@=\dimen151 \totwidth@=\dimen181
\lineht@=\dimen152 \lineht@=\dimen182
\@envbody=\toks23 \@envbody=\toks21
\multlinegap=\skip52 \multlinegap=\skip59
\multlinetaggap=\skip53 \multlinetaggap=\skip60
\mathdisplay@stack=\toks24 \mathdisplay@stack=\toks22
LaTeX Info: Redefining \[ on input line 2953. LaTeX Info: Redefining \[ on input line 2953.
LaTeX Info: Redefining \] on input line 2954. LaTeX Info: Redefining \] on input line 2954.
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/amsfonts.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/amsfonts.sty
Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
\symAMSa=\mathgroup4 \symAMSa=\mathgroup4
\symAMSb=\mathgroup5 \symAMSb=\mathgroup5
LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. LaTeX Font Info: Redeclaring math symbol \hbar on input line 98.
LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold'
(Font) U/euf/m/n --> U/euf/b/n on input line 106. (Font) U/euf/m/n --> U/euf/b/n on input line 106.
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/amssymb.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/amssymb.sty
Package: amssymb 2013/01/14 v3.01 AMS font symbols Package: amssymb 2013/01/14 v3.01 AMS font symbols
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/booktabs/booktabs.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/booktabs/booktabs.sty
Package: booktabs 2020/01/12 v1.61803398 Publication quality tables Package: booktabs 2020/01/12 v1.61803398 Publication quality tables
\heavyrulewidth=\dimen153 \heavyrulewidth=\dimen183
\lightrulewidth=\dimen154 \lightrulewidth=\dimen184
\cmidrulewidth=\dimen155 \cmidrulewidth=\dimen185
\belowrulesep=\dimen156 \belowrulesep=\dimen186
\belowbottomsep=\dimen157 \belowbottomsep=\dimen187
\aboverulesep=\dimen158 \aboverulesep=\dimen188
\abovetopsep=\dimen159 \abovetopsep=\dimen189
\cmidrulesep=\dimen160 \cmidrulesep=\dimen190
\cmidrulekern=\dimen161 \cmidrulekern=\dimen191
\defaultaddspace=\dimen162 \defaultaddspace=\dimen192
\@cmidla=\count282 \@cmidla=\count304
\@cmidlb=\count283 \@cmidlb=\count305
\@aboverulesep=\dimen163 \@aboverulesep=\dimen193
\@belowrulesep=\dimen164 \@belowrulesep=\dimen194
\@thisruleclass=\count284 \@thisruleclass=\count306
\@lastruleclass=\count285 \@lastruleclass=\count307
\@thisrulewidth=\dimen165 \@thisrulewidth=\dimen195
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/hyperref.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/hyperref.sty
Package: hyperref 2024-11-05 v7.01l Hypertext links for LaTeX Package: hyperref 2024-11-05 v7.01l Hypertext links for LaTeX
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/iftex/iftex.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/iftex/iftex.sty
Package: iftex 2024/12/12 v1.0g TeX engine tests Package: iftex 2024/12/12 v1.0g TeX engine tests
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty
Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO)
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/kvdefinekeys/kvdefine
keys.sty
Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO)
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/pdfescape/pdfescape.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/pdfescape/pdfescape.s
ty
Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO)
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/pdftexcmds/pdftexcmds Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO)
.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/infwarerr/infwarerr.sty
Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO
)
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/infwarerr/infwarerr.s
ty
Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
) )
Package pdftexcmds Info: \pdf@primitive is available. Package pdftexcmds Info: \pdf@primitive is available.
Package pdftexcmds Info: \pdf@ifprimitive is available. Package pdftexcmds Info: \pdf@ifprimitive is available.
Package pdftexcmds Info: \pdfdraftmode found. Package pdftexcmds Info: \pdfdraftmode not found.
)) )) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hycolor/hycolor.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hycolor/hycolor.sty
Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/nameref.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/nameref.sty
Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/refcount/refcount.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/refcount/refcount.sty
Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/gettitlestring/gettit
lestring.sty
Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/kvoptions/kvoptions.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/kvoptions/kvoptions.sty
Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO)
)) ))
\c@section@level=\count286 \c@section@level=\count308
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/etoolbox/etoolbox.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/etoolbox/etoolbox.sty
Package: etoolbox 2025/02/11 v2.5l e-TeX tools for LaTeX (JAW) Package: etoolbox 2025/02/11 v2.5l e-TeX tools for LaTeX (JAW)
\etb@tempcnta=\count287 \etb@tempcnta=\count309
) (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/stringenc/stringenc.sty
Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO)
) )
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/stringenc/stringenc.s \@linkdim=\dimen196
ty \Hy@linkcounter=\count310
Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO \Hy@pagecounter=\count311
)
)
\@linkdim=\dimen166
\Hy@linkcounter=\count288
\Hy@pagecounter=\count289
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/pd1enc.def (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/pd1enc.def
File: pd1enc.def 2024-11-05 v7.01l Hyperref: PDFDocEncoding definition (HO) File: pd1enc.def 2024-11-05 v7.01l Hyperref: PDFDocEncoding definition (HO)
Now handling font encoding PD1 ...
... no UTF-8 mapping file for font encoding PD1
) (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/intcalc/intcalc.sty ) (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/intcalc/intcalc.sty
Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
) )
\Hy@SavedSpaceFactor=\count290 \Hy@SavedSpaceFactor=\count312
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/puenc.def (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/puenc.def
File: puenc.def 2024-11-05 v7.01l Hyperref: PDF Unicode definition (HO) File: puenc.def 2024-11-05 v7.01l Hyperref: PDF Unicode definition (HO)
Now handling font encoding PU ...
... no UTF-8 mapping file for font encoding PU
) )
Package hyperref Info: Hyper figures OFF on input line 4157. Package hyperref Info: Hyper figures OFF on input line 4157.
Package hyperref Info: Link nesting OFF on input line 4162. Package hyperref Info: Link nesting OFF on input line 4162.
@@ -236,26 +316,21 @@ Package hyperref Info: Plain pages OFF on input line 4172.
Package hyperref Info: Backreferencing OFF on input line 4177. Package hyperref Info: Backreferencing OFF on input line 4177.
Package hyperref Info: Implicit mode ON; LaTeX internals redefined. Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
Package hyperref Info: Bookmarks ON on input line 4424. Package hyperref Info: Bookmarks ON on input line 4424.
\c@Hy@tempcnt=\count291 \c@Hy@tempcnt=\count313
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/url/url.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/url/url.sty
\Urlmuskip=\muskip18 \Urlmuskip=\muskip18
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
) )
LaTeX Info: Redefining \url on input line 4763. LaTeX Info: Redefining \url on input line 4763.
\XeTeXLinkMargin=\dimen167 \XeTeXLinkMargin=\dimen197
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/bitset/bitset.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/bitset/bitset.sty
Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/bigintcalc/bigintcalc Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO)
.sty
Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO
)
)) ))
\Fld@menulength=\count292 \Fld@menulength=\count314
\Field@Width=\dimen168 \Field@Width=\dimen198
\Fld@charsize=\dimen169 \Fld@charsize=\dimen199
Package hyperref Info: Hyper figures OFF on input line 6042. Package hyperref Info: Hyper figures OFF on input line 6042.
Package hyperref Info: Link nesting OFF on input line 6047. Package hyperref Info: Link nesting OFF on input line 6047.
Package hyperref Info: Hyper index ON on input line 6050. Package hyperref Info: Hyper index ON on input line 6050.
@@ -263,161 +338,178 @@ Package hyperref Info: backreferencing OFF on input line 6057.
Package hyperref Info: Link coloring OFF on input line 6062. Package hyperref Info: Link coloring OFF on input line 6062.
Package hyperref Info: Link coloring with OCG OFF on input line 6067. Package hyperref Info: Link coloring with OCG OFF on input line 6067.
Package hyperref Info: PDF/A mode OFF on input line 6072. Package hyperref Info: PDF/A mode OFF on input line 6072.
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/atbegshi-ltx.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/atbegshi-ltx.sty
Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi
package with kernel methods package with kernel methods
) )
\Hy@abspage=\count293 \Hy@abspage=\count315
\c@Item=\count294 \c@Item=\count316
\c@Hfootnote=\count295 \c@Hfootnote=\count317
) )
Package hyperref Info: Driver (autodetected): hpdftex. Package hyperref Info: Driver (autodetected): hxetex.
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/hpdftex.def (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/hyperref/hxetex.def
File: hpdftex.def 2024-11-05 v7.01l Hyperref driver for pdfTeX File: hxetex.def 2024-11-05 v7.01l Hyperref driver for XeTeX
\pdfm@box=\box57
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/atveryend-ltx.sty \c@Hy@AnnotLevel=\count318
Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac \HyField@AnnotCount=\count319
kage \Fld@listcount=\count320
with kernel methods \c@bookmark@seq@number=\count321
) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
\Fld@listcount=\count296
\c@bookmark@seq@number=\count297
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/rerunfilecheck/rerunfil
echeck.sty
Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO)
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/base/atveryend-ltx.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/uniquecounter/uniquec Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend package
ounter.sty with kernel methods
) (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
) )
Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 285.
85.
) )
\Hy@SectionHShift=\skip54 \Hy@SectionHShift=\skip61
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/float/float.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/float/float.sty
Package: float 2001/11/08 v1.3d Float enhancements (AL) Package: float 2001/11/08 v1.3d Float enhancements (AL)
\c@float@type=\count298 \c@float@type=\count322
\float@exts=\toks25 \float@exts=\toks23
\float@box=\box54 \float@box=\box58
\@float@everytoks=\toks26 \@float@everytoks=\toks24
\@floatcapt=\box55 \@floatcapt=\box59
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/caption.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/caption.sty
Package: caption 2023/08/05 v3.6o Customizing captions (AR) Package: caption 2023/08/05 v3.6o Customizing captions (AR)
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/caption3.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/caption3.sty
Package: caption3 2023/07/31 v2.4d caption3 kernel (AR) Package: caption3 2023/07/31 v2.4d caption3 kernel (AR)
\caption@tempdima=\dimen170 \caption@tempdima=\dimen256
\captionmargin=\dimen171 \captionmargin=\dimen257
\caption@leftmargin=\dimen172 \caption@leftmargin=\dimen258
\caption@rightmargin=\dimen173 \caption@rightmargin=\dimen259
\caption@width=\dimen174 \caption@width=\dimen260
\caption@indent=\dimen175 \caption@indent=\dimen261
\caption@parindent=\dimen176 \caption@parindent=\dimen262
\caption@hangindent=\dimen177 \caption@hangindent=\dimen263
Package caption Info: Standard document class detected. Package caption Info: Standard document class detected.
) )
\c@caption@flags=\count299 \c@caption@flags=\count323
\c@continuedfloat=\count300 \c@continuedfloat=\count324
Package caption Info: float package is loaded. Package caption Info: float package is loaded.
Package caption Info: hyperref package is loaded. Package caption Info: hyperref package is loaded.
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/subcaption.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/caption/subcaption.sty
Package: subcaption 2023/07/28 v1.6b Sub-captions (AR) Package: subcaption 2023/07/28 v1.6b Sub-captions (AR)
Package caption Info: New subtype `subfigure' on input line 238. Package caption Info: New subtype `subfigure' on input line 238.
\c@subfigure=\count301 \c@subfigure=\count325
Package caption Info: New subtype `subtable' on input line 238. Package caption Info: New subtype `subtable' on input line 238.
\c@subtable=\count302 \c@subtable=\count326
) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/geometry/geometry.sty ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/geometry/geometry.sty
Package: geometry 2020/01/02 v5.9 Page Geometry Package: geometry 2020/01/02 v5.9 Page Geometry
(d:/settings/Language/texlive/2025/texmf-dist/tex/generic/iftex/ifvtex.sty (d:/settings/Language/texlive/2025/texmf-dist/tex/generic/iftex/ifvtex.sty
Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
) )
\Gm@cnth=\count303 \Gm@cnth=\count327
\Gm@cntv=\count304 \Gm@cntv=\count328
\c@Gm@tempcnt=\count305 \c@Gm@tempcnt=\count329
\Gm@bindingoffset=\dimen178 \Gm@bindingoffset=\dimen264
\Gm@wd@mp=\dimen179 \Gm@wd@mp=\dimen265
\Gm@odd@mp=\dimen180 \Gm@odd@mp=\dimen266
\Gm@even@mp=\dimen181 \Gm@even@mp=\dimen267
\Gm@layoutwidth=\dimen182 \Gm@layoutwidth=\dimen268
\Gm@layoutheight=\dimen183 \Gm@layoutheight=\dimen269
\Gm@layouthoffset=\dimen184 \Gm@layouthoffset=\dimen270
\Gm@layoutvoffset=\dimen185 \Gm@layoutvoffset=\dimen271
\Gm@dimlist=\toks27 \Gm@dimlist=\toks25
) ) (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/setspace/setspace.sty
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/setspace/setspace.sty
Package: setspace 2022/12/04 v6.7b set line spacing Package: setspace 2022/12/04 v6.7b set line spacing
) ) (./report.aux)
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/l3backend/l3backend-pdf
tex.def
File: l3backend-pdftex.def 2024-05-08 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count306
\l__pdf_internal_box=\box56
)
No file report.aux.
\openout1 = `report.aux'. \openout1 = `report.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 24. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 25.
LaTeX Font Info: ... okay on input line 24. LaTeX Font Info: ... okay on input line 25.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 24. LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 25.
LaTeX Font Info: ... okay on input line 24. LaTeX Font Info: ... okay on input line 25.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 24. LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 25.
LaTeX Font Info: ... okay on input line 24. LaTeX Font Info: ... okay on input line 25.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 24. LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 25.
LaTeX Font Info: ... okay on input line 24. LaTeX Font Info: ... okay on input line 25.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 24. LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 25.
LaTeX Font Info: ... okay on input line 24. LaTeX Font Info: ... okay on input line 25.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 24. LaTeX Font Info: Checking defaults for TU/lmr/m/n on input line 25.
LaTeX Font Info: ... okay on input line 24. LaTeX Font Info: ... okay on input line 25.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 24. LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 25.
LaTeX Font Info: ... okay on input line 24. LaTeX Font Info: ... okay on input line 25.
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 24. LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 25.
LaTeX Font Info: ... okay on input line 24. LaTeX Font Info: ... okay on input line 25.
LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 24. LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 25.
LaTeX Font Info: ... okay on input line 24. LaTeX Font Info: ... okay on input line 25.
LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 25.
LaTeX Font Info: ... okay on input line 25.
(d:/settings/Language/texlive/2025/texmf-dist/tex/context/base/mkii/supp-pdf.mk Package fontspec Info:
ii (fontspec) Adjusting the maths setup (use [no-math] to avoid
[Loading MPS to PDF converter (version 2006.09.02).] (fontspec) this).
\scratchcounter=\count307
\scratchdimen=\dimen186
\scratchbox=\box57
\nofMPsegments=\count308
\nofMParguments=\count309
\everyMPshowfont=\toks28
\MPscratchCnt=\count310
\MPscratchDim=\dimen187
\MPnumerator=\count311
\makeMPintoPDFobject=\count312
\everyMPtoPDFconversion=\toks29
)
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-b
ase.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
85.
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/latexconfig/epstopdf-sy \symlegacymaths=\mathgroup6
s.cfg LaTeX Font Info: Overwriting symbol font `legacymaths' in version `bold'
File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv (Font) OT1/cmr/m/n --> OT1/cmr/bx/n on input line 25.
e LaTeX Font Info: Redeclaring math accent \acute on input line 25.
)) LaTeX Font Info: Redeclaring math accent \grave on input line 25.
Package hyperref Info: Link coloring OFF on input line 24. LaTeX Font Info: Redeclaring math accent \ddot on input line 25.
LaTeX Font Info: Redeclaring math accent \tilde on input line 25.
LaTeX Font Info: Redeclaring math accent \bar on input line 25.
LaTeX Font Info: Redeclaring math accent \breve on input line 25.
LaTeX Font Info: Redeclaring math accent \check on input line 25.
LaTeX Font Info: Redeclaring math accent \hat on input line 25.
LaTeX Font Info: Redeclaring math accent \dot on input line 25.
LaTeX Font Info: Redeclaring math accent \mathring on input line 25.
LaTeX Font Info: Redeclaring math symbol \Gamma on input line 25.
LaTeX Font Info: Redeclaring math symbol \Delta on input line 25.
LaTeX Font Info: Redeclaring math symbol \Theta on input line 25.
LaTeX Font Info: Redeclaring math symbol \Lambda on input line 25.
LaTeX Font Info: Redeclaring math symbol \Xi on input line 25.
LaTeX Font Info: Redeclaring math symbol \Pi on input line 25.
LaTeX Font Info: Redeclaring math symbol \Sigma on input line 25.
LaTeX Font Info: Redeclaring math symbol \Upsilon on input line 25.
LaTeX Font Info: Redeclaring math symbol \Phi on input line 25.
LaTeX Font Info: Redeclaring math symbol \Psi on input line 25.
LaTeX Font Info: Redeclaring math symbol \Omega on input line 25.
LaTeX Font Info: Redeclaring math symbol \mathdollar on input line 25.
LaTeX Font Info: Redeclaring symbol font `operators' on input line 25.
LaTeX Font Info: Encoding `OT1' has changed to `TU' for symbol font
(Font) `operators' in the math version `normal' on input line 25.
LaTeX Font Info: Overwriting symbol font `operators' in version `normal'
(Font) OT1/cmr/m/n --> TU/lmr/m/n on input line 25.
LaTeX Font Info: Encoding `OT1' has changed to `TU' for symbol font
(Font) `operators' in the math version `bold' on input line 25.
LaTeX Font Info: Overwriting symbol font `operators' in version `bold'
(Font) OT1/cmr/bx/n --> TU/lmr/m/n on input line 25.
LaTeX Font Info: Overwriting symbol font `operators' in version `normal'
(Font) TU/lmr/m/n --> TU/lmr/m/n on input line 25.
LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal'
(Font) OT1/cmr/m/it --> TU/lmr/m/it on input line 25.
LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal'
(Font) OT1/cmr/bx/n --> TU/lmr/b/n on input line 25.
LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal'
(Font) OT1/cmss/m/n --> TU/lmss/m/n on input line 25.
LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal'
(Font) OT1/cmtt/m/n --> TU/lmtt/m/n on input line 25.
LaTeX Font Info: Overwriting symbol font `operators' in version `bold'
(Font) TU/lmr/m/n --> TU/lmr/b/n on input line 25.
LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold'
(Font) OT1/cmr/bx/it --> TU/lmr/b/it on input line 25.
LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold'
(Font) OT1/cmss/bx/n --> TU/lmss/b/n on input line 25.
LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold'
(Font) OT1/cmtt/m/n --> TU/lmtt/b/n on input line 25.
Package hyperref Info: Link coloring OFF on input line 25.
(./report.out) (./report.out)
\@outlinefile=\write3 \@outlinefile=\write3
\openout3 = `report.out'. \openout3 = `report.out'.
Package hyperref Warning: Rerun to get /PageLabels entry.
Package caption Info: Begin \AtBeginDocument code. Package caption Info: Begin \AtBeginDocument code.
Package caption Info: End \AtBeginDocument code. Package caption Info: End \AtBeginDocument code.
*geometry* driver: auto-detecting *geometry* driver: auto-detecting
*geometry* detected driver: pdftex *geometry* detected driver: xetex
*geometry* verbose mode - [ preamble ] result: *geometry* verbose mode - [ preamble ] result:
* driver: pdftex * driver: xetex
* paper: a4paper * paper: a4paper
* layout: <same size as paper> * layout: <same size as paper>
* layoutoffset:(h,v)=(0.0pt,0.0pt) * layoutoffset:(h,v)=(0.0pt,0.0pt)
@@ -448,149 +540,42 @@ Package caption Info: End \AtBeginDocument code.
* \@reversemarginfalse * \@reversemarginfalse
* (1in=72.27pt=25.4mm, 1cm=28.453pt) * (1in=72.27pt=25.4mm, 1cm=28.453pt)
LaTeX Font Info: Trying to load font information for U+msa on input line 27. LaTeX Font Info: Trying to load font information for U+msa on input line 28.
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsa.fd (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsa.fd
File: umsa.fd 2013/01/14 v3.01 AMS symbols A File: umsa.fd 2013/01/14 v3.01 AMS symbols A
) )
LaTeX Font Info: Trying to load font information for U+msb on input line 27. LaTeX Font Info: Trying to load font information for U+msb on input line 28.
(d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsb.fd (d:/settings/Language/texlive/2025/texmf-dist/tex/latex/amsfonts/umsb.fd
File: umsb.fd 2013/01/14 v3.01 AMS symbols B File: umsb.fd 2013/01/14 v3.01 AMS symbols B
) )
! Missing number, treated as zero.
<to be read again>
Y
l.27
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
! Illegal unit of measure (pt inserted).
<to be read again>
Y
l.27
Dimensions can be in units of em, ex, in, pt, pc,
cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one!
I'll assume that you meant to say pt, for printer's points.
To recover gracefully from this error, it's best to
delete the erroneous units; e.g., type `2' to delete
two letters. (See Chapter 27 of The TeXbook.)
! Missing = inserted for \ifdim.
<to be read again>
Y
l.27
I was expecting to see `<', `=', or `>'. Didn't.
! Missing number, treated as zero.
<to be read again>
Y
l.27
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
! Illegal unit of measure (pt inserted).
<to be read again>
Y
l.27
Dimensions can be in units of em, ex, in, pt, pc,
cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one!
I'll assume that you meant to say pt, for printer's points.
To recover gracefully from this error, it's best to
delete the erroneous units; e.g., type `2' to delete
two letters. (See Chapter 27 of The TeXbook.)
! Missing number, treated as zero.
<to be read again>
\unskip
l.27
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
! Illegal unit of measure (pt inserted).
<to be read again>
\unskip
l.27
Dimensions can be in units of em, ex, in, pt, pc,
cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one!
I'll assume that you meant to say pt, for printer's points.
To recover gracefully from this error, it's best to
delete the erroneous units; e.g., type `2' to delete
two letters. (See Chapter 27 of The TeXbook.)
! Missing number, treated as zero.
<to be read again>
Y
l.27
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
! Illegal unit of measure (pt inserted).
<to be read again>
Y
l.27
Dimensions can be in units of em, ex, in, pt, pc,
cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one!
I'll assume that you meant to say pt, for printer's points.
To recover gracefully from this error, it's best to
delete the erroneous units; e.g., type `2' to delete
two letters. (See Chapter 27 of The TeXbook.)
[1 [1
{d:/settings/Language/texlive/2025/texmf-var/fonts/map/pdftex/updmap/pdftex.map ]
}{d:/settings/Language/texlive/2025/texmf-dist/fonts/enc/dvips/cm-super/cm-supe
r-t1.enc}{d:/settings/Language/texlive/2025/texmf-dist/fonts/enc/dvips/cm-super
/cm-super-ts1.enc}]
[2] [2]
[3] [3]
[4] [4]
File: ../plots/training_curves.png Graphic file (type bmp)
LaTeX Warning: File `../plots/training_curves.png' not found on input line 200. <../plots/training_curves.png>
File: ../plots/evaluation_curve.png Graphic file (type bmp)
<../plots/evaluation_curve.png>
File: ../plots/epsilon_decay.png Graphic file (type bmp)
! Package pdftex.def Error: File `../plots/training_curves.png' not found: usin <../plots/epsilon_decay.png>
g draft setting.
See the pdftex.def package documentation for explanation.
Type H <return> for immediate help.
...
l.200 ...\textwidth]{../plots/training_curves.png}
Try typing <return> to proceed.
If that doesn't work, type X <return> to quit.
[5] [5]
[6] [6]
[7] (./report.aux) [7]
[8] (./report.aux)
*********** ***********
LaTeX2e <2024-11-01> patch level 2 LaTeX2e <2024-11-01> patch level 2
L3 programming layer <2025-01-18> L3 programming layer <2022/08/05>
*********** ***********
@@ -602,41 +587,16 @@ Package rerunfilecheck Warning: File `report.out' has changed.
(rerunfilecheck) or use package `bookmark'. (rerunfilecheck) or use package `bookmark'.
Package rerunfilecheck Info: Checksums for `report.out': Package rerunfilecheck Info: Checksums for `report.out':
(rerunfilecheck) Before: <no file> (rerunfilecheck) Before: D41D8CD98F00B204E9800998ECF8427E;0
(rerunfilecheck) After: A2A8A50B7B0BEEA9E24F458CB249099C;3723. (rerunfilecheck) After: A2A8A50B7B0BEEA9E24F458CB249099C;3723.
) )
Here is how much of TeX's memory you used: Here is how much of TeX's memory you used:
12070 strings out of 473190 15247 strings out of 473832
190542 string characters out of 5719980 312606 string characters out of 5733159
588446 words of memory out of 5000000 745017 words of memory out of 5000000
35134 multiletter control sequences out of 15000+600000 38133 multiletter control sequences out of 15000+600000
573316 words of font info for 72 fonts, out of 8000000 for 9000 566076 words of font info for 79 fonts, out of 8000000 for 9000
1141 hyphenation exceptions out of 8191 1348 hyphenation exceptions out of 8191
75i,10n,79p,580b,509s stack positions out of 10000i,1000n,20000p,200000b,200000s 74i,10n,92p,586b,409s stack positions out of 10000i,1000n,20000p,200000b,200000s
<d:/settings/Language/texlive/2025/texmf-dist/fonts/type1/public/amsfonts/cm/
cmmi10.pfb><d:/settings/Language/texlive/2025/texmf-dist/fonts/type1/public/ams
fonts/cm/cmmi8.pfb><d:/settings/Language/texlive/2025/texmf-dist/fonts/type1/pu
blic/amsfonts/cm/cmr10.pfb><d:/settings/Language/texlive/2025/texmf-dist/fonts/
type1/public/amsfonts/cm/cmr8.pfb><d:/settings/Language/texlive/2025/texmf-dist
/fonts/type1/public/amsfonts/cm/cmsy10.pfb><d:/settings/Language/texlive/2025/t
exmf-dist/fonts/type1/public/amsfonts/cm/cmsy6.pfb><d:/settings/Language/texliv
e/2025/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy8.pfb><d:/settings/Languag
e/texlive/2025/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb><d:/se
ttings/Language/texlive/2025/texmf-dist/fonts/type1/public/cm-super/sfbx1000.pf
b><d:/settings/Language/texlive/2025/texmf-dist/fonts/type1/public/cm-super/sfb
x1095.pfb><d:/settings/Language/texlive/2025/texmf-dist/fonts/type1/public/cm-s
uper/sfbx1200.pfb><d:/settings/Language/texlive/2025/texmf-dist/fonts/type1/pub
lic/cm-super/sfbx1440.pfb><d:/settings/Language/texlive/2025/texmf-dist/fonts/t
ype1/public/cm-super/sfrm1000.pfb><d:/settings/Language/texlive/2025/texmf-dist
/fonts/type1/public/cm-super/sfrm1095.pfb><d:/settings/Language/texlive/2025/te
xmf-dist/fonts/type1/public/cm-super/sfrm1200.pfb><d:/settings/Language/texlive
/2025/texmf-dist/fonts/type1/public/cm-super/sfrm1728.pfb><d:/settings/Language
/texlive/2025/texmf-dist/fonts/type1/public/cm-super/sfti1095.pfb><d:/settings/
Language/texlive/2025/texmf-dist/fonts/type1/public/cm-super/sftt1095.pfb>
Output written on report.pdf (7 pages, 278770 bytes).
PDF statistics:
188 PDF objects out of 1000 (max. 8388607)
140 compressed objects within 2 object streams
50 named destinations out of 1000 (max. 500000)
1 words of extra memory for PDF output out of 10000 (max. 10000000)
Output written on report.pdf (8 pages).
@@ -1,8 +1,9 @@
\documentclass[11pt,a4paper]{article} \documentclass[11pt,a4paper]{article}
% 包导入 % 包导入
\usepackage[utf8]{inputenc} \usepackage{xeCJK}
\usepackage[T1]{fontenc} \usepackage{fontspec}
\setCJKmainfont{SimSun}
\usepackage{graphicx} \usepackage{graphicx}
\usepackage{amsmath} \usepackage{amsmath}
\usepackage{amsfonts} \usepackage{amsfonts}
@@ -18,7 +19,7 @@
% 标题信息 % 标题信息
\title{Deep Q-Network for Space Invaders: \\ A Deep Reinforcement Learning Approach} \title{Deep Q-Network for Space Invaders: \\ A Deep Reinforcement Learning Approach}
\author{[Your Name] \\ [Your Student ID]} \author{刘航宇 \\ Student ID: [Your Student ID]}
\date{\today} \date{\today}
\begin{document} \begin{document}
@@ -26,7 +27,7 @@
\maketitle \maketitle
\begin{abstract} \begin{abstract}
This report presents the implementation and evaluation of a Deep Q-Network (DQN) agent for playing the Atari game Space Invaders. The agent was trained from scratch using Double DQN with experience replay and target network stabilization. After 2 million training steps, the agent achieved an average score of [X] on the Space Invaders environment, demonstrating competitive performance compared to baseline methods. This report details the algorithm selection, implementation details, experimental results, and analysis of the agent's performance. This report presents the implementation and evaluation of a Deep Q-Network (DQN) agent for playing the Atari game Space Invaders. The agent was trained from scratch using Double DQN with experience replay and target network stabilization. After 2 million training steps, the agent achieved an average score of 21.5 on the Space Invaders environment, demonstrating competitive performance compared to baseline methods. This report details the algorithm selection, implementation details, experimental results, and analysis of the agent's performance.
\end{abstract} \end{abstract}
\section{Introduction} \section{Introduction}
@@ -187,12 +188,12 @@ Warmup Steps & 10,000 \\
\subsection{Training Performance} \subsection{Training Performance}
The agent was trained for 2 million steps. Key observations: The agent was trained for 2 million steps on an NVIDIA RTX 4060 GPU. Key observations:
\begin{itemize} \begin{itemize}
\item \textbf{Initial Phase} (0-100K steps): Random exploration, average score around 10-15 \item \textbf{Initial Phase} (0-100K steps): Random exploration with warmup, average score around 10-15
\item \textbf{Learning Phase} (100K-500K steps): Gradual improvement, score increases to 30-50 \item \textbf{Learning Phase} (100K-600K steps): Gradual improvement, score increases to 15-19
\item \textbf{Convergence Phase} (500K-2M steps): Performance stabilizes around 100-200 \item \textbf{Convergence Phase} (600K-2M steps): Performance fluctuates between 13-21, with best performance at 1.8M steps
\end{itemize} \end{itemize}
\begin{figure}[H] \begin{figure}[H]
@@ -202,26 +203,44 @@ The agent was trained for 2 million steps. Key observations:
\label{fig:training_curves} \label{fig:training_curves}
\end{figure} \end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../plots/evaluation_curve.png}
\caption{Evaluation reward at different training checkpoints with standard deviation error bars}
\label{fig:evaluation_curve}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../plots/epsilon_decay.png}
\caption{Epsilon decay curve during training}
\label{fig:epsilon_decay}
\end{figure}
\subsection{Evaluation Results} \subsection{Evaluation Results}
The trained agent was evaluated over 20 episodes: The trained agent was evaluated over 20 episodes at different training checkpoints:
\begin{table}[H] \begin{table}[H]
\centering \centering
\begin{tabular}{@{}lc@{}} \begin{tabular}{@{}lcc@{}}
\toprule \toprule
\textbf{Metric} & \textbf{Value} \\ \textbf{Checkpoint} & \textbf{Average Score} & \textbf{Std Dev} \\
\midrule \midrule
Average Score & [X] \\ 100K steps & 17.80 & 5.23 \\
Standard Deviation & [Y] \\ 600K steps & 19.00 & 4.12 \\
Maximum Score & [Z] \\ 1.2M steps & 18.40 & 6.22 \\
Minimum Score & [W] \\ 1.8M steps & \textbf{21.50} & 4.98 \\
2.0M steps (final) & 14.60 & 5.28 \\
Best Model & 19.90 & 6.92 \\
\bottomrule \bottomrule
\end{tabular} \end{tabular}
\caption{Evaluation results} \caption{Evaluation results at different training checkpoints}
\label{tab:evaluation} \label{tab:evaluation}
\end{table} \end{table}
The best performance was achieved at 1.8M training steps with an average score of 21.50. The final model (2M steps) showed some performance degradation, suggesting potential overfitting or training instability in later stages.
\subsection{Comparison with Baselines} \subsection{Comparison with Baselines}
\begin{table}[H] \begin{table}[H]
@@ -231,8 +250,8 @@ Minimum Score & [W] \\
\textbf{Method} & \textbf{Average Score} & \textbf{Training Time} \\ \textbf{Method} & \textbf{Average Score} & \textbf{Training Time} \\
\midrule \midrule
Random Agent & $\sim$5 & N/A \\ Random Agent & $\sim$5 & N/A \\
Our DQN & [X] & [Time] \\ Our DQN (Best) & 21.50 & $\sim$6 hours \\
Stable-Baselines3 DQN & [SB3 Score] & [SB3 Time] \\ Our DQN (Final) & 14.60 & $\sim$6 hours \\
Human Player & $\sim$200 & N/A \\ Human Player & $\sim$200 & N/A \\
\bottomrule \bottomrule
\end{tabular} \end{tabular}
@@ -275,9 +294,9 @@ Future improvements could include:
\section{Conclusion} \section{Conclusion}
This project successfully implemented a DQN agent for playing Space Invaders from raw pixel inputs. The agent achieved an average score of [X], demonstrating competitive performance compared to baseline methods. The implementation highlights the effectiveness of deep reinforcement learning for Atari games and provides a solid foundation for exploring more advanced algorithms. This project successfully implemented a DQN agent for playing Space Invaders from raw pixel inputs. The agent achieved an average score of 21.50 at the best checkpoint (1.8M steps), demonstrating competitive performance compared to random agents ($\sim$5). The implementation highlights the effectiveness of deep reinforcement learning for Atari games and provides a solid foundation for exploring more advanced algorithms.
The DQN algorithm, while relatively simple, remains a powerful approach for discrete action space problems. The key innovations of experience replay and target networks are crucial for stable training. Future work could explore more advanced variants like Rainbow DQN to further improve performance. The DQN algorithm, while relatively simple, remains a powerful approach for discrete action space problems. The key innovations of experience replay and target networks are crucial for stable training. The use of Double DQN helped reduce overestimation bias, though some performance fluctuation was observed during training. Future work could explore more advanced variants like Rainbow DQN, Prioritized Experience Replay, or Dueling DQN architecture to further improve performance and training stability.
\section*{References} \section*{References}