Discuss Scratch

_ryosuke_
Scratcher
85 posts

将棋のAI作成について話し合う!

僕が作った将棋をベースにAIを作っていきたいです。
でも、僕のAIに関する知識は無に近いので、色々と教えていただけると嬉しいです。

 お約束
・原則として将棋AI作成に繋がること以外は発言しないでください。(多少は目をつぶります。)
・例外が出た場合お約束を追加するかもしれません。

透明化3DPDTEを作りました!
透明化3DPTEを作りました!
クラウドリスト新しくなったようです。
将棋はこちらから!

ハックをしている場合はH、バグを使用いている場合はUB(バグの種類)で区別をつけています。
inoking
Scratcher
1000+ posts

将棋のAI作成について話し合う!

私もAIの知識はありませんが
ぱっと思いつくのは
1. 何手かシミュレーションしてみてそれぞれを点数化
2. 点数の高いものを次の手として採用
です。

ここで課題が出てきます。
・どのように点数化するのか?
・現実的な時間で処理が完了するのか?
すべての駒のすべての利きについてシミュレーションできたらいいのですが
何手先まで読むかによりますが非常に時間がかかると思います。

序盤だと読み手が多すぎるので、終盤から始めたらよいかと思います。

または、
全く別のアプローチとして学習させるというのもアリですね。
「機械学習」とかで調べてみたらよいかと思います。

以上、あくまで素人の考えです。

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
fine316
Scratcher
1000+ posts

将棋のAI作成について話し合う!

こちらの合作トピからの経験ですが、
すべての利きを調べる方法では、詰みの判定だけでも(序盤では)2秒ほどかかっています。
(終盤については調べていません)
プロジェクト
_ryosuke_
Scratcher
85 posts

将棋のAI作成について話し合う!

fine316 wrote:

こちらの合作トピからの経験ですが、
すべての利きを調べる方法では、詰みの判定だけでも(序盤では)2秒ほどかかっています。
(終盤については調べていません)
プロジェクト
詰みの判定までは自力でなんとか出来そうですね。王手判定を上手く使えばいけるかと(公開してません)

透明化3DPDTEを作りました!
透明化3DPTEを作りました!
クラウドリスト新しくなったようです。
将棋はこちらから!

ハックをしている場合はH、バグを使用いている場合はUB(バグの種類)で区別をつけています。
zoukunn
Scratcher
1 post

将棋のAI作成について話し合う!

AI作成では、王手の判断や、駒の動き方などをわけて、プログラムを作ってそれを合体させてみたらどうかと思います。
taichi0802
Scratcher
4 posts

将棋のAI作成について話し合う!

僕、AIの知識はあまり無いのですが、駒にそれぞれ価値(かち)を付ければいいのではないでしょうか・・。たとえば飛車は13点。桂馬が6点。歩は1点。などの価値を駒それぞれに付ければ、この後どうすればいいかを考えて、それをプログラムにすればいいのではないでしょうか・・。あと、こうすれば⬜︎⬜︎⬜︎になる などを考えて、無くなる駒の数値(さっき言った価値)の合計で、一番少ない数値だった動きをすれば、AIは、とっても強くなれます。
もし、レベルを自由に変えられるようにしたければ、プログラムを、乱数で、一番有利な動きと、二番目に有利な動きを、どちらかを、出番が来たら、実行すれば、AIは、少しレベルが落ちます。もっと弱くしたければ、三番目に有利な動きを、乱数に入れましょう。きっと、もっと弱くなるでしょう。

このプログラムを参考にしていただけば幸いです。では、またお会いしましょう(@_^⭐︎)/
_ryosuke_
Scratcher
85 posts

将棋のAI作成について話し合う!

taichi0802 wrote:

僕、AIの知識はあまり無いのですが、駒にそれぞれ価値(かち)を付ければいいのではないでしょうか・・。たとえば飛車は13点。桂馬が6点。歩は1点。などの価値を駒それぞれに付ければ、この後どうすればいいかを考えて、それをプログラムにすればいいのではないでしょうか・・。以下略
序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。
難しいです、、!

透明化3DPDTEを作りました!
透明化3DPTEを作りました!
クラウドリスト新しくなったようです。
将棋はこちらから!

ハックをしている場合はH、バグを使用いている場合はUB(バグの種類)で区別をつけています。
_ryosuke_
Scratcher
85 posts

将棋のAI作成について話し合う!

zoukunn wrote:

AI作成では、王手の判断や、駒の動き方などをわけて、プログラムを作ってそれを合体させてみたらどうかと思います。
なるほど、いいですね

透明化3DPDTEを作りました!
透明化3DPTEを作りました!
クラウドリスト新しくなったようです。
将棋はこちらから!

ハックをしている場合はH、バグを使用いている場合はUB(バグの種類)で区別をつけています。
fine316
Scratcher
1000+ posts
_ryosuke_
Scratcher
85 posts

