ホムンクルスAIについての独り言
[ラグナロクオンライン]のホムンクルスシステムで使用する ホムンクルスAIのカスタマイズについてのメモ
プロフィール

モルティシア

Author:モルティシア
何時の間にやら貧乏キャラが定着しそのまま「安ケミ」と呼ばれるようになった「安っぽいケミ」
一時休止していたものの、最近ふたたびホムンクルスのカスタムAIの開発&公開を再開
メマー無しPC3の42転職
[完全製薬・完全露店]キャラ

カテゴリー

月別アーカイブ

最近の記事

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

リンク

このブログをリンクに追加する

ブログ内検索

RSSフィード

FC2カウンター

メールフォーム

名前:
メール:
件名:
本文:

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

処理の軽量化 メモ
Ver5よりチマチマと行ってきた処理の軽量化ですが、現時点のVer7で落ち着いています

AIの軽量化を考えている方の参考に、この安っぽいAIで行っている軽量化処理について書いてみたいと思います


まず最初に、AIの前に時間でのIF分岐を用いたreturnで何もしない時間を作ること

デフォのAIは140ms(0.14秒)に一回の周期で動いています
しかし、0.1秒の反応速度が実際必要なのでしょうか?という疑問が私にはあります
通常の狩りでは500ms(0.5秒)間隔でも遅れは感じませんし、私の経験では300ms(0.3秒)前後あたりが時間差を感じる限界です
「ならば0.3秒に一回処理をさせればホムの動きの遅れを感じずに負荷は半分以下に」
というのがこの軽量化処理の考えです
安っぽいAIでは、Attack以外の処理は、AIの2回転に一回しか処理をしないようにしています
これにより机上では0.28秒~0.4秒感覚でホムが動くことになります
この反応速度で「遅い」と感じたことは一度もありませんし、むしろプロンテラ十字路の露店密集地でもホム無しの状態とほぼ変わりなく歩くことが出来ます
またGetActerを行う間隔も最速で約0.3秒に一回となり、デフォルトAIより0.2秒ほど遅らせることでPCや回線への負担を僅かに軽減させています

次に、Move処理を500ms(0.5秒)より短い間隔で行わない様に調整することです
デフォAIでは、ホムは自分が移動中であっても0.14秒間隔で常に移動コマンドを送り続けます
これがホムを出して重い場所を歩いた時に僅かなラグとなります
このMove処理を送り過ぎないように調整することで最低限のパケットでホムの移動を可能にするというのがこの軽量化処理の考えです

一時期は「ホムのモーション」が移動中である時はMoveを送らないように、としていたのですが
それだと急な方向転換が出来なくなってしまいます
それで時間で制御することにし、様々な時間で検証した結果、700ms以下ならストレスを感じないと結論付けました
しかし私のケミはpc3なので他のケミより遅いです
速度を貰ったらもっと早い反応をしないと方向転換が遅れる可能性があります
ということで、馬碑を使ったりした結果、500msへ調整しています

三つ目に、AIが一周する間に1つのパケット送信命令しか行わないようにする
ということです
パケット送信命令はSkllObject、Move、Attack の三つ
このうちAttackとSkillが一つの命令で2回行う場合があるため、これが同時に実行されないようにフラグ分岐でAttackとオートスキルが交互に処理されるようにしています
交互に、といっても0.3秒以下の間隔で入れ替わるのですから体感ではほぼ遅れは感じません
これによって1秒あたりの無駄なパケット送信数が減り、回線への負担が減ります

四つ目はGetActerによるID取得のタイミングです
デフォAIではGetEnemyでの敵取得でしかIDを取りません
つまり敵一匹につき一回しかGetActerを行いません(敵が居ない時は0.1秒間隔でIDとりまくりです)
これが横殴りなどでIDを検索したり比較したりする処理が増えると、そのたびにIDを得る必要が出てきます
これがけっこう処理を重くします
なので最初のID取得で得たIDをローカルのテーブルに入れ、今後はそのテーブルに保存したIDを使用していくことでID取得処理を一回で済ませる様にします
デフォAIと同じタイミングでこの保存したIDを更新すれば問題はありません(最初の軽量化処理との組み合わせによりID更新の間隔も0.3秒に一回にしています)
同時に、敵以外のIDを格納するテーブルを用意することでプレイヤー検索のループの時間を少しでも削減しています

五つ目は、最初のAI起動時に一回のみで十分な処理をまとめ、その最初の一回のみしか行わないようにすることです
これは非常に地味なのですが、例えばグローバル変数の初期値設定に関する処理がこれにあたります
(最大HPや最大SPは途中でLvアップでもしない限り変化しません、なのでこれも最初に保存するのみで使いまわすことが出来ます)
これはAIによって必要だったり必要なかったりします

六つ目に、これはVer8で導入する予定なのですが、最初に保存したIDを一定のルールに並べ替えした後に
より最小限のループで目的のデータを得ることです
これによりID検索の時間は約半分になるはずです

デフォルトAIで特別重いと言うわけではないのに、何故このような軽量化を行っているのか?と思う方がいると思います
将来的に「重くなりそうな処理を入れたい」という予定があるために「基本処理を徹底して軽くしたい」という目的があるからです
また、ノートPCなどの低スペック低回線でROをしている方でも快適にホムンクルスを遊べるように、という意図もあり、そのための簡易版でもあります
(簡易版は余計な処理を省いているので軽量化処理本来の効果を体感できるはずです)

一番の理由は私のメインPCがしょぼいせいでデフォAIでもけっこうラグイから、なのですが

私のAIでは以上の軽量化の対策を行っています
この記事が低スペックPCでラグナロクをお楽しみのホムケミ使いの方の参考になれば幸いです
スポンサーサイト
この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://yasukemi.blog49.fc2.com/tb.php/64-b745d83d
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。