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

モルティシア

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

カテゴリー

月別アーカイブ

最近の記事

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

リンク

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

ブログ内検索

RSSフィード

FC2カウンター

メールフォーム

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

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

Aspd対策についてその3
関数ループを実用化させるために色々と実験してきました

実験結果で出た情報は
・関数によるループは通常のループ処理以上に酷いラグが発生し、クライアントがフリーズする
(同じ約500msのループで、for文では僅かなラグで留まるにもかかわらず、関数のループはクライアントそのものがフリーズした)

・関数→同じ関数 というループで1msの間AIを止めるには
約2000回~3000回ループさせなければならない

・Luaにはメモリの使用制限があり、カウンタ用変数への格納や、関数から関数への重なった呼び出しは
同時に約5000回行うとオーバーフローになる
こちらで調べた範囲では3000回までは大丈夫だった
(一度endに入り処理そのものを一旦終了させれば問題ない)

結論:空ループは素直にfor文を使った方がいい

ちなみにこれはforを一切使わないで行いました

以下、コードと詳細
新たにこのような関数を追加
グローバル変数の宣言は省略する
――
--------------------------------------------
--ループ処理(これ一回で約1msほどAIの処理を中止させることが出来る)
--------------------------------------------
function loop ()

□□□□if (4 > loopcount2) then
□□□□□□loopcount = loopcount + 1
□□□□□□□□if (500 <= loopcount) then
□□□□□□□□□□loopcount2 = loopcount2 + 1
□□□□□□□□□□loopcount = 0
□□□□□□□□end
□□□□□□loop ()
□□□□□□return
□□□□end
□□□□loopcount = 0
□□□□loopcount2 = 0

end

――
この関数を追加し、
"loop()"を500個書き連ねただけの、理論上500msループさせる関数
loop_1()を用意し、メイン関数に"loop_1()"とだけ記入
同時にGetTick()を外部に書き出すデバック用のコードを
ループ前とループ後に追加

そしてコールホムンクルス

フリーズ

このカウントの値を色々調整していく過程で、3000までは確実に大丈夫で5000だとオーバーフローすることが分かりました
数字の境界を探るのは、面倒だったので飛ばしました

また、このループ関数のみで500msの時間稼ぎを行おうとして
return を利用したところ、5000回目の呼び出しでオーバーフロー、2500回までは確実に平気でした

一度end出終わらせて再びloop()を呼び出す方法なら制限なくループさせることが可能でした

時間でループ回数を制限しようとしたところ、5000回あたりでオーバーフローになるため、2ms~3msまでしかループさせることができませんでした
なので上に書いた関数に書き換えて、10ms、50ms、100msと時間を伸ばしていきました
200msまでは特に問題なく、ラグも感じなかったです
ここで一気に500msまで上げたところフリーズしました
しかもfor文でループさせた時より酷いフリーズの仕方です
(ホムが生成途中で、半透明のまま画面が固まりました)

クライアントが固まってても一応AIは動いてたようで、ちゃんと吐き出されていたGetTick()を後で見てみると
480ms~530msくらいの間隔でちゃんとAI止めのループはされていたようです

とりあえず今回の実験はこれで終わりです
今後は多分、for文を使用する処理を中心にあれこれ模索していくと思います

またなにか新しいことが分かったらここで発表していこうと思います
(役に立つかどうかは二の次ですねw)
スポンサーサイト
この記事に対するコメント

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














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


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