タスクスケジュール

タスクスケジュールというと、通常OSの各プロセスの優先度を元にCPU割り当て時間と順序を決めていくやつを指しますが、ここではそれはおいといて、一般的なスケジュールを考えます。つまり、仕事の場面にてやらなきゃいけない案件がいくつかあってそれぞれに重要度があってかつ締め切りがあって、てな場合です。

いわゆるスケジュールってやつは実際に作ろうと思うと難しいです。午前はこれやって午後の2時間はこれやってその後これをやって・・・と頭の中ではイメージするんですが、重要度の高いものを先にやらなきゃいけなかったり、重要度の高いものを優先していると重要度の低いものの締め切りが近づいていて・・・とか。ってことで、ここではそれらを徹底的にモデル化してみようと思います。似たようなことはおそらくすでに誰かが考えているんでしょうけど、まぁここは私流に考えてみます。

まず、時間は有限であるとして(勤務時間は1日で一定時間)、日々の仕事は複数の案件からなると考えます。個々の案件をタスクと呼ぶことにしましょう。タスクにはそれぞれの重要度があって締め切り日時が決まっていて、タスクをこなすのに要するであろうと思われる時間がわかっています。このとき、タスクをどの順に並べて実際に取りかかっていくかを考えます。

とりあえず締め切り最悪法を提案します。これは、それぞれのタスクの締め切りぎりぎりになるまで手をつけないという方針でスケジュールする方法です。今与えられたタスクすべてを締め切りが最も遠い順に並べます。最も遠いタスクの締め切りぴったりにそのタスクを終えられるようにそのタスクの開始時間を決めます。2番目に締め切りが遠いタスクでは、その締め切りぴったりの時に1番目に締め切りが遠いタスクにすでに取りかからなければいけないかどうかで条件分岐します。取りかからないといけない場合は、1番目のタスクに取りかかる開始時間ぴったりに2番目のタスクを終えられるよう2番目のタスクの開始時間を決めます。取りかからなくてもよい場合は、2番目のタスクの締め切りぴったりちょうどに2番目のタスクを終えられるよう2番目のタスクの開始時間を決めます。ここで、2番目のタスクが終わってから1番目のタスクに取りかかるまでの間に空いた時間を暇と呼ぶことにします。これを永遠と繰り返していくことで、すべてのタスクをスケジュールしてきます。

ここでできあがったスケジュールは、いわば最悪の場合のシナリオです。つまり、このスケジュールよりも少しでも遅れてしまうと締め切りがすぎてしまうタスクが出てきてしまい、暇のあるところまで取り戻しができなくなります。このスケジュールを下回らない範囲でタスクをこなしていけばよいことになります。

ここで、重要度に移りましょう。重要度の高いタスクは、締め切りはあるもののできるだけ早く仕上げる方がよいという意味にします。先の締め切り最悪法で定義された暇のところで、今与えられたタスクのうちもっとも重要度の高いタスクに取りかかるようにすればムダがなくなります。

暇の時間での取りかかりにより重要度の高いタスクを終えられた場合、タスクが減った分スケジュールが変わるので、締め切り最悪法により再度スケジュールを作ります。で、あとはその繰り返し。

うん、我ながらなかなかいいアルゴリズムを作れた。あとはこれを実践するだけだ。さぁ個別のタスクの締め切りと重要度とこなすのに要するであろう見積もり時間を登録すれば、後はコンピュータが勝手にスケジュールを生成してくれる。で、できあがったスケジュールは・・・あ、すでに間に合わんわな。こうして今日も残業するのでした。

(上記は架空の話であり、現実の会社員のスケジュールや残業時間とは一切関係ございません)

このブログ記事について

このページは、らるるが2005年10月 7日 04:12に書いたブログ記事です。

ひとつ前のブログ記事は「時間は大事」です。

次のブログ記事は「Google Maps APIがらみのメモ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0