正式公開版 Ver 2.4(2013/6/8公開)
物理演算とAIで格闘ゲームっぽいものを目指そうというプログラムです。
NekoFight ver2.4をダウンロードする(Windows+OpenGL+OpenMP、ZIP圧縮、1.5MByte)
操作法はメニューから操作法を見てください。
2013/6/8日 Ver2.4 公開
アルゴリズム的に変わっていませんが、パラメータ調節してみました。
ここで、あまりにプログラムが重いのでOpenMPでマルチスレッド対応してあるわけですが、コア数が多い場合に対応させるために今回コンパイラ一式を変えてみました。
動作しない環境も多そうですので、旧環境でOpenMPを切ってあるバージョンも含めてあります。動作する方を試してみてください。
2013/3/15日 Ver2.3.1 公開
アルゴリズム的にはVer.2.3と同じですが、パラメータ調節してみました。
MPの方はOpenMP対応版ですので、コア数が多い場合はこちらの方が早いです。ただ、OSや環境によっては動作しないことが有る様ですので、その場合は通常版の方を実行してください。
2013/3/7日 Ver2.3 公開
最近はこのNekoFightは、ほぼ自作のニューロ+強化学習アルゴリズム検証プログラムと化してますが、このアルゴリズムは元々実際の神経系(主にアミン系)を最大限参考にして、できるだけシミュレーションとして動作させようという発想から来ています(自然界の方に何か凄いアルゴリズムが存在するはずという発想ですね)
ここでできるだけ本物を参考にとは言っても、最低限学習アルゴリズムとして動作させるために妥協している個所もあったわけですが、本物だとこうなっているだろうからと試しにこの妥協している個所を合わせてみたら、実はこちらの方が学習性能が高い様ですので、前とは微妙に異なる強化学習のアルゴリズムをテスト的に乗せてみました。
やっていることは今までと同じで、ニューロ+強化学習で振る舞いを全自動で試行錯誤的に生成してみましょうというもので、起動直後は頭空っぽですのでめちゃくちゃな動きですが、数時間放置しておけばある程度は挙動が安定してくると思います。
意味不明なプログラムではありますが、適当にお楽しみください。
あと、アルゴリズムが違うので前のVer.も残しておきます。
2013/1/31日 Ver2.2 公開
いつの間にか右キックがキーで操作できなくなっていた様ですのでバグ修正を。
そもそもこのプログラムが何を目的にしていたかですが、元は自作の物理演算アルゴリズムのデモプログラムでした。
ですが、最近は実際の神経系をモデル化することで編み出した独自ニューラルネットと強化学習のアルゴリズム検証用プログラムと化していたりします(アミン神経系のモデル化ですね)
このアルゴリズムは(検証そのものは他のプログラムでやってますが)本来は万能ソルバーですので、ゴールだけ設定しておけば後は問題空間内で試行錯誤して報酬を最大化することで自律行動してくれるはず、ということでワールド側はそのままでしたが、相手が倒れた時もしくは場外に飛ばされた時しか報酬信号が出ませんので、流石に行動が最適化され難いということで、今回は物理演算側で今まで入れてあった謎力(無条件で体に垂直方向に力がかかる処理)を弱くして、体を倒れ易くしてみました。
この設定ですと、一度倒れただけで立ちあがることさえ困難で、試行錯誤の学習任せでは本来辛いはずですが、今のAI部ならおそらく時間さえかければ、 自力でどうにかするでしょうということで(これですと人間が操作しても辛いですが)
あと、ものすごく学習に時間がかかるので、全体を高速化してあります。少し放置して様子を見てください。
2013/1/29日 Ver2.1 公開
相変わらずの微調節版です。
2013/1/21日 Ver2.0 公開
今までのVer.ですと操作時にユーザ操作をそのままコピーする教師あり学習で、手を離していると報酬信号ベースの強化学習動作でしたが、そろそろ強化学習だけでも動作問題無さそうですので、キー操作時は相手キャラ側を直接操作で、AI側は基本的に強化学習のみで動作する様にしました。
これでどうにか格闘ゲーム相当の挙動になりますが、起動直後は頭空っぽですので少し放置して下さい。試行錯誤で行動を最適化します。
2013/1/14日 Ver1.10 公開
相変わらずの微調節版です。
これのAI部は、別のアルゴリズム検証用プログラムで動かしたのをそのまま乗せてるわけですが、いつになったらまともに動くのやらですね(^^;
2012/12/12日 Ver1.9 公開
相変わらずのパラメータ微調節ですが、あまりにAI部が重いですので、ついでにOpenMP対応でマルチスレッド化しておきました。
2012/12/14 追加
OpenMP化するとやはり動作しない環境が多い様ですので、通常版もアーカイブに入れておきました。速度は大差ない様に見えるかもしれませんが、初期中間ニューロン数が異なりますのでパラメータ適当に変えて下さい(この学習アルゴリズムですと、ニューロン数増やすほど単純に性能上がります)
2012/10/13日 Ver1.8.2 公開
さらに微調節版です。
2012/8/4日 Ver1.8.1 公開
罰系のチューニングが甘かったということで、v1.8 の微調整版です。
2012/7/30日 Ver1.8 公開
相変わらずの強化学習周りの修正です。強化学習ON状態で数時間放置しておけば、AI側で試行錯誤してフルオートで学習します(たぶん)
なお、ユーザ側で何か操作すると、その間だけ教師あり学習に切り替わりますが、基本的に放置お勧めのAI観賞ソフトです。
2012/2/3日 Ver1.7 公開
再びバグ修正です。強化学習周りで致命的バグがあるので直しておきます。
2011/7/11日 Ver1.6 公開
そういえばバグを放置したままでしたので修正しておきます。 新機能も追加されていて、前のバージョンですと学習は完全に教師ありでしたが、今回は強化学習も可能になっています。
強化学習のアルゴリズム的には、相変わらず独自アルゴリズムで一般的に知られているTD法に近いものですが、ED法同様に実際の神経系を最大限参考にしたアルゴリズムです (詳細は省略しますが、報酬予測をED法で行いこれの出力差分で強化学習とします)
この様な強化学習ですとユーザーが直接操作しないでも、評価関数から自動的に行動を最適化しますので、放置しておいても勝手に学習が進行します。
評価関数的には、場外に落ちたり床に接触するのが罰信号で、逆に相手が落ちたり床に付くと報酬信号となります。
メニューから各種設定ON/OFFできますが、学習中にキーを押して操作するとオーバーライドして強制的に教師あり学習に切り替わります。
ということで、かなりまだチューニング不足だとは思いますが、v1.5は各所バグりすぎでしたのでバージョンアップしておきます。 適当にお楽しみください。
あ、あと学習速度はそれなりに早いですので今回は学習データを省略しています。適当に学習させてください。
2007/3/3日 Ver1.5 公開
ものすごーく久しぶり(4年?)な趣味ソフト公開ですが、NekoFightのバージョンアップです。棒立ちだった敵キャラにAIつけてみました。
AIの方式は単なる3層ニューラルネットで、学習アルゴリズムは私独自のED法(誤差拡散法)です。
ED法は、バックプロパゲーションが実際の神経系のメカニズムとしてはありえないというのが気になって私の方で考え出した学習アルゴリズムですが、 学習速度が非常に速いのと、中間層を増やせば無制限に性能が上がるのが特徴のアルゴリズムです。私の方では、おそらく本物の脳みそ(前頭前野大脳皮質)も こんな学習アルゴリズムなんじゃないかと思ってますがもちろん確証は無し(笑)
設定で中間層素子数は好きなように変えられるので重い人は数を減らしてください。頭がお馬鹿になりますが処理は軽くなります。
あとサンプルデータは一つしかないので、すいませんが素子数変えたときは各自で一から学習させてやってください。基本はニューロなので似たケースで は似た振る舞いをしますが、このクラスの問題となると入出力パターンの組み合わせは無限に近いのでそれなりに時間かけて学習させてやらないとだめです。
左下の表示はAIへの入力信号で、内容は視野と各関節の接触センサーと空間での絶対座標(向き含む)です。起動直後は学習OFFで学習結果のみで自律動作してますが、メニューで学習ONにするとユーザの操作パターンをそっくりコピーすることで学習します。
使うのは矢印キーとZ(近づいて掴み)、XとCで(左右のキック)です。同時押し可能ですので起き上がるときは両足で蹴上がるなどいろいろやってみてください。あとRキーでワールドがリセットされせます(学習内容はそのまま)。
なお物理演算側で、筋肉の張りや歩行ルーチンなど調節して前よりは操作しやすいようにしてあります。
あとゲームっぽく場外つけてみました。
とりあえず何が面白いのかわかりにくいとは思いますが暇つぶしにどうぞ。
2003/9/4日 Ver1.4 公開
なんとなくマウスでの操作などを強化してみました。あと、メニューから重力切れるようになってます。計算部はそれほど変わってないです。
2003/4/16日 Ver1.3 公開
のんびりした更新ですが、技術面で思いついた部分があったので修正しておきます。全体の角運動量保存が成ってないんじゃないのかというのの対策や、衝突判定でバグがあったりしたのでその辺りです。操作方式も変わっていて、Z, Aでつかみです。投げなどが前よりもまともになってるんじゃないかと思います。
6/27日 Ver1.2 公開
最近は裏で暗躍してるので表にプログラムが出てきませんが(笑)、明日からのイベント対策でちょっとだけバージョン上げておきます。前のバージョン ですと起立や歩行に外力処理入っていましたが、今回のでは基本的に全部内力相当になっているので多少は自然になったんじゃないかと(ロールで変な挙動でて るけど・・・)。倒れるモーションなどもまともになっているはずですが、逆に立ち上がるだけでも難しくなってます。倒れたら足をじたばたさせてどうにかし て立ち上がってください。
あと、ジョイスティック指せば2キャラも動かせるようになってます。
あ、あとコンパイラがVC.NETになっているので、98系OSだと動かないかもしれません。
修正
完全に内力だけだと地面上に転がったときや壁に接触したときに操作が難しいので、足以外で接触してたら謎外力働いて左右に動けるようにしときました。
3/18日 Ver1.1 公開
メールでご意見いただきましたが、共通するのが「XとCを連打していると空飛ぶんですけど」というものでして(^^;こりゃまずいということで対応しました。
プログラム的には足に凄い加速かけてるだけなんですが、ここのところを外力扱いだったのでこれを内力扱いにしました。そのため、キック以外に起き上 がりなどいろいろ使えます。あとXとCを連打すると空に向かって蹴りを連打します。プログラム的にそう書いてませんが、なぜか安定するようで。
この辺の内力計算なんかはいろいろノウハウ必要だったりするところなんですが、微妙にまだ処理が変かもしれず(内力で発生する挙動で回転に関する系全体の保存則が成り立ってないような・・)。まぁよく考え直します。
あと、今まで歩行ルーチンがオブジェクトの上に乗ったときのことに対応してませんでしたが、対応しましたので物体の上でも歩けるようになってます。 階段っぽいオブジェクト配置にしておきました。ただ、足がどこに行けば良いのかで怪しい挙動が出やすいです。なぜか後ろに進むと確実に転ぶし(^^;
既にIKや物理演算どうのこうのではなく、一番厄介なのがモーションをプログラムで生成するところになっています。各点の位置を全てプログラムで制御していますので、どういう風に動かせば良いのかが頭痛いところです。
あと、筋肉ダンパーの係数(意味不明だけど、表と裏の筋肉を両方緊張させたのに相当する成分、挙動が硬くなる)とか起き上がりや歩行関連のパラメー ターチューニングしておきました。ただ、こういうのはあちらを立てればこちらが立たずで調節が難しいです。改悪してなければいいんですけど。
夜に追加
Nifのサーバーがメンテで落ちてたので、ジャンプ部分をこっそり変更。足を伸ばすだけにしました。
3/17日 Ver1.0 公開
一度やってみたかった物理演算ベースの格闘ゲームです。といっても、今のところそれを目指したサンプルですが。
技術的には古のAnimeBodyが基本になってますが、ノウハウが数々たまっているので、プログラム的には完全に作り直したものです。関節の制約処理などAnimeBodyよりはかなり処理がまともになっていると思います。IK周りの技術はそれなりに凄いはず(自画自賛(笑))
表示周りはかなり手抜き(影ぐらいちゃんとステンシルバッファで処理しろよとか(^^;)ですが、モーションの方に気合入ってます。なのでビデオは 弱くても問題ないですが、CPUは1GhzクラスのCPU推奨です。やっていることがことなのでIK周りの処理でかなり重くなってしまっています。
あとまだコリジョン周りがいい加減なので今後強化予定です。ここを直せばそれなりに組み技などにも耐えられるんではないかと踏んでいます。このバー ジョンでも両手ホールドすれば組み手は行けますが、そのままぶん回しているとコリジョン処理のいい加減さにより抜けます(^^;。ただ、IK関連や物理演 算周りは、既に技術的に問題になるところはなさそうですね。
操作ですが、まだプラクティスモード状態で、2Pは立ってるだけのデクノボウです。操作はできません。自キャラの方は移動とキックとしゃがみ、ジャンプとあと相手の手を取ることができます(パンチが失敗したため(^^;)。
これだけの操作ですが、完全にプログラムだけでモーションを生成(モーションデータの類はまったく使わず物理演算とIKだけ)しているので適当に動 かすだけでそれなりに遊べると思います。こういう作り方のプログラムは珍しいでしょうし。ただ、実際にゲームにするかは今後の気分の問題でしょうか。
あと、数々の制約によりプログラムソースの方は公開しないと思います。