忍者ブログ

リーズン・レーズン・フローズン

ポケットパーティー。あと東方玉神楽とか。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

最強アイちゃん計画2

選択肢の評価法。後から見返すと自己満足も甚だしいが、だからどうだというのか!
ちょこちょこ修正追記しつる。

選択肢の評価法には2つの引数がある。その行動によって見込まれる状態差分と、行動前後の対峙の優位性の差分だ。どちらも相手の行動に依存した値であり、誰がどのような行動をとっていくかが物理法則のようにデジタルに決まるものでは、本来ない。
ないのだが、そんなしょーもない厳密性を指向しても仕方ない。相手の行動は決定論的には決まらないものだ、というのは前提としておく。ではどうするか。リスク最小化を基本方針とする。

ここから数式モデルを立てる。まずは記号の定義から。
自分の選択(p1,p2,p3)と相手の選択(q1,q2,q3)に対して展開パターンが9通り(p1q1,...,p3q3)存在する。パターンp1q1の評価はそのままp1q1と書くことにしよう。あるパターンとその評価とで同じ記号を使うことになるが、混乱のないように書いていくつもり。
さらに省略記号を導入しよう。パターン9個のうち3個をp1=(p1q1,p1q2,p1q3)のように束ねて表記する。これも選択肢(p1,p2,p3)の表記と被るように見えるけど、まあ「選択肢p1」に対して「選択肢p1をとったときに起こりうるパターン3つ(p1q1,p1q2,p1q3)」という程度の違いなので、誤解は少ないでしょう。
で、min()を、括弧の中にあるパターン群の評価の最小値をとる関数とすれば、min(p1q1,p1q2,p1q3)は省略記号によりminp1と表記され、選択肢p1を選んだときに起こりうるパターンのうち評価の最も小さいものの評価という意味になる。リスク最小化という方針は次のように数学的に定式化される:選択肢p1,p2,p3に対して、それぞれminp1,minp2,minp3という評価が「最悪の結果」として想定される。その「最悪の結果」=ボトムラインを可能な限り引き上げるような選択肢がリスクを最小化する選択肢となる。つまりmax(minp1,minp2,minp3)が解となる(max(minp1,minp2,minp3)=p1q2なら、解はp1)。ゲーム理論のマキシミニ解とか呼ばれてるやつ。
たまにある勘違いだけど、ゲーム理論は相手の行動を理論的に予測するものではないし、プレイヤーを常勝に導いてくれるものでもない。そうではなく、これはリスクマネジメントの方法論なのだと思う。コントロールではなく、「管理」するためのもの。

さて、選択肢を評価する関数f(以下、単に「評価関数」)を具体的に決めよう。
まずp1とq1は「続投」選択肢だということにする(このようにしても一般性を失わない)。するとp1q1は両者続投、p1q2,p1q3,p2q1,p3q1は「片方続投、片方交代」、その他(p2q2,p2q3,p3q2,p3q3)は「両者交代」となる。
まずp1q1の評価をどうするか。両者続投のパターンだから、たとえば「相手に与えたダメージ割合/自分が受けたダメージ割合」とすればそれらしい評価関数(p1q1のとき)ができあがる。でもこれだと「誰に誰を当てるか」という比較優位の話がまったく入ってなくて、つまりは「全体が見えていない」評価関数になってしまう。
要するにp1q1の評価関数ですら簡単には決まらないということが言いたいのだけど、かといってp1q1の評価関数の議論は完全に脱線するので控えておこう。ここでは「自分の続投時の影響を評価関数として数値化する関数」としてr(p1,qi)をおくだけにしておく(引数中のp1は攻撃する側、qiはは攻撃される側を表す。逆に相手の攻撃時の影響の評価は引数の順序を入れ替えてr(q1,pi)と書く)。これは相手が選択肢qi(i=1,2,3)を選んだときに続投によって与える影響の評価だ。rの具体的な形は保留しておく。細部ではなく、アタリをとることから始めるべきだ。

自分が続投した相手への影響の評価はr(p1,qi)。相手が続投したときの自分への影響の評価はr(q1,pi)。p1q1の評価関数f(p1q1)は、高いほど自分にとって都合がいいわけだから、r(p1,q1)について単調増加でr(q1,p1)について単調減少であるべきだ。その条件を満たす一番簡単な式は「f(p1q1) = r(p1,q1)/r(q1,p1)」。p1q1ではこの式を採用することにする。

