インタラクティブ・ゲーム制作 <プログラミングコース> 第12回 Boostと数学 今日の内容 • Boostの導入 – 今時C++を使うならやはり外せない – 乱数やアルゴリズム周りなど、 AI構築に有用な機能も盛りだくさん 闇の魔術の粋を味わうがいい BOOST入門 Boostとは • 闇の魔術師達が築いた叡智の結晶 – 標準ライブラリのみでは不便な機能を補強 – 「俺の知ってるC++と違う」としか思えない 言語の拡張 • ある程度の機能はC++11として、 正式に採用されている – Visual C++ 2010でも一部の仕様は搭載済み – 不足も多いので、Boostを併用 導入方法 • 「Let’s Boost」を参照のこと – http://www.kmonos.net/alang/boost/ – ここを見ておけば大抵なんとかなる • 授業時間内のインストールは厳しいので、 授業資料ページからもダウンロード可能 – 1.47のパッケージ(300MB) – パスの設定は別添えの資料を参考に すぐに使えそうな機能(1) • boost::random – srand()&rand()よりも手軽に精度の良い 乱数が使える – オセロのAIにもオススメなのは、 「メルセンヌツイスター」で 「小さな整数の一様乱数」のパターン すぐに使えそうな機能(2) • BOOST_FOREACH – 配列やリスト(コンテナ全般)に対して、 最初から最後まで1つずつ処理するような ループが、絶望的に綺麗に書ける – 配列の場合だとこういうやつ for(int i = 0; i < arraySize; ++i) { array[i] = ほげ~; } Listのループをスマートに これが こうなる for(ListIte ite = puttingList.begin(); ite != puttingList.end(); ++ite) { if((*ite).x > maxX) { choicePos = (*ite); maxX = (*ite).x; } } foreach(CellPosition &pos, puttingList) { if(pos.x > maxX) { choicePos = pos; maxX = pos.x; } } 是非使いましょう • BOOST_FOREACHという名前だが、 foreachに直して使うのがおすすめ foreach( 仕舞っている型 &取り出し変数名, データが詰まっている配列やリスト) { 取り出し変数名を使った処理 } – 詰め込んでいるのが配列でもvectorでも listでも何でもイケちゃうあたりが 闇魔術 合わせると 1. 事前にリストのサイズを得る – リスト名.size() 2. 0~サイズ-1までの乱数を得る – boost::random 3. 整数のカウンタを用意し、 foreachでループしつつ、 乱数が指した順番の時点での値を 選んだ手として使う – なんてやればモンテカルロの仕込みに 他にも使えそうなもの • boost::thread – モンテカルロの計算は並列化しやすい – 一気に複数手のシミュレーションを進める • 私は使う予定です • boost::progress_timer – あるスコープ内での所要時間計測に便利 – コンストラクタとデストラクタを利用 • そんな難しい実装ではない オセロに使えるか分からんけど オススメ • boost::bind,function,signals2 – 「関数を自由に持ち運ぶ」ことができる – signals2はイベントと関数呼び出しを 結び付けるのに非常に有用 • boost::lambda – 関数の中で関数を即席で作れちゃう – やりすぎると別言語になるが、わざわざ 関数に分けたくないような時に便利 最終回にむけて ルール再確認 ルール(1) • 対決用プロジェクト内のAIBaseクラスを 継承し、自分のアルゴリズムを実装 – それ以外のファイルには手を加えてはいけない • 自分のAIで使うソースやヘッダの追加は可 • 外部ライブラリは原則利用可能 – ただし「オセロAIライブラリ」みたいなルーチンを他者に 丸投げするようなものは不可 – getHand()から参照できる情報以外は利用禁止 • 自分で作ったクラスの利用は可 – 1手の計算に使える時間は30秒まで ルール(2) • 難易度は4段階用意 – 自分に合った難易度で挑戦してね! – Sチャレンジができるのは最高難易度 • 漏れなくライブで実況します • 提出期限は7/23(火)23:59まで – 組み込みチェックなどが必要なので、 それ以降は受け付けません TO BE CONTINUED…
© Copyright 2024 ExpyDoc