あるゲームの評価関数を作りたいです。
一般的に評価関数は
eval = Σ (要素の値)×(重み)
で与えられるそうです。
ここでわからないのが、要素ごとの評価値の決め方や、重みの決め方です。
要素の評価値はまず適当な値で試してみて、値を変えながら良い結果が得られるように何度も試す方法で良いのでしょうか?
また重みについてですが、将棋やチェス、オセロなどメジャーなゲームにおいては棋譜を使って回帰分析を行い、
重みを決定するのが一般的なようですが、今回自分が作ろうとしているゲームはマイナーなものなので、棋譜がありません。
このような場合重みはどのようにして決めたらよいのでしょうか?やはり良い結果が得られるまで値を調整する方法で良いのでしょうか?
また、ゲームのAIを作るのは初めてで、まだよく理解できていない部分があり、質問におかしなところがありましたらご指摘お願いします。
探索アルゴリズムはαβ法で行うつもりです。
どうぞよろしくお願致します。
あるゲームの評価関数を作りたいです
Re: あるゲームの評価関数を作りたいです
まず、どんなゲームなのかが分からなければ、
どのような評価観点が在るのかなど、何も分からないです。
どんなゲームなのか、お願いします
どのような評価観点が在るのかなど、何も分からないです。
どんなゲームなのか、お願いします
Re: あるゲームの評価関数を作りたいです
遺伝的アルゴリズムですか。悪くないでしょう。playhuman さんが書きました:要素の評価値はまず適当な値で試してみて、値を変えながら良い結果が得られるように何度も試す方法で良いのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: あるゲームの評価関数を作りたいです
皆さま回答ありがとうございます。
今回作ろうとしているのは2048というゲームのAIです。
1年ほど前iphoneのアプリで流行ったものです。
評価の指標は、盤面の最大値、空きマスの数、しか今のところ思いついていません。
最初の質問と合わせて、他に良い指標となるものがありましたご教授願います。
よろしくお願い致します。
今回作ろうとしているのは2048というゲームのAIです。
1年ほど前iphoneのアプリで流行ったものです。
評価の指標は、盤面の最大値、空きマスの数、しか今のところ思いついていません。
最初の質問と合わせて、他に良い指標となるものがありましたご教授願います。
よろしくお願い致します。
Re: あるゲームの評価関数を作りたいです
>2048
これでしょうか?
https://gabrielecirulli.github.io/2048/
>盤面の最大値
これを最優先にやってみましたが512でみごとにゲームオーバーでした.
早期に大きな数を作るほど良いのかどうかは微妙っぽい感じを受けました
>他に良い指標となるものがありましたご教授願います
・値の大小よりもなるべく全体が同じ数で揃うようにする方がうまくいくのかも?
・同じ数が隣接するほどよい?
・大きい数が近い場所に集まるほどよい?
もしある程度プレイされているのであれば,「どういう形に持っていけばうまくいくか」という戦略(?)的なものが経験的に存在しませんか?
これでしょうか?
https://gabrielecirulli.github.io/2048/
>盤面の最大値
これを最優先にやってみましたが512でみごとにゲームオーバーでした.
早期に大きな数を作るほど良いのかどうかは微妙っぽい感じを受けました
>他に良い指標となるものがありましたご教授願います
・値の大小よりもなるべく全体が同じ数で揃うようにする方がうまくいくのかも?
・同じ数が隣接するほどよい?
・大きい数が近い場所に集まるほどよい?
もしある程度プレイされているのであれば,「どういう形に持っていけばうまくいくか」という戦略(?)的なものが経験的に存在しませんか?
Re: あるゲームの評価関数を作りたいです
usao様、回答ありがとうございます。
>>2048
>これでしょうか?
はい、そのゲームです。
>もしある程度プレイされているのであれば,「どういう形に持っていけばうまくいくか」という戦略(?)的なものが経験的に存在しませんか?
このゲームの戦略(コツ)は、大きな数字を角においてそれをできるだけ動かさないようにすることだと思います。
評価要素の一つとして最大値の位置なども使えますか?
例えば盤面上の最大値が角にある場合は評価値0で、角以外にある場合は不の評価値を与えるなど
>>2048
>これでしょうか?
はい、そのゲームです。
>もしある程度プレイされているのであれば,「どういう形に持っていけばうまくいくか」という戦略(?)的なものが経験的に存在しませんか?
このゲームの戦略(コツ)は、大きな数字を角においてそれをできるだけ動かさないようにすることだと思います。
評価要素の一つとして最大値の位置なども使えますか?
例えば盤面上の最大値が角にある場合は評価値0で、角以外にある場合は不の評価値を与えるなど
Re: あるゲームの評価関数を作りたいです
私はこのゲームが苦手すぎてAIなんて作れそうもないので
とりあえず本家?のAIのネタバレだけ置いておきます
自分だけで完成させたいなら見ないでください
ただ考え方はとても参考になります
※ネタバレ※
http://rhysd.hatenablog.com/entry/2014/05/17/171817
とりあえず本家?のAIのネタバレだけ置いておきます
自分だけで完成させたいなら見ないでください
ただ考え方はとても参考になります
※ネタバレ※
http://rhysd.hatenablog.com/entry/2014/05/17/171817
毎回ゲーム作ろうとするたびに壁にぶち当たる
Re: あるゲームの評価関数を作りたいです
オフトピック
10回くらいやって,やっとクリア1回だけできた.(見た目よりも難しい!)
以下,私のたどり着いた素人戦略
・16~32をたくさんつくり,他に良い手が無いときに連結する.
(64以上を単発に作ると障害物になりやすいからなるべくまとめて一気に512くらいに圧縮する)
・動かした結果として空間となる部分に2や4が多くなるようにした.
とにかく2と4は存在を許さない勢いで8にする.
・落ち着く(ある方向に動かすのが良さそうに見えても,ちゃんと4パターン考えてからやる)
・あきらめない
空きが最後の1マスになるときは2と4のどっちが生まれてきても大丈夫にして耐える
以下,私のたどり着いた素人戦略
・16~32をたくさんつくり,他に良い手が無いときに連結する.
(64以上を単発に作ると障害物になりやすいからなるべくまとめて一気に512くらいに圧縮する)
・動かした結果として空間となる部分に2や4が多くなるようにした.
とにかく2と4は存在を許さない勢いで8にする.
・落ち着く(ある方向に動かすのが良さそうに見えても,ちゃんと4パターン考えてからやる)
・あきらめない
空きが最後の1マスになるときは2と4のどっちが生まれてきても大丈夫にして耐える