あるゲームの評価関数を作りたいです

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たかし
記事: 48
登録日時: 11年前

あるゲームの評価関数を作りたいです

#1

投稿記事 by たかし » 8年前

あるゲームの評価関数を作りたいです。
一般的に評価関数は

eval = Σ (要素の値)×(重み)

で与えられるそうです。
ここでわからないのが、要素ごとの評価値の決め方や、重みの決め方です。

要素の評価値はまず適当な値で試してみて、値を変えながら良い結果が得られるように何度も試す方法で良いのでしょうか?

また重みについてですが、将棋やチェス、オセロなどメジャーなゲームにおいては棋譜を使って回帰分析を行い、
重みを決定するのが一般的なようですが、今回自分が作ろうとしているゲームはマイナーなものなので、棋譜がありません。
このような場合重みはどのようにして決めたらよいのでしょうか?やはり良い結果が得られるまで値を調整する方法で良いのでしょうか?

また、ゲームのAIを作るのは初めてで、まだよく理解できていない部分があり、質問におかしなところがありましたらご指摘お願いします。

探索アルゴリズムはαβ法で行うつもりです。

どうぞよろしくお願致します。

とんとん

Re: あるゲームの評価関数を作りたいです

#2

投稿記事 by とんとん » 8年前

まず、どんなゲームなのかが分からなければ、
どのような評価観点が在るのかなど、何も分からないです。
どんなゲームなのか、お願いします

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: あるゲームの評価関数を作りたいです

#3

投稿記事 by みけCAT » 8年前

playhuman さんが書きました:要素の評価値はまず適当な値で試してみて、値を変えながら良い結果が得られるように何度も試す方法で良いのでしょうか?
遺伝的アルゴリズムですか。悪くないでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たかし
記事: 48
登録日時: 11年前

Re: あるゲームの評価関数を作りたいです

#4

投稿記事 by たかし » 8年前

皆さま回答ありがとうございます。
今回作ろうとしているのは2048というゲームのAIです。
1年ほど前iphoneのアプリで流行ったものです。

評価の指標は、盤面の最大値、空きマスの数、しか今のところ思いついていません。

最初の質問と合わせて、他に良い指標となるものがありましたご教授願います。

よろしくお願い致します。

アバター
usao
記事: 1887
登録日時: 11年前

Re: あるゲームの評価関数を作りたいです

#5

投稿記事 by usao » 8年前

>2048
これでしょうか?
https://gabrielecirulli.github.io/2048/


>盤面の最大値

これを最優先にやってみましたが512でみごとにゲームオーバーでした.
早期に大きな数を作るほど良いのかどうかは微妙っぽい感じを受けました


>他に良い指標となるものがありましたご教授願います

・値の大小よりもなるべく全体が同じ数で揃うようにする方がうまくいくのかも?
・同じ数が隣接するほどよい?
・大きい数が近い場所に集まるほどよい?

もしある程度プレイされているのであれば,「どういう形に持っていけばうまくいくか」という戦略(?)的なものが経験的に存在しませんか?

たかし
記事: 48
登録日時: 11年前

Re: あるゲームの評価関数を作りたいです

#6

投稿記事 by たかし » 8年前

usao様、回答ありがとうございます。

>>2048
>これでしょうか?

はい、そのゲームです。

>もしある程度プレイされているのであれば,「どういう形に持っていけばうまくいくか」という戦略(?)的なものが経験的に存在しませんか?

このゲームの戦略(コツ)は、大きな数字を角においてそれをできるだけ動かさないようにすることだと思います。
評価要素の一つとして最大値の位置なども使えますか?
例えば盤面上の最大値が角にある場合は評価値0で、角以外にある場合は不の評価値を与えるなど

アバター
夢幻ノ月夜
記事: 143
登録日時: 9年前
住所: Stens;Gate世界線

Re: あるゲームの評価関数を作りたいです

#7

投稿記事 by 夢幻ノ月夜 » 8年前

私はこのゲームが苦手すぎてAIなんて作れそうもないので
とりあえず本家?のAIのネタバレだけ置いておきます
自分だけで完成させたいなら見ないでください

ただ考え方はとても参考になります

※ネタバレ※
http://rhysd.hatenablog.com/entry/2014/05/17/171817
毎回ゲーム作ろうとするたびに壁にぶち当たる

アバター
usao
記事: 1887
登録日時: 11年前

Re: あるゲームの評価関数を作りたいです

#8

投稿記事 by usao » 8年前

オフトピック
10回くらいやって,やっとクリア1回だけできた.(見た目よりも難しい!)

以下,私のたどり着いた素人戦略

・16~32をたくさんつくり,他に良い手が無いときに連結する.
 (64以上を単発に作ると障害物になりやすいからなるべくまとめて一気に512くらいに圧縮する)
・動かした結果として空間となる部分に2や4が多くなるようにした.
 とにかく2と4は存在を許さない勢いで8にする.
・落ち着く(ある方向に動かすのが良さそうに見えても,ちゃんと4パターン考えてからやる)
・あきらめない
 空きが最後の1マスになるときは2と4のどっちが生まれてきても大丈夫にして耐える

閉鎖

“C言語何でも質問掲示板” へ戻る