日記/2016-07-24
ホムAI:Glenelg v0.73†
というわけで、Glenelg ver0.73をリリースしました。
今回の変更、大元の出発点は少し前に話題にした『中期的記憶』まわり。なのですが。
正直、ちょっと脱線した感じです(笑)
関連して、GlenelgWatchで「いまさら」な機能も追加しました。
以下、リリースノートからでは読み取れない補足情報。
一応、主目的として。†
メカニズムとして、『中期的』記憶を作成しました。
どれくらい中期的かというと・・・
- 一度覚えさせても、別種類のホムに切り替えると忘れてしまいます。
- 例えばエイラで記憶させても、他のジェネに切り替えてエイラではないホムを呼び出すと(AIがロードされると)忘れてしまいます。
- 『忘れる』ので、上記から再びエイラに戻しても、もう思い出せません。
- 同じホムを使用していても、設定後1日以上経過したあとにAIリロードすると、忘れます。
ポイントとしては、忘れるタイミングは『AIのリロード時』ということ。
ホムを召喚しなおしたり、テレポしたりしたタイミングですね。
AI動作中に常時「時間切れ」チェックしているわけではない、ということです。
・・・ここで『一応』主目的、というタイトルにした理由は。
以前の議論で挙げていた『このマップにいるかぎり範囲攻撃対象外にしよう』というようなことには対応できていない、ためです(^^;;
今回のような機能を作るには『その設定をいつ行ったか』の記録が必要になるのですが、
Glenelgでの多くの設定は『長期記憶』であり、そんな情報を記録していないんですね。
新たに拡張することはもちろん可能なのですが、特に敵に対する学習まわりでは設定項目が多すぎて、手間が大変すぎでやりたくなくて妥協した、という状況です。
実際、今回の Ver0.73 で中期記憶対象としたのは『全員友達モード』設定だけです。
これはもともとちょっと変則的な実装をしていたので、そのあたりの見直しも含めて実施しました。
#正確にはもう1つ作ってあるのですが、テスト的機能でまだ正式版ではないので。
GlenelgWatch側:設定のバックアップ・リストア機能†
AIそのものではなく、GlenelgWatch側での機能です。
内容は文字通り:現在の設定をバックアップしたり、それを元に再設定したり、という機能です。
前述の通り、もともとの目的だった『このマップにいるかぎり範囲攻撃対象外にしよう』というような対応が上記方式では難しいので。
ちょっと迷って作った次善策・機能です。
画面的には、「ホム設定」のウィンドウ内『管理:設定複製』タブです。
意図・使い方としては、複数の設定(群)を準備して、状況によって切り替えればいいじゃないか、ということ。
当初の『特定マップでは設置型範囲魔法は禁止』を実現するためには・・・
- まず、現在の(普通の、範囲攻撃ありの)設定を『普段用』と名前をつけてバックアップ。
- 上記普段用設定をベースに、『設置型範囲魔法禁止』状態に設定を変更。
その上でそれを『特殊マップ用』としてバックアップ。 - あとは、手動運用。
- とりあえずは『普段用』をリストアすることで、それで狩りを行って。
- 特殊なマップに入ったなら、そこで『特殊マップ用』をリストア。
- 狩が終わって街に戻ったら、また『普段用』をリストア。
・・・というような感じですね。
内部動作的には、対象の ini ファイルをバックアップ領域に別ファイルとしてコピー保存、またはバックアップ領域にあるものを既存ファイルに上書きリストア、という動作。
当然、AI側でのリロード作業が必要になります。
この機能でバックアップ・リストアする対象ファイルは、以下のものです。
- ai_option.ini (全ホム共通の基本動作設定)
- ai_option_xx.ini (xxはホム種類を意味する数値。ホム種類個別の設定)
- vs_enemy_xx.ini (xxは同上。ホム種類個別の、特定的に対する学習設定)
逆に言うと、以下の設定はバックアップされません。
- friend.ini (友達設定)
GlenelgWatch側:一時的リストア†
で。上述したように、バックアップリストアをうまく使えば『特定マップでの狩り対応』は対応可能です。
ただ、上述の内容は完全に『手動設定』なので、以前に懸念した『戻すのを忘れる』問題が残っています。
それではアレだよね、というわけで、さらなる対策として『特定条件で自動的に戻す』仕組みもついでに作りました。
バックアップ画面にある「一時的リストア」です。
上記事例の『普段用』と『特定マップ用』のバックアップ設定があるときに、 『特定マップ用』を選択して一時的リストア[実行]すると・・・
- 現在の動作は『特定マップ用』になります。
- 一定時間後、GlenelgWatchが自動的に『普段用』をリストアします。
・・・という感じです。
前提として、10個あるバックアップリストのうちの『#0』に普段用を登録しておく必要があります。
おまけ的追加:進化作業†
正直『いまさら』『もっと前に作れよ』的機能なのですが(^^;;
バックアップ・リストアに近いメカニズムだったので、つい。
一言で言うと、ホムを進化(幼生→成体、成体→ホムS)させたときの、学習設定の引継ぎ機能です。
前述の通り、Glenelgでは ai_option_xx.ini、vs_enemy_xx.ini というように、
『ホム種類ごと』に別の設定を保存しています。
この『ホム種類ごと』というのは、ホム種類によって動きが変化が必要だろうな、という当たり前の前提からなるのですが・・・
同時に、これによってちょっと面倒な話が生まれています。
要は、進化すると外見的に『別のホム』になってしまうので、AIとして設定が引き継げないわけです。
そこで、今回これをフォローする機能を追加しました。
単純に言えば、学習iniファイルをコピーするだけです。
例えば:
- バニル幼生の敵学習ファイルは vs_enemy_4.ini。
進化バニルは、vs_enemy_12.ini。- バニル幼生の進化先は「進化バニル」しかありえないので。
単純に「進化」操作をすると、vs_enemy_4.ini を vs_enemy_12.ini に上書きしてしまう。
- バニル幼生の進化先は「進化バニル」しかありえないので。
- ホムSは種別ごとに 48〜52 のいずれかの識別情報を持っています。
例えば、エイラ用は vs_enemy_48.ini、エレノア用は vs_enemy_52.ini。- ホムSへの進化では、どのホムも任意のホムSになれるので。
「進化」選択すると「どのホムSになるのか」選ぶようにする必要あり。
- ホムSへの進化では、どのホムも任意のホムSになれるので。
ただし、この機能でコピーするのは『vs_enemy_xx.ini』だけです。
ホムごとの学習設定(ai_option_xx.ini)は、あえてコピーしていません。
以上、だいぶ長文になりましたが、そんな感じ。
ご意見などがあれば。