Skip to content

マインスイーパーを機械学習で解くプロジェクト

Notifications You must be signed in to change notification settings

kokeiro001/MinesweeperGonyoGonyo

Repository files navigation

MinesweeperGonyoGonyo

マインスイーパーをゴニョゴニョするプロジェクト。

自作したマインスイーパーに対して機械学習を行い、解かせるプロジェクト。

プロジェクト説明

Minesweeper.Common

マインスイーパーに関するクラスライブラリプロジェクト。

ボードのランダム生成、セルの開閉などを管理する。

Minesweeper.Console

Minesweeper.Commonで作成したDLLを用いて、コンソールで遊ぶプロジェクト。

コマンド

使えるコマンドは下記の3つ。

open {y} {x}	// (x,y)のセルを開く
openEight {y} {x} // (x,y)のセルの周辺8セルを開く
flag {y} {x}	// (x,y)のセルの旗の上げ下げを切り替える

ボードの座標系

左上が(0,0)で、右に向かってx増加、下に向かってy増加。

Minesweeper.ReinforcementLearningSolver

マインスイーパーを強化学習を用いて解くプロジェクト。

UnityProject

Unityでマインスイーパーを遊ぶプロジェクト。 Minesweeper.Commonで作成したDLLを利用するため、先にそちらをビルドする必要がある。

操作方法

  • クリック:セルを開く、
  • スペースを押しながらクリック:旗
とても遊びにくい

学習方法概要

  1. 現在の盤面を見て、これまでに同じ盤面を操作したことがある場合、これまでの学習結果に沿い、もっともスコアが高いセルを開かせる
    • 未評価の盤面ならスコア0扱い
    • 局所最適化を防ぐため、適当な確率でランダムに開く
  • セルが1つのみ開いたら小加さく点、2つ以上開いたら大きく加点、爆弾に当たったら大きく減点
  • 繰り返す

いじょ。

問題点

  • 盤面全体のみを見て判断しており、内部で区分けなどを行っていない。3x3とか5x5に内部で区分けして学習していくほうが良さそう。
  • 盤面のハッシュ化を行いたいが、いい方法が思いつかない。現在は,ulongの2ペアをキーとしている。拡張性がない。
  • 計算のボトルネックがどこにあるか計測していない。高速化したいなら突き止めるべき。
  • 学習に使用しているパラメータについて、適切な値がわからない。ノウハウや知識を持たないため、直感も働かない。強化学習アルゴリズムそのものについて理解を深めるか、GAを用いて適切なパラメータそのものを探させるなどの対応が必要。
  • 学習の並列化を行いたい。

About

マインスイーパーを機械学習で解くプロジェクト

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages