Twitterを使って技術系コミュニティを立ち上げよう!(3) ―― 舞い込んだ出会いとMATLABコンテスト
●一足飛びと一工夫の繰り返し
例として,2006年4月に開催されたMATLABコンテストの経過を図1に示します.この年は,「Blockbuster」というマインスイーパ的パズルの最少得点を競うコンテストでした.得点は,ゲーム終了時に残ったブロックの数字の合計とCPU演算時間の二つの要因を組み合わせて計算します.アルゴリズムがいかに良くても,計算に時間がかかりすぎては意味がないからです.
図1 投稿されたコードの得点(青点)を時系列で並べたプロット
目的は得点の最小化.
赤線は,それぞれの時点での最小得点を示します.グラフを見ると,変化がなだらかな部分と,急激に変化する部分があることが分かります.
図2は,投稿されたコードの得点をアルゴリズム要因とCPU要因に分けてプロットしたものです.赤線は,最高得点の推移を示します.全体的には右上から左下へとコードが進化していきますが,その過程では赤線がジグザグを描いています.
図2 投稿されたコードの得点をアルゴリズム要因とCPU要因に分解したプロット
左下にいくほど得点が低くなる.
得点を追及する過程では,有望なアルゴリズムから無駄を省いて得点を上げていくのが最も効率的な作戦です.しかし,こうした一工夫の積み重ねは,いずれは限界に達します.そのときに,全く違う発想によるプログラムが導入されて一足飛びの進化を遂げます.発想の転換による進化が,図2のジグザグとして現れているのです.
知的なチャレンジとほかのMATLABユーザとの腕試しのために,150人を上回る参加者が1週間に渡って5,000件以上のコードをエントリします.参加者はお互いに出し抜こうと夢中になって競い合っているだけです.しかし不思議なことに,最終的には集団的知性の産物として,プログラムの劇的な進化につながっています.また,こうしたプログラムに参加することにより,ほかの参加者の面白い発想やプログラミング手法を学ぶことができるというのも参加者には大きな魅力でしょう.
モチベーションは異なると思いますが,不特定の参加者が自由にページを編集するうちに,高度な内容の百科事典ができてしまうという部分で,ウィキペディアと共通していると思います.