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

モルティシア

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

カテゴリー

月別アーカイブ

最近の記事

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

リンク

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

ブログ内検索

RSSフィード

FC2カウンター

メールフォーム

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

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

配布ページTOPの私書箱への返答まとめ
配布ページのTOPのギルドページにある私書箱に、匿名っぽいのであれこれ要望や質問飛んできてるので
それらについてまとめてこちらで返答



[続きを読む...]
スポンサーサイト
放置狩りの私見
どうやら、ODはすごいことになってるらしい


[続きを読む...]
Ver8、製作状況2
現時点で「本体」としてのα版は構想の45%位が完成
基本的な部分は大体仕上がってきました

Ver7との違いは、

メモリへの読み込み時のファイル容量を考慮した可能な限りの文字数の削減
そしてコメントの誤字脱字の本腰を入れた修正
今までデフォAIに近い形式にこだわっていてなかなか出来なかった、メンテ性と拡張性を重視した各関数のさらなる独立性の向上
そして、処理の追加による原因不明のバグ発生を避けるために今まで実装を見送って様子を見ていたいくつかの軽量化処理を組み込み

と言った感じです

まだ、5~6箇所いっぺんに変えてデバックして様子見て~と繰り返しつつ、少しずつ作成しているため
本格的な付与機能の取り付けはまだまだ先です

>今まで実装を見送って様子を見ていたいくつかの軽量化処理を組み込み
これがなかなか強敵で、これが一番エラーの温床になっています
ここのバグを一個一個取り除き、またコードとにらめっこして同時に机上デバックをして、
動くのを確認したら今度はなるべく無駄な処理がなくなるようにとあちこち削っています

ROを起動させてジックリ動作テストする時間がなかなかとれないので、非常にゆっくりなペースで進んでいます・・・
とりあえず、一日10分くらいのペースでカタカタとキーボード触ってVer8のα版を作ってます
最終的に、α版は、ダンスモード、おまけモード、攻撃パターン 以外の機能
(オートスキル、壁モード、防衛機能、パトロールモード など)
を組み込んでいきたいと思います

そしてこれが、こちらの構想通りのものに近付いたら今度はMobDataを使用したβ版です

β版が大体完成したかな?と思ったら
ひとまず公開テストも兼ねてVer8テスト版として公開な予定

Ver9の予定について、
一応、氷割りといった空想機能や擬似的な主人変更など様々な遊び機能を実装していく予定

一定条件を満たすと他人のホムの後ろをついていって同じ敵を攻撃する拡張コードも考えています
(ライブラリとして他AIでも使用可能に出来るといいなぁ)
この拡張コードを持つホムが三体揃うと(先頭の1体を2体が追尾すると)「ジェッ○スト○ームアタック」が発動する「○い三連星」モードとかっ!

先頭ホムから
通常殴り→カプリス→カプリス
と攻撃して一撃離脱をし、ぐるーっと迂回したあと、また同じ一撃離脱を繰り返す
そんな「ジェッ○スト○ームアタック」をホムで再現したい!
問題は動作テストなんだけど・・・なんとかなるかしら?

また、複数のホムが一人のケミを仮の主人とした場合
○ァンネル や ビッ○ のように仮主人を守る様に動くのを妄想中
その場合、敵のタゲ取りの構造を「他の味方ホム」が居て、そのホムが「こちらの予定通りにタゲをとる」ことを前提としたものにして
同じ敵を同時に殴ったりなどタゲ取りの無駄が発生しないようにしないといけないのがちょっとだるいです
また、本来の主人の画面外にいってしまうと動けなくなるため画面外へいってしまわないようにといった行動の制限も必要です

仮主人にホムを預ける間、本来の主人は自分のホムを置いていかないように気をつけながら仮主人の周囲でテキトーに戦闘、となるのかな?

となるとVer9で画面内のキャラやホムの動きを監視して情報を蓄える機能をつけることになりそうです
Ver8で根本から軽くしても、このVer9の監視処理でまた重くなりそうな予感

あと、ダンスモードは拡張パック化して他AIでも使えるようにする予定
おまけモードは・・・アレ本当に試験的に組み込んだだけだからなぁ
反響薄いし、Ver7だけの機能にするかもしれないです

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

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


