最適化(Optimization)のはなし

プログラムを組むとか、プロジェクトの人を動かすとか、テストケースを片っ端からつぶしていくとか(^^;)、そんな感じの逐次処理を行う業務を長いことやってると、無意識のうちに「最適化」について考えるようになります。
たとえば、

  • 駅までの道のりでもっとも時間がかからないようにはどうするか

とか、

  • キッチンで時間を掛けずに料理を作るにはどうするか

とか、

  • トイレでもっとも時間を掛けずに用を足すにはどうするか

とか(^^;)。
いや、ま、最適化したところで実質的な時間というのは、手間の割には縮まらないという事実は微妙にあるのですが、何とも言えないびんぼーくさい性格が首をもたげるというか。


最適化のための方法論としてはいくつかあって、

  1. 移動のための手順を削減する
  2. 確認のための手順を削減する
  3. 並列動作をこころがける

なんてのを総当たりで試してトータルとして短いところを採用するってのがよく使われる手段です。特に効いてくるのが2でして、たとえば、

  • トイレの鍵が開いている時には中に人はいない(はず)なので、扉の鍵を閉めながらチャックを降ろす

てな感じ(おい)。
そんなことを考えていると、昔書いた小説の一節がふと引っかかってきました。

 2槽式洗濯機は側に付いていてやらないと、いつまでたっても洗濯が終わらない。
洗濯が終わったら一度脱水してからもう一度洗濯槽に入れてすすぎ、最後に再び脱
水して終わる。二つの槽があるので、共に回している時間が長ければ長いほど全自
動洗濯機よりも早く終わることになる。だから、洗濯物を2つ、4つ、と偶数に分
ければ効率がよりよくなる(二つなら、洗濯1/使わない、洗濯2/予備脱水1、
すすぎ1/予備脱水2、すすぎ2/脱水1、使わない/脱水2となる。脱水と洗濯
もしくはすすぎの時間は違うにしても、およそ25%は時間の節約になる計算だ。
三つなら、最後の「使わない」のところに洗濯3を入れ、24.6%、四つなら、
最後の「使わない」と最初の「洗濯1(本当は4)」を重ねるようにして、29%
程となる)。

……10年前から同じよーな事考えてたんだなぁ(^^;)。待ち行列スループットの問題としてsimulaとかで効率の確認でもしようかな(笑)。