1 / 16

インタラクティブ・ゲーム制作 < プログラミングコース>

インタラクティブ・ゲーム制作 < プログラミングコース>. 第 12 回 Boost と数学. 今日の内容. Boost の導入 今時 C++ を使うならやはり外せない 乱数 やアルゴリズム周りなど、 AI 構築に有用な機能も盛りだくさん. 闇の魔術の粋を味わうがいい. Boost 入門. Boost とは. 闇の魔術師達が築いた叡智の結晶 標準ライブラリ のみで は不便な機能を補強 「俺の知ってる C++ と違う」としか思えない言語の拡張 ある程度の機能は C++11 として、 正式に採用されている Visual C++ 2010 でも一部の仕様は搭載済み

leala
Télécharger la présentation

インタラクティブ・ゲーム制作 < プログラミングコース>

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. インタラクティブ・ゲーム制作<プログラミングコース>インタラクティブ・ゲーム制作<プログラミングコース> 第12回 Boostと数学

  2. 今日の内容 • Boostの導入 • 今時C++を使うならやはり外せない • 乱数やアルゴリズム周りなど、AI構築に有用な機能も盛りだくさん

  3. 闇の魔術の粋を味わうがいい Boost入門

  4. Boostとは • 闇の魔術師達が築いた叡智の結晶 • 標準ライブラリのみでは不便な機能を補強 • 「俺の知ってるC++と違う」としか思えない言語の拡張 • ある程度の機能はC++11として、正式に採用されている • Visual C++ 2010でも一部の仕様は搭載済み • 不足も多いので、Boostを併用

  5. 導入方法 • 「Let’s Boost」を参照のこと • http://www.kmonos.net/alang/boost/ • ここを見ておけば大抵なんとかなる • 授業時間内のインストールは厳しいので、授業資料ページからもダウンロード可能 • 1.47のパッケージ(300MB) • パスの設定は別添えの資料を参考に

  6. すぐに使えそうな機能(1) • boost::random • srand()&rand()よりも手軽に精度の良い乱数が使える • オセロのAIにもオススメなのは、「メルセンヌツイスター」で「小さな整数の一様乱数」のパターン

  7. すぐに使えそうな機能(2) • BOOST_FOREACH • 配列やリスト(コンテナ全般)に対して、最初から最後まで1つずつ処理するようなループが、絶望的に綺麗に書ける • 配列の場合だとこういうやつ for(int i = 0; i < arraySize; ++i) { array[i] = ほげ~;}

  8. Listのループをスマートに これが こうなる foreach(CellPosition &pos, puttingList) { if(pos.x > maxX) { choicePos = pos; maxX = pos.x; } } for(ListIte ite = puttingList.begin(); ite != puttingList.end(); ++ite) { if((*ite).x > maxX) { choicePos = (*ite); maxX = (*ite).x; } }

  9. 是非使いましょう • BOOST_FOREACHという名前だが、foreachに直して使うのがおすすめ foreach(仕舞っている型 &取り出し変数名,データが詰まっている配列やリスト) { 取り出し変数名を使った処理} • 詰め込んでいるのが配列でもvectorでもlistでも何でもイケちゃうあたりが闇魔術

  10. 合わせると • 事前にリストのサイズを得る • リスト名.size() • 0~サイズ-1までの乱数を得る • boost::random • 整数のカウンタを用意し、foreachでループしつつ、乱数が指した順番の時点での値を選んだ手として使う • なんてやればモンテカルロの仕込みに

  11. 他にも使えそうなもの • boost::thread • モンテカルロの計算は並列化しやすい • 一気に複数手のシミュレーションを進める • 私は使う予定です • boost::progress_timer • あるスコープ内での所要時間計測に便利 • コンストラクタとデストラクタを利用 • そんな難しい実装ではない

  12. オセロに使えるか分からんけどオススメ • boost::bind,function,signals2 • 「関数を自由に持ち運ぶ」ことができる • signals2はイベントと関数呼び出しを結び付けるのに非常に有用 • boost::lambda • 関数の中で関数を即席で作れちゃう • やりすぎると別言語になるが、わざわざ関数に分けたくないような時に便利

  13. 最終回にむけて ルール再確認

  14. ルール(1) • 対決用プロジェクト内のAIBaseクラスを継承し、自分のアルゴリズムを実装 • それ以外のファイルには手を加えてはいけない • 自分のAIで使うソースやヘッダの追加は可 • 外部ライブラリは原則利用可能 • ただし「オセロAIライブラリ」みたいなルーチンを他者に丸投げするようなものは不可 • getHand()から参照できる情報以外は利用禁止 • 自分で作ったクラスの利用は可 • 1手の計算に使える時間は30秒まで

  15. ルール(2) • 難易度は4段階用意 • 自分に合った難易度で挑戦してね! • Sチャレンジができるのは最高難易度 • 漏れなくライブで実況します • 提出期限は7/23(火)23:59まで • 組み込みチェックなどが必要なので、それ以降は受け付けません

  16. To be continued…

More Related