次にp1q2,p1q3に移る。すなわち自分は続投、相手は交代、というパターンだ。p1q1のときの形式──つまり自分の与える影響の評価を分子に、自分が受ける影響の評価を分母におく形式を踏襲する。
分子=自分の与える影響はp1q1のときとほぼ同じで、r(p1,q2)またはr(p1,q3)とすればいい。問題は分母=自分が受ける影響の評価だ。攻撃するわけではないからr関数は使えない。ここでの影響とはダメージではなく、位置エネルギーの上昇だ。位置エネルギーを評価する関数vを使い、差分v(q2,p1)-v(q1,p1)またはv(q3,p1)-v(q1,p1)を分母に配置する必要がある。ここでv(pi,pj)(i=1,2,3;j=1,2,3)は自分が選択肢piをとったときの、行動後の位置エネルギーを意味し、v(qj,pi)(i=1,2,3; j=1,2,3)は相手が選択肢qiをとったときの行動後の位置エネルギーを意味する。v(pi,pj) = v(qj,pi)じゃね?って疑問は保留にさせてね。
実はここに評価関数を無次元化したい、という心理が働いている。理由はいくつかあるが、1つは違うゲームへの応用や大規模な仕様変更によりカケラの攻撃力に変更があったときに困るというのがある。アイちゃんには経験的なパラメータ(選択肢の評価を水増ししたり目減りさせたりする係数を仕込んでおいて、実際に動かして判断が悪ければその係数を調整して改善をはかる)を入れるつもりで、そういう重要なパラメータを(平均的な)攻撃力の変更に対して不変にしておきたくて、そうするためには自分と相手の選択肢の評価の「比」をとった形で使う必要があるのよね。書いてて分かりにくいなーと思ったけど、マニアックすぎる話なので読み飛ばしてもよさそう。
そんで将来的にvをrの関数で表す予定(「交代」は有効な「攻撃」を行うためにするものだから)なんだけど、分母分子で次元をあわせるためにはvはrの線形結合ということにしちゃえばいいんじゃねってのがあり、これって重要な話だと思うんですけどトリビアになりませんかね?

なりません。トリビアルじゃありません。「片方交代、片方攻撃」が「r(p1,q2)/[v(q2,p1)-v(q1,p1)]」と評価されるなら、「両方交代」は「[v(p2,q3)-v(p1,q1)]/[v(q3,p2)-v(q1,p1)]」みたいな形になるんじゃないの?と思われた方、ビンゴです。口調戻すね。
位置エネルギーという比喩はこの点でやや不適切かもしれない。というのも、本来の位置エネルギーが位置(p2q3)だけによって決まるべきところ、v(p2,q3)とv(q3,p2)で値が一致するとは限らない=位置以外の要素が入ってしまっているからだ。なぜ違うか。先ほどの「vはrの線形結合で展開されるべきだ」というところに鍵がある。すなわちv(p2,q3)は自分の攻撃の評価r(p1,qj)によって展開されるが、v(q3,p2)は相手の攻撃の評価r(q1,pi)によって展開されるからだ。rの引数に順序がある以上、vにもその性質が引き継がれなくてはならない。

「両者続投」「片方攻撃、片方交代」「両者交代」についてざっと説明おわり。ただこれらは本来まったく違うものの比較であり、「攻撃」になんらかの重みをつけるべきだとのかれーさんの指摘もあり、「両者続投」「自分は攻撃、相手は交代」「自分は交代、相手は攻撃」「両者交代」のうち3つに経験的なパラメータで重み付けすべきだと思う。

序盤はこのくらいかな。あとはr関数とv関数の決定が残ってる。v関数はたぶんr関数の線形結合ってところまで分かってる。
PR

Comment

お名前
タイトル
E-MAIL
URL
コメント
パスワード

Trackback

この記事にトラックバックする

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

フリーエリア

最新コメント

[11/07 車輪]
[11/02 カリー]
[10/26 車輪]
[10/14 yozo]
[07/02 車輪]

最新トラックバック

プロフィール

HN:
車輪
性別:
非公開
自己紹介:
メールはsyarin3258あgmail.comまで

バーコード

ブログ内検索

最古記事

P R

アクセス解析

カウンター

Copyright © リーズン・レーズン・フローズン : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]