問題タブ [evaluation-function]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Javaでコネクトフォーゲームの状況を評価する方法
「Get four」ゲーム用の単純な AI を作成しようとしています。基本的なゲームの原理が完成したので、さまざまな色のコインを投入し、それらを積み重ねて 2D 配列などを埋めることができます。今まで、これはメソッドがどのように見えるかです:
X は水平座標で、Y 座標はすでに配列にある石の数によって決定されるため、アイデアは明らかだと思います。
ここでの問題は、特定のゲームの状況を評価する必要があるため、特定の状況で新しいペア、トリプレット、および可能性のある 4 つ連続で獲得できる数を見つけて、各状況に特定の値を与えることです。これらの値を使用して、「ゲーム ツリー」をセットアップし、次にどの動きが最適かを判断できます (後でアルファ ベータ プルーニングを実装します)。私の現在の問題は、Java メソッドで現在のゲーム状況の評価を実装する効率的な方法が思いつかないことです。
どんなアイデアでも大歓迎です!
machine-learning - ゲームの優れた評価関数を作成するにはどうすればよいですか?
私は時々ボードゲームの変種をプレイするプログラムを書いています。基本的な戦略は、標準的なアルファベータ法または同様の検索であり、エンドゲームやオープニングへの通常のアプローチによって強化されることもあります。私は主に変則チェスをいじっていたので、評価関数を選ぶときは、基本的なチェス評価関数を使用します。
しかし、今はまったく新しいボードゲームをプレイするプログラムを書いています。良いまたはまともな評価関数を選択するにはどうすればよいですか?
主な課題は、常に同じピースがボード上にあるため、通常のマテリアル機能が位置によって変化せず、ゲームのプレイ回数が1,000回未満であるため、人間が必ずしも十分にプレイできるとは限らないことです。まだ洞察を与えるには。(PS。私はMoGoアプローチを検討しましたが、ランダムゲームが終了する可能性は低いです。)
ゲームの詳細:ゲームは、片面に6個固定された10x10のボードでプレイされます。ピースには特定の移動ルールがあり、特定の方法で相互作用しますが、ピースがキャプチャされることはありません。ゲームの目標は、ボード上の特定の特別な正方形に十分な数のピースを置くことです。コンピュータプログラムの目標は、現在の人間のプレーヤーと競争力のある、またはそれよりも優れたプレーヤーを提供することです。
artificial-intelligence - ひじゃらゲーム(以下で説明するゲーム)の評価関数を作成するにはどうすればよいですか?
PrologにインテリジェントバージョンのHijaraGameを実装する必要があります。次のリンクでゲームをプレイしてルールを学ぶことができます:http://www.sapphiregames.com/online/hijara.php
アルファベータアルゴリズムを使用します(検索ツリーの特定のレベルまで)。人工知能を使ったのはこれが初めてで、アルゴリズムで使用する評価関数を作成する方法がわかりません。誰か助けていただければ幸いです
ありがとうございました!
java - Connect 4 の適切な評価関数を設計するにはどうすればよいですか?
「Connect 4」ゲームのJava実装があります(列と行の数が可変です)。
この実装では、(ユーザーの選択に応じて) maxDepthの検索の最大深度でのアルファ ベータ プルーニングを使用したミニマックスのミニマックス アルゴリズムを使用します。
私の問題は、ボードの状態に対する適切な評価関数の設計です(これは maxDepth で返される値です)。
値は-100 (最悪の選択、負けた状況に対応)から100 (最良の選択、勝利の状況に対応) の間で、0は「引き分け」の状況と見なされます。
実際には2つの関数を実装しました(コードが非常に長いため、疑似コードを報告します)
1)
- 勝てない・負けない
--> テーブルがいっぱいの場合 ==> 抽選 (0)
--> テーブルがいっぱいでない場合 ==> 不明な状況 (50)
- 勝つ
--> 勝った場合: 100
--> 対戦相手に勝利した場合: -100
2)
3 番目の (そして可能であればより優れた)関数を設計する必要があります。なにか提案を?
前もって感謝します。
machine-learning - ボードゲーム(wizwoz)結果の評価関数の作成方法
ゲームの名前はwizwozです。
赤(rと呼ばれる)と金(gと呼ばれる)の2人のプレーヤーは、最初に2つの値nとkを選択します。n×nのボードは、ボード上にランダムに配置されたk"r"とk"g"で作成されます。プレーヤーrから始めて、各プレーヤーはボード上の空の四角の1つに自分の文字(プレーヤーrの場合は「r」、支払人gの場合は「g」)を置きます。ボードがいっぱいになると、各プレイヤーのスコアは、そのプレイヤーの色で塗りつぶされたボード上の最大の接続領域に等しくなります(接続領域とは、領域内の任意の2つの正方形に対して、N / S/Eのみで構成されるパスが存在する領域です。 / Wが移動します)。スコアが最も高いプレイヤーが勝ち、自分のスコアと他のプレイヤーのスコアの差が与えられます。完成したゲームの2つの例を以下に示し、各プレーヤーの最大の接続領域の概要を示します。
アルファベータ法のアルゴリズムを作成していて、評価関数を使い続けています。
何か助けはありますか?擬似コードが望ましい。
artificial-intelligence - TIC-TAC-TOE バリアント ゲームの評価関数の作成方法
私は実際にゲームの変形であるボードゲームに取り組んでいTIC-TAC-TOE
ます。ゲームの仕様は次のとおりです。
1.ゲームはn
xn
ボードでプレイされ、n
変数が使用されます。
2.k
最初にアラインメントを配置することに成功した場合、プレイヤーは勝利しk
ます。可変です。
3.アラインメントは、横、縦、または斜めのl
マーク ( XまたはO ) で構成されます。l
固定されています。
4.n
xグリッドがいっぱいで (どのプレイヤーもXまたはOn
のいずれかのマークを追加できない)、どのプレイヤーも配置に成功しなかった場合、ゲームは引き分けになります。k
minmax
withalpha-beta prunning
アルゴリズムを使用しています。これは人工知能を使用した最初のプログラムであり、アルゴリズムで使用される評価関数を作成する方法が正確にはわかりません。マテリアルの重み付けを使用して位置を評価する例をネットでいくつか見ましたが、私の場合は適用できません。実際、私は-100
との間の値を返す radom 評価関数を使用しています100
。
特定のボード構成を評価する方法について何か考えはありますか?
r - 代替パフォーマンス メトリックを使用した R キャレット モデルの評価
R のキャレット パッケージを使用して、グリッド検索とモデル評価を行っています。絶対誤差の加重平均であるカスタム評価指標があります。重みは観測レベルで割り当てられます。
ここでは、summaryFunction を使用してキャレットの train() のカスタム評価メトリックを定義する方法の例を示します。引用するには:
trainControl 関数には、パフォーマンスを計算するための関数を指定する summaryFunction という引数があります。関数には次の引数が必要です。
data は、obs および pred と呼ばれる列を含むデータ フレームまたは行列の参照であり、観測および予測された結果値 (回帰の数値データまたは分類の文字値のいずれか) を表します。現在、クラス確率は関数に渡されません。データ内の値は、チューニング パラメーターの 1 つの組み合わせに対する保持された予測 (および関連する参照値) です。trainControl オブジェクトの classProbs 引数が TRUE に設定されている場合、データ内にクラス確率を含む追加の列が存在します。これらの列の名前は、クラス レベルと同じです。lev は、トレーニング データから取得した結果因子レベルを含む文字列です。回帰の場合、NULL の値が関数に渡されます。model は、使用されているモデルの文字列です (つまり、
観測の重みを summaryFunction に渡す方法がよくわかりません。
python - Pythonの再帰関数のパラドックス..どのように説明できますか?
数値のリストを受け取り、いくつかの桁で丸められた数値のリストを返す非常に単純な関数を作成しました。
ただし、組み込み関数ではなく関数自体を誤ってコードに入れましたround()
(以下の例のように)。
そして、この出力を得ました:
問題は、関数自体rounded()
を評価しているときに関数を適用する必要があることをインタプリタがどのように知るかです。rounded()
まさにその関数を解釈しようとしている場合、どうrounded()
すれば浮動小数点数を取る関数になるのでしょうか? 関数を評価して解釈するための一種の2サイクルの手順はありますか? それとも、ここで何か間違っていますか?
java - この評価関数は Connect 4 ゲームでどのように機能しますか? (ジャワ)
私は、ミニマックス アルゴリズムを、アルファ ベータ プルーニングを使用したコネクト フォー ゲームでどのように使用できるかを調べています。
そこで、Connect4 プレーヤー戦略に関するソース コードを調べていたところ、次の評価関数が見つかりました。
このコードはすべてこの PDF で見つかりました: http://ryanmaguiremusic.com/media_files/pdf/ConnectFourSource.pdf
この評価関数がどのように機能し、行うべき最善の動きを決定するかを理解したいだけです...誰か助けてもらえますか? それは大歓迎です。
artificial-intelligence - ゲームのヒューリスティック関数の改善 (AI Minimax)
Javaでプログラミングしたゲームがあります。ゲームはシンプルです(下図参照)。4羽の鳥と1匹の幼虫がいます。2 人用ゲーム (AI 対人間) です。
- 幼虫は斜め前方と斜め後方に移動できます
- 鳥は斜め前方にのみ移動できます
- ライン1(フェンス)までたどり着ければ幼虫の勝ち
- 鳥の動きが残っていない場合も幼虫が勝ちます
- 鳥は幼虫を「食べる」ことはできません。
- 幼虫に移動が残っていない場合(まったく移動できない場合)、鳥が勝ちます
ゲームが始まると、幼虫が始まり、次に 1 羽の鳥 (任意の 1 羽) が移動できるようになり、次に幼虫、など...
MiniMax (Alpha Beta Pruning) を実装し、次の evaluate() 関数 (ヒューリスティック関数) を使用しています。
ボード上の各マスに次の数字を割り当てましょう。
したがって、評価関数は
h(n) = 幼虫の位置の値 - 鳥の位置の値 1 - 鳥の位置の値 2 - 鳥の位置の値 3 - 鳥の位置の値 4
幼虫はヒューリスティック値を最大化しようとしますが、鳥はそれを最小化しようとします
例:
ただし、これは単純でナイーブなヒューリスティックです。それは賢明な方法で行動しません。私は AI の初心者ですが、このヒューリスティック関数を改善するために何ができるか知りたいですか?
良い/情報に基づいたヒューリスティックとは何ですか?