ディープ・ブルー型プログラム
以上が、数理計画法を知らない私が考えた時間割作成ソフトのアルゴリズムです。やはり初回に言ったように「ディープ・ブルー型」なんだろうなと思いました。ざっとこんな点が対応しているように思えます。
| ディープ・ブルー | 時間割ソフト | |
| 考えること | 次の一手を打つ | 1つの授業の時間を割り当てる |
| 戦況の評価 | 相手が駒を動かした後の盤面 | 割り当てられていない授業の自由度 |
| ハッピーエンド(勝ち) | チェックメイトする | 全ての条件を満たした時間割が完成する |
| バッドエンド(負け) | チェックメイトされる(ことから逃れる手がない) | 条件が厳しすぎて時間割が成立しない |
ディープ・ブルー型では、人が教え込む必要がありましたが、時間割プログラムでは、「自由度の低いやつから試せ」「自由度が0なら戻れ」ということだけを教えたわけです。ただ、効率を上げるためには、もしかしたら他にも教えることがあったのかもしれません。
例えば、手作業で時間割を作るときによく気付く、「この時間は、2年生にまだ割り当てられてないクラスが3つもあるのに、この時間に入れられる授業が2つしかないから、この後どのように授業を割り当てようとしても無理!」みたいな大局的も判断ができると、特にそもそも時間割が成立しない場合は、かなりの時間短縮になるはずです。
これは授業マスタの最後に「1年未割当クラス数」「1年未割当授業数」「2年未割当クラス数」「2年未割当授業数」「3年未割当クラス数」「3年未割当授業数」という行を設定し、月1~金4のそれぞれでカウントし、どこかの学年またはどこかの時間で、未割当クラス数>未割当授業数 となったら、自由度0が出た時同様にやり直しさせる、ということをプログラムに加えるといいのかもしれません。(未割当クラス数>未割当授業数なら、必ず自由度0の授業が出てくる、というのなら不要だが、必ずそうなるのか、そうなるとは限らないのかがわからない)
また、初手の段階では最低の自由度は4です。ところが自由度4という授業はいくつもあるのです。こういうときに、どの自由度4の授業を入れていくのか、このあたりも巧拙がありそうで
実際には可能なのか?
プログラムとしては、ある意味しらみつぶしにやるようなものなので、理論的にはこのやり方で解があるなら、確実に作れるとは思うのですが、実際には可能なのでしょうか。
なるほど 完璧な作戦っスねーっ 不可能だという点に目をつぶればよぉ~
![]() |
ジョジョの奇妙な冒険 第4部 ダイヤモンドは砕けない 1 (ジャンプコミックスDIGITAL) 新品価格 |
![]()
と言われてしまいそうな気もします。
その最大の理由は、コンピュータと言えども手数が多すぎて、処理する時間がかかりすぎるのではないか、という懸念です。処理するハードはディープ・ブルーやアルファ碁のように当時の最先端技術を並べたスーパーコンピュータなんかではなくて、そこら辺にあるPCですから。特に条件が厳しすぎて時間割が成立しない場合、あらゆる可能そうなパターンを試してすべて潰していく必要があるので、白旗が上がるまでの時間が異様にかかりそうな気がしています。
前回のアルゴリズムではおそらく、授業を配置した順番が違うだけで、全く同じ配置の時間割の途中段階のものが何回も登場し、そのたびに自由度0で蹴られる、という場面が出てくることが予想され、1回蹴られたら同じ盤面になるようなコマの置き方をしなくていいい、というような指示もきっと必要になってくるはずです。(それをどうアルゴリズムとして、またコード化すればいいのかはわかりませんが)
また、実際にプログラムはAIのGoogleGeminiに作ってもらうのですが、授業マスタを添付して、こういう条件で時間割を作るプログラムを作ってくれ、とお願いするので、肝心のアルゴリズムはここで紹介した方法でやっているわけではなく、どうやら数理計画法のライブラリを取り入れてプログラムが走るみたいなので、もう少し私の思いもよらない方法で効率的にやっているのかもしれません。
ここまで、(4)~(6)と長々とした私のプログラム構想(妄想?)におつきあいくださりありがとうございました。AIによるPythonのプログラムが、実際にこのやり方でやっているのかどうかはわかりません。
次回からは、Pythonのインストール奮戦記、さらに実際にAIが作ったプログラムを走らせてどうだったかをみてみます。



コメント