ロキの盤上遊戯で、指定した編成におけるスコア期待値を計算するために、自動でショップの売買を行うおまかせAIを作ろうと考えています。この記事では、ショップ売買のおまかせAIを作るための考え方を雑にアウトプットしたものです。これらの考え方は実際にショップ売買AIを作成する前の設計段階のものです。考えが行き届いておらず、理論が破綻していたり、不都合な点がある可能性があります。不都合があった場合、この記事の内容は都度修正します。
前提
スコアの期待値計算において、戦闘フェーズを考慮することは難しいので、以下の前提を設けます。
- 敵を必ず全滅させることができる
- 敵からダメージを受けない
大部隊の20体の偶像は任意とします(制約を設けません)。また、20体からショップに並ぶ偶像候補については、実際のゲームと同じように特定ターンで一定数の偶像を候補に追加します(1ターン目は5体追加、3ターン目は4体追加、...というように)。候補の中からショップに並ぶ偶像、またはショップ更新によりショップに並ぶ偶像の選出方法は候補の中から一様にランダムで選出することとします。
これについては、実際のゲームで本当に一様にランダムで選出されているのか調査が必要です。例えば、同じ偶像が一定数以上ショップに並ばないように制限されているようなことがないかを確認する必要があります。
基本方針
ショップでの行動を決定するための基本方針です。
- 選択可能な行動すべての利益の期待値を評価し、期待値が最大になる行動を選択する
- 利益を得る行動に対して不利益が発生する場合は、不利益を加味した最終的な利益の期待値を評価値とする
- 利益の期待値は行動後の状態のみから計算する(次ターン以降で起こりうる事象は考慮しない)
- 以下の考えに基づき、資金は各ターンで使い切ることが最善であると定義する
- 最終的に資金が余ることに利益はない
- 偶像購入による利益は、次ターン以降も引き継がれる
- 資金は可能な限り早く使って利益に変換する方が最終的な利益は大きくなる
行動の種類
AIが取れる行動は以下の3種類です。
- 偶像の購入
- 偶像の売却
- ショップ更新
各行動の利益と不利益の言語化
偶像購入による利益、不利益
利益
- 総HP増加によるスコアアップ
- 戦闘部隊の人数増加
- コンボ数の増加
- トリプルの発生によるレベルアップ
- 資金が減る
最終的な利益の評価
- 「各ターンで資金は使い切ることが最善である」前提から、不利益は加味せず、上述の利益をそのまま最終的な利益とみなす
- ただし、直接的に利益が発生しなくても、利益が発生する以下の準備行動にも利益があるとみなす
- トリプルのための待機枠確保
- コンボ発生のための偶像確保
偶像売却による利益、不利益
利益- 資金が増える
- 増えた資金で新しく偶像を購入でき、購入による利益を得られる
- 手持ちの偶像が減る
- 手持ちの偶像が減る不利益に対して、将来購入できるようになる偶像による利益が上回れば、売却によって利益があったとみなす
- 利益の比較は偶像購入の利益を数値化できれば可能
ショップ更新の利益、不利益
利益- 利益をもたらす偶像の購入機会を得られる可能性がある
- 更新後に利益をもたらす偶像を購入不可能であれば、更新することに利益はない
- 2回目以降の更新については資金が減る
- 更新後に利益をもたらす偶像が出現すれば資金を消費する価値があったことになる
- かつ、「各ターンで資金は使い切ることが最善である」前提がある
- ショップに並ぶ候補の中で、購入行動により利益をもたらす偶像が1体以上いれば、資金を利益に変換できる可能性があるとして、ショップ更新に利益があるとみなす
- ショップ更新で消費する資金を引いた残り軍資金が、利益をもたらす偶像の購入資金以上なら、ショップ更新は必ず行うものとする
利益の数値化
各行動の利益の大小を比較する必要があるため、利益を数値で表現する必要があります。偶像の購入、売却は乱数が影響しない行動です。よって、利益の大きさを直接的に評価することが可能です。ショップの更新は乱数が影響します。利益発生の確率を加味して評価する必要があります。
敵を無傷で全滅できる前提である場合、スコアは戦闘部隊の総HPに直結します。すなわち、その行動による上昇HPの大きさを利益の大きさと定義できます。
[利益の大きさ] = [戦闘部隊の総HP上昇量]
偶像購入の利益の数値化
HP上昇は偶像購入時に発生し得る以下の3つの事象で発生します。
- 戦闘部隊の人数増加
- コンボ数増加
- トリプルのレベル上昇
これらの要因によるHP上昇量は基本的には以下の不等式が成り立つと仮定します。
戦闘部隊の人数増加によるHP上昇量 > コンボ数増加によるHP上昇量 > トリプルのレベル上昇によるHP上昇量
このような不等式が成立するように利益を数値化します。
HP上昇量は以下の2種類を考慮します。
- HP上昇量
- 行動直後に上昇するHP量。
- HP上昇見込み量
- その行動がコンボ発生、トリプル発生に近づく行動である場合、それらの発生により上昇する見込みのあるHP量。例えば、トリプル発生のために2体目の偶像を購入する場合、そのトリプル発生による総HPの上昇量。
前者は即効性のある利益であるため、両者のHP上昇量が等しい場合、前者の方が優先度の高い行動とします。ただし、両者は複合することがあります。例えば、戦闘枠に2体目の偶像を購入する場合、偶像の種類に関係なく購入した偶像のHP分のHP上昇がすぐに発生します。この偶像が1体目と同じ偶像である場合、トリプルへの布石になります。違う偶像であれば、コンボ発生の布石になります。
これらの値はいずれも最終的な上昇HP量に対して重みをつけることで数値化します。「HP上昇量」は重みを1とします。「HP上昇見込み量」は以下の式で計算します。
[HP上昇見込み量] = [将来の上昇HP量] / [将来HP上昇するために購入が必要な偶像数]+1)
コンボ発生には複数の「HP上昇見込み量」を想定する必要がある場合があります。例えば、2体目の偶像購入は、3体目購入時のコンボ発生の布石でもあり、4体目購入時の更なるコンボ発生の布石でもあります。このように将来HPが上昇する見込みのある事象が複数存在する場合は、それらの「HP上昇見込み量」を合計した値を利益の評価値とします。
偶像売却の利益の数値化
偶像売却だけ行うことで利益を得ることはできません。偶像売却は必ず偶像購入とセットで行います。
偶像売却時に減少する戦闘部隊の総HPを偶像売却の不利益の評価値とします。偶像売却の利益は以下の式で計算します。
[偶像売却の利益] = [売却後に可能になる偶像購入の利益の評価値] - [偶像売却の不利益の評価値]
偶像売却の利益が0より大きい場合のみ、偶像売却を行います。
ショップ更新の利益の数値化
初回のショップ更新は無料で不利益がないので必ず行います。
2回目以降のショップ更新は資金2を消費します。資金2を消費した前提で次にショップに並ぶ可能性のある偶像すべてに対して偶像売買の利益を数値化し、利益が0より大きくなるケースが存在しなければ、ショップ更新を行う利益はないので更新をスキップします。
利益が0より大きくなるケースが存在する場合は、以下のいずれかの選択を行います。
- 1つでも利益が得られるケースが存在するなら、ショップ更新を行う
- 利益を得られる確率から利益の期待値を求めて、一定以上の期待値が得られる場合のみ、ショップ更新を行う
後者のショップ更新後の利益の期待値は以下の式で計算します。
[ショップ更新後の利益の期待値] = [ショップ更新後の売買による利益の評価値] × [その利益を得られる確率]
ショップ更新を行うかどうかを判定するための妥当な利益の期待値の閾値は未検討です。
おまかせAIの行動ロジック
各ターンにおいて、以下のロジックで偶像売買やショップの更新を行います。
- ショップに並ぶすべての偶像に対して、偶像購入後の利益を数値化する
- 軍資金で購入可能な偶像の組み合わせのうち、利益の合計が最大になる偶像の組み合わせを購入する
- もし、売却によって購入できるようになる偶像がある場合は、売却を検討する
- 偶像売却の不利益を加味した上で、偶像購入の利益を再評価し、利益の合計が最大になる偶像の組み合わせを購入する
- ショップを更新する
- 更新後にショップに並ぶすべての偶像に対して、偶像売却の不利益を加味した上で、偶像購入の利益を数値化し、利益が0より大きくなるケースがあれば、それらの中で最大の利益が発生する偶像売買を行う
- 1つ前の手順を利益が0より大きくなるケースがなくなるまで繰り返す
- 軍資金2を消費した上で、次にショップに並ぶ可能性のある偶像すべてに対して偶像売買の利益を数値化し、利益が0より大きくなるケースが1つ以上あれば、その利益が得られる確率から期待値を求め、一定以上の期待値が得られる場合はショップを更新する
- 資金が尽きるか、利益を得られる可能性がなくなるまで6~8を繰り返す
問題点
- 今のロジックだと、各ターンで最初にショップに並ぶ偶像で利益の小さい偶像しかなくても必ず購入してしまう
- 購入した資金と同等の資金で売却できるのは最初の1体のみなので、複数の偶像購入はより利益の高い偶像の購入資金を無駄にするリスクがある
- ショップに並ぶ偶像によっては、購入を見送って、ショップ更新後に利益のより大きい偶像が購入した方が良い場合がある
- ショップ更新後に起こりうる全パターンの利益の期待値と、今ショップに並んでいる偶像購入の利益の評価値を比較して、行動を決定する方が望ましいかもしれない
- ショップ候補として追加されたユニットが実際のゲームだとショップを更新して出現するまで把握できないが、それを加味できていない
- 本来は1度ショップに登場したユニットだけを候補と考えるべき