日記/2007-02-21 のバックアップ(No.2)

お名前:

どんなものでも、自分が困らないと対応意欲は湧かないものです。
今回のAIロードが遅い件にしても、同じ。
例えばAIのロードを多用しない人には、あまり関係ない話だと思います。
ゲーム開始時やマップ移動したときに、「ちょっと重いな〜」と思う程度のはず。

友瀬はソロプレイヤー==テレポ狩りを多用する傾向があります。
つまり、テレポアウトの際に固まってしまう今回の初期ロード悪化には困ったので、いろいろ対処を考えています。
現状のGlenelgの分割ロード方式も、最善ではないもののテレポ狩りには次善の策だと思って作りこみました。

現状のGlenelgの動作をおおざっぱに言えば、
以前は「全体を一気に読んで1秒間完全に固まっていた」ところ、
今は「ちょっとずつ読んで、0.1秒ずつ20回止まっている」という感じのもの。
トータルでの「AI稼動開始までの時間」は、単純に全体を読むよりは確実に遅くなっていますが、その代わり、AIが稼動開始する前にもユーザー操作はできるようになっています。

テレポ狩りの際に期待されるのは「着地後、すばやく次の手を判断できる」ことだと思っています。
テレポアウト後フリーの敵が1体いたとして、それに攻撃を始めるのが1秒遅れても、多勢に影響はないです:それくらいの時間は、敵に接近するまでに消費してしまいます。
が、勝ち目のないMHに飛び込んでしまったとき、逃げはじめるのが1秒遅れたらそれは致命的です。
だから友瀬は、初期のホム性能は悪くても、即画面表示&ユーザー操作(==再テレポで逃亡)できるように、現状の手を選びました。

他にAIロードを多用するケースとしては、「安息→コールホムを行うことで、ディレイ削除を狙う」人。
この人には、現状のGlenelgはまったく向いていません。

また、今回の場合、PC環境による差があるのがとにかく大きい。
友瀬も、ネットカフェで(読み込み改善未対応の古い)Glenelgを動かしてみて、まったく初期ロードに困らなかったのに驚かされました。
最初に書いた通り、「人は自分が困らないとやる気にならない」ものです。
AI作者の環境で困らなければ対処する気はおきないでしょうし、もしやる気になっても検証はできません。
そういう話。


しつこく初期読み込みまわりの話。
いろいろ状況整理をした結果のメモ。

初回の人のメモから、再考察。

RO内でのメモリ管理が変わったとみるのが妥当そうに思えてきた。

どういうことかというと・・・先日の初回限定の人の追加情報
初回の人自身がコメントしている以下の内容:

コンパイル後25kb〜45kbあたりにこれ以上削っても早くならないラインがありそう。

これが非常に鋭い気がする。

つまり例えば、AI用に初期状態で準備されているメモリ量が、30KB程度。
これ以上のサイズのものを読み込みしようとすると、内部的にメモリーを再確保するのでその時間が負荷。
・・・なんてことは、非常にありそうな気がする。
もちろん、あくまで推論の域はでませんが。

AIスレでのAI比較記録から、再考察。

なにかと悪者にされるfile io 系(iniファイル)だが、ことこの測定条件でのGlenelgについては、 io はあまり影響がないように思う。

というのは、この検証が「ダウンロード直後」のAIを使っていることに起因。
こちらの動作環境でのテストでは、Glenelgでのiniファイルのうち最大の負荷となっているのは 敵ごとの学習ファイルであり、そしてそれは初期状態では存在していない。
そして更にいうと、着地・テレポのような高速処理をしている限り、おそらくGlenelgは簡易モードでしか 動いていない:つまりrequireをつぎつぎやっている最中のはず。

敵情報ファイルのlua 化。

「io.read + AIプログラムでデータ解析」が「require + lua内での単純代入」より遅いのは事実なので、Glenelg でも学習ファイルをlua化してみた。
結果は、確かに多少軽くなった気はする。
が、やはり目に見える負荷は存在する:手動操作でlua読み込みするような指定を作って試してみたところ、 一瞬の表示遅延がある。
参考までに学習ファイルは15KB。