お手軽に各種バンディットアルゴリズムの特性・性能を比較することができる Web ベースのバンディットアルゴリズムシミュレータを、Yeoman, Bower, Grunt, D3.js, NVD3.js, AngularJS, Bootstrap なんかを使って作ってみましたよ、というお話です。
デモサイト&ソースコード
シミュレータのデモサイトとソースコードはそれぞれ以下になります。
- デモサイト : http://playground.k11i.biz/bandit-simulator/
- ソースコード : https://github.com/komiya-atsushi/bandit-simulator
動機
とあるお仕事で各種バンディットアルゴリズムの特性を調査・検証したことがあって、そのときは Java で各種アルゴリズム&シミュレータを実装 → TSV ファイルにシミュレーション結果を出力して Excel でグラフ化、なんてことをやっていました。けど、これが結構な手間でして、どうにかならないかなーと悩んでいたところで、「あれ、これって JS でバンディットアルゴリズムを実装しちゃえば、d3.js とか使って Web ブラウザでお手軽にシミュレーション&可視化できるんじゃね?」と思い立ったので作ってみた次第です。
あと最近、仕事・プライベート問わず JS に触れる機会がめっきり減ってしまったことで、フロントエンドの開発事情にめっきり疎くなてしまったこともあり、そんな状況に危機感を抱いていて作ってみた、という副次的な動機もあったりします。
所感
作ってみた所感など。
- この程度の規模の Web アプリケーションでも AngularJS を使って開発をしておくと、モジュール構成を疎結合にできてよい感じです。
- Bower の依存モジュールの管理・解決の仕組み、フロントエンド開発でもこういうことが実現できるのは素晴らしいですね!
- Grunt は詳細機能を使いこなす程度に慣れるまでに、ちょっと学習コストが掛かりそう。JSON でもりもりと設定を書かなきゃいけないのはやっぱり辛い…
- D3.js を生で取り扱うとなると、結構辛いですね… 特に AngularJS と統合して使うのはかなり苦労するかも。
- でも、出来合いのチャート表示をしたいだけなら NVD3.js を組み合わせて使うのがおすすめ! これを使うとすごく楽ちんです!
ToDo
もうちょっと機能を追加したり改善したいと思っています。
- 1,000 回のイテレーションでも結構重いので、進捗を表示したい
- 2 腕バンディット問題のシミュレーションしかできていないけど、n 腕対応したい
- 何回かシミュレーションした結果を箱ひげ図表示したい