[過去ログ] 【オセロ,将棋】ボードゲーム【囲碁,War】 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
658: 310 2016/11/13(日)00:47 ID:Be0ooFvL(1/2) AAS
DeepZenGo楽しみですね。
ポストアルファ碁の今となってはZenが2勝できなかったらちょっと悲しいかな。

こちらはオセロのモンテカルロツリー探索がほぼできました。
当初かなり速度ダウンしていたのですが、何とか改良できました。vectorが遅かった。
数か所工夫して、テストデータで正解を早く導けるようにしてみましたが、調整が面倒そう。

とりあえずネタ切れなので、次は探索済ツリーを再利用できるようにして、対戦できるよう
にする予定です。で、今一度終盤読み切りルーチンと、序盤の定石DBつけて完成としたい。

しかし、相変わらず評価値をどう計算したら良いのかわからない。
単純に、着手する手の平均スコアだと、探索の進み具合によってあなりブレてしまい
意味がある数字になりそうにない。アルファ碁はDCNNの評価値を使ってるのかなぁ。
659: 310 2016/11/13(日)20:49 ID:Be0ooFvL(2/2) AAS
ちょっと疑念が湧いてきたので数か所工夫したところを全てコメントアウトしてみたところ
やらない方が遥かにマシという結論に(汗。下手な考え休むに至りでした。
全部外してしまうと一旦最善手から外れてまた戻ってくるような事もなくなり、探索時間が
長い方が良いと単純に言えるようになります。

また、評価値ですが、モンテカルロならやはり点差を考慮しない「勝率」であるべきでは
ないかと思い始めています。今は、「点差」を返しています。「勝率」で選ぶ手は、「もっと
良い手があった」となりますし、「点差」で選ぶ手は「欲張りすぎた」となりそうです。

探索済ツリーの再利用の仕組みができました。まだパスがらみのテストはしてませんが、
多分大丈夫でしょう。

ボード関連のクラスをかなり作り直してしまったので、終盤読み切りルーチンや序盤定石
処理を作り直さないといけません。というか、評価関数を持ってないので、終盤探索は
オーダリングの仕方を変えないといけません。

あと、人間側入力待ちの間も探索を継続できるようにしてみたいと思っています。
モンテカルロだと、いつでも停止したり再開できるので、ぜひとも導入したいものです。
660: 310 2016/11/16(水)01:01 ID:2m1pjf8n(1) AAS
人間の入力待ちの時のバックグラウンド探索を実装しました。
並列処理はPPLを使ってるので、思いのほか簡単にできましたが、入力待ちのまま
放置されると、数時間でメモリーを食いつぶしてしまう事に気づきました。
パンクしそうになったらツリーをルートに近い順に削除するようにしましたが、メモリー
リークしてそうでちょっと怖いです。

コンピュータ同士で対戦させてみたところ、まあそれっぽくは打ちますが、序盤で定石
から外れてしまいます。終盤は結構正確に見えます。

評価値の件、独自ロジックを外したところ、それっぽい値を表示するようになりました。
661: 310 2016/11/16(水)09:03 ID:uZWbEwsE(1) AAS
自分のつたないオセロ力では、モンテカルロが着手した手が良いのか悪いのか
わからないので、どうしようかと寝ながら考えました。

まず考えたのは、完全読み切りルーチンを作って、終盤に限っては正解着手も
探索してみる事。でも、最終的には終盤は完全読み切り使った方が、正確で早い
ので、そちらを使用。中盤や序盤の具合がわからない以上、ほぼ意味なし。

続いて、WZebraにある「解析機能」を実現できないかと考えました。中身はわからない
ので想像。使用して感動した経験あり。
「後ろから解析」なら、αβを後ろから回し、自分が着手した手より良い手が無ければ
βカット、あればそれで生じたスコアの増減を記録という形で、中盤のある程度のところ
までは、遡りつつ誤着手を検出できるんじゃないかなと。棋譜にある着手はこのロジック
で評価が定まっているので、探索を省く事ができます。評価関数を持っていないので、
遡れても30〜35手目くらいまでかと思いますが、読み切りルーチンをいじれば作れ
そうなので、トライしてみようと思います。

誤着手率がわかっても、簡単に直らないのがモンテカルロですが…。
662: 535 2016/11/19(土)18:30 ID:X8ZFdPyh(1) AAS
ん〜Zen負けちゃった。
期待してたんだが。
663: 310 2016/11/19(土)20:47 ID:F+e1LSRb(1) AAS
とりあえずWZebra相手に戦ってみたのですが、全滅しない程度に負けますw
評価値が全然違うというか、自分は有利なつもりで進んでいても、Zebra的には
+50とかになってます。40〜50手目付近で末端までツリーを展開してようやく
気づくみたいな。そこまで行くと、ほぼ間違えなくなる(当たり前)のですが、序盤
中盤があまりに酷いので、定石ルーチンで助けられないレベルかなと。

そもそも評価値が間違いまくりで、自分のAIは少し有利くらいの勝率になっている
のに、zebraは既に+30とか+50とか。形を見ても、素人目にも全く不利な形に。
ランダム着手で勝率や平均スコア求めても意味が無いかも、という本質的な
課題に突き当たってしまいました。

ツリー依存度を上げようと閾値を下げてツリー展開しやすくすると、あっという間に
メモリが溢れてしまいますので非現実的。本来はucb1の計算が機能して、変な
ツリーに手を回さないのですが、むしろ変な手にロックオンしてしまいがち。
囲碁みたいに、1手の価値や、最終的な形が同じなら着手する順番関係ないよう
なゲームじゃないと厳しいのかなと思い始めています。

相手の入力待ちの時のバックグラウンド探索では、敢えて初手についてのみ全て
の手に均等に割り振って、ツリー展開を進めさせてみたのですが、これもやりすぎ
ると簡単にパンクしてしまうので、ほどほどにという感じです。
アンドゥ機能を消して、終わったツリーをバサバサ消す仕様に変更です。

というわけで、解析とか後回しして、強さを上げられないか検討です。
ヒューリスティックな手法で、プレイアウトをもう少し現実的に。同様にUCB1に多少
細工して、よさそうな手の割り当てを増やせないか検討してみます。といっても、
相手の着手可能位置の数を減らすような手を優先するくらいしか、アイデアはあり
ませんが。
664: 310 2016/11/20(日)16:54 ID:4i7ILKOH(1) AAS
「相手の打てる箇所が少ない手を確率的に増やす」程度では全くダメでした。むむむ。

脳内では、プレイアウトの次の1手を決めるのにDCNNでみたいな…本末転倒な対策が
渦巻いてきています(汗。手元にある囲碁のモンテカルロ本(彩の解説、技術的な種本)
でも、自分の石の周辺のパターンを統計的に処理して着手確率を計算みたいな事をして
いまして。オセロでいうと評価関数みたいな事をしていたりします。

オセロは、着手する石の価値が重すぎるので、モンテカルロが向かないって当たり前の
結論ではあるのですが。それにしても、あまりに弱い。

というわけで、ダメ元でプレイアウト時に開放度で着手確率を変える方法を試してみつつ、
技術的勉強で、もう一度、きちんとツリー並列で並列化を実装してみようかなと思ってます。
665: 535 2016/11/20(日)21:28 ID:gm8FgHLO(1) AAS
も〜インテルさん早く1ThzのCPU出してよ〜w
666: 535 2016/11/23(水)19:46 ID:/Z9U4oFa(1) AAS
Zen負けちゃったか〜
でも一勝しただけでもすごい。
667: 310 2016/11/23(水)23:37 ID:wq9OFZ+n(1) AAS
うむぅ。アルファ碁があるから期待高いけど、互先で1勝したのは凄いよね。
まだ伸びしろありそうだから、次回に期待ですね。

こちらは、モンテカルロがあまりにダメダメで悩み中です。

煮詰まってしまったので、ツリー並列をきちんと実装したり、終盤探索作ったりしてました。
終盤探索は、ようやく>>460さん指摘の偶数理論を実装しました。どうやるのかなかなか
思いつかなかったけど、手を動かしだしたらわかるものですね。Zebraとかのソース見て
いないので、もっと良いやり方があるかも知れませんが。
668: 535 2016/11/25(金)20:21 ID:udjtSdAy(1) AAS
終盤の打ち方はまあまあいいんだが序盤が致命的すぎる。
思考時間もめちゃめちゃ長いし。
あと強化学習やりたいけどアイディア湧いてこないなぁ。
669
(1): 535 2016/11/26(土)14:07 ID:3TEfCPcy(1) AAS
LV2が思考速くて強いからってLV2の棋譜大量に集めたら学習が偏りそう?
670: 310 2016/11/28(月)13:44 ID:moEHPVOW(1) AAS
>>669
やってみないとわからないけど、棋譜は質が良くて偏らないってのが基本だからね。
間違えたら間違えたなりに、負けてくれる棋譜じゃないと、変な学習しちゃうかも。

この辺の兼ね合いが難しい。

ただ、スタートの棋譜をその辺にして、だんだん更新しつつ、強くしていくって方法も
あるかと思う。

こちらは、終盤探索に手こずっています。
AVX2命令をオペレーターオーバーロードして使っているのですが、グローバルなのが
気持ち悪くて、クラスに変更。ついでに見直しをしていたら、過去にどうしてもわからなくて
別の方法で逃げてしまったバグをようやく解消。速度には大した影響ないですが。

一番の問題は、評価関数を持っていないので、MPCが使えない事。MPCのスレッショルド
を広げながら置換表使って、moveorderを最適化していたので。他の方法で速度アップを
考えないといけない。逃げてを考えると、結局、NNなりなんなりで別の評価関数なり、次の
1手ヒューリスティックが欲しくなります。もともとNN方面に行ったのは、そこが目的だった
事を思い出しました(汗

モンテカルロは、プレイアウトを疑っているので、いずれきちっとやり直してみます。
671: 535 2016/11/28(月)22:46 ID:nf8GSvVi(1) AAS
NN興味ありますねぇ。
Zenチームの人とかがわかりやすい解説本書いてくれないかなぁ。
672: 535 2016/12/02(金)21:41 ID:Vv9WnV3F(1/2) AAS
モンテカルロはやはりプレイアウトの質がカギか?
軽くて良いヒューリスティックが欲しいところだ。
673
(1): 535 2016/12/02(金)22:02 ID:Vv9WnV3F(2/2) AAS
モンテカルロは良い枝をカットしないこともかなり重要とみた。
674: 310 2016/12/04(日)20:20 ID:E6FCgpFL(1) AAS
うーん。モンテカルロはFFOなんかで残り20手くらいから戦うと、結構まともな着手を
するんだけど、10〜30手目付近がわざとじゃないかというくらい悪い手ばかり選択する。
残り10手くらいまで行けば完璧。

序盤は次の1手が多すぎるのと、プレイアウトで回す回数が単純に多いので、ツリー部が
なかなか深くならないし、あまり簡単に深くするとすぐにメモリーオーバーフローしちゃうし
で難しい。

>>673
UCTではカットはしません。単純にプレイアウトの割り当ての順番がなかなか回ってこなく
なるだけです。良い手に優先的に割り当てさせるためには、やはりプレイアウトで良い手は
良いと、悪い手は悪いと評価できなきゃならんわけで。それが難しいからモンテカルロだと
言う矛盾。

まあ、オセロの場合は、伝家の宝刀評価関数があるので、プレイアウトを20手くらいで
打ち切って、評価値を返すとか…MPCみたいな事をして無駄な着手を回避させるか…
と、本末転倒な妄想をしてます(汗。良くなる点は、時間管理が易しくなるくらいかな(涙。
675: 310 2016/12/06(火)00:37 ID:zUbz1knV(1) AAS
モンテカルロが弱い理由を探ってます。

WZebraと対戦させると、一番顕著なのは、モンテカルロは辺に着手したがり、その結果
WZebraに内側に潜りこまれて選択肢が減っているという事です。流石に×とかCには
簡単には打ちませんが、序盤からあっさり中辺に出て行き、更にあっさり辺に打ちます。

相手もランダムに着手したとすると、辺の石は1方向からしか返せない(内側は4方向)
ので、プレイアウトでは残りやすくなると言う仮説を立ててみました。つまり全部で28石
ある辺の攻防が相対的に下手くそになるため、プレイアウトの結果が楽観的になりすぎ
ているのではないかと言う事です。

残り20手切ってくると、ツリー展開できているので、min-Max的に攻防できるけど、それ
より前の段階ではプレイアウトで、相手のミスを咎めるような手を打たないといけないと
言う事かなと思います。

これをどう次の1手の確率分布に表現するかですね。
676: 310 2016/12/11(日)01:06 ID:8cq3+Gjk(1/2) AAS
なんか袋小路に入ってます(汗

プレイアウトの改良は速度低下との戦いになり、効果が出ません。
結局、とにかく無駄をそぎ落とし、単純化してプレイアウト回数を稼いで、なおかつ
ツリー展開の閾値を下げて、ツリーに頼る形になりました。

が、ここでメモリーパンクとの戦いが始まります(涙
中盤の分岐が多い局面だと、あっという間にツリー部で8ギガくらい使ってしまいます。
更に処理を単純化してメモリー使用量削減に走る事に。

結局、40手目以後なら使えるけど、それ以前ではあまり精度が期待できないという、
当初やりたかった、少しマシな序盤・中盤探索という目論見は崩れてしまいました。

評価関数があるんだったらαβの方がマシという当たり前の結論に傾きつつあります(汗
677: 310 2016/12/11(日)23:57 ID:8cq3+Gjk(2/2) AAS
たった一晩で楽観してきました。

今までsoftmaxで確率分布を変えていましたが、あまり大きな差はついていないようだった
ので、この際、思いっきり割り切ってみました。1位に70%、2位に25%、残り5%で他の
手に均等割り。イメージとしては1σ、2σ、その他って感じです。ヒューリスティックは
αβのmoveorderのものを使用。

もちろんzebraにはぼろ負けですが、今までと違うのは、相手を囲んで着手可能位置を
減らしてしまう事が無くなりました。ちょっとした手ごたえを感じています。これをスタート
に、ヒューリスティックに終盤変化を組み込んだり、序盤は開放度にしてみたりして検証
しようかと思っています。プレイアウトの精度があがったら、無駄にツリー展開しなくて
済むので、メモリーにも優しくなれるかも。

また、敗勢での発狂モードや、勝勢での手抜きモードの原因は、勝敗が明らかになり、
手毎の勝率の差がなくなる事が原因です。プレイアウト回数が多いからか、評価値は
かなりデジタルに変化するので、25%、75%などを境目に、石差評価に変更すると、
ある程度回避できるんじゃないかと思います。
678: 310 2016/12/19(月)00:57 ID:V27xPT8O(1) AAS
地味に色々改良。素UCTに色々追加してます。
・uctの終盤にsolverを組み込んだ
・手の割り振りに全手均等な部分を作って読み抜けの可能性を減らした
の2点が主な追加点です

当初想定していたより結構強くなったと思います。

AI黒番30秒探索。zebra思考中にもMAX30秒探索で、zebraに対しては20石強負け
くらい。序盤1回間違えて、中盤ジワジワ差が広がって、40手前後で読み切りできず
に間違う感じ。序盤は定石で回避できると思いますが、中盤の間違いは2番手の手を
選んでしまいます。修正は難しい感じ。終盤はチューニングか、探索時間延長で対応
できないか検討。

テストで作った20手目で黒+12(zebra評価値)程度の盤面からは、zebraが間違える
のか、終盤に入るところまで、かなり押してまして、読み切りミスで22石差→16石差と
ぬるい手を打ちましたが、勝ち切る事ができるようになりました。

ここから先は、レーティングが欲しいなぁ。
オセロでAI使用OKなところないですかね?
679: 310 2016/12/22(木)01:29 ID:4YVdXlZ1(1) AAS
地味に色々改良した結果、あらかたボツにしてます(汗

発狂モード対策でスコア最大化を図ろうとしていましたが、極端なスコアが悪さしている
ようなので、結局勝率のみに限定しました。この時点で終盤はsolver任せに方針転換。

で、勝敗のみにした事で、solverの探索範囲を+-1のシングルウィンドウにできて
スピードアップしたのでプレイアウトのラスト7手くらいでも使用する事にしました。
プレイアウトでは、moveorder順の下位はバッサリカットしました。酷い手が混入する
とスコアが散らかるので。

uctのif分ネストがスパゲッティ化したので、処理順を大幅に見直したら、時々落ちるように
なってしまった。並列化が原因かそれともshared_ptrの使い方が悪いのか、散々調べた
結果、ちゃんと全体をリビルドすれば回避できる事が判明。俺の時間を返せorz

テストで使用している引分手順30手目から開始すると、たいていは負けてしまうけど、
希にzebraが認識していない勝利手順を見つけて勝つようになった。乱数の具合なので
再現性は低いけど、zebraの評価値にも間違いがある事を実感した。

ここのところ30手目〜40手目をターゲットに改善していたけど、それなりに成果が出た。
40手目以後はsolverを使用し、対局開始は定石DBを20手分くらい用意したら、まあまあ
なAIになるかなぁと思い始めました。ただ、1手30秒考えるのは長すぎるなぁ。

あと、正しい手順を見つけ勝率も上回って来ているのに、探索時間が足りずにプレイアウト
回数で負けて最善手が選ばれないケースが散見されます。ものの本だと、そういう時は
探索時間を延長するとか書かれていますので、対応してみようかと思っています。

というわけで、なんか行けそうな気がしてきた。
680: 310 2016/12/27(火)01:58 ID:lSRXuhfg(1) AAS
uctの探索部分がある程度できたので、とりあえずDOS窓ベースでゲームとして成り立つ
ようにしました。edax-pvbook_2009.wtbから作った40手分の定石DBをつけて、終盤探索
は40手目からsolverで。multi probe cutできないので、FFO#40で1.3秒程度の性能です。
その他諸々。探索時間延長とか。タイマーを作り直してプログレスバーつけたり。

WZebraの20手読み、定石DB変化大相手に、まれに勝ちます。直接対決はまだして
ませんが、以前自分が作ったmin-Max版よりちょっと弱いくらいかなという感触です。
モンテカルロは乱数がらみで、ナチュラルに変化しちゃうので、5〜10手に1回程度は
ミスをしちゃう感じです。

プレイアウトはもう少し詰められそうだけど、まあこの辺が潮時かなぁ。

次は何しようかな。
681: 2016/12/27(火)06:12 ID:A0w16iJG(1) AAS
Vectorとかで配布しては?
682: 310 2016/12/28(水)10:02 ID:8e16q4EG(1) AAS
vectorは考えてないですが、どこかでソース晒しても良いかなと思っています。
しばし検討。

なおUCT探索の探索時間は30秒にしてます。微妙な時は10秒づつ探索延長します。
また、人間が長考すると、その分だけバックグラウンドで探索が進んで強くなります。
気が長い人におすすめです。
683
(1): 2016/12/29(木)00:29 ID:T+iok27x(1) AAS
GGSってまだあるんだっけか
トッププログラムの開発者はみんなあそこで対戦しつつ改良してる
684: 310 2016/12/30(金)02:11 ID:iZpfxqhq(1/2) AAS
>>683
GGS探したけど見つかりません。
オセロのAI自体、行き着くところまで行っちゃってるからなぁ。

コメントの整備をしていたら、細かいところが気になって、あちこち手を入れています。
手を入れながら、UCTの探索結果があるので、それでmoveorderすれば良い事に気が
つきまして。SOLVERが少し早くなったので、終盤探索は38手に格上げ。

しかし、テストプレイしていたら、SOLVERのバグ発見。終局まで打ち続けると、50手目
近辺で間違えます。並列探索部分で、negaScout的に再探索かかったあたりにバグが
ありそうという所まで絞り込みましたが、ちょっと厄介な感じ。

ソース晒す用に昔使ってたDTIのホームページを使えないか調べたら、サービスごと
終了してました(汗。

久々にオセロAIで検索したら、MLPでAIのテストをしている人がいました。評価関数では
なく、次の1手で使っているようです。比較的軽い構成なので、気が向いたらもう一度、
トライしてみようかと思います。
685: 310 2016/12/30(金)20:08 ID:iZpfxqhq(2/2) AAS
バグ直りました。数日前に速度アップできると思いつきで直したところでした。
直ったは良いけど、何故バグるのか理解できないorz
686: 2017/01/01(日)01:33 ID:AXNNcWXn(1) AAS
個人的にはディープラーニングやって欲しい
687: 310 2017/01/02(月)09:01 ID:YMPtqKka(1) AAS
いま、Bloogerにサイトを作ってやっつけで解説文を作ってます。
あらかたできたら公開します。

が、解説していると細かいバグを見つけて、直して確認が必要になるという…。

やっぱ次はディープラーニングですよね。Eigen使ったMLPで次の1手をやってみます。
DCNNももう一度トライしたいと思っていますが、貧弱なパソコン環境ではどうにもならない
かも知れない。
1-
あと 315 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.018s