这是我论文的第五部分：

\begin{table}
\begin{center}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
V.S. & TvT & TvP & TvZ & PvP & PvZ & ZvZ \\
\hline
\#Replays & 4897 & 7894 & 9996 & 4334 & 6509 & 2989 \\
\hline
\end{tabular}
\end{center}
\caption{\textbf{The number of replays after applying our pipeline.}}
\label{table:replays}
\end{table}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Preprocessing}
There are 64396 replays in SC2LE, which could be split into 6 groups according to the races in the matches.
To ensure the quality of the replays in our dataset, we drop out all the replays dissatisfying the criteria:
\begin{itemize}
 \item Total frames of a match must be greater than 10000.
 \item The APM (Actions Per Minute) of both players must be higher than 10.
 \item The MMR (Match Making Ratio) of both players must be higher than 1000.
\end{itemize}
Because low APM means that the player is standing around while low MMR refers to a broken replay or a player who is weak.

After applying these criteria, we obtain 36619 high quality replays, which are unbroken and played by relatively professional players.
The number of replays in each group after preprocessing is summarized in Table~\ref{table:replays}.
% Figure~\ref{fig:density} shows the densities of APM and MMR among all 4897 replays.
% Most players' APMs are around 100 while their MMR are roughly 4000.
% Interestingly, the densities of APM and MMR from winners and losers have similar distribution, which shows that APM and MMR are not the key factors to win a match.
% \begin{figure\*}[t]
% \begin{center}
% \includegraphics[width=0.45\linewidth]{images/APM\_PLOT}
% \includegraphics[width=0.45\linewidth]{images/MMR\_PLOT}
% \end{center}
% \caption{\textbf{Density plots of APM and MMR among all the preprocessed replays.} For APM and MMR, we also plot the densities both from the winners' view and losers' view. Surprisingly, there seems no strong connection between APM, MMR and winning. Best viewed in color.}
% \label{fig:density}
% \end{figure\*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Parsing Replays}
\label{subsection:parse}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\paragraph{Build Order Space}
We define a high-level action space $A$, which consists of four groups: Build a building, Train a unit, Research a technique and Morph (Update) a building\footnote{Cancel, Halt and Stop certain actions from $A$ are also included for completion.}.
We also define an extra action $a\_\emptyset$, which means doing nothing.
Both $A$ and $a\_\emptyset$ constitute the entire build order space.
\paragraph{Observation Definition}
Each observation we extract includes (1) buildings, units and techniques owned by the player, (2) resources used and owned by the player and (3) enemy units and buildings which are observed by the player.
\paragraph{Parsing Process}
The preprocessed replays are parsed using Algorithm~\ref{algo:parse\_replay} with PySC2, which is a python API designed for reading replays in StarCraft II.
When parsing replays, we extract an observation $o\_t$ of current state and an action set $A\_t$ every $n$ frames, where $A\_t$ contains all actions since $o\_{t-1}$.
The first action in $A\_t$ that belongs to $A$ is set to be the target build order for observation $o\_{t-1}$.
If there's no action belonging to $A$, we take $a\_\emptyset$ as the target.
When reaching the end of a replay, we save all (observation, action) pairs and the final result of the match into the corresponding local file.
$n$ is set to be $8$ in our experiments, because in most cases, there's at most one action belonging to $A$ every 8 frames.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{algorithm}[t]
\caption{Replay Parser}
\label{algo:parse\_replay}
Global: \textbf{List} states = []

Global: \textbf{Observation} previousObservation = None

\While{True}{
\textbf{Observation} currentObservation $\leftarrow$ observation of current frame

\textbf{List} actions $\leftarrow$ actions conducted since previousObservation

\textbf{Action} action = $a\_\emptyset$

\For{a in actions}{
\If{$a \in \{Build, Train, Research, Morph\}$}{
action = a

break
}
}

states.append((previousObservation, action))

previousObservation $\leftarrow$ currentObservation

\If{reach the end of the replay}{
\textbf{Result} result $\leftarrow$ result of this match (win or lose)

\Return (result, states)
}
Skip $n$ frames
}
\end{algorithm}

