Discuss Scratch
- inoking
-
1000+ posts
将棋のAI作成について話し合う!
私もAIの知識はありませんが
ぱっと思いつくのは
1. 何手かシミュレーションしてみてそれぞれを点数化
2. 点数の高いものを次の手として採用
です。
ここで課題が出てきます。
・どのように点数化するのか?
・現実的な時間で処理が完了するのか?
すべての駒のすべての利きについてシミュレーションできたらいいのですが
何手先まで読むかによりますが非常に時間がかかると思います。
序盤だと読み手が多すぎるので、終盤から始めたらよいかと思います。
または、
全く別のアプローチとして学習させるというのもアリですね。
「機械学習」とかで調べてみたらよいかと思います。
以上、あくまで素人の考えです。
ぱっと思いつくのは
1. 何手かシミュレーションしてみてそれぞれを点数化
2. 点数の高いものを次の手として採用
です。
ここで課題が出てきます。
・どのように点数化するのか?
・現実的な時間で処理が完了するのか?
すべての駒のすべての利きについてシミュレーションできたらいいのですが
何手先まで読むかによりますが非常に時間がかかると思います。
序盤だと読み手が多すぎるので、終盤から始めたらよいかと思います。
または、
全く別のアプローチとして学習させるというのもアリですね。
「機械学習」とかで調べてみたらよいかと思います。
以上、あくまで素人の考えです。
- taichi0802
-
8 posts
将棋のAI作成について話し合う!
僕、AIの知識はあまり無いのですが、駒にそれぞれ価値(かち)を付ければいいのではないでしょうか・・。たとえば飛車は13点。桂馬が6点。歩は1点。などの価値を駒それぞれに付ければ、この後どうすればいいかを考えて、それをプログラムにすればいいのではないでしょうか・・。あと、こうすれば⬜︎⬜︎⬜︎になる などを考えて、無くなる駒の数値(さっき言った価値)の合計で、一番少ない数値だった動きをすれば、AIは、とっても強くなれます。
もし、レベルを自由に変えられるようにしたければ、プログラムを、乱数で、一番有利な動きと、二番目に有利な動きを、どちらかを、出番が来たら、実行すれば、AIは、少しレベルが落ちます。もっと弱くしたければ、三番目に有利な動きを、乱数に入れましょう。きっと、もっと弱くなるでしょう。
このプログラムを参考にしていただけば幸いです。では、またお会いしましょう(@_^⭐︎)/
もし、レベルを自由に変えられるようにしたければ、プログラムを、乱数で、一番有利な動きと、二番目に有利な動きを、どちらかを、出番が来たら、実行すれば、AIは、少しレベルが落ちます。もっと弱くしたければ、三番目に有利な動きを、乱数に入れましょう。きっと、もっと弱くなるでしょう。
このプログラムを参考にしていただけば幸いです。では、またお会いしましょう(@_^⭐︎)/
- _ryosuke_
-
89 posts
将棋のAI作成について話し合う!
序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。 僕、AIの知識はあまり無いのですが、駒にそれぞれ価値(かち)を付ければいいのではないでしょうか・・。たとえば飛車は13点。桂馬が6点。歩は1点。などの価値を駒それぞれに付ければ、この後どうすればいいかを考えて、それをプログラムにすればいいのではないでしょうか・・。以下略
難しいです、、!
- _ryosuke_
-
89 posts
将棋のAI作成について話し合う!
なるほど、いいですね AI作成では、王手の判断や、駒の動き方などをわけて、プログラムを作ってそれを合体させてみたらどうかと思います。
- taichi0802
-
8 posts
将棋のAI作成について話し合う!
そうですか・・。では、終盤戦になったら、「王手」を優先するようにすればいいのではないでしょうか・・。でも、問題があります・・。どうやって終盤戦と分からせるのかです・・。ぼくの考えでは、駒が、敵陣に4つ入ったら、終盤戦となる としたらいいのではないでしょうか・・。(無理かも) 序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。難しいです、、!
このプログラムも難しそうです・・。でも、成功したら、ぜひ伝えて下さい!では、またお会いしましょう(@_^⭐︎)/
- hhayyatto
-
1000+ posts
将棋のAI作成について話し合う!
まず盤面を見て、次にそのターンで起こり得うるすべての配置を考慮し、いい順から悪い順にならべ、一番いいやつを優先する(テトリスAIと同じ仕組み)とかは?
- watashida
-
500+ posts
将棋のAI作成について話し合う!
将棋は駒の位置関係がかなり重要になるので、畳み込みニューラルネットワーク(CNN)のような評価関数を使うのはどうでしょうか?
例えば、フィルタなどを使い駒の位置関係で評価関数を作るとよいかと思います。(例えば王金と並んでいれば評価を+10するなどです。CNNの畳み込みのようにすればよいかと思います。)
これを使ってαβ法で探索すれば、かなり良いものとなると思います
このフィルタの値の決定にはプロが打った盤面を調べよく出てきた並びに高い評価値を与えるのがいいと思います。
この際序盤、中盤、終盤と分けて評価値を付けたほうが良い結果になると思います。
あと初期の配置(例えば歩歩など)にかなり高い評価値がつくと思いますので、この点は何らかの対策が必要だと思います。
私の考えとしてはこんな感じです
説明的な長文に書き慣れていないため幼い感じとなってしまいました、すいません。
あと機械学習経験者です。
例えば、フィルタなどを使い駒の位置関係で評価関数を作るとよいかと思います。(例えば王金と並んでいれば評価を+10するなどです。CNNの畳み込みのようにすればよいかと思います。)
これを使ってαβ法で探索すれば、かなり良いものとなると思います
このフィルタの値の決定にはプロが打った盤面を調べよく出てきた並びに高い評価値を与えるのがいいと思います。
この際序盤、中盤、終盤と分けて評価値を付けたほうが良い結果になると思います。
あと初期の配置(例えば歩歩など)にかなり高い評価値がつくと思いますので、この点は何らかの対策が必要だと思います。
私の考えとしてはこんな感じです
説明的な長文に書き慣れていないため幼い感じとなってしまいました、すいません。
あと機械学習経験者です。
Last edited by watashida (April 9, 2018 12:00:09)
- _ryosuke_
-
89 posts
将棋のAI作成について話し合う!
将棋は駒の位置関係がかなり重要になるので、畳み込みニューラルネットワーク(CNN)のような評価関数を使うのはどうでしょうか?以下略
なるほど、位置関係によって点数をつけるんですね。それはいいと思います。
- _ryosuke_
-
89 posts
将棋のAI作成について話し合う!
全ての配置を考慮、ということは単純にいうと不可能です。 まず盤面を見て、次にそのターンで起こり得うるすべての配置を考慮し、いい順から悪い順にならべ、一番いいやつを優先する(テトリスAIと同じ仕組み)とかは?
まあ本当に単純にいって、10の220乗ですから
- hhayyatto
-
1000+ posts
将棋のAI作成について話し合う!
約阿伽羅!!全ての配置を考慮、ということは単純にいうと不可能です。 まず盤面を見て、次にそのターンで起こり得うるすべての配置を考慮し、いい順から悪い順にならべ、一番いいやつを優先する(テトリスAIと同じ仕組み)とかは?
まあ本当に単純にいって、10の220乗ですから
- ko2222
-
1000+ posts
将棋のAI作成について話し合う!
というか、駒の価値の高いものを、優先的に無理のない程度に狙わせるようにしておいて、王の価値を馬や飛車よりもずっと高くすれば良いのでは?そうですか・・。では、終盤戦になったら、「王手」を優先するようにすればいいのではないでしょうか・・。でも、問題があります・・。どうやって終盤戦と分からせるのかです・・。ぼくの考えでは、駒が、敵陣に4つ入ったら、終盤戦となる としたらいいのではないでしょうか・・。(無理かも) 序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。難しいです、、!
このプログラムも難しそうです・・。でも、成功したら、ぜひ伝えて下さい!では、またお会いしましょう(@_^⭐︎)/
(その時点での獲る手間などを加味した上で点数化して、どの駒に狙いをつけるかを定める、みたいな)
(部外者だけど)
- taichi0802
-
8 posts
将棋のAI作成について話し合う!
おっ!いいアイデアですね!王(玉)の価値は∞(無限大)にすれば、どの駒よりも価値が高くなります!!というか、駒の価値の高いものを、優先的に無理のない程度に狙わせるようにしておいて、王の価値を馬や飛車よりもずっと高くすれば良いのでは?そうですか・・。では、終盤戦になったら、「王手」を優先するようにすればいいのではないでしょうか・・。でも、問題があります・・。どうやって終盤戦と分からせるのかです・・。ぼくの考えでは、駒が、敵陣に4つ入ったら、終盤戦となる としたらいいのではないでしょうか・・。(無理かも) 序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。難しいです、、!
このプログラムも難しそうです・・。でも、成功したら、ぜひ伝えて下さい!では、またお会いしましょう(@_^⭐︎)/
(その時点での獲る手間などを加味した上で点数化して、どの駒に狙いをつけるかを定める、みたいな)
(部外者だけど)
【駒を取る場合】
駒を取る時は、どこを見ても、狙われないなら、取る。自分の駒が取られても、相手の駒を取ってしまう場合も、取る。
(取られてしまう場合は、逃げるか、持ち駒を打って、守る。)
【一番初めに動かす駒】
二六歩・八四歩
【守り・囲い】
敵の駒が、自分の陣(じん)に入ってきたら、守り・囲い をする。
【守る駒】
狙われている場合は、持ち駒で守ります。守るのに適しているのは、「歩」です。打った時、禁じ手「二歩」になる場合は、香を使う。香が無い場合は、桂馬。桂馬が無い場合は、銀。銀が無い場合は、金。金が無い場合は、角。角が無い場合は、飛。飛が無い場合は、逃げる。
とりあえず、場合による動き方を書いておきました。使えるかどうかは分かりませんが、使えたら、伝えて下さい!!では、また!!(@_^⭐︎)/
- kepijirou
-
4 posts
将棋のAI作成について話し合う!
おっ!いいアイデアですね!王(玉)の価値は∞(無限大)にすれば、どの駒よりも価値が高くなります!!というか、駒の価値の高いものを、優先的に無理のない程度に狙わせるようにしておいて、王の価値を馬や飛車よりもずっと高くすれば良いのでは?そうですか・・。では、終盤戦になったら、「王手」を優先するようにすればいいのではないでしょうか・・。でも、問題があります・・。どうやって終盤戦と分からせるのかです・・。ぼくの考えでは、駒が、敵陣に4つ入ったら、終盤戦となる としたらいいのではないでしょうか・・。(無理かも) 序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。難しいです、、!
このプログラムも難しそうです・・。でも、成功したら、ぜひ伝えて下さい!では、またお会いしましょう(@_^⭐︎)/
(その時点での獲る手間などを加味した上で点数化して、どの駒に狙いをつけるかを定める、みたいな)
(部外者だけど)
【駒を取る場合】
駒を取る時は、どこを見ても、狙われないなら、取る。自分の駒が取られても、相手の駒を取ってしまう場合も、取る。
(取られてしまう場合は、逃げるか、持ち駒を打って、守る。)
【一番初めに動かす駒】
二六歩・八四歩
【守り・囲い】
敵の駒が、自分の陣(じん)に入ってきたら、守り・囲い をする。
【守る駒】
狙われている場合は、持ち駒で守ります。守るのに適しているのは、「歩」です。打った時、禁じ手「二歩」になる場合は、香を使う。香が無い場合は、桂馬。桂馬が無い場合は、銀。銀が無い場合は、金。金が無い場合は、角。角が無い場合は、飛。飛が無い場合は、逃げる。
とりあえず、場合による動き方を書いておきました。使えるかどうかは分かりませんが、使えたら、伝えて下さい!!では、また!!(@_^⭐︎)/
突然すみません。 飛車は守りには使わないほうがいいかと思います とられた時のリスクなどお考えたらどうでしょう?