将棋のAI作成について話し合う!

fine316 wrote:

参考になります。
しかし、Scratchのクラウドリストはすでに瀕死ですし(まだ息の根は止まってない)

透明化3DPDTEを作りました!
透明化3DPTEを作りました!
クラウドリスト新しくなったようです。
将棋はこちらから!

ハックをしている場合はH、バグを使用いている場合はUB(バグの種類)で区別をつけています。
taichi0802
Scratcher
4 posts

将棋のAI作成について話し合う!

_ryosuke_ wrote:

序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。難しいです、、!
そうですか・・。では、終盤戦になったら、「王手」を優先するようにすればいいのではないでしょうか・・。でも、問題があります・・。どうやって終盤戦と分からせるのかです・・。ぼくの考えでは、駒が、敵陣に4つ入ったら、終盤戦となる としたらいいのではないでしょうか・・。(無理かも)

このプログラムも難しそうです・・。でも、成功したら、ぜひ伝えて下さい!では、またお会いしましょう(@_^⭐︎)/
hhayyatto
Scratcher
500+ posts

将棋のAI作成について話し合う!

まず盤面を見て、次にそのターンで起こり得うるすべての配置を考慮し、いい順から悪い順にならべ、一番いいやつを優先する(テトリスAIと同じ仕組み)とかは?

そして野球ボールは考えるのをやめた。
            ーー2001年宇宙の旅
watashida
Scratcher
100+ posts

将棋のAI作成について話し合う!

将棋は駒の位置関係がかなり重要になるので、畳み込みニューラルネットワーク(CNN)のような評価関数を使うのはどうでしょうか?
例えば、フィルタなどを使い駒の位置関係で評価関数を作るとよいかと思います。(例えば王金と並んでいれば評価を+10するなどです。CNNの畳み込みのようにすればよいかと思います。)
これを使ってαβ法で探索すれば、かなり良いものとなると思います
このフィルタの値の決定にはプロが打った盤面を調べよく出てきた並びに高い評価値を与えるのがいいと思います。
この際序盤、中盤、終盤と分けて評価値を付けたほうが良い結果になると思います。
あと初期の配置(例えば歩歩など)にかなり高い評価値がつくと思いますので、この点は何らかの対策が必要だと思います。

私の考えとしてはこんな感じです

説明的な長文に書き慣れていないため幼い感じとなってしまいました、すいません。

あと機械学習経験者です。

Last edited by watashida (April 9, 2018 12:00:09)


watashidaは 高速な 素因数分解を 組みたがっている
_ryosuke_
Scratcher
85 posts

将棋のAI作成について話し合う!

watashida wrote:

将棋は駒の位置関係がかなり重要になるので、畳み込みニューラルネットワーク(CNN)のような評価関数を使うのはどうでしょうか?以下略

なるほど、位置関係によって点数をつけるんですね。それはいいと思います。

透明化3DPDTEを作りました!
透明化3DPTEを作りました!
クラウドリスト新しくなったようです。
将棋はこちらから!

ハックをしている場合はH、バグを使用いている場合はUB(バグの種類)で区別をつけています。
_ryosuke_
Scratcher
85 posts

将棋のAI作成について話し合う!

hhayyatto wrote:

まず盤面を見て、次にそのターンで起こり得うるすべての配置を考慮し、いい順から悪い順にならべ、一番いいやつを優先する(テトリスAIと同じ仕組み)とかは?
全ての配置を考慮、ということは単純にいうと不可能です。
まあ本当に単純にいって、10の220乗ですから

透明化3DPDTEを作りました!
透明化3DPTEを作りました!
クラウドリスト新しくなったようです。
将棋はこちらから!

ハックをしている場合はH、バグを使用いている場合はUB(バグの種類)で区別をつけています。
hhayyatto
Scratcher
500+ posts

将棋のAI作成について話し合う!

_ryosuke_ wrote:

hhayyatto wrote:

まず盤面を見て、次にそのターンで起こり得うるすべての配置を考慮し、いい順から悪い順にならべ、一番いいやつを優先する(テトリスAIと同じ仕組み)とかは?
全ての配置を考慮、ということは単純にいうと不可能です。
まあ本当に単純にいって、10の220乗ですから
約阿伽羅!!

そして野球ボールは考えるのをやめた。
            ーー2001年宇宙の旅
ko2222
Scratcher
1000+ posts

将棋のAI作成について話し合う!

taichi0802 wrote:

_ryosuke_ wrote:

序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。難しいです、、!
そうですか・・。では、終盤戦になったら、「王手」を優先するようにすればいいのではないでしょうか・・。でも、問題があります・・。どうやって終盤戦と分からせるのかです・・。ぼくの考えでは、駒が、敵陣に4つ入ったら、終盤戦となる としたらいいのではないでしょうか・・。(無理かも)

