【オセロ,将棋】ボードゲーム【囲碁,War】

■ このスレッドは過去ログ倉庫に格納されています
1名前は開発中のものです。
垢版 |
03/07/10 00:10ID:6FQp6G+O
比較的地味なボードゲーム専用のスレが欲しくて立ててみました。

私はc言語で作ったデータベースを使って人間と対戦できる将棋かチェス
みたいなソフトを作りたいと思ってますが、グラフィックインターフェースの
作り方がわからなくてつっかえているレベルです。
594460
垢版 |
2016/10/05(水) 21:34:13.58ID:JvSO0BT6
>>592
同一ですよ!
スマホから書き込んだのでID変わってしまいました
595535
垢版 |
2016/10/05(水) 21:53:19.85ID:KcSrUkxH
ん〜そっちのID使って同一って言われても。
>>590のIDで書き込みお願いします。
2016/10/05(水) 22:05:36.36ID:KcSrUkxH
まあ、こんな過疎スレでわざわざ嘘をついて騙るひともいない気もしますが…
2016/10/05(水) 22:31:22.88ID:KcSrUkxH
>>590の書き込み時間からすると学校や職場から書き込んだ可能性もありますね。
とすると>>590のIDでは今は書きこめないかもしれませんね。
598460
垢版 |
2016/10/06(木) 20:28:59.44ID:1mBat3Ee
460の名前があるものは偽物ではないので大丈夫です・・・
コテ付けた方がいいかもですけど、まぁこの人数ですし、そこまでする必要もないかなと思いますー