[続きを読む...]
テーブル操作
今朝、寝起きのメンテ前にちょっとテーブル関数を使ってみました

「Lua標準のライブラリのテーブル関数が変数扱いされていて"nil value"というエラーが出た」
「何を言ってるかわからねーと思うが俺も何をされたのか分からなかった」

その後電車の中で暇だったため、携帯からライブレ覗いてたらAIスレに書き込みがあったのでチェック

>ROのLuaにはtableモジュールが(以下略

「誤字だとか関数の使い方のミスだとかそんなちゃちなもんじゃ断じてねぇ」
「もっと恐ろしい重力クオリティの断片を味わったぜ」

必要に応じてテーブル操作の関数自作するしかなさそうですね

プログラムいじるねが楽しい派、なので
妄想を現実にするためにコツコツ趣味AI組んでいきますか!

アイテム課金・・・!?
電車の中、携帯いじってて知りました

なんというか、ROの現状を一番分かってないのが管理会社というのが丸分かりなこのラインナップ

のんびり楽しんでる人はそもそも経験値アップとか使わないでしょう・・・
そもそも、簡単にレベル上がったりキャラ完成したりしたらあっというまにやることが無くなるっての('A`)
スキルリセットとか主観的には嬉しいけどさ、冷静に考えたら
スキル振りを考える楽しさとかスキルポイント振る時のスリルとか無くなる上に
死にスキルやネタスキルをあえて取った人の価値が下がる気が・・・
「遊び」の定義がなんかズレてる
遊びは与えられるものではなく、工夫して作っていくものだと思う

努力を無駄なものとしていく最近の風潮って一体何なんだろう
それで本当の楽しさが味わえるのだろうか

結局は イヤなら買わなければいい 訳だけど

楽さと楽しさ、安全と自由、交流と効率
これらは同時には得られない、相反するものだと考えています
どっちも!と欲張り続けた先には
何があるのでしょうか
なんということでしょう
出かける前に20分弱ほどPCつけて少し検索してたら
Luaにめテーブル操作の関数があるじゃないですか
このライブラリがROのホムAIでも使えるならソートも自由自在!
私が作ったソート関数無意味!?

明日の朝にまた30分くらい時間とれそうだから実験してみませう

以下思いつきをメモメモ
文字を数字に変換
配布MobData.luaを元に、より自AIで扱いやすいMobData.iniを自動生成
MobData.iniは1次元テーブル、IDを添字にしてデータを一つの英数字列に圧縮したデータを格納
Mob名を数値で表現してワンパターンな処理で特定データを抽出しやすい様に
必要なときに必要なMobのデータを文字列操作で取り出す

MobDataを扱う部分
:初期処理
→無理Mob、雑魚Mob、Mobそれ以外、の三つに分類してテーブルへ
さらに粘着タイプのMobのIDと無理、それ以外のフラグを納めたテーブルも用意
:GetEnemy
MobIDと共にフラグを排出、フラグによって行動分岐
(味方キャラ識別の部分が完成したらPT機能としてゆくゆくは細かく利用、
PTメンバーの職構成とモーションにより状況判断
MDef、Def、HIT、Flee、秒間被ダメ、囲まれ数、攻撃モーション、被ダメモーション、移動モーション、スキルモーション
(PT完全対応は将来的な展望))

:タゲ固定概念:
粘着タイプMobが居たら
→フラグによって行動変化、Chase、Attack、GetEnemy
→無理Mob、主人が攻撃モーションをしつつそのMobをタゲったら
→その他→自分から殴る(タゲ固定を優先)

MobAIの分類:
リンクアクティブ
リンクノンアクティブ
粘着アクティブ
粘着ノンアクティブ
アクティブ
ノンアクティブ
移りやすいアクティブ
3セル以上の遠距離

:追加Mobデータ:
移動速度(五段階)
MobAIのタイプ
攻撃速度(五段階)
危険スキルの有無(拉致、SB、高MAtkの魔法、状態異常攻撃(スタン、SP吸収)、被ダメ後ブチ切れ(生体Mob)、自爆)

Ver8の開発状況
α版が45%くらい
まだまだ基盤固め、

個人的なさらなる拡張性(処理の統一と分離、可能な限りの軽量化と補助関数の充実)とメンテナンス性(処理の独立性、データの動きを明確化)の向上、
今までのホム狩りから想定される例外処理対策、
コメントの一新

といった基本的な機能を強化しつつ将来的な追加を視野に入れて組立中

最終目標は「1スキル、1道具としてのホム」からの脱却で、
「1相棒、1キャラとしてのホム」を可能な限り目指すこと

のんびりマイペースにやっていきます
ROのサービス終了とこのホム完成、どちらが早いのでしょうね(笑
プチライブラリまとめ
Ver8に付け加えるためにあれこれとサポート処理を付け加えていくと
「これ汎用性あるんじゃない?」という処理がいくつか生まれてきました
なので過去に作った微妙な処理と抱き合わせで「役に立つか分からない処理ライブラリ」として配布
右クリックで「リンク先を保存」でダウンロード[empty.lua]

中身は
:AI遅延処理
:デバック用処理
:idを殴ってるの数をカウントする処理
:テーブル編集のための処理あれこれ
(テーブルから指定データだけを削除して作り直す処理、昇順に並べ替える処理、二分探索する処理)
:数値を2進数←→10進数で変換する処理

テーブル編集のくだりが辛うじて使えるくらいかな?
ともかく、興味ある方はどうぞ
演算誤差に関するメモ1
9桁から演算誤差が発生
桁がでかくなるほど数値がおかしくなる
Luaでは9桁未満でないと演算不可能
プチライブラリ?
風邪で熱あるので学校休んで横になりながら頭の中でアルゴリズムをゴリゴリ考えてました
夜になってちょっと体調良くなったので動作テスト

バグとれたっぽいので公開

ボーっとする頭で1時間半くらいでぱぱーっと正常に動作するまでやっつけたやつなので負荷はあまり考えてないです
あとでまとまった時間とれたらGetActors ()でとれるIDでも並べ替えて負荷テストやってみます

とりあえず今日はここまで

現状のテーブルの全部のデータを一個一個見る方法でも特に重さは感じないのだけど、
どうせなら極限まで軽くしたいなーということでこの処理を実装
そもそもMobdataを扱う時、全てのモンスターの情報を一個一個検索すると、索敵時のGetActors ()の負荷も併せて私のPCではちょっとラグ出るのです
二分探索なら今までのテーブル検索の半分のスピードと負荷でデータを探すことが出来るのだけど、どのくらい有効なんだろ

もしこれが成功してたらAIが扱う様々なデータの検索が少しでも軽く行えるようになり、後々実装予定の様々な妄想が一歩現実に近付きます

一個一個データを見ていく線形探索より負荷が少なく早い検索アルゴリズムは他にもいくつかあるのですが、まずは仕組みが単純な二分探索方式ですね
他の検索アルゴリズムも、可能そうなら試して見たいと思います

ただ検索する前のデータのソート処理が若干重いかなというのが心配です



以下、データを昇順に並べ替える処理&その並べ替えたデータを二分探索する処理


[続きを読む...]
電車の中からメモメモ
忘れないうちにメモ

関数名うろ覚えだから誤字があってもキニシナイ
(・3・)

あと一部の関数の使い方間違ってそう
ちなみにこれだけだとあまり意味をなさない処理

fanction A (data,number)
local m = 0

for data < 1 do
m = m * 10
m = m + math.mod(data,number)
data = math.floor(data / number)
end

return m
end

fanction B (data,number)
local m, n, index = 0

for data < 1 do
index = index + 1
n = math.mod(data,10)
m = m + n * math.pow(number,index)
data = math.floor(data / 10)
end

return m
end

さらにメモメモ

Ludデータベースからテーブルへ→iniファイルへ記録→以下、iniを自動編集しつつそれを基盤に行動
AI機動時にLuaデータベースの追加IDの有無を確認

以下をキーにしてテーブルへIDをソート
「殴る優先Best10」を決めさせる

:EnemyHIT/MyFlee*100
:EnemyFlee/MyHIT*100
:EnmyHP/MyAtk
(My値は自己申告、無記入ならこの処理は無し)

:EnemyAtk/MyHP
戦闘開始→HPの減るスピード→フラグ追記
(ただし手動優先、手動時リセット)

:勝手に殴っていいMob:ダメなMob:

*展望*
MobAIとMob射程と主人の位置と防衛対象の位置とMobの位置
移動→タゲ剥がし
(タゲ移しのための移動、簡単なタゲコントロールの実行)

バニル→カプリス1
鳥→月光1

ダメ反応を生かした無駄な移動を省いたタゲ取り、固定
(ダメモーションとれるまで殴る、全敵のタゲ固定完了で殴り開始)

*さらに妄想を実現させるためのメモ*
Mobの座標とモーションの監視とPCへの負担
ケミの座標とモーションの監視とPCへの負担
プレイヤーの座標とモーションの監視とPCへの負担
座標監視時、0.5秒感覚で更新
古い座標を随時記録、古いデータの破棄、5秒監視(10ずつ保管)

ケミ(主人)の行動によってホムが知り合いのキャラに懐いたり嫌ったりする

AI起動時に一度メイン処理の前にワンクッションをおいて特殊処理(デバック処理の応用)
以前の起動時に残された記録を元にパターン記述で自らのAIを簡単に書き換え(条件や変数の数値を書き換える程度)
データ入出力処理の応用により疑似的な自己記述(夢から覚めなサーイ

まぁ、プログラマでもない素人な私じゃ無理かな
Ver8 製作状況1
MobDateを組み込む場合、折角Mobのステを認識させるのだからと
やりたい事を色々させようとしたらかなりプログラムがスパゲティになりそうなため
根本から徹底的に、本体をスリムにする必要が出てきました

ということでVer7まではデフォルトAIを基盤として、デフォルトAIの面影をなるべく残す形で追加していきましたがそろそろ限界です
Ver8からは全く別のAIとしてVer7のパーツを流用しつつ1から組み立てています

現段階では最低限の機能を積んだ「簡易版」を一度関数ごとにバラシテ、似た機能や似た処理を気がついた範囲で洗い出し
また、(私にとっての)拡張性とメンテ性を重視して処理を書く順番も全部入れ替えています
ついでに、コードが見づらくなるからと見送っていた様々な雑多で地味なアイディアを詰め込んでいる段階です

といっても、見た目の機能と回線や処理を軽減するための様々な処理は変わりません
見えない地味な面での機能強化です

今の段階だと「本体」としてのα版は構想の40%位が完成といった感じです
これが完成したら、今度はMobDataを組み込んだβ版に取り掛かり、Ver7までの機能を付け加えて完成とします
たぶん来年の1月~2月前後にはVer8、公開できるのではないでしょうか

チマチマと時間を見つけては少しずつ開発を進めてみます
また、Ver8が完成したらGV用のAIも骨組みをしっかり整えて今後の拡張の準備をしたいと考えています
拡張予定はありませんが今のVer2だとまだ基盤が不完全かなと感じているので、もちょっと基本性能を底上げしたものをいずれVer3として公開出来るといいなと考えています


Ver7.4
「壁モード」の不具合の原因が分かりました

壁モードは自分用に作っていて、たまーにしか使っていなかったので処理が適当になっていたのが不味かったようです


1.基本的に狩りで横殴りが際どい時は全部ALT+Tで殴らせないようにしてたため、ホム単体に任せられない(余所見が出来ない)壁モードでは特に横殴り判断の部分がテキトーになってた
2.ノンアクティブが多い狩場で使うことを想定していたのでアクティブが勝手にホムをタゲった時の処理を考えていなかった
3.一度殴ったMobの数とIDを管理する処理がテキトーだったため
複数のタゲを持つとテーブルに重複データが無限に蓄積していた

これらが原因でした
特に3の不具合は、今まで壁モードで壁をさせる時は1匹しかタゲを持たせていなかったので全く気付きませんでした
敵が大量にわく環境で壁モードを使用すると敵IDが重複したまま蓄積していき・・・

11/06_1


こんな酷いことになっていました
(この数字はMobの数をカウントするカウンタの中身です、このとき実際にタゲってたMobは3匹のみでした)

ということで上記を、月曜に時間がとれたので一気にバグ取り
ODなんて行けないので下水のゴキ達で実験です

11/06_2


11/06_4


11/06_3


こんな感じで2時間くらい下水にこもって動作確認&データ出力+デバックを行いました

修正したものをVer7.4としてアップ
これで大丈夫・・・なハズ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。