MUGENのこととかいろいろ
未分類 | AI関連 | パレット | ポトレ | キャラ紹介 | MUGEN以外 | AI講座的なもの | その他 | キャラ | 
名の無限
≪2017.10  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  2017.12≫
プロフィール

名無し/Nanashi

Author:名無し/Nanashi
MUGENのAIをつくったり

あと自分が他所で名前出すときはこの呼び名に統一します。
他の方が呼ぶ分には名無しで構いません。

公開中のブツのリストなど

AI講座一覧

このブログはリンクフリーです。お気軽にどうぞ。

↓バナー


最新記事
Twitter
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
FC2カウンター
現在の閲覧者数:
検索フォーム
リンク
ブロとも申請フォーム
QRコード
QRコード
--.--.-- --
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告    Top↑

2009.12.16 Wed
ああ外が明るい(Var1つで複数学習する方法)
どうも寝付けなくて色々考えてるうちに、

AIの学習で、一つのvarでいくつも相手ステートを記憶できる方法が思い浮かんで

起きて実際に試行錯誤してみたけど

Varの限界数値の関係なのか、2つまでしか記憶できんかった。


Varの限界っていくつだったけ

寝ます

(追記で色々説明しました)
(2/16追記・修正、ちょっと記述がスマートに)



追記)

調べてみたらvarの限界は±2147483647らしいね。自由に使えるのは9桁までか…
ステート番号じゃなくてTime値とか桁に小さい値なら一つのvarでもっといっぱい学習できるね。

ちなみに下のが実験に使用した記述

[State -1, ]
Type = VarSet
trigger1 = var(50) = 0
trigger1 = p2stateno < 10000
trigger1 = p2movetype = A
v = 50
value = p2stateno
IgnoreHitPause = 1
[State -1, ]
Type = VarAdd
trigger1 = var(50) != p2stateno
trigger1 = var(50) = (0,10000]
trigger1 = p2movetype = A && enemynear(var(51)),time = 5
v = 50
value = p2stateno*10000
IgnoreHitPause = 1

;強ライシングタックル
[State -1, rising tackle]
type = ChangeState
value = 1025
triggerall = roundstate= 2
triggerall = enemynear(var(51)),alive
triggerall = statetype != A
triggerall = stateno != [100,102]
triggerall = p2movetype = A && ctrl
trigger1 = p2stateno = var(50)%10000 || p2stateno = Floor(var(50)/10000)


とりあえず、「相手の出した、最初とその次の攻撃を記憶してライジングタックルで反撃」する簡易記述。

…別にこういう事がしたいんじゃないですがね。
相手の飛び道具発射ステートを学習したいのだが、そこはこれから考えんと。





仕組みの説明しようかと思ったけど、複雑なのでメンドイ…w
まぁFloorによる「小数点以下切り捨て」を活用してます

この場合、相手の攻撃ステートの初めがA、次がBとして、

最初は普通に相手ステートのAを記録して、その次の記憶の際は、
相手ステートBに10000を掛けてから、それをさっきのAに足しています

つまりこの時点でVar(○)=A+(B×10000)、もしA=200、B=210とすれば2100200です。


で、ここからAとBを取り出すのに、小数点切捨てを活用します

まずBは、
Var(○)を10000で割ってやり、それに小数点切捨てを適用すると算出できます。
上の例の2100200で考えると、210.0200になるのでわかりやすいかと思います。

Aは簡単で、Var(○)%10000で出ます。
%は「余り」を解として出す記号で、例えば「17%3=2」です。
上の場合、2100200%10000 = 200 ですね。


…という理論を記述してるのが↑のです。
なぜBに掛けるのが10000なのかというと、4桁(1000~9999)のステート番号まで記録できるから。
相手ステートが10000超えてると役に立たないですが。あんまりないし。

しかし正直、利点が少ない。自分のようなあまりVarを使わない人間には特に。
2つvar使えばすむことだからねぇw

それにここまで書いてきたけど、同じような方法でもっと効率的な記述が普及してるかも分からんね。
ほとんど他の人の記述みないし


まぁ、「Varの数が足りないけど、常駐ヘルパーを増やすのもちょっとなぁ」ってひとは試してみてもいいかもしれません。


スポンサーサイト

AI講座的なもの    Comment(4)   TrackBack(0)   Top↑

Comment
Posted by 流れ者
やや、先日はどうも

俺も同じような方法でのVarの水増しは考えたことがあります
・・・が、利用する際のデコードの関係で記述がえらいことになるっぽいんで止めた。
まあ3つも4つも突っ込もうとしたのが間違いだったかな
2つくらいなら実用的ですね、でも学習に使うなら3つ4つ入れたいなぁ
ID、ステート、発生、距離と・・・ン~ま、無理ね!

うちのアリスは飛び道具発射ステート10個まで記憶しますよ
ヘルパー使って結構ムチャなルーチンやらせてるけど。
ただ、タッグでうまく働いてない・・・なんでかなぁ
どっちみちグレイズした後に出来ることが少なくてあまり役に立ってないけどー
基幹ルーチンの解説も置いてるんで興味があれば
うん、でもアリスの記述見て他人がすぐ理解できるとは思ってない!
自分でもどこがどう対応してるかわからなくなるからな!
ヘルパー監視ルーチンと融合してるし・・・そうしないとダメだからだが
2009.12.17 Thu 01:14 URL [ Edit ]
Posted by 名無し/Nanashi
実は、Varの限界を考慮してなかった最初は4つぐらい学習しようとして最終的に1000000000000掛けたりしてましたw
限界以前に、利用する際の記述が横に長すぎて使えなかったというww

この方式は、限定的なところで使うのがいいですね。
汎用するには記述がめんどすぎる


10個も!
でも東方キャラの存在を考えるとそれぐらい必要ですかね…タッグならなおさらか。ウームめんどくさい

ヘルパー監視必須ですよねぇ。
そもそもnumprojだけじゃ飛び道具にシャインで突っ込んじまうから苦労しているワケでw

あとでアリスの記述も色々見させてもらいますね~
頑張って理解しよう…


>>自分でもどこがどう対応してるかわからなくなる
あるあるw
2009.12.17 Thu 02:27 URL [ Edit ]
Posted by 流れ者
東方が、という前にリュウでも波動弱中強に真空電刃と最大5種類までありますからね
豪鬼になれば斬空あるから倍プッシュ
はい、これで大体10個!
東方キャラに本格的に対応するなら30個くらい覚えたいですね
そんなにVarあいてねえよ・・・

とりあえず射撃ステートを覚える基本ルーチンは、ステートをあらかじめ捉えておいて
そのステートでProjを発射したと思われる場合と、発射したヘルパーがAttr=Pになった場合になってます
2009.12.17 Thu 22:44 URL [ Edit ]
Posted by 名無し/Nanashi
あ、そうか弱中強でステートちがうもんなぁ…
ううむ…記憶したステート番号±100とかにして、「だいたいこの辺まで飛び道具ステート」ってふうにすれば多少すくなくできるかなぁ…

「グレイズ」のような、飛び道具ステートを狙う行動には致命的になるから使えないけど、
「シャインで隙突き」のような、飛び道具ステートを除外して狙うのにはコレで十分な気がする。妥協になるがw


ルーチンの説明は有り難いです。参考させてもらいます
2009.12.18 Fri 01:40 URL [ Edit ]

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

Top↑

TrackBack
TrackBackURL
http://nanomugen644.blog54.fc2.com/tb.php/113-adeba90a

Top↑

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