このプログラムも難しそうです・・。でも、成功したら、ぜひ伝えて下さい!では、またお会いしましょう(@_^⭐︎)/
というか、駒の価値の高いものを、優先的に無理のない程度に狙わせるようにしておいて、王の価値を馬や飛車よりもずっと高くすれば良いのでは?
(その時点での獲る手間などを加味した上で点数化して、どの駒に狙いをつけるかを定める、みたいな)
(部外者だけど)

PCを買い換えたので、たぶんこれからは改めて作品作りを行えるようになると思います。

自由配置型タワーディフェンスの試作品(結構人気)
https://scratch.mit.edu/projects/163391430/
taichi0802
Scratcher
4 posts

将棋のAI作成について話し合う!

ko2222 wrote:

taichi0802 wrote:

_ryosuke_ wrote:

序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。難しいです、、!
そうですか・・。では、終盤戦になったら、「王手」を優先するようにすればいいのではないでしょうか・・。でも、問題があります・・。どうやって終盤戦と分からせるのかです・・。ぼくの考えでは、駒が、敵陣に4つ入ったら、終盤戦となる としたらいいのではないでしょうか・・。(無理かも)

このプログラムも難しそうです・・。でも、成功したら、ぜひ伝えて下さい!では、またお会いしましょう(@_^⭐︎)/
というか、駒の価値の高いものを、優先的に無理のない程度に狙わせるようにしておいて、王の価値を馬や飛車よりもずっと高くすれば良いのでは?
(その時点での獲る手間などを加味した上で点数化して、どの駒に狙いをつけるかを定める、みたいな)
(部外者だけど)
おっ!いいアイデアですね!王(玉)の価値は∞(無限大)にすれば、どの駒よりも価値が高くなります!!
【駒を取る場合】
駒を取る時は、どこを見ても、狙われないなら、取る。自分の駒が取られても、相手の駒を取ってしまう場合も、取る。
(取られてしまう場合は、逃げるか、持ち駒を打って、守る。)
【一番初めに動かす駒】
二六歩・八四歩
【守り・囲い】
敵の駒が、自分の陣(じん)に入ってきたら、守り・囲い をする。
【守る駒】
狙われている場合は、持ち駒で守ります。守るのに適しているのは、「歩」です。打った時、禁じ手「二歩」になる場合は、香を使う。香が無い場合は、桂馬。桂馬が無い場合は、銀。銀が無い場合は、金。金が無い場合は、角。角が無い場合は、飛。飛が無い場合は、逃げる。

とりあえず、場合による動き方を書いておきました。使えるかどうかは分かりませんが、使えたら、伝えて下さい!!では、また!!(@_^⭐︎)/
kepijirou
Scratcher
4 posts

将棋のAI作成について話し合う!

taichi0802 wrote:

ko2222 wrote:

taichi0802 wrote:

_ryosuke_ wrote:

序盤はそれでも構いませんが、終盤は駒の損得より速度って言いますからね。難しいです、、!
そうですか・・。では、終盤戦になったら、「王手」を優先するようにすればいいのではないでしょうか・・。でも、問題があります・・。どうやって終盤戦と分からせるのかです・・。ぼくの考えでは、駒が、敵陣に4つ入ったら、終盤戦となる としたらいいのではないでしょうか・・。(無理かも)

このプログラムも難しそうです・・。でも、成功したら、ぜひ伝えて下さい!では、またお会いしましょう(@_^⭐︎)/
というか、駒の価値の高いものを、優先的に無理のない程度に狙わせるようにしておいて、王の価値を馬や飛車よりもずっと高くすれば良いのでは?
(その時点での獲る手間などを加味した上で点数化して、どの駒に狙いをつけるかを定める、みたいな)
(部外者だけど)
おっ!いいアイデアですね!王(玉)の価値は∞(無限大)にすれば、どの駒よりも価値が高くなります!!
【駒を取る場合】
駒を取る時は、どこを見ても、狙われないなら、取る。自分の駒が取られても、相手の駒を取ってしまう場合も、取る。
(取られてしまう場合は、逃げるか、持ち駒を打って、守る。)
【一番初めに動かす駒】
二六歩・八四歩
【守り・囲い】
敵の駒が、自分の陣(じん)に入ってきたら、守り・囲い をする。
【守る駒】
狙われている場合は、持ち駒で守ります。守るのに適しているのは、「歩」です。打った時、禁じ手「二歩」になる場合は、香を使う。香が無い場合は、桂馬。桂馬が無い場合は、銀。銀が無い場合は、金。金が無い場合は、角。角が無い場合は、飛。飛が無い場合は、逃げる。

とりあえず、場合による動き方を書いておきました。使えるかどうかは分かりませんが、使えたら、伝えて下さい!!では、また!!(@_^⭐︎)/

突然すみません。 飛車は守りには使わないほうがいいかと思います とられた時のリスクなどお考えたらどうでしょう?
fine316
Scratcher
1000+ posts

将棋のAI作成について話し合う!

Powered by DjangoBB

Standard | Mobile