NPっていうんですか?
センモン用語は知りませんが、ようするに順列組み合わせ爆発が起こるので、最適解が求められない問題というのはごく身近にありふれています。
たとえば宅配業者は多数の荷物を効率よく配達するために、配達計画を立てるわけです。
A宅からB宅、そしてC宅へ回るのか、それとも、C->A->Bと回るのか。
けれどお宅が10件超えると途端にだめになります。10!を計算すればすぐにわかります。
準最適解なら子供にだって導けます。しかし熟練した配達員さんほど、高度な計算をおこないます。そうして、20軒でも30軒でも1日で回ります。
あそこの家は、たいてい平日はいないから後回し。あっちは今日は雨だからたぶん居るな。よし、先に飯にしよう。
時に計算機が出す答えよりも優れた結果を出せるのです。しかしそれをぶち壊すのが官僚主義です。
さて、知ってる人は知っているのが、OSのスケジューラの問題です。最近はマルティコアがブームなので、ごみためまんと同じような、にわかOS専門家がボウフラのように湧いてきます。
OSのスケジューラ、あるいはタスクディスパッチャも最適化問題のひとつです。当然これも準々々々々々最適解を使います。何しろ、よくある生産管理パッケージソフトのように、翌日の生産計画を立てるための夕方5時開始のバッチ処理のために、必要な情報を午後3時に締め切ってしまうという阿呆な仕様と同じく、OSのスケジューラも、見切り発車や妥協のカタマリでしかありません。
あまり意識されないことですが、スケジュールというのは、実行開始時刻を過ぎたら何の意味もありません。そうかといって、スケジュールを立てている間、実行開始を待たせてしまうようなことあれば、それも意味がありません。
前者と後者は同じ事を言っているのですが、後者はごく身近にみられる風景であることに気付かない人も多いようです。
次の作業の見積依頼が来た。工数と計画を立てて欲しい。
計画が承認され次第、作業に入る。
ごみためまんはその指示に対してこう聞き返したことがあります。
計画の期間(開始日と終了日)はいつですか?
それに対する答えはこうです。
そりゃぁ計画を立ててみないとわからんだろ。
現場でよく勘違いされていることに、プロジェクト管理ツールの使用目的があります。
PERT図やガントチャートは、クリティカルパスを洗い出したりして、計画を洗練するのに使うわけですが、決して、
作業を積み上げて合計し、完了見込み日を知るためのツール
ではありません。本来の使い方は、単純積み上げでは期間内に収まらないものをリソースの追加投入で回避できるかどうか検討したり、クリティカルパスを解消して計画実行前にリスクの最小化をおこなうために用いるべきものなのです。
なので、計画途中で作業の追加を求められたときに、
納期を守れない理由の説明のための計画図
の作成をするためにプロジェクト管理ツールを用いるのは愚の骨頂であったりするのです。
OSのスケジューラというのは未だ進化の途上にあるため、どちらかというと愚の骨頂の方です。
単なるディスパッチャに何を期待しているのか?と言われそうですが、何も知らない彼らに過大な要求をしているのが現実です。