本プログラムで扱うPERT図では,科目全体が一つの依存関係になっている. 科目全体を学習範囲と設定する場合,すべての内容を網羅的に学習することが目標となってしまう. 入試に向けて勉強する方法としては正しいが,テスト対策における優先度設定には同じ優先度を使用することはできない.
テスト期間など限られた期間での学習ではテスト範囲に絞り込んだ効率的な学習が求められる. そのため,テスト期間の単元のみを扱うCPM使用が必要になる. プログラム的にタスクの範囲を指定する手法を提案する.
\begin{flushleft} \textbf{範囲選択} \end{flushleft}
まず,Start,Endというタスクを用意する. 使用範囲にはタスク番号のリストを使用する.
\begin{itemize}
\item Start タスク番号を"0"とし,所要時間を0にする. このタスクは実質的に開始を示すダミータスクになる. \item 他タスク 各タスクの前提タスクがリストに含まれていないものだった場合無視する. その後,前提タスクが存在しなくなってしまった場合は,前提タスクを"0"とする. これにより,不足している前提タスクが開始のダミータスクとして設定される. \item End タスク番号を"999"とし,所要時間を0にする. リストと他タスクの前提タスクに含まれているタスクの差集合を,前単元として存在しない単元番号の集合として抽出する. それらをEndの前提タスクとして扱う. 実質的に終了を表すダミータスクになる.
\end{itemize}
これにより,スケジュール全体において開始と終了を示すダミータスクを使用して, 他のタスクに与える影響を排除しつつ,適切な前提タスクのつながりを確保できる.