shiftect. for EDUCAには、全体生成・再生成・自動振替という三つの処理がある。
この三つは別々の機能に見えるが、同一の制御構造で動いている。
なぜ一体でなければならないのか。
全体生成とは何か。
月初に、その月の時間割を全コマ一括で生成する処理だ。
生徒・講師・教室の条件を読み込み、全ての制約を処理して配置を決める。
人間が月10〜12時間かけていた作業を、shiftect. for EDUCAが自動で行う。
再生成とは何か。
確定済みの配置を一部固定したまま、変更が必要な範囲だけを再度生成する処理だ。
講師が追加された、生徒が新たに入会した、条件が変わった。
そのたびに全体を組み直すのではなく、確定済みの配置は崩さずに、影響する範囲だけを再処理する。
自動振替とは何か。
欠席の連絡が届いたとき、確定済みの時間割の中から振替先を自動で探して提示する処理だ。
確定済みの配置を前提条件として固定し、その上で振替先だけを探索する。
この三つに共通しているのは、「何を固定し、何を探索するか」という問題の構造だ。
全体生成は固定対象がなく全てを探索する。
再生成は確定済みの配置を固定し、変更範囲を探索する。
自動振替は確定済みの時間割を固定し、振替先だけを探索する。
処理の名前は違うが、構造は同じだ。
この構造が同じであるということは、同一の制御エンジンで三つ全てを処理できるということを意味する。
逆にいえば、全体生成・再生成・自動振替を別々のシステムとして作った場合、それぞれが別の判断基準で動くことになり、整合性が保てなくなる。
全体生成で作った時間割と、再生成で変更した時間割と、自動振替で動かした配置が、同じ制約のもとで整合的に管理されていなければ、時間割は使い物にならない。
shiftect. for EDUCAが三つを一体として設計しているのは、そのためだ。