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

モルティシア

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

カテゴリー

月別アーカイブ

最近の記事

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

リンク

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

ブログ内検索

RSSフィード

FC2カウンター

メールフォーム

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

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

プチライブラリ?
風邪で熱あるので学校休んで横になりながら頭の中でアルゴリズムをゴリゴリ考えてました
夜になってちょっと体調良くなったので動作テスト

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

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

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

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

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

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

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



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


function sorttable(table)
-- テーブルのIDを昇順にソート
____local sorttable = {}
____local sorttable2 = table
____local sortindex = 1
____local index = 1
____for i,v in ipairs(table) do
________for j,z in ipairs(sorttable2) do -- 現在の値の入れ替え先の探索

____________if (v >= z) then
________________sortindex = index
____________end
____________index = index + 1
________end

________index = 1
________for j,z in ipairs(sorttable2) do -- 現在の値を入れ替える作業
____________if (v ~= z) then
________________sorttable[index] = z
________________index = index + 1
________________if (index == sortindex) then
____________________sorttable[index] = v
____________________index = index + 1
________________end
____________elseif (v == z and index == sortindex) then
________________sorttable[index] = z
________________index = index + 1
____________end
________end
________sortindex = 1
________index = 1
________sorttable2 = sorttable
________sorttable = {}
____end
____return sorttable2
end

-- テーブルを二分探索、同じデータがあるかどうかの判断(昇順のみに対応)
-- (同じデータがあるならtrue、無いならfalse)
function BinarySearch(data, table, number)
____local number2 = number
____local Farst = 0
____local last = number

____while number2 > 1 do

________number2 = math.floor(number2 / 2) -- 探索する添字更新
________number2 = number2 + Farst

________if (data < table[number2]) then -- 上限更新
____________last = number2
____________number2 = last - Farst
________elseif (data > table[number2]) then -- 下限更新
____________Farst = number2
____________number2 = last - number2
________elseif (data == table[number2]) then
____________return true
________end

____end
____if (data == table[number]) then -- テーブルの最後の値だけ比較出来ないので最後にチェック
________return true
____end
____return false
end

スポンサーサイト
この記事に対するコメント

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














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


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