不要回复
이 글의 다섯 번째 부분입니다.\begin{table}\begin{center}\BEGIN{TABLE}{|C|C|C|C|C|C|C|C|}\hlineV.S. & TvT & TvP & TvZ & PvP & PvZ & ZvZ \\\hline재생 & 4897 & 7894 & 9996 & 4334 & 6509 & 2989 \\ \# 재생 \\ \# 재생 \\ \# 재생 \\ \# 재생 \\ \# 재생 \\ \# 재생 \\ \\ \# 재생\hline\end{표}\end{center}\caption{\textbf{파이프라인 적용 후 리플레이 횟수입니다.}}\label{table:replays}\end{테이블}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsection{전처리}SC2LE에는 64396개의 리플레이가 있으며, 경기의 레이스에 따라 6개의 그룹으로 나눌 수 있습니다.데이터 세트의 리플레이 품질을 보장하기 위해 기준을 충족하지 않는 모든 리플레이를 삭제합니다:\begin{itemize} \항목 경기의 총 프레임이 10000보다 커야 합니다. \item 두 플레이어의 APM(분당 액션 수)이 10보다 높아야 합니다. \item 두 플레이어의 MMR(매치 메이킹 비율)이 1000보다 높아야 합니다.\end{itemize}APM이 낮다는 것은 플레이어가 서성거리고 있다는 의미이고, MMR이 낮다는 것은 리플레이가 깨졌거나 플레이어가 약하다는 의미이기 때문입니다.이러한 기준을 적용한 결과, 끊어지지 않고 비교적 프로페셔널한 플레이어가 플레이한 고품질 리플레이 36619개를 얻었습니다.전처리 후 각 그룹의 리플레이 수는 표~\ref{표:리플레이}에 요약되어 있습니다.그림~\ref{fig:density}는 전체 4897개의 리플레이 중 APM과 MMR의 밀도를 보여줍니다.대부분의 플레이어의 APM은 약 100이고 MMR은 약 4000입니다.흥미롭게도 승자와 패자의 APM과 MMR 밀도가 비슷한 분포를 보이는데, 이는 APM과 MMR이 경기 승리의 핵심 요소가 아니라는 것을 보여줍니다.% \begin{figure\*}[t]% \begin{center}% \includegraphics[width=0.45\linewidth]{images/APM\_PLOT}% \includegraphics[width=0.45\linewidth]{images/MMR\_PLOT}% \end{center}% \caption{\textbf{사전 처리된 모든 리플레이 중 APM 및 MMR의 밀도 플롯입니다.} APM 및 MMR의 경우 승자 뷰와 패자 뷰 모두에서 밀도를 플롯합니다. 놀랍게도 APM, MMR과 승리 사이에는 큰 연관성이 없는 것으로 보입니다. 컬러로 보는 것이 가장 좋습니다.}% \label{fig:density}% \end{figure\*}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsection{재생 구문 분석}\label{subsection:parse}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\단락{빌드 순서 공간}네 개의 그룹으로 구성된 상위 레벨 액션 공간 $A$를 정의합니다: 건물 건설, 유닛 훈련, 기술 연구, 건물 모프(업데이트)\footnote{$A$의 특정 행동 취소, 중지, 중지도 완료를 위해 포함됩니다.}또한 아무것도 하지 않는 것을 의미하는 추가 액션 $a\_\emptyset$을 정의합니다.A$와 $a\_\emptyset$은 모두 전체 빌드 순서 공간을 구성합니다.\단락{옵저베이션 정의}우리가 추출하는 각 관찰에는 (1) 플레이어가 소유한 건물, 유닛, 기술, (2) 플레이어가 사용하고 소유한 자원, (3) 플레이어가 관찰한 적 유닛과 건물이 포함됩니다.\단락{파싱 프로세스}전처리된 리플레이는 스타크래프트 II에서 리플레이를 읽기 위해 설계된 파이썬 API인 PySC2와 함께 Algorithm~\ref{algo:parse\_replay}를 사용하여 파싱됩니다.리플레이를 구문 분석할 때 현재 상태에 대한 관측값 $o\_t$와 매 $n$ 프레임마다 액션 세트 $A\_t$를 추출하며, 여기서 $A\_t$는 $o\_{t-1}$ 이후의 모든 액션을 포함합니다.A\_t$에서 $A$에 속하는 첫 번째 액션은 관측값 $o\_{t-1}$에 대한 목표 빌드 순서로 설정됩니다.A$에 속하는 액션이 없는 경우 $a\_\emptyset$을 대상으로 삼습니다.리플레이가 끝나면 모든 (관찰, 액션) 쌍과 일치의 최종 결과를 해당 로컬 파일에 저장합니다.대부분의 경우 8프레임마다 최대 하나의 액션이 $A$에 속하기 때문에 실험에서는 $n$을 $8$로 설정했습니다.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\begin{algorithm}[t]\캡션{재생 구문 분석기}\label{algo:parse\_replay}Global: \textbf{List} states = []Global: \textbf{Observation} previousObservation = 없음\While{True}{\textbf{Observation} currentObservation $\왼쪽 화살표$ 현재 프레임의 관측값\textbf{List} action $\leftarrow$ previousObservation 이후 수행한 작업\textbf{Action} action = $a\_\emptyset$\액션에서 {a에 대해}{만약{$a \{빌드, 훈련, 연구, 모프\}$}에 \{$a\}가 있다면action = abreak}}states.append((previousObservation, action))이전 관찰 $\왼쪽 화살표$ 현재 관찰\If{재생의 끝에 도달}{\textbf{Result} 결과 $\leftarrow$ 이 경기의 결과(승리 또는 패배)\반환(결과, 상태)}n$ 프레임 건너뛰기}\end{algorithm}회신 필요 없음