今オセロゲームをCで作成中なので、先ほども質問したのですが、
http://hp.vector.co.jp/authors/VA015468/platina/ …
のサイトのminiMax法の実装法ですと最終的な戻り値は評価値ですよね?
一番いい評価値の場所にコマを置くためには結局そのx.y座標が必要だと思うのですが、どこからそのx.y座標を最終的に得るのでしょうか?
ご教授願います
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
突如として割り込んでしまいすみません。
疑問点があるのであれば書籍を参考にするのはいかがでしょう?
>リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS) [単行本]
>http://www.amazon.co.jp/%E3%83%AA%E3%83%90%E3%83 …
第3章に探索アルゴリズムとして、ここの部分でMinimaxアルゴリズムをはじめとして複数が紹介がされています。
第4章が評価関数を扱っています。
リバーシの開発を行うのであれば必読と思います。
立ち読みで内容を確認してみてください。
No.3
- 回答日時:
Cじゃないんですが、このページか
Scheme言語(Lisp言語)によるミニマックス法の解説:
http://www.geocities.jp/m_hiroi/func/abcscm43.html
あるいはこのページ
Python言語によるミニマックス法の解説:
http://www.geocities.jp/m_hiroi/light/pyalgo24.h …
が参考になるんじゃないでしょうか。
No.2
- 回答日時:
best を更新するときに「どこに置いたのか」を覚えておく.
この回答への補足
回答ありがとうございます。
bestを更新するときにどこに置いたのかを覚えておくために、仮にxとy座標を覚える変数にそれを代入して、再帰関数で最終的に一番浅い階層の親の座標をコマとして置きたいのですが、どのようにすればいいかわかりません。
下のようにmini_max_x,mini_max_yを関数外で宣言して記憶するようにしたのですが、これでは一番下の階層の子節点の座標が表示されてしまいます。
しかしうまくいくような実装法が考えられませんでしたので、よろしければどのようにすればよいかお教えください。
________if(turn == 先手 && best < val){
__________best= val;
__________mini_max_x = j;
__________mini_max_y = i;
________}
________if(turn == 後手 && best <-val){
__________best= -val;
__________mini_max_x = j;
__________mini_max_y = i;
________}
No.1
- 回答日時:
一般的には「おける場所すべてに総当たり方式でおいてみる」でしょうね。
評価関数の戻り値に評価値、引数に置く場所の座標を与えます。
で、すべての組み合わせの座標を試してみて最大の効果を得られる場所の座標を記録しておきます。
この回答への補足
回答ありがとうございます。質問の仕方が悪かったので訂正します。
今ネットを参考にしつつ自分で作った関数があるのですが、下のようなもので
オセロ盤をxxx[SIZE][SIZE];でSIZE 8と定義してあります。
allDireCheckでは、渡された座標がおくことができるなら置き1を返すという処理をするものです。
この関数内でx,y座標を記憶し最終的に返すとなるとどこにどのように書けばよいかわかりません。
おおまかに教えてくださるとうれしいです。
int Minimax(手番 turn, 先読みの深さ depth){
__int val,best;
__/* 葉の場合、評価値を返す */
__if(depth == 0) return eval();
__best = -1000000;
__for(int i = 0 ; i < SIZE ; i++) {
____for(int j = 0 ; j < SIZE ; j++) {
______if( allDireCheck(turn,j,i) ){
________val = Minimax(次の turn, depth-1);
________if(turn == 先手 && best < val) best= val;
________if(turn == 後手 && best <-val) best=-val;
________盤面を1手戻す;
______}
__return best;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 退職・失業・リストラ 人事評価が最低評価で落ち込んでいます 9 2023/07/06 15:35
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- 中途・キャリア 転職活動における最終面接につきまして 2 2023/05/31 17:16
- 会社・職場 派遣契約で時間精算(時給)で働いているため、有給休暇を取れば、売上が減ってしまいます。 有給休暇での 2 2023/01/05 07:33
- 株式市場・株価 同日中の特定口座内での株式売買における実質損益について 4 2022/06/22 05:18
- 世界情勢 勉強しない日本の大学生と、死に物狂いで勉強するアメリカの大学生。日本が負けて当然の理由ですね^^ 11 2022/10/24 07:09
- 大学・短大 大学一年です。 英語の講義の最終回当日朝に、先生からのメールで「教務課から連絡がありました。成績の評 3 2023/02/01 20:38
- IT・エンジニアリング インフラエンジニア(ネットワークエンジニア)の検証業務について教えてください。 インフラ初心者なので 2 2022/06/26 00:08
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルで回転する座標の出し方
-
DirectInputでの現在のマウス座...
-
C言語 配列で座標
-
任意点を中心とした回転
-
ワード上Shapeの位置情報を統一...
-
閉図形の座標の配列が右回りか...
-
ピクチャボックスの座標取得
-
黒体放射軌跡のxy色度座標への...
-
3次元空間上の2つの座標から...
-
Visual C++ 2008 Express Editi...
-
3Dでの、壁との衝突判定
-
変数名のこだわりについて
-
WM_NCHITTESTの流れ
-
c言語でキーボードから2点の座...
-
始点、終点の二つの座標と半径...
-
モンテカルロ法での円周率の求...
-
直線と傾きのある楕円の交点を...
-
ガウシアンフィルタのCプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
ダイアログ内コントロールの位...
-
エクセルで回転する座標の出し方
-
シーケンサー(PLC?)で制...
-
エクセルである点からの距離で...
-
始点、終点の二つの座標と半径...
-
C言語 配列で座標
-
多角形の内部かどうか判定する方法
-
閉図形の座標の配列が右回りか...
-
以下のプログラムは重心を求め...
-
c言語でキーボードから2点の座...
-
Excel VBA で自在に図形を変化...
-
タッチパッドのタッチ座標取得
-
C言語において、0の座標をキャ...
-
当たり判定後に面に沿って動か...
-
ワード上Shapeの位置情報を統一...
-
黒体放射軌跡のxy色度座標への...
-
一番近い点を見つけたい。
おすすめ情報