[過去ログ]
【オセロ,将棋】ボードゲーム【囲碁,War】 (1002レス)
【オセロ,将棋】ボードゲーム【囲碁,War】 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
627: 310 [sage] 2016/10/19(水) 02:53:35.54 ID:YWnebdEb まさかの場所にバグ発見。 プレイアウトでランダムに1手選ぶところがバグってました。 良く動いていたものだと思う反面、MCTSってそういう所がある事も薄々感じてます。 が、状況はほぼ変わらず。初手真ん中と、5手目真ん中。この2か所が鬼門。 まだバグがあるのかも知れない。やっぱり自分が一番信用できないですね。 DAG問題対策でノードの合流を実装しました。枝とノードを分離して、ノードをハッシュ にして、ノードの下に次の枝をぶら下げました。同時に、ハッシュキーに細工して、 左右同形も合流させてます。あまり変化はない気が。 速度低下が酷いです。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/627
628: 310 [sage] 2016/10/20(木) 00:37:06.99 ID:yz39woaL 5手目真ん中以後どうなるのか1秒探索検証。6手目2列目に対しては、勝利(全て 最善着手)。6手目1列目に対しては、5列目着手で引き分け進行に入り、引分終了。 この時の手順では、全箇所が最善手という盤面ばかり通っていくように感じています。 つまり、MCTS的に勝利期待値が最大になりやすい手です。という事で、まあ、そんな に間違った手は打っていないかなと。 また、プレイアウトを繰り返して手がどう変遷するのか見ていくと、最善手である真ん中 は、ある一定数からほとんど選択されなくなっています。結果、その手で枝の分岐が起き ない事から、いつまでたっても評価が更新されず正解に戻らないと推測できます。 そこで、試行回数に圧倒的な差ができても、下位の手も一定回数は試行されるように できないかと、手の選択基準をucb1の大きい順から、ソフトマックス関数を通して確率 分布に変えて、乱数で選択してみました。 結果は・・・。expの計算がある事からか、速度が激減。PVに割り当てられる試行回数は 2/3程度になり、その時点の最悪手でもそれなりに試行されるようになりましたが、それ でも手の選択は微妙な感じです。この程度の効果なら、他のパラメータいじった方が 速度低下も無く良かったかも(汗 というわけで、本日のトライアルも失敗。 気が進まなかったけど、やっぱりucb1計算の検算をしてみます。 あと、部分的にmin-Maxを適用するとか。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/628
629: 310 [sage] 2016/10/23(日) 09:58:44.72 ID:qEEwIK82 UCB1の計算は合ってました。 プログラムがC++的に美しくない事が気になりだし始めて、全部書き直ししてました。 書いた端から美しくないのが気になりだしましたが(笑) UCTで後方枝刈というか、小枝の勝敗が確定していたら、ツリーを縮小していく処理を 追加。一本道問題が多少緩和するかと期待。対戦はちゃんと動いているっぽい。 デバッグ情報をファイル出力する処理書いて確認。 間違え方はあまり変わっていないのが残念というか、安心というか(汗 モンテカルロで1手目から最善手順が確実にわかったら、それはそれでゲームが 簡単すぎるって事になっちゃうので、大きく間違えないんなら、それで仕方ないかな。 というわけで、COM1手目は真ん中に固定。 プレイアウト部を高速化できる気がしていますが、やってみないとわかりません。 プレイアウトの末端部分に完全読みを数段入れるのも良いかと思っています。 DAG問題対応と左右対称チェックを入れて毎秒20万プレイアウトくらい。 評価値の算出方法でちょっと悩み中。 そこそこ落ち着いたらオセロの中盤探索に応用してみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/629
630: 310 [sage] 2016/10/26(水) 20:47:59.29 ID:H5ji3apJ また美しくない病が出て、書き直したところ、びっくりするほど弱くなってしまった。 しばらくデバッグで悩みそうです。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/630
634: 310 [sage] 2016/10/27(木) 23:41:56.56 ID:KUg+LQ1A バグ取れました。わかればどうという事はないですねorz 左右対称はデバッグが面倒くさいので省きました。どうせ序盤でした 意味がありませんので。 初手真ん中は、多分モンテカルロでは答えを出すのが相当厳しいです。 5手目真ん中は、乱数次第みたいな感じで、100万プレイアウトくらいまでに 出るか、1億プレイアウトしても出ないかみたいな感じになります。 一応、DOS窓ベースでプレイできるようにして、途中でMTCSのツリーを 色々と確認したり、追加のプレイアウトをしたりできるようにしましたが、 本質的にモンテカルロなので、完全に近いけど完全じゃないし、乱数の 具合によって着手する手もバラつくという事で勝手に納得してしまいまして、 せっかく作ったデバッグルーチンも禄に活用していません。 高速化も、一時期は40万プレイアウト毎秒くらいまで出たように感じて ましたが、最終的に20万くらいで落ち着いてしまいました。 次のステップでオセロに応用と思ったのですが、その前に並列処理化を してみようかと思います。上手くやれば探索ノード数は3倍強(自分のPC では)くらいにはなりますが・・・数段深く読んだとて、結論にはあんまり大差 が無いのかなと。まあ練習ですな。 というか、min-Maxとモンテカルロのノウハウ、仕事で使えそうだなぁ。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/634
635: 名前は開発中のものです。 [sage] 2016/10/27(木) 23:46:29.29 ID:CgNWWTgQ >>310氏はプロのプログラマなのか。 まあ納得。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/635
636: 310 [sage] 2016/10/28(金) 10:50:00.21 ID:/58y3Hfc いや。趣味の深夜プログラマです。 物流業務改善の会議で提案してみて、わからんと言われたら ソース見せて動作検証してやろうかなと。 システム屋さんからすると、とてつもなく面倒くさいクライアント だと自覚しておりまするorz http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/636
638: 310 [sage] 2016/10/29(土) 21:13:21.87 ID:hyv6QOjp 並列化してみました。 色々やり方ありますが、まあ順当なやり方という事で、ツリー単位の並列化です。 が、4コアに対して4並列でむしろ速度低下。排他で怪しいところを色々変えてみて ようやく若干(10〜20%程度)の速度アップにしかなりません。並列数を減らすと 速度低下していくので、排他待ちが原因ではなく、並列化オーバーヘッドの模様。 ノード&ツリーの構造で複雑な分、オーバーヘッドが大きくなっているのか、オセロの 時の効果には大きくおよびません。 ルート単位の並列化で、一定時間ごとにツリー統合(合算)というやり方もあるような ので、次はこちらを試してみます。 もしかしたら、一番効果が無さそうな、プレイアウトのみ並列化の方が効果出たりして。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/638
639: 310 [sage] 2016/10/29(土) 21:14:51.22 ID:hyv6QOjp MTCSは並列化と相性が良いとは思えないなぁ。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/639
641: 310 [sage] 2016/10/30(日) 23:54:19.10 ID:vT6Vi1L+ 結局ツリー部の並列化はやめてプレイアウトだけを並列化しました。 ツリー統合も気になりますが、とりあえずこれで末端の評価が正確になります。 プレイアウト部分は処理時間が短いので、プレイアウト回数は大幅に増えます。 MCTSは面倒でも、モンテカルロは並列化向きです。 100回プレイアウトして、そのスコアでまとめて更新。 ところが、バグを発見してしまいました。 勝ち手順で進めていたのに、最後の最後に1手間違えて引分。 もうプレイアウトではなくツリーの勝敗が確定している状態で、間違えるはずがない。 勝敗確定時のフラグ設定がおかしいようです。 そこから色々見直しを始めたら、negaMax的な処理の扱いに完全に混乱して しまいまして…。これだと思って修正すると、おかしくなってしまいます。 どこか根本的に勘違いしているみたいなので、しばし長考に入りますorz http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/641
647: 310 [sage] 2016/11/04(金) 15:36:30.74 ID:zGiY9OSz 長考の結果、もう一度作り直し(笑)していたら、混乱の原因がわかりまして。 勝敗の持ち方を逆にしたらすっきりしました。 あと、終盤の手順の前後で、あと3手粘れるのに1手で負けるという現象を調べた 結果、ツリー部で負けと判定している以上、何手先に負けるか関係ないというプロ グラムになっていた事も判明。バグじゃありませんでした。とはいえ気持ちが悪いので、 なるべく長く粘るようにしてみました。 そこでわかったのは、Perfect Solverの数字は、42手21ターン目の引分から何ターン 前に勝負がつくのかを表していて、プラスは勝ち、マイナスは負けという事です。先手で +1と出たら最善を尽くせば41手目の自分の着手で勝つという事のようです。 つまりスコアを勝敗決定ターンにしたmin-Maxで、速度考えるとDB化してるんでしょう。 で、MCTSですが、まあやはりモンテカルロなので間違えます。試しに10手目程度 の間違えた局面から、シミュレーションを続行してみたところ、億単位の探索(プレイ アウトとしては10倍)で、間違えた手が本当は悪かった事に気づいた様子で、そこから 正しい答えに向かって行きました。なので、まあプログラムは間違っていない模様です(汗。 DAG対応とか、自殺手禁止プレイアウトとか、色々やった結果、選択手のばらつきが 減って、「たまたま正解手順を引く」事がなくなって、自信満々に間違えるようになっ た印象です。それでも、時間をかけて探索を続けると、いつかは正しい答えにたどり着くと。 今となってはあまり意味が無いですが、せっかくなので、ここまで積み上げて来た ノウハウで、今一度Solver作ってみようかなと。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/647
649: 310 [sage] 2016/11/06(日) 13:49:29.22 ID:Z4kqE5wB Solver作りました。 PerfectSolverにならって評価値を、42手目から何手手前で勝敗がついたかにしました。 お蔭さまで、null window searchが使えるようになり、mtd(f)で高速化しました。 あと、初段のみ単純な並列して、残り28手で6秒強となりました。 そろそろオセロに戻ります。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/649
653: 310 [sage] 2016/11/08(火) 00:02:22.02 ID:CUgV7Bvg 安心してください。めちゃ早いですよw 後ろ向き枝刈系のアルゴリズムはほとんどがαβを前提にしています。 自分の最初は擬似コードコピペしました。 すぐ忘れちゃいますが、1回は真剣に動作を追っておくと良いですよ。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/653
655: 310 [sage] 2016/11/10(木) 20:55:19.87 ID:gpSCAC4W オセロでUCTをしてます。コピペでちょいちょいと思っていたらパスの処理が面倒で、 思った以上に動作速度が落ちてしまいました。 その後、デバッグしてたらおかしな現象を発見。探索ツリーでプラスになるべき数字が マイナスに。しかも1か所だけ。発生条件を絞り込めず、なんだかんだと数日間。 原因は整数のオーバーフローでした。設定時間におけるプレイアウト回数でのスコア合計 がちょうど境目にきて、本当に微妙にオーバーフローしていたので、スコアの正負がひっく りかえったように見えていたのでした。 俺の時間を返せorz 終盤5手読みくらいならすぐにUCTのツリーが終局まで達して、完全読み同等の答えを 返してくれるのですが、10手だと結構時間がかかり、20手だと全く歯が立たない。 評価関数を使った中盤探索の置き換えに使えないかと想定しているのですが、やはり 簡単に精度は出ない感じです。 プレイアウトでありがちな手を優先的に着手するように、ヒューリスティックな評価関数を 用意して、プレイアウトの精度を高められるか試してみたいと思います。あと、スピード アップもしないと・・・。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/655
658: 310 [sage] 2016/11/13(日) 00:47:25.03 ID:Be0ooFvL DeepZenGo楽しみですね。 ポストアルファ碁の今となってはZenが2勝できなかったらちょっと悲しいかな。 こちらはオセロのモンテカルロツリー探索がほぼできました。 当初かなり速度ダウンしていたのですが、何とか改良できました。vectorが遅かった。 数か所工夫して、テストデータで正解を早く導けるようにしてみましたが、調整が面倒そう。 とりあえずネタ切れなので、次は探索済ツリーを再利用できるようにして、対戦できるよう にする予定です。で、今一度終盤読み切りルーチンと、序盤の定石DBつけて完成としたい。 しかし、相変わらず評価値をどう計算したら良いのかわからない。 単純に、着手する手の平均スコアだと、探索の進み具合によってあなりブレてしまい 意味がある数字になりそうにない。アルファ碁はDCNNの評価値を使ってるのかなぁ。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/658
659: 310 [sage] 2016/11/13(日) 20:49:23.63 ID:Be0ooFvL ちょっと疑念が湧いてきたので数か所工夫したところを全てコメントアウトしてみたところ やらない方が遥かにマシという結論に(汗。下手な考え休むに至りでした。 全部外してしまうと一旦最善手から外れてまた戻ってくるような事もなくなり、探索時間が 長い方が良いと単純に言えるようになります。 また、評価値ですが、モンテカルロならやはり点差を考慮しない「勝率」であるべきでは ないかと思い始めています。今は、「点差」を返しています。「勝率」で選ぶ手は、「もっと 良い手があった」となりますし、「点差」で選ぶ手は「欲張りすぎた」となりそうです。 探索済ツリーの再利用の仕組みができました。まだパスがらみのテストはしてませんが、 多分大丈夫でしょう。 ボード関連のクラスをかなり作り直してしまったので、終盤読み切りルーチンや序盤定石 処理を作り直さないといけません。というか、評価関数を持ってないので、終盤探索は オーダリングの仕方を変えないといけません。 あと、人間側入力待ちの間も探索を継続できるようにしてみたいと思っています。 モンテカルロだと、いつでも停止したり再開できるので、ぜひとも導入したいものです。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/659
660: 310 [sage] 2016/11/16(水) 01:01:14.01 ID:2m1pjf8n 人間の入力待ちの時のバックグラウンド探索を実装しました。 並列処理はPPLを使ってるので、思いのほか簡単にできましたが、入力待ちのまま 放置されると、数時間でメモリーを食いつぶしてしまう事に気づきました。 パンクしそうになったらツリーをルートに近い順に削除するようにしましたが、メモリー リークしてそうでちょっと怖いです。 コンピュータ同士で対戦させてみたところ、まあそれっぽくは打ちますが、序盤で定石 から外れてしまいます。終盤は結構正確に見えます。 評価値の件、独自ロジックを外したところ、それっぽい値を表示するようになりました。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/660
661: 310 [sage] 2016/11/16(水) 09:03:26.60 ID:uZWbEwsE 自分のつたないオセロ力では、モンテカルロが着手した手が良いのか悪いのか わからないので、どうしようかと寝ながら考えました。 まず考えたのは、完全読み切りルーチンを作って、終盤に限っては正解着手も 探索してみる事。でも、最終的には終盤は完全読み切り使った方が、正確で早い ので、そちらを使用。中盤や序盤の具合がわからない以上、ほぼ意味なし。 続いて、WZebraにある「解析機能」を実現できないかと考えました。中身はわからない ので想像。使用して感動した経験あり。 「後ろから解析」なら、αβを後ろから回し、自分が着手した手より良い手が無ければ βカット、あればそれで生じたスコアの増減を記録という形で、中盤のある程度のところ までは、遡りつつ誤着手を検出できるんじゃないかなと。棋譜にある着手はこのロジック で評価が定まっているので、探索を省く事ができます。評価関数を持っていないので、 遡れても30〜35手目くらいまでかと思いますが、読み切りルーチンをいじれば作れ そうなので、トライしてみようと思います。 誤着手率がわかっても、簡単に直らないのがモンテカルロですが…。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/661
663: 310 [sage] 2016/11/19(土) 20:47:46.55 ID:F+e1LSRb とりあえずWZebra相手に戦ってみたのですが、全滅しない程度に負けますw 評価値が全然違うというか、自分は有利なつもりで進んでいても、Zebra的には +50とかになってます。40〜50手目付近で末端までツリーを展開してようやく 気づくみたいな。そこまで行くと、ほぼ間違えなくなる(当たり前)のですが、序盤 中盤があまりに酷いので、定石ルーチンで助けられないレベルかなと。 そもそも評価値が間違いまくりで、自分のAIは少し有利くらいの勝率になっている のに、zebraは既に+30とか+50とか。形を見ても、素人目にも全く不利な形に。 ランダム着手で勝率や平均スコア求めても意味が無いかも、という本質的な 課題に突き当たってしまいました。 ツリー依存度を上げようと閾値を下げてツリー展開しやすくすると、あっという間に メモリが溢れてしまいますので非現実的。本来はucb1の計算が機能して、変な ツリーに手を回さないのですが、むしろ変な手にロックオンしてしまいがち。 囲碁みたいに、1手の価値や、最終的な形が同じなら着手する順番関係ないよう なゲームじゃないと厳しいのかなと思い始めています。 相手の入力待ちの時のバックグラウンド探索では、敢えて初手についてのみ全て の手に均等に割り振って、ツリー展開を進めさせてみたのですが、これもやりすぎ ると簡単にパンクしてしまうので、ほどほどにという感じです。 アンドゥ機能を消して、終わったツリーをバサバサ消す仕様に変更です。 というわけで、解析とか後回しして、強さを上げられないか検討です。 ヒューリスティックな手法で、プレイアウトをもう少し現実的に。同様にUCB1に多少 細工して、よさそうな手の割り当てを増やせないか検討してみます。といっても、 相手の着手可能位置の数を減らすような手を優先するくらいしか、アイデアはあり ませんが。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/663
664: 310 [sage] 2016/11/20(日) 16:54:24.84 ID:4i7ILKOH 「相手の打てる箇所が少ない手を確率的に増やす」程度では全くダメでした。むむむ。 脳内では、プレイアウトの次の1手を決めるのにDCNNでみたいな…本末転倒な対策が 渦巻いてきています(汗。手元にある囲碁のモンテカルロ本(彩の解説、技術的な種本) でも、自分の石の周辺のパターンを統計的に処理して着手確率を計算みたいな事をして いまして。オセロでいうと評価関数みたいな事をしていたりします。 オセロは、着手する石の価値が重すぎるので、モンテカルロが向かないって当たり前の 結論ではあるのですが。それにしても、あまりに弱い。 というわけで、ダメ元でプレイアウト時に開放度で着手確率を変える方法を試してみつつ、 技術的勉強で、もう一度、きちんとツリー並列で並列化を実装してみようかなと思ってます。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/664
667: 310 [sage] 2016/11/23(水) 23:37:07.28 ID:wq9OFZ+n うむぅ。アルファ碁があるから期待高いけど、互先で1勝したのは凄いよね。 まだ伸びしろありそうだから、次回に期待ですね。 こちらは、モンテカルロがあまりにダメダメで悩み中です。 煮詰まってしまったので、ツリー並列をきちんと実装したり、終盤探索作ったりしてました。 終盤探索は、ようやく>>460さん指摘の偶数理論を実装しました。どうやるのかなかなか 思いつかなかったけど、手を動かしだしたらわかるものですね。Zebraとかのソース見て いないので、もっと良いやり方があるかも知れませんが。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/667
670: 310 [sage] 2016/11/28(月) 13:44:46.30 ID:moEHPVOW >>669 やってみないとわからないけど、棋譜は質が良くて偏らないってのが基本だからね。 間違えたら間違えたなりに、負けてくれる棋譜じゃないと、変な学習しちゃうかも。 この辺の兼ね合いが難しい。 ただ、スタートの棋譜をその辺にして、だんだん更新しつつ、強くしていくって方法も あるかと思う。 こちらは、終盤探索に手こずっています。 AVX2命令をオペレーターオーバーロードして使っているのですが、グローバルなのが 気持ち悪くて、クラスに変更。ついでに見直しをしていたら、過去にどうしてもわからなくて 別の方法で逃げてしまったバグをようやく解消。速度には大した影響ないですが。 一番の問題は、評価関数を持っていないので、MPCが使えない事。MPCのスレッショルド を広げながら置換表使って、moveorderを最適化していたので。他の方法で速度アップを 考えないといけない。逃げてを考えると、結局、NNなりなんなりで別の評価関数なり、次の 1手ヒューリスティックが欲しくなります。もともとNN方面に行ったのは、そこが目的だった 事を思い出しました(汗 モンテカルロは、プレイアウトを疑っているので、いずれきちっとやり直してみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/670
674: 310 [sage] 2016/12/04(日) 20:20:17.67 ID:E6FCgpFL うーん。モンテカルロはFFOなんかで残り20手くらいから戦うと、結構まともな着手を するんだけど、10〜30手目付近がわざとじゃないかというくらい悪い手ばかり選択する。 残り10手くらいまで行けば完璧。 序盤は次の1手が多すぎるのと、プレイアウトで回す回数が単純に多いので、ツリー部が なかなか深くならないし、あまり簡単に深くするとすぐにメモリーオーバーフローしちゃうし で難しい。 >>673 UCTではカットはしません。単純にプレイアウトの割り当ての順番がなかなか回ってこなく なるだけです。良い手に優先的に割り当てさせるためには、やはりプレイアウトで良い手は 良いと、悪い手は悪いと評価できなきゃならんわけで。それが難しいからモンテカルロだと 言う矛盾。 まあ、オセロの場合は、伝家の宝刀評価関数があるので、プレイアウトを20手くらいで 打ち切って、評価値を返すとか…MPCみたいな事をして無駄な着手を回避させるか… と、本末転倒な妄想をしてます(汗。良くなる点は、時間管理が易しくなるくらいかな(涙。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/674
675: 310 [sage] 2016/12/06(火) 00:37:18.95 ID:zUbz1knV モンテカルロが弱い理由を探ってます。 WZebraと対戦させると、一番顕著なのは、モンテカルロは辺に着手したがり、その結果 WZebraに内側に潜りこまれて選択肢が減っているという事です。流石に×とかCには 簡単には打ちませんが、序盤からあっさり中辺に出て行き、更にあっさり辺に打ちます。 相手もランダムに着手したとすると、辺の石は1方向からしか返せない(内側は4方向) ので、プレイアウトでは残りやすくなると言う仮説を立ててみました。つまり全部で28石 ある辺の攻防が相対的に下手くそになるため、プレイアウトの結果が楽観的になりすぎ ているのではないかと言う事です。 残り20手切ってくると、ツリー展開できているので、min-Max的に攻防できるけど、それ より前の段階ではプレイアウトで、相手のミスを咎めるような手を打たないといけないと 言う事かなと思います。 これをどう次の1手の確率分布に表現するかですね。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/675
676: 310 [sage] 2016/12/11(日) 01:06:32.29 ID:8cq3+Gjk なんか袋小路に入ってます(汗 プレイアウトの改良は速度低下との戦いになり、効果が出ません。 結局、とにかく無駄をそぎ落とし、単純化してプレイアウト回数を稼いで、なおかつ ツリー展開の閾値を下げて、ツリーに頼る形になりました。 が、ここでメモリーパンクとの戦いが始まります(涙 中盤の分岐が多い局面だと、あっという間にツリー部で8ギガくらい使ってしまいます。 更に処理を単純化してメモリー使用量削減に走る事に。 結局、40手目以後なら使えるけど、それ以前ではあまり精度が期待できないという、 当初やりたかった、少しマシな序盤・中盤探索という目論見は崩れてしまいました。 評価関数があるんだったらαβの方がマシという当たり前の結論に傾きつつあります(汗 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/676
677: 310 [sage] 2016/12/11(日) 23:57:52.07 ID:8cq3+Gjk たった一晩で楽観してきました。 今までsoftmaxで確率分布を変えていましたが、あまり大きな差はついていないようだった ので、この際、思いっきり割り切ってみました。1位に70%、2位に25%、残り5%で他の 手に均等割り。イメージとしては1σ、2σ、その他って感じです。ヒューリスティックは αβのmoveorderのものを使用。 もちろんzebraにはぼろ負けですが、今までと違うのは、相手を囲んで着手可能位置を 減らしてしまう事が無くなりました。ちょっとした手ごたえを感じています。これをスタート に、ヒューリスティックに終盤変化を組み込んだり、序盤は開放度にしてみたりして検証 しようかと思っています。プレイアウトの精度があがったら、無駄にツリー展開しなくて 済むので、メモリーにも優しくなれるかも。 また、敗勢での発狂モードや、勝勢での手抜きモードの原因は、勝敗が明らかになり、 手毎の勝率の差がなくなる事が原因です。プレイアウト回数が多いからか、評価値は かなりデジタルに変化するので、25%、75%などを境目に、石差評価に変更すると、 ある程度回避できるんじゃないかと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/677
678: 310 [sage] 2016/12/19(月) 00:57:35.60 ID:V27xPT8O 地味に色々改良。素UCTに色々追加してます。 ・uctの終盤にsolverを組み込んだ ・手の割り振りに全手均等な部分を作って読み抜けの可能性を減らした の2点が主な追加点です 当初想定していたより結構強くなったと思います。 AI黒番30秒探索。zebra思考中にもMAX30秒探索で、zebraに対しては20石強負け くらい。序盤1回間違えて、中盤ジワジワ差が広がって、40手前後で読み切りできず に間違う感じ。序盤は定石で回避できると思いますが、中盤の間違いは2番手の手を 選んでしまいます。修正は難しい感じ。終盤はチューニングか、探索時間延長で対応 できないか検討。 テストで作った20手目で黒+12(zebra評価値)程度の盤面からは、zebraが間違える のか、終盤に入るところまで、かなり押してまして、読み切りミスで22石差→16石差と ぬるい手を打ちましたが、勝ち切る事ができるようになりました。 ここから先は、レーティングが欲しいなぁ。 オセロでAI使用OKなところないですかね? http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/678
679: 310 [sage] 2016/12/22(木) 01:29:32.37 ID:4YVdXlZ1 地味に色々改良した結果、あらかたボツにしてます(汗 発狂モード対策でスコア最大化を図ろうとしていましたが、極端なスコアが悪さしている ようなので、結局勝率のみに限定しました。この時点で終盤はsolver任せに方針転換。 で、勝敗のみにした事で、solverの探索範囲を+-1のシングルウィンドウにできて スピードアップしたのでプレイアウトのラスト7手くらいでも使用する事にしました。 プレイアウトでは、moveorder順の下位はバッサリカットしました。酷い手が混入する とスコアが散らかるので。 uctのif分ネストがスパゲッティ化したので、処理順を大幅に見直したら、時々落ちるように なってしまった。並列化が原因かそれともshared_ptrの使い方が悪いのか、散々調べた 結果、ちゃんと全体をリビルドすれば回避できる事が判明。俺の時間を返せorz テストで使用している引分手順30手目から開始すると、たいていは負けてしまうけど、 希にzebraが認識していない勝利手順を見つけて勝つようになった。乱数の具合なので 再現性は低いけど、zebraの評価値にも間違いがある事を実感した。 ここのところ30手目〜40手目をターゲットに改善していたけど、それなりに成果が出た。 40手目以後はsolverを使用し、対局開始は定石DBを20手分くらい用意したら、まあまあ なAIになるかなぁと思い始めました。ただ、1手30秒考えるのは長すぎるなぁ。 あと、正しい手順を見つけ勝率も上回って来ているのに、探索時間が足りずにプレイアウト 回数で負けて最善手が選ばれないケースが散見されます。ものの本だと、そういう時は 探索時間を延長するとか書かれていますので、対応してみようかと思っています。 というわけで、なんか行けそうな気がしてきた。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/679
680: 310 [sage] 2016/12/27(火) 01:58:53.16 ID:lSRXuhfg 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回程度は ミスをしちゃう感じです。 プレイアウトはもう少し詰められそうだけど、まあこの辺が潮時かなぁ。 次は何しようかな。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/680
682: 310 [sage] 2016/12/28(水) 10:02:51.11 ID:8e16q4EG vectorは考えてないですが、どこかでソース晒しても良いかなと思っています。 しばし検討。 なおUCT探索の探索時間は30秒にしてます。微妙な時は10秒づつ探索延長します。 また、人間が長考すると、その分だけバックグラウンドで探索が進んで強くなります。 気が長い人におすすめです。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/682
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.050s