# IAGOの使い方 # 環境構築編 ここを参照しました https://myiago.com/IAGO/installation.html ## 必要なもの * Ant * Tomcat * IAGOのソースコード * JDK ## 開発環境 この中のどれかが良いと思われる * Eclipse * IntelliJ * VirtualBox(中でEclipseを動かすことになります) ## インストールなど ### Ant brew install antで終了 ant -versionでバージョン確認できればOK ### Tomcat Tomcatをインストール(tarファイルをダウンロード) http://tomcat.apache.org/download-90.cgi 解凍したファイルを/usr/localに移動 * /usr/local/apache-tomcat-version/bin/start.shで開始 * /usr/local/apache-tomcat-version/bin/shutdown.shで終了 * /usr/local/apache-tomcat-version/bin/version.shでバージョン確認 homwbrewで入れる場合はbrew install tomcat この場合は/usr/local/Cellar/tomcat以下にインストールされる ### IAGOのソースコード ここのフォームから入手可能 https://myiago.com/IAGO/ 1日後くらいにメールが届くのでリンクからダウンロードしましょう 解凍したら以下を行いましょう * WebContent/WEB-INF/libにIAGO_Core.jarを追加する * build.xmlの11行目をTomcatのlibまでのパスに修正する homebrewで入れたなら/usr/local/Cellar/tomcat/バージョン/libexec/lib ### JDK ここからOSにあったものをダウンロードして手順に従ってインストール http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html java -versionでバージョン確認できればOK ### Eclipse Webで動作するアプリケーションを作成するのでJava EE Depeloperを選択する(普通のでもいいのかも) http://www.eclipse.org/downloads/ 日本語化のプラグインはこちら ちなみにInelliJの日本語化も可能 http://mergedoc.osdn.jp/ ここでダウンロードしたzipファイルを解凍してsetup.appを実行すればOK ### IntelliJ Webで動作するアプリケーションを作成するのでUltimate版をダウンロードしましょう https://www.jetbrains.com/idea/download/#section=mac Ultimate版は有償ですが学生は無料なので安心しましょう ここから登録しましょう(ac.jpのアドレスで) https://www.jetbrains.com/student/ ### VirtualBox ここからダウンロードできます http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp ## Eclipseでやる場合 ### プロジェクトの作成 新規Java EE Webプロジェクトの作成 設定は特にいじらなくてOK! ![](https://i.imgur.com/gF15YOQ.png) EclipseのworkspaceにIAGO_Game_Edition内のsrc,WebContentのフォルダとbuild.xmlをコピー(上書きでOK) コピーしたらプロジェクト名を右クリックしてリフレッシュ(F5でも可) プロジェクトを右クリックしてビルドパスの構成を選択 外部JARの追加から以下のjarファイルを追加(これらのファイルはtomcat/バージョン/libexec/libの中にある) * jsp-api.jar * servlet-api.jar * websocket-api.jar 設定(青い歯車)からサーバー→サーバー・ランタイム環境を選択し追加をクリック 自分がインストールしたTomcatのバージョンと合うものを選択し次へをクリック インストールディレクトリは自分がインストールしたところ(binとかlibとかの親フォルダ)を参照して完了 homebrewで入れたなら/usr/local/Cellar/tomcat/バージョン/libexec ![](https://i.imgur.com/7SxNG2H.png) サーバのタブから使用可能なサーバがありません〜をクリック ![](https://i.imgur.com/q1bn8M7.png) 特に変更しなくてもOKなので次へ 構成済みに追加して完了 ![](https://i.imgur.com/JtjpfxY.png) ### 実行 まずはサーバを起動する(サーバタブのボタンを押すかサーバ名を右クリックして選択) こんな感じで始動済みになればOK ![](https://i.imgur.com/reMhKTP.png) WebContent/start.jspを右クリックし実行→サーバで実行 既存のサーバを選択して完了 ![](https://i.imgur.com/xwq8xIo.png) こんな感じで英文がつらつらでできたら成功! ![](https://i.imgur.com/W8yitJx.png) 英文を読んだら画面下部のContinueを押して質問に回答 MTurkIDを聞かれますが**DEMO**でOK(本当はなんでもいい) またはWEBブラウザで http://localhost:8080/プロジェクト名/start と入力することでもこんな感じで同じ画面が出ます ![](https://i.imgur.com/AFrXGid.png) ## IntelliJでやる場合 ### プロジェクトの作成 Javaエンタープライズを選択しWeb Applicationにチェックを入れる アプリケーションサーバの新規からTomcatサーバを選択 Tomcatホームに自分がインストールしたところ(binとかlibとかの親フォルダ)を参照しOK homebrewで入れたなら/usr/local/Cellar/tomcat/バージョン/libexec ![](https://i.imgur.com/rWuBUUD.png) プロジェクト名を適当に決めて完了 IntelliJのプロジェクトにIAGO_Game_Edition内のsrc,WebContentのフォルダとbuild.xmlをコピー(上書きでOK) **WebContentのフォルダ名をwebに変更する必要あり** ファイル→オブジェクト構造をクリック(command+;でも可) ライブラリータブの追加(+のボタン)をクリックし以下のjarファイルを追加(これらのファイルはtomcat/バージョン/libexec/libの中にある) * jsp-api.jar * servlet-api.jar * websocket-api.jar **さらにweb/WEB-INF/lib/IAGO_Core.jarもライブラリーに追加** ライブラリがこんな感じになればOK ![](https://i.imgur.com/c3uc4dY.png) ### 実行 実行ボタン押してしばらくしてWEBブラウザにページが表示されたらOK ![](https://i.imgur.com/AFrXGid.png) 英文を読んだら画面下部のContinueを押して質問に回答 MTurkIDを聞かれますが**DEMO**でOK(本当はなんでもいい) ## VirtualBoxでやる場合 この場合はIAGO_Distrib_VMの中のファイルを使います Linux Ubuntu(64bit)のOSを新規作成します(名前は適当でOK) ![](https://i.imgur.com/wTox94D.png) メモリーサイズは適当 仮想ハードディスクを追加しないを選択 ![](https://i.imgur.com/dH9Vwym.png) 設定のストレージタブのIDEコントローラを選択 ハードディスクを追加→既存ディスクを選択でIAGO_Distrib.vmdkを選択 こうなればOK ![](https://i.imgur.com/FEnNywX.png) 作成したOSを起動してEclipseを起動します ここからはEclipseの実行方法で述べた方法と同じなので割愛します もしpasswordを聞かれたら**iago**と入力すればOK # エージェントの作り方編 エージェントの作り方はここを参照 https://myiago.com/IAGO/designTutorial.html config.txtに各種設定が記載されている このファイルはGameBridgeクラスで読み出される agentに用いるエージェント,gamespecに用いるルールを記載 gamespecに複数指定すると左から順番に適用される IAGOCoreVHのfirstgameとかの変数で初回かどうかを判断しているという感じ IAGOCoreVHでは発生したイベントごとに処理を記述 ## キャラクターの追加方法 web/img/配下にフォルダーを作成 各画像はフォルダー名_感情名にする必要あり web/js/iago.jsのrequestAsyncInfoメソッド(主にSEND_EXPRESSION)のブロックにキャラクターの処理を記述する必要あり ## その他 ## Offer offer[問題の数][3]という構造 offer[][0]:Agentに割り当てられた個数 offer[][1]:割り当てられてない個数 offer[][2]:プレイヤーに割り当てられた個数 すなわちoffer[][1]が全て0ならfull offer ## IAGONiceExpression getExpressionでは送信された感情に応じて文字列をreturn getExpressionはIAGOCoreExpressionのサブクラスで実装されている ## IAGOBuildingBehavior getFinalOfferではgetNextOfferを繰り返し呼ぶことで全てのアイテムを割り当てる getNextOfferでは送信するOfferを作成する 割り当てられていない項目の中で両者にとって1番価値のあるアイテムはどれか調べる プレイヤーの選好はgetMinimaxOrderingによって決定される 1番価値のあるアイテムが同じ場合は両者に1つずつ割り当てられる 残りが1つだった場合は相手に譲る 1番価値のあるアイテムが異なる場合は1番価値のあるアイテムがそれぞれに1つずつ割り当てられる ## AgentUtilsExtension orderingsには予想されるプレイヤーの選好順序のリストが格納 preferenceにはプレイヤーの選好情報(a > b, a = bなど)が順に格納 getVHOrderingは設定された問題に対するAgentの選好の優先順位の配列を返す 例:鉄,バナナ,金,スパイスがそれぞれ1,3,2,4番目に好きな場合,[1, 3, 2, 4]が返される reconcilContradictionsはプレイヤーの選好順序に矛盾がないか調べる getMinimaxOrderingはAgentの選好を基にして推測値が最も大きくなる順位が返される 推測値=順位の差の総和とする 例:Agentの選好が[1, 3, 2, 4]の場合[4, 3, 2, 1]との推測値は(4 - 1)+(3 - 3)+(2 - 2)+(4 - 1)=6となる **ループの中でvalueHeuristicを0にする処理を追加している(おそらくバグ?)** ## IAGOCoreVH ### GAME_START ゲームが始まるときに何か処理を行う必要がある場合はここに記述(各変数の初期化など) ### SEND_EXPRESSION 相手から感情が送られてきたときの処理を記述 ### FORMAL_ACCEPT FORMAL_ACCEPTが行割れたときの処理を記述 ### TIME 相手から何もアクションがないときに行われる処理を記述 時間がたつとOfferが送られるように見えるがgetTimingOfferはNULLを返すので何もOfferは行われない 残り30秒切るとgetFinalOfferが実行される ### SEND_OFFER 相手からOfferが送られたときの処理を記述 localFairの計算方法 現在のofferの効用>以前のacceptによってわりあてられた効用でかつ自分が新たに得られる効用(+マージン)>人間が新たに得られる効用であればlocalFairはtrue 自分の効用>人間の効用であればtotalFairはtrue localFairもしくはtotalFairの条件式の右辺に正の値を足すことで徐々に妥協ラインを上げることができる(多分) ### SEND_MESSAGE メッセージ(選好情報,会話文,Offerのaccept/reject)が送られたときの処理を記述 * 選好が表出された時の処理 矛盾があった場合はreconcilContradictionsが繰り返し呼ばれ矛盾がなくなるまで1番古い選好情報から順番に削除していく(dequeueによる操作のため) 例:スパイスがbest,鉄がworstという情報を与えたのち,金<鉄という情報を与えると今までの選好情報が削除され金<鉄という情報だけが保持される * Why dont you~でOfferを作成するように依頼した時の処理 Offerを送信する * AgentのOfferがaccept/rejectされた時 それぞれのブロックの中に処理が記述されているがgetAccept(Reject)OfferFollowupはNULLを返すためこのブロックの中ではほとんど処理は行われない メッセージや感情が送信されるのはブロックの直前にあるEventによるものである 各感情と画像の対応はこちら happy -- smile.png angry -- angry.png surprised -- surprise.png disgusted -- disgust.png afraid -- fear.png sad -- sad.png insincereSmile -- smallsmile.png neutral -- neutral.png