このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
今回の記事は技術トークからはやや離れて、社内で行っているプログラミングコンテストについてお話ししたいと思います。
フィックスターズは、2008-9年にPS3に搭載されたCPUであるCellを使ったコンテスト、Hack the Cell 2009を開催したことがあります。
それからしばらくコンテストは開催されていなかったのですが、社内はギークばかりですし、競技プログラマも何人もいますし、そもそも自分が関わりたいですし、社内でプログラミングコンテストを開かない道理がないということで、会長・社長に掛け合ったところ、快く承諾してもらい、2012年から開催されることとなりました。ついでに上位入賞者への賞品なども出してもらえることに! 参加は強制ではなく自由参加になっています。因みに、私自身は運営側からの参加です。
コンテストの課題は、TopCoderで言うマラソンマッチ形式で出題され、期間は1~2ヶ月で行われます。中間発表などもあり、最後に結果発表会・授賞式・懇親会が行われます。単に問題を解いて終わりにせず、最後の結果発表会で参加者の解法を共有することで、技術に対する関心や向上心の刺激などに一役買っています。
以下に、これまでのコンテスト内容を簡単に説明しておきます。内容の詳細や結果については記事が長くなりすぎてしまいますので、次の機会に譲ります。
第1回目は、当時、社内で機械学習勉強会が開催されていたこともあり、いわゆる機械学習の利用を想定したデータマイニング系の課題としました。フィックスターズの社員が必ずしも機械学習に堪能というわけではないので、最初は難易度的に適切かどうか分からなかったのですが、それなりに参加して頂き、工夫を凝らして問題を解決していました。利用された機械学習アルゴリズムも、ランダムフォレスト、ロジスティック回帰、C5.0、多層パーセプトロンによる誤差逆伝播法、素性に基づく行列因子分解など様々あって、上位陣はなかなかの接戦でしたが、訓練データの精査によりデータの精度を上げたことが優勝の決め手になったのは興味深い結果でした。
第2回目はカードゲームのニムト(6 nimmt!)の対戦プログラムの作成を行いました。一度に5人が同時に対戦するのですが、参加者全員の組合せで総当たり戦を行い、各参加者の総スコアでランキングされます。このニムトというカードゲームは単純なルールで手軽に遊べる割にはそこそこ奥が深く、昼休みなどに複数人が集まって、対戦ルーチンの研究という名目でよくプレイしていました(笑)。実際、普段からプレイしていた人の方が相対的に対戦プログラムの成績は良かったようです。因みに、この第2回から社員招待枠による一般の方の参加も可能となりました。
第3回目はボードゲームのガイスターの対戦ルーチンの作成にしました。人間臭い部分をコードにするのも面白いのではないかという意見があったので、単純なルールが故に心理戦による駆け引きが重要になるこちらのゲームを選んでみました。因みに、このゲームは二人零和有限確定不完全情報ゲームとなります。後から知ったのですが、計算知能学会(IEEE Computational Intelligence Society)でもガイスターのコンテストが開催されていたりしたので、題材としてはそれなりに面白かったんじゃないかと思います。
以上がこれまでのコンテストの概要なのですが、運営側からすると、なかなか苦労することもありました。まず、問題の作成(Hack the Cellを除く)はほとんど自分一人で行わなければならなかったことがあります。というのも、問題の作成に関わってしまうと、コンテストに参加できなくなってしまうので、できるだけ多くの方に参加してもらいたい運営側としては、問題作成を他の人に手伝ってもらうわけにはいかなかったのです。もちろん、問題作成以外の部分、参加者へのアナウンス、スケジュールの調整、賞品や参加賞の手配、オリジナルTシャツのデザインなどについては、多くの方に助けてもらっています。
問題を作成するにあたって、ネットに公開されている問題をそのまま使うことはできませんし、参加者が楽しめる問題である必要がありますし、不備が出ないようにしなければなりません。ただ、大変な部分のほとんどは問題のアイデア出しであり、アイデアが具体化できれば一瀉千里で進められます。構想に1ヶ月かかっても、課題用プログラム(対戦プログラムや制御プログラムなど)の作成は本業の合間に進めるだけで3日間もあれば終わる感じでした。
あとは、提出者の人数を見積もるのが難しいということもありました。参加表明はしていても(提出はしなくても参加は可能)、忙しい時期だと提出が困難だったり、締切近くに提出されることが多かったりするためです。問題によっては結構な計算時間が掛かることもあり、提出者の人数の把握は大事だったりします。因みに第2回の「6枚とれ!」では、すべての対戦が終了するのに1週間以上掛かりました。
ただ、苦労したと言っても、参加者のコードを読んだり、結果を分析するのはなかなか興味深く、それだけでも関わった甲斐がありますし、コンテストを通じてみんなで技術のお祭りをするのはとても楽しいものでしたので、まったく問題はなかったのですが。
第4回目となる社内プログラミングコンテストは、今年の夏ごろに開催を予定しています。一般の方でもフィックスターズ社員に声を掛けてもらえれば、社員招待枠でご参加いただけますので、プログラミングコンテストに興味をお持ちの方は是非ご検討をお願いします!
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...