LiftScheduler, Top Coder Marathon Match 33

結果出たみたい。

http://www.topcoder.com/longcontest/stats/?module=ViewOverview&rd=12199

なんかまた system test で順位が不自然に増えて9位。また9位かよ!

http://www.topcoder.com/longcontest/stats/?module=ViewOverview&rd=11136

正直何やったか何が効果があったかよく覚えていない…くだらない変更の方が凝った変更より効果がある感じだったと思う。最後の方あんまり時間取れなかったのは残念だったけど、時間あってもあんまり増えなかったんじゃないかなぁ。

まずなんか基本的なエレベータとしていけてない挙動を fix していくだけで色々良くなっていったと思う。たしか…

  • 人いないのに必死でドア開けて待ってるエレベータ
  • 誰もいない最上階を目指すエレベータ
  • どう考えても満員なのに全ての階でドアを開けるエレベータ
  • 同じ階に複数到着するエレベータ
  • 複数で同じ動きをするエレベータ

などなど。

結局エレベータって賢いスケジューリングをするには基本的な情報が全然足りないんだなぁとわかりました。

  • 3階に上に行きたい人がいることはわかる。何人待ってるかはわからない。
  • 3階で人を乗せたが何人乗ったかわからない。
  • 3階で乗せた人は5階と7階を押した。それぞれ何人ずつ降りるかわからない。
  • そもそも既に押されていた階が目的地の人もいるかもしれない。

などなど。なかなか興味深いのです。このへんの情報は色々予測したりする方法は入れてはみたけど、正直そんなに生きたって感じはしなかったのでした…現実のエレベータはたぶん体重計は内部に持ってるからその情報は使える気もしますが。

そんなことより最後に rand() とか使ったヤケクソ変更入れたらそれで成績増えたりして凹んだりしました…

id:Irori さんもやってたので後日談をいろいろ聞いたのですが、思いもつかなかったアイデアを実装されていてさすがだなぁと。やる人多いと面白いのでみんなやるといいよ。

あと discussion forum とか見てると、みんな「エレベータのスケジューリングについて考えを巡らせたことがあったので面白かったよ!」とか言ってて、みんな似たようなこと考えるんだなぁと面白かったです。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h