囲碁ですが、ネットから集めた棋譜をざっと見てみましたが、投了がほとんどなんですね・・・
中押し勝ち?はて・・・?となって調べるくらいルールを理解していないという;;
投了だとするとロジスティック回帰でないとあんまり良い精度は出なさそう・・・?
というより一般的な機械学習のアプローチで良いのかも微妙ですね。
やはりディープランニングなのでしょうか。。。腰が引けますw
599535
垢版 |
2016/10/06(木) 21:04:20.88ID:/7+JrWaw
>>598
ん〜そうですか。
それは失礼しました。
600310
垢版 |
2016/10/06(木) 22:11:43.15ID:2nbHwrUk
>>598
投了は将棋用語で「参った」です。むしろ中押し勝ちと同じ意味です(汗
将棋の場合、詰まれるまで粘る事はみっともないこととされているので、
入玉とか千日手、反則負けなどの特殊なケースを除けば全て投了です。

囲碁は、逆に終局まで打つ事があって、「数え碁」と呼ぶみたいです。
この間のアルファ碁vsセドルの試合見て覚えました(笑)
オセロのように必ず最後まで打って、得点差がはっきりと出るゲームの
方が珍しいのかも知れません。

オセロみたいなmin-Max+評価関数は既にダメ認定されてます。
アルファ碁までは、MTCS(モンテカルロツリーサーチ)が主流で、
モンテカルロ系には評価関数はありません。着手順決定のための
ヒューリスティックが大事になります。

アルファ碁の登場で、一気にディープラーニングにシフトしていますが、
基本骨格はMTCSです。着手順のヒューリスティックに「次の1手を返す
DCNN」と、評価値たるモンテカルロの勝率に、補助的に「勝率を返す
評価関数としてのDCNN」を組み合わせているようです。
601310
垢版 |
2016/10/08(土) 22:22:06.53ID:wBSLMo4h
あ、MTCSじゃねー。MCTSだ。

>>600書きながら、Q-Learningなるものの存在を思い出して、調べ始めたら、
やっぱりDQN(ブロック崩しで有名になった奴)はQ-Learning+DeepLearning
だった。

興味津々だけど、どんどん発散しちゃうなぁ。
602535
垢版 |
2016/10/10(月) 19:51:24.57ID:WonRpXhk
なんかモチベーションあがらんなぁ
三連休まるまるさぼってしまった。
2016/10/10(月) 22:22:05.27ID:WonRpXhk
将棋電王戦あったみたいですね。
2016/10/10(月) 22:38:31.22ID:WonRpXhk
優勝はポナンザか。
一発勝負のトーナメントなのに強え。
2016/10/10(月) 23:10:57.87ID:WonRpXhk
ん?
一発勝負じゃないのか?
606310
垢版 |
2016/10/13(木) 11:06:43.08ID:f6Nd8WJL
ここ数日、気分転換でConnect4やってました。

ビットマップ方式の置換表付αβのオーダリング無し。リーチ状態のみ後方枝刈。
完全解析ができそうか確認してました。

全42手でルートから30手くらい置換表適用すると、序盤はかなり良いペースで探索
してくれますが、数時間で置換表パンク。置換表を20手くらいまでにとどめると、びっくり
するほど速度低下。手順の前後で簡単に同形が生じるので、置換表が肝なのは確か。
というか、手順前後の同形を排除する仕組みが作れればメモリ節約可能になる。
けど、それを一般化した処理が置換表なので、全てカバーしなくても3手以内くらいで
排除すれば状況はかなり改善するかも知れない。

あと、パンク前も探索が進むにつれて徐々にnpsが低下していきます。原因不明。
書きながら気づいたのですが、置換表のハッシュ値はオセロのものを流用しています。
Connect4はビット数が少ないので、ハッシュ衝突が頻発して、格納効率が低下して
領域拡張が頻繁におきて、探索速度も落ちている可能性があります。

というわけで、現段階では置換表周りを工夫しないと完全解析は厳しそうです。
一方で、空26箇所くらいの終盤探索なら実用的な速度が出そうな感触です。

>>569の完全ソルバは、評価値表示機能があるけど、あの表示の仕方だと、証明数
探索みたいな手法を使っているのかなぁ。ほぼノータイムで最善手のみ着手してくる
ので。完全ソルバの出現で終わっちゃってるゲームなんでしょうね。

で、このゲームってMCTSの練習台にちょうど良いのではないか?とふと思いついて
しまいまして・・・。更に脱線しようかなと思います。Playout関数は作りましたが、ツリー
展開の仕方に疑問があり、まだ調べ中です。
2016/10/13(木) 21:15:41.15ID:XMNeJMFS
310氏もConnect 4 参戦か〜
608535
垢版 |
2016/10/13(木) 21:53:14.86ID:XMNeJMFS
名前書き忘れた。

終盤26手読み行けそうというのは流石ですな。
完全解析ってConnect 4だと簡単そうに見えますがこれが意外と手強いんですよね〜
609310
垢版 |
2016/10/15(土) 13:58:53.52ID:iZ3eY/zy
NPS低下問題はやはりハッシュ衝突のようで、ちょこっと直したら解消しました。

Connect4は手順前後しても同じ形になる事が多いゲーム(DAG問題多発)なので、
置換表を上手く使わないと、7兆種類あると言われている盤面を何度も重複探索して
しまう事になります。が、置換表探索と登録のオーバーヘッドは結構大きく、メモリ
パンクでスワップ多発の問題も起きます。

今の設定だと残り27手探索くらいなら難しい問題で1分程度で解けそうです。
NPSは20メガくらい。が、メモリパンクや重複探索の問題があるので、その速度を
もとに完全解析に要する期間を推計するのは無理っぽい感じです。

というわけで、完全解析はこの辺にして、MCTSの方に行きます。
610535
垢版 |
2016/10/15(土) 20:55:10.85ID:jn3cHMWR
>>609
多分純粋なMCTSだけではあまり強くならず、
プレイアウトになにがしかの工夫を入れる必要が出てくると見てます。

逆にプレイアウトさえ改良できればMCTSはびっくりするくらい強くなる。

しかしそれでも完全ソルバには届かない。みたいな感じだと思います。
611310
垢版 |
2016/10/15(土) 21:29:59.48ID:iZ3eY/zy
MCTS(UCT)多分できました。STL様様です。
探索時間1秒で40万プレイアウト。

playout部をnegamax的に書いたので、ちょっと混乱しました。
まだ終局判定とかいい加減で、引分近辺で落ちる可能性あります。

オセロでも1秒で10万プレイアウト以上いけるんじゃないかなぁ。
探索時間固定できるのでオセロ序盤〜中盤で使えるかも。

>>535さんのプログラムはもうダウンロードできないですね。
612535
垢版 |
2016/10/15(土) 21:54:42.38ID:jn3cHMWR
秒速40万プレイアウト!?すげぇぇぇぇ
1プレイアウト=1手てことですか?
1プレイアウト=1局てことですか?
613535
垢版 |
2016/10/15(土) 22:17:47.78ID:jn3cHMWR
460氏もオセロで10000Knps〜15000Knpsとか言ってるし、まじか〜
やっぱ本気でやってる人達は違うのかな…
614535
垢版 |
2016/10/15(土) 23:46:45.43ID:jn3cHMWR
NPSは20メガって書いてありますね…
すいません。
615310
垢版 |
2016/10/16(日) 01:32:06.03ID:KTdXBWLt
プレイアウトなので1局です。色々ごにょごにょはありますが、ランダム着手で、
とりあえず勝負がつくまで打ちます。これで1プレイアウト。
速度が出るのはビットマップとBMI命令などのX64命令を使ってるからだと思います。

が、Perfect Solverに先手で勝てません(汗。5手目に必ず間違えます。
評価値を眺めても、当たり前のように、正解(真ん中列)が最下位になります。
パラメータをそこそこいじってみましたが、状況は変わらないです。
一本道には弱いって事かなぁ。

とはいえ、自分がやると、さっくりと負けてしまいます(汗
616310
垢版 |
2016/10/16(日) 13:25:18.14ID:KTdXBWLt
mobility周りにバグがあって直したところ、1秒読みでPerfect Solverに先手で勝ちました。
昨夜は120秒読みでも同じ手順で負けていました。
とはいえ、乱数が絡むので引き分ける事もあります。

まだ若干問題があります。1本道を交互に着手していくと自動的に勝ちが確定する盤面
なのに、評価が引き分けになっています。プレイアウトの終局判定で何かの条件が抜け
ていて、勝ちと判定されていない感じです。

直したらまた勝てなくなったりして(汗

C++の診断ツールを今回初めて使ってみました。
関数ごとの使用時間がわかるようで、速度アップの検討に重宝します。
が、どうもUCB1の計算で使うsqrtとlogを使ってる箇所でCPUを9割くらい使っている
感じです。見方が良くわからないけど、多分そういう状況。速度アップ難しい。
617535
垢版 |
2016/10/16(日) 16:43:19.50ID:Ts0NTtMt
一秒読みで完全ソルバに勝とかまじか〜
やっぱ積み上げてきた基礎力が違うんだろうな〜
618310
垢版 |
2016/10/16(日) 17:19:15.26ID:KTdXBWLt
どもです。評価値問題は治りました。

乱数じゃなくて、ある手順で引き分けな手を選んでしまう事が判明したので探索時間
を延ばしてみたら、逆に序盤で負け手順を選んでしまうようになりました(汗。
ツリー部の地平線臭い感じなのかなぁ。

というわけで、たまたま選んだ1秒が良かっただけかも知れませんorz

MCTSも理論的には探索回数を∞にすると、最善手を必ず導き出す事は保証されて
いるらしいのですが、中途半端な回数の時は保証されていないんですよね。
619535
垢版 |
2016/10/16(日) 21:36:30.64ID:Ts0NTtMt
なんか将棋で評価値を深く探索した時の評価値に近づけるっていう学習方法があるみたいですね。
ちょっと興味あります。
620310
垢版 |
2016/10/16(日) 22:45:31.89ID:KTdXBWLt
なんか、デバッグ報告みたいな状況になってすみません。

地平線臭い状況を調べていたら、負ける寸前なのに評価値が勝ちになってます。
つまり負けを認識していない。

着手を間違えるのはこの辺も原因かも知れません。

ぱっと思いつく原因が見当たらないので、しばし長考します。
621535
垢版 |
2016/10/17(月) 22:03:40.14ID:B9d5KHtX
connect 4序盤ブック作ってみようかな。
完全ソルバ丸パクリでw
622310
垢版 |
2016/10/18(火) 00:57:04.06ID:k8M1GDOc
色々直して、ほぼバグは取れたと思います。
で・・・強くなったはずですが・・・PerfectSolverに先手で勝てなくなりました。
かつて勝てたのはたまたま上手くバグっていたという事みたいです。

1秒設定は途中で間違えて引き分け、10秒設定は初手で負け確定(真ん中以外に着手)。
1秒設定で初手真ん中を選択するのはたまたまかもしれません。
初手だけ調べると150万プレイアウトくらいで間違えはじめ、15億プレイアウトまで確認
しましたが、雰囲気的には当分正しい答えに戻ってこないようです。
評価値の推移を見ると、一本道問題に引っかかっているように見えます。

DAG問題がやっぱり気になるので、ハッシュと組み合わせて合流できるようにしてみます。
多少は改善するかも知れないし、逆にもっと早く真ん中から外れるかも。
623名前は開発中のものです。
垢版 |
2016/10/18(火) 17:50:18.00ID:7idTlLLA
読めば読むほど弱くなるとは不思議
ucbの計算間違えてるとかでは?
624名前は開発中のものです。
垢版 |
2016/10/18(火) 19:31:31.87ID:4bRvdGb+
ボードゲームのオリジナルオーダー制作
http://www.logygames.com/logy/ordermade.html
簡単に本格自作ボードゲームが作れる時代到来!!
http://jellyjellycafe.com/3869
100円ショップでボードゲームを自作しよう
https://sites.google.com/site/jun1sboardgames/blog/makeyourbg
ノーアイデアでボードゲームを作ろう第1回「100円ショップで物を買う」
http://boardgamelove.com/archives/boardgame-make-1/
自作ゲームをゲームマーケットで売って来た
http://portal.nifty.com/kiji/160418196277_1.htm
「街コロ」はカードゲームに興味ありな初心者の入門用に最適、サイコロを振って
カードを集めどんどん自分の街を発展させて勝利を目指せ
http://news.livedoor.com/article/detail/10962802/
ようこそ「男の世界」へ。『ダンジョン オブ マンダム』試されるカードゲーム
http://www.moguragames.com/entry/dungeon_of_mandum/
かわいいひつじを増やして増やして増やしまくれ! “一人用”カードゲーム『シェフィ』
http://www.moguragames.com/entry/shephy/
625535
垢版 |
2016/10/18(火) 22:30:42.36ID:5rT5zFZw
完全ソルバから定石パクるの意外とめんどくさいな。
クローラーみたいにして自動でパクれるようにしようかな。
でも迷惑かかるかな?
626535
垢版 |
2016/10/18(火) 23:07:54.58ID:5rT5zFZw
なんか本末転倒だからやめとくかw
627310
垢版 |
2016/10/19(水) 02:53:35.54ID:YWnebdEb
まさかの場所にバグ発見。
プレイアウトでランダムに1手選ぶところがバグってました。
良く動いていたものだと思う反面、MCTSってそういう所がある事も薄々感じてます。

が、状況はほぼ変わらず。初手真ん中と、5手目真ん中。この2か所が鬼門。

まだバグがあるのかも知れない。やっぱり自分が一番信用できないですね。

DAG問題対策でノードの合流を実装しました。枝とノードを分離して、ノードをハッシュ
にして、ノードの下に次の枝をぶら下げました。同時に、ハッシュキーに細工して、
左右同形も合流させてます。あまり変化はない気が。
速度低下が酷いです。
628310
垢版 |
2016/10/20(木) 00:37:06.99ID:yz39woaL
5手目真ん中以後どうなるのか1秒探索検証。6手目2列目に対しては、勝利(全て
最善着手)。6手目1列目に対しては、5列目着手で引き分け進行に入り、引分終了。
この時の手順では、全箇所が最善手という盤面ばかり通っていくように感じています。
つまり、MCTS的に勝利期待値が最大になりやすい手です。という事で、まあ、そんな
に間違った手は打っていないかなと。

また、プレイアウトを繰り返して手がどう変遷するのか見ていくと、最善手である真ん中
は、ある一定数からほとんど選択されなくなっています。結果、その手で枝の分岐が起き
ない事から、いつまでたっても評価が更新されず正解に戻らないと推測できます。

そこで、試行回数に圧倒的な差ができても、下位の手も一定回数は試行されるように
できないかと、手の選択基準をucb1の大きい順から、ソフトマックス関数を通して確率
分布に変えて、乱数で選択してみました。

結果は・・・。expの計算がある事からか、速度が激減。PVに割り当てられる試行回数は
2/3程度になり、その時点の最悪手でもそれなりに試行されるようになりましたが、それ
でも手の選択は微妙な感じです。この程度の効果なら、他のパラメータいじった方が
速度低下も無く良かったかも(汗

というわけで、本日のトライアルも失敗。
気が進まなかったけど、やっぱりucb1計算の検算をしてみます。
あと、部分的にmin-Maxを適用するとか。
629310
垢版 |
2016/10/23(日) 09:58:44.72ID:qEEwIK82
UCB1の計算は合ってました。
プログラムがC++的に美しくない事が気になりだし始めて、全部書き直ししてました。
書いた端から美しくないのが気になりだしましたが(笑)

UCTで後方枝刈というか、小枝の勝敗が確定していたら、ツリーを縮小していく処理を
追加。一本道問題が多少緩和するかと期待。対戦はちゃんと動いているっぽい。
デバッグ情報をファイル出力する処理書いて確認。
間違え方はあまり変わっていないのが残念というか、安心というか(汗

モンテカルロで1手目から最善手順が確実にわかったら、それはそれでゲームが
簡単すぎるって事になっちゃうので、大きく間違えないんなら、それで仕方ないかな。
というわけで、COM1手目は真ん中に固定。

プレイアウト部を高速化できる気がしていますが、やってみないとわかりません。
プレイアウトの末端部分に完全読みを数段入れるのも良いかと思っています。
DAG問題対応と左右対称チェックを入れて毎秒20万プレイアウトくらい。

評価値の算出方法でちょっと悩み中。

そこそこ落ち着いたらオセロの中盤探索に応用してみます。
630310
垢版 |
2016/10/26(水) 20:47:59.29ID:H5ji3apJ
また美しくない病が出て、書き直したところ、びっくりするほど弱くなってしまった。
しばらくデバッグで悩みそうです。
631535
垢版 |
2016/10/26(水) 20:59:11.78ID:+YpzcPTO
Connect 4は一旦休止して別のゲームのAI書いてます。
マイナーゲームですが囲連星というゲームで囲碁と五目並べを混ぜたようなゲームです。
簡単に言うと、七目並べれば勝ち、囲った石は取れるというルールです。

ついさっき黒番で公式AIのLV0に1勝できました。
(;SZ[19]
;B[jj];W[kj];B[jl];W[ji];B[ik];W[km];B[kk];W[ki]
;B[ii];W[lj];B[ll];W[mm];B[hh];W[gg];B[im];W[ih]
;B[ig];W[jh];B[ij];W[in];B[lk];W[gi];B[hk];W[gk]
;B[mk];W[nk];B[hn];W[hl];B[jn];W[io];B[lm];W[jo]
;B[go];W[fp];B[gh];W[hi];B[fg];W[ko];B[gf];W[ln]
;B[hg];W[jg];B[ff];W[gj];B[gg])

囲連星AIはこちらで配布されてます。
http://www.vector.co.jp/soft/win95/game/se401975.html
632535
垢版 |
2016/10/27(木) 22:26:16.59ID:CgNWWTgQ
LV2からも黒番で一本取りました。
キセキが起きたw

(;SZ[19]
;B[jj];W[ik];B[ji];W[hj];B[jh];W[jk];B[kk];W[jl]
;B[gi];W[il];B[ll];W[hm];B[ii];W[hh];B[hi];W[ki]
;B[mm];W[nn];B[li];W[in];B[kh];W[fi];B[mi];W[io]
;B[kj];W[lj];B[ki])
633535
垢版 |
2016/10/27(木) 22:53:05.70ID:CgNWWTgQ
黒番でLV3からも一本取りました。
なかなかいい感じ。
ここからどう高めるか。

(;SZ[19]
;B[jj];W[ji];B[ij];W[kj];B[kk];W[ii];B[ki];W[lj]
;B[lk];W[jk];B[ik];W[kh];B[li];W[mj];B[lh];W[hl]
;B[mk];W[hj];B[jl];W[hk];B[ok];W[nk];B[nj];W[hh]
;B[nl];W[km];B[jk];W[lm];B[nk])
634310
垢版 |
2016/10/27(木) 23:41:56.56ID:KUg+LQ1A
バグ取れました。わかればどうという事はないですねorz

左右対称はデバッグが面倒くさいので省きました。どうせ序盤でした
意味がありませんので。

初手真ん中は、多分モンテカルロでは答えを出すのが相当厳しいです。
5手目真ん中は、乱数次第みたいな感じで、100万プレイアウトくらいまでに
出るか、1億プレイアウトしても出ないかみたいな感じになります。

一応、DOS窓ベースでプレイできるようにして、途中でMTCSのツリーを
色々と確認したり、追加のプレイアウトをしたりできるようにしましたが、
本質的にモンテカルロなので、完全に近いけど完全じゃないし、乱数の
具合によって着手する手もバラつくという事で勝手に納得してしまいまして、
せっかく作ったデバッグルーチンも禄に活用していません。

高速化も、一時期は40万プレイアウト毎秒くらいまで出たように感じて
ましたが、最終的に20万くらいで落ち着いてしまいました。

次のステップでオセロに応用と思ったのですが、その前に並列処理化を
してみようかと思います。上手くやれば探索ノード数は3倍強(自分のPC
では)くらいにはなりますが・・・数段深く読んだとて、結論にはあんまり大差
が無いのかなと。まあ練習ですな。

というか、min-Maxとモンテカルロのノウハウ、仕事で使えそうだなぁ。
2016/10/27(木) 23:46:29.29ID:CgNWWTgQ
>>310氏はプロのプログラマなのか。
まあ納得。
636310
垢版 |
2016/10/28(金) 10:50:00.21ID:/58y3Hfc
いや。趣味の深夜プログラマです。
物流業務改善の会議で提案してみて、わからんと言われたら
ソース見せて動作検証してやろうかなと。

システム屋さんからすると、とてつもなく面倒くさいクライアント
だと自覚しておりまするorz
637535
垢版 |
2016/10/29(土) 21:09:01.77ID:4znFYNwN
囲連星、公式AIとガッツリ対戦してみました。
LV0はdll化されてないので対戦できませんでしたが。。。
結果はLV1には大きく勝ち越しましたがLV2,LV3には敵わなかったです。
airandom.dllが私のAIです。

50局目
黒(airandom.dll)の勝利回数: 44
白(ai-lv1.dll)の勝利回数: 6

50局目
黒(ai-lv1.dll)の勝利回数: 10
白(airandom.dll)の勝利回数: 40

50局目
黒(airandom.dll)の勝利回数: 20
白(ai-lv2.dll)の勝利回数: 30

50局目
黒(ai-lv2.dll)の勝利回数: 41
白(airandom.dll)の勝利回数: 9

50局目
黒(airandom.dll)の勝利回数: 15
白(ai-lv3.dll)の勝利回数: 35

50局目
黒(ai-lv3.dll)の勝利回数: 44
白(airandom.dll)の勝利回数: 6

私のAIが長考するのでこの対戦するのに丸一日以上かかってしまいましたw
638310
垢版 |
2016/10/29(土) 21:13:21.87ID:hyv6QOjp
並列化してみました。

色々やり方ありますが、まあ順当なやり方という事で、ツリー単位の並列化です。
が、4コアに対して4並列でむしろ速度低下。排他で怪しいところを色々変えてみて
ようやく若干(10〜20%程度)の速度アップにしかなりません。並列数を減らすと
速度低下していくので、排他待ちが原因ではなく、並列化オーバーヘッドの模様。
ノード&ツリーの構造で複雑な分、オーバーヘッドが大きくなっているのか、オセロの
時の効果には大きくおよびません。

ルート単位の並列化で、一定時間ごとにツリー統合(合算)というやり方もあるような
ので、次はこちらを試してみます。

もしかしたら、一番効果が無さそうな、プレイアウトのみ並列化の方が効果出たりして。
639310
垢版 |
2016/10/29(土) 21:14:51.22ID:hyv6QOjp
MTCSは並列化と相性が良いとは思えないなぁ。
640535
垢版 |
2016/10/30(日) 23:47:35.70ID:11nwLD7b
return文忘れててめちゃくちゃな値返してた。
この不可解なバグ潰すのに3時間かかったorz.
関数の終わりでreturn文無かったら警告だしてよコンパイラ(泣
まあコンパイラオプション付けてない俺が悪いんだがwww
641310
垢版 |
2016/10/30(日) 23:54:19.10ID:vT6Vi1L+
結局ツリー部の並列化はやめてプレイアウトだけを並列化しました。
ツリー統合も気になりますが、とりあえずこれで末端の評価が正確になります。
プレイアウト部分は処理時間が短いので、プレイアウト回数は大幅に増えます。
MCTSは面倒でも、モンテカルロは並列化向きです。
100回プレイアウトして、そのスコアでまとめて更新。

ところが、バグを発見してしまいました。
勝ち手順で進めていたのに、最後の最後に1手間違えて引分。
もうプレイアウトではなくツリーの勝敗が確定している状態で、間違えるはずがない。
勝敗確定時のフラグ設定がおかしいようです。

そこから色々見直しを始めたら、negaMax的な処理の扱いに完全に混乱して
しまいまして…。これだと思って修正すると、おかしくなってしまいます。
どこか根本的に勘違いしているみたいなので、しばし長考に入りますorz
642535
垢版 |
2016/10/31(月) 00:37:25.82ID:KdjBytFw
なかなかいい感じのルーチンが書けた。
まだ結果に結びついてないけどこれはあと一捻りいれればかなりいい線行くんじゃないか?
643535
垢版 |
2016/10/31(月) 21:35:59.05ID:KdjBytFw
おかしいな。
石の流れは良くなってるのになかなか勝利に結びつかない。
644535
垢版 |
2016/10/31(月) 22:47:38.80ID:KdjBytFw
パラメータ微調整地獄w
機械学習に切り替えないと限界が…
645535
垢版 |
2016/11/01(火) 21:33:50.00ID:pQxzEPLf
あかん。
完全にバランスを失った。
一から出直しだな。orz
646名前は開発中のものです。
垢版 |
2016/11/03(木) 03:15:09.64ID:x7yDYWU2
ボードゲームのオリジナルオーダー制作
http://www.logygames.com/logy/ordermade.html
簡単に本格自作ボードゲームが作れる時代到来!!
http://jellyjellycafe.com/3869
100円ショップでボードゲームを自作しよう
https://sites.google.com/site/jun1sboardgames/blog/makeyourbg
ノーアイデアでボードゲームを作ろう第1回「100円ショップで物を買う」
http://boardgamelove.com/archives/boardgame-make-1/
ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中
http://gigazine.net/news/20150820-board-game-crowdfunding/
647310
垢版 |
2016/11/04(金) 15:36:30.74ID:zGiY9OSz
長考の結果、もう一度作り直し(笑)していたら、混乱の原因がわかりまして。
勝敗の持ち方を逆にしたらすっきりしました。

あと、終盤の手順の前後で、あと3手粘れるのに1手で負けるという現象を調べた
結果、ツリー部で負けと判定している以上、何手先に負けるか関係ないというプロ
グラムになっていた事も判明。バグじゃありませんでした。とはいえ気持ちが悪いので、
なるべく長く粘るようにしてみました。

そこでわかったのは、Perfect Solverの数字は、42手21ターン目の引分から何ターン
前に勝負がつくのかを表していて、プラスは勝ち、マイナスは負けという事です。先手で
+1と出たら最善を尽くせば41手目の自分の着手で勝つという事のようです。
つまりスコアを勝敗決定ターンにしたmin-Maxで、速度考えるとDB化してるんでしょう。

で、MCTSですが、まあやはりモンテカルロなので間違えます。試しに10手目程度
の間違えた局面から、シミュレーションを続行してみたところ、億単位の探索(プレイ
アウトとしては10倍)で、間違えた手が本当は悪かった事に気づいた様子で、そこから
正しい答えに向かって行きました。なので、まあプログラムは間違っていない模様です(汗。

DAG対応とか、自殺手禁止プレイアウトとか、色々やった結果、選択手のばらつきが
減って、「たまたま正解手順を引く」事がなくなって、自信満々に間違えるようになっ
た印象です。それでも、時間をかけて探索を続けると、いつかは正しい答えにたどり着くと。

今となってはあまり意味が無いですが、せっかくなので、ここまで積み上げて来た
ノウハウで、今一度Solver作ってみようかなと。
648535
垢版 |
2016/11/04(金) 23:52:18.01ID:lKhN7bKh
色々ぐちゃぐちゃやってたら計算時間がとてつもないことになってしまった。
649310
垢版 |
2016/11/06(日) 13:49:29.22ID:Z4kqE5wB
Solver作りました。
PerfectSolverにならって評価値を、42手目から何手手前で勝敗がついたかにしました。
お蔭さまで、null window searchが使えるようになり、mtd(f)で高速化しました。
あと、初段のみ単純な並列して、残り28手で6秒強となりました。

そろそろオセロに戻ります。
650535
垢版 |
2016/11/06(日) 17:53:47.27ID:B23WCzGo
終盤28手読み6秒とか凄い
こっちはというとそろそろαβ刈りを習得しなければ…
651535
垢版 |
2016/11/07(月) 00:12:13.27ID:vL8wkeAF
αβできたっぽいです。
というかwikiの疑似コードを完コピしたらうごいたっぽい?という感じで
理解したとはいいがたいですが。
652535
垢版 |
2016/11/07(月) 22:06:07.74ID:vL8wkeAF
え、もしかしてminmaxに比べてαβめちゃめちゃ速い?
なんか間違ってんのかな…
653310
垢版 |
2016/11/08(火) 00:02:22.02ID:CUgV7Bvg
安心してください。めちゃ早いですよw

後ろ向き枝刈系のアルゴリズムはほとんどがαβを前提にしています。
自分の最初は擬似コードコピペしました。
すぐ忘れちゃいますが、1回は真剣に動作を追っておくと良いですよ。
654535
垢版 |
2016/11/08(火) 22:35:11.27ID:BlAmLHY6
評価関数が致命的に狂ってる気がする。
手動で直すのは限界があるから機械学習したいがさてどうするか。
655310
垢版 |
2016/11/10(木) 20:55:19.87ID:gpSCAC4W
オセロでUCTをしてます。コピペでちょいちょいと思っていたらパスの処理が面倒で、
思った以上に動作速度が落ちてしまいました。

その後、デバッグしてたらおかしな現象を発見。探索ツリーでプラスになるべき数字が
マイナスに。しかも1か所だけ。発生条件を絞り込めず、なんだかんだと数日間。

原因は整数のオーバーフローでした。設定時間におけるプレイアウト回数でのスコア合計
がちょうど境目にきて、本当に微妙にオーバーフローしていたので、スコアの正負がひっく
りかえったように見えていたのでした。

俺の時間を返せorz

終盤5手読みくらいならすぐにUCTのツリーが終局まで達して、完全読み同等の答えを
返してくれるのですが、10手だと結構時間がかかり、20手だと全く歯が立たない。
評価関数を使った中盤探索の置き換えに使えないかと想定しているのですが、やはり
簡単に精度は出ない感じです。

プレイアウトでありがちな手を優先的に着手するように、ヒューリスティックな評価関数を
用意して、プレイアウトの精度を高められるか試してみたいと思います。あと、スピード
アップもしないと・・・。
656535
垢版 |
2016/11/10(木) 23:14:15.10ID:4tjjzH07
Zenは治勲と三番勝負か〜
Zen勝ちそうw
657535
垢版 |
2016/11/13(日) 00:19:43.02ID:otFLKKMJ
doubleの有効桁数が足りなくておかしくなってたorz
評価値に差をつけようとして極端にデカい数値を設定してたら
小さい数値が無視されてた
658310
垢版 |
2016/11/13(日) 00:47:25.03ID:Be0ooFvL
DeepZenGo楽しみですね。
ポストアルファ碁の今となってはZenが2勝できなかったらちょっと悲しいかな。


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

というわけで、なんか行けそうな気がしてきた。
680310
垢版 |
2016/12/27(火) 01:58:53.16ID: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回程度は
ミスをしちゃう感じです。

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

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

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

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

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

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

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

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

やっぱ次はディープラーニングですよね。Eigen使ったMLPで次の1手をやってみます。
DCNNももう一度トライしたいと思っていますが、貧弱なパソコン環境ではどうにもならない
かも知れない。
688535
垢版 |
2017/01/06(金) 21:06:02.45ID:/dmWmgCn
ネット碁でアルファ碁が無双してるみたいですね。
60連勝?とか凄すぎw
689310
垢版 |
2017/01/09(月) 14:10:27.74ID:kUxHCmxW
60連勝の相手が、マジトップ棋士だってんだから、あきれるしかないですね(笑

解説書きながらソース見てたら、色々直したくなってしまい、泥沼化しています(汗
強くなったと思ったら弱くなっていたというのの繰り返しです。
690535
垢版 |
2017/01/15(日) 01:15:01.84ID:FqCBSr/V
TensorFlowで学ぶディープラーニング入門って本読んでます。
かなり易しく書こうとしてるのが伝わってくる本なんですがそれでも難しい。orz
691310
垢版 |
2017/01/16(月) 13:21:19.22ID:Cfoi8GBB
カーネルサイズとかチャンネルとかフィルターのあたりですか?


僕の方は・・・モンテカルロだから間違えると思って、思考時間を増やしたり、末端ノードで
1回づつじゃなくて、100回づつプレイアウトするようにしたりして、プレイアウト回数を稼い
だところ、「同じところで同じように安定的に間違える」ようになってしまいまして(汗。

プレイアウトは適当でも、とにかくツリー展開させるか、それともプレイアウトである程度
正確な勝率を得るけど、ツリー展開は減らさないように努力するのか。その辺で、また
悩み始めてしまいまして。edaxの引き分けBOOKから何か情報が取れないかと頑張って
ますが・・・。そろそろ飽きてきちゃったんだよなぁ。
692535
垢版 |
2017/01/16(月) 21:00:44.96ID:UThQer2a
専門用語はよくわかりませんが、付属のサンプルコードをなんとなく動かしてます。
行列と誤差関数を定義してやればtensorflowが勝手に最適化してくれるとか。

成果でないとめげてきますよね。
ここらで一発アルファ碁級のブレークスルーが欲しいですねw
693310
垢版 |
2017/01/16(月) 22:06:12.04ID:cVXIBPCK
あれはやっぱマシンパワーが・・・

一旦計算できちゃってもそれなりの重さなんだけど、学習しようと思うと重さにめげます。
というか、やる気すら起きないレベルorz


とりあえず、実際の最善手順が、ヒューリスティックの何番目かを統計的に処理して、
プレイアウト関数の手のバラつきを表現しようかと思って、プログラム作ってEXCELで
集計して、それなりに計算が簡素にできる形に変形してなんてやりましたが、やった
所で、何番目を選ぶかはランダムではなくて理由があっての事なんだよなぁと…

ちっとマシなヒューリスティックとか言い出すと…できない事をしようとしている事に深く
思い至るわけで。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況