[過去ログ]
【オセロ,将棋】ボードゲーム【囲碁,War】 (1002レス)
【オセロ,将棋】ボードゲーム【囲碁,War】 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
482: 310 [sage] 2016/08/12(金) 20:50:39.55 ID:USoZXJIB >>481 YBWCはnegascoutのnull window searchを並列化して一括処理する ようなものだと解釈して実装しました。 この辺はゲーム計算メカニズムなる本で勉強したかな。 並列処理のフレームワーク何使うかが問題ですね。 自分はVC++なのでmsdnで情報が得やすいPPLを使いました。 インテルTBBとかOpenMPなんてのもあります。 PPLは結構使いやすかったですが、速度は不明。 まあ、ルートの方でしか使わないので、あまり影響ないと思っています。 手組でマルチスレッドなプログラム書ける人には不要かも知れません。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/482
483: 310 [sage] 2016/08/13(土) 14:18:44.65 ID:D+1dBs0T あ、考え方がnegascoutみたいだという事で。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/483
484: 名前は開発中のものです。 [sage] 2016/08/13(土) 20:35:07.80 ID:p7EbJiId avx2って256bitだよな オセロだと128bitしか使えないような? http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/484
485: 310 [sage] 2016/08/13(土) 20:47:52.09 ID:D+1dBs0T 方向が8つあって、それぞれの処理を8回計算するとき、 右シフト方向が4つ、左シフト方向が4つ。 256bitは64bit×4。右シフトと左シフトで2回。 というわけで、mobilityとかflipとかで便利に使えます。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/485
486: 460 [sage] 2016/08/14(日) 16:41:37.52 ID:ALD5heTO 現在、終盤用MPCパラメータ作成中です。 23手完全読みのカットペアに入っています。24手読みの計算が終わったらいったん実装に入るつもりです。 >>310 YBWCに関して調べましたが、そうみたいですね。 MPCパラメータを作成している間に、なんとなくで適当に実装してみましたが なぜかエラーで落ちまくりでしたw 排他がかかっていない致命的な箇所があるのか・・・置換表は排他をかけたのですが・・・ PVライン生成あたりも怪しい、とりあえずもう少し調べてみないとダメそう。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/486
487: 460 [sage] 2016/08/14(日) 16:42:16.06 ID:ALD5heTO >>310は>>482の間違いです。。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/487
488: 名前は開発中のものです。 [sage] 2016/08/17(水) 21:19:58.40 ID:Z2gXWq7v 俺もボードゲーム系AIでディープラーニング書いてみたいと思ってるけど難しいんだろな。 論理もそうだけど膨大なデータが必要そうだし。 >>479 どのへんで諦めました? http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/488
489: 310 [sage] 2016/08/18(木) 15:43:08.07 ID:7GnJQiSP >>488 まだ細々やってます(汗 Eigenの導入と、少しづつ進んでいくC++技術のおかげで、前よりは試行の スピードはアップしていますが、なかなか成果は出ません。まだ、色々な パターンを試しながらディープラーニングって何ぞやを体感しているところ なんだと思います。 少なくとも「簡単に凄い事ができそう」という幻想は捨てる事ができました(汗 ボードゲームがターン制なら、基本はmin-Maxになると思います。 まずは、盤面の状態に(恣意的で構いません)点をつける評価関数作るところ から始めたらどうでしょう? 次のステップで評価関数に統計(線形回帰)を持ち込むと、ディープラーニング じゃなくても、プレイ譜がたくさん必要になります。 オセロの場合は、Buroさんという先人が、実用レベルの評価関数が線形回帰 で作れる事を示してくれています。 僕がディープラーニングを適用しようと思っているのは、ただの思いつきでして。 場合によっては、より軽くて正確評価関数が作れるかと思いましたが、実際に 始めてみると、なかなか評価関数として機能してくれないし、仮にできたとしても 重いものになっちゃいそうという感じです。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/489
490: 488 [sage] 2016/08/19(金) 23:15:11.39 ID:i9HkvHw2 >>489 手動評価関数はかなり昔五目並べで書いたことあります。 min-maxで思考時間が1手5分くらいかかったけど、 自分でプレーして負かされることもあるくらいの強さにはなりました。 そのBuroさんの線形回帰とやらはWebで論文とか見れたりしますか? 読んでも多分理解できないだろうけどちょっと興味あります。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/490
491: 488 [sage] 2016/08/19(金) 23:23:27.55 ID:i9HkvHw2 ぐぐったらこんなのがあったけど多すぎ。 https://skatgame.net/mburo/publications.html http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/491
492: 310 [sage] 2016/08/20(土) 16:51:13.03 ID:m44rb9b4 >>490 Buroさんが作った伝説のオセロプログラムがLogistelloです。 Thellというオセロプログラムの作者の方が日本語で解説してくれています。 http://sealsoft.jp/thell/learning.pdf 5.2の計算の高速化のところの説明(P.8の冒頭)のところ。 自分なりに解釈したら、自分が解釈違いしたのか、説明がおかしいのか、 この通りではなかった記憶があります。 とはいえ、これはオセロの考え方であって、将棋なんかだとbonanzaなどを 参考にすべきだし、全く別のゲームであったら、別な事を考えなければなり ませんね。当たり前ですが。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/492
493: 488 [sage] 2016/08/20(土) 20:33:47.55 ID:+7ONDgCM >>492 パターンの重みの線形和が評価関数になる的なことが書いてあるっぽいですけど、 パターンというのは人間が与えてやるわけですよね? そのパターンすら学習で求めるというのがディープラーニングなのかと思ってますけど。 まあディープラーニングにはロマンがありますね。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/493
494: 310 [sage] 2016/08/20(土) 21:29:23.21 ID:m44rb9b4 >>493 ですです。 あと、Deepじゃなくても、2層以上のパーセプトロンだと、線形分離不可能問題の 分類ができるようになります。XORの学習が典型ですね。 ところが、パターンの部分まで学習で求めてくれるってのは、やっぱり幻想でして。 ある程度パターンを想定しながら、ネットワークを作らないといかんのではないか という事に思い至っています。 例えば畳み込みニューラルネットワーク(CNN)で、何故畳み込みをするのかという と、縦線横線などの隣接ドット同士もつながりを識別してもらうためですし。そもそも 畳み込みのフォワード計算自体が、画像に対して例えば輪郭線強調といったフィル ターかけるのと、プログラム的に同じものだったりします。学習対象は、フィルターに なります。 オセロは、囲碁とかと違って、石の色がコロコロ変わるので、隣同士の石のつながで 判断するCNN的なネットワークをそのまま適用できないよなぁというのが、最近の諦め ポイントであります。 じゃあ、何に頼るかというと、自分はオセロ弱いので・・・No ideaだったりします。 あんな簡単な(DeepLearningと比較して)線形和でBuroさんの評価関数ができています ので、パターンを活かして、まずはそこに点数を割り振るところをMLPなんかでできない かなぁと思っています。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/494
495: 488 [sage] 2016/08/21(日) 00:04:33.21 ID:EnsCDbgT >>494 >ところが、パターンの部分まで学習で求めてくれるってのは、やっぱり幻想でして。 >ある程度パターンを想定しながら、ネットワークを作らないといかんのではないか >という事に思い至っています。 ふーむそうなのか。残念。 聞きかじった知識だと夢のような技術なのかと思っちゃったけど、 実戦してみるとなかなか難しいのかぁ。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/495
496: 名前は開発中のものです。 [sage] 2016/08/21(日) 21:39:11.08 ID:EnsCDbgT いくらオセロの盤面が小さいからってシングルスレッドで 10000Knps〜15000Knpsというのはとてつもなく速く感じるんだが。 どうやったらそんな速度がでるんだ? オセロ業界じゃ普通なのか? http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/496
497: 310 [sage] 2016/08/22(月) 02:41:50.59 ID:2ubnBUwd Kが余計で3桁間違えているんじゃないかと(汗 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/497
498: 310 [sage] 2016/08/22(月) 02:46:41.58 ID:2ubnBUwd あ、違った。自分が3桁間違えていた。 全然おかしくないです。自分の2コアで13000Kくらい出てます。 シングルで同等の速度ですから、かなり速いとは思いますが、 敢えて言うなら2倍程度なら縮められないとは思えない差です。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/498
499: 460 [sage] 2016/08/22(月) 08:13:03.66 ID:yZES3OuI 終盤MPCを実装完了してFFOを測定してみました。。 残すのはFFO#57のみですが、この時点で9364秒と1万秒を割ってるので 10%程度の高速化は期待できそうです。(評価テーブルは64ビット移行+120万局から変更なし) http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/499
500: 460 [sage] 2016/08/22(月) 09:20:01.85 ID:qlwiS2PE >>496 簡単な実装だと終盤探索は2000万ノード/秒いけますね。 合法手生成が将棋などより速いので。 とはいえ、中盤探索だと色々やるので5000knps程度に落ちてしまってます。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/500
501: 496 [sage] 2016/08/22(月) 21:10:28.52 ID:WzxI/O2e 2000万ノード/sとかってsseやavx使って始めて可能になるレベル? オセロの合法手の実装になにかすごい効率的なビット演算やってるとか? http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/501
502: 460 [sage] 2016/08/23(火) 11:44:32.28 ID:sSUGbl7L >>501 終盤探索だと合法手生成は葉ノードの近くでは使わないので、ループや条件分岐を使ったコードでなければアセンブラでなくても速度はそれなりに出ますよ。 こことかが参考になります。 http://d.hatena.ne.jp/ainame/touch/20100426/1272236395 自分はこんな感じのコードをアセンブラに落として少し改変したものを使ってますー http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/502
503: 460 [sage] 2016/08/23(火) 11:47:50.11 ID:sSUGbl7L 置換表に超大バグがあることに気づき修正したらFFO45が32秒になりました…w 180万局の学習を朝に終えたので今晩再度FFOを測定しようと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/503
504: 310 [sage] 2016/08/23(火) 13:54:12.88 ID:LVh7XLe+ >>502 そのサイトは知りませんでしたが、同じことやっています。 自分の場合は、それをAVX2命令で1,7,8,9ビットシフトを4つ並列で動かす様にして、 右シフト左シフト2回の演算をC++で組んでます。並べて書くと混乱しそうだったので 演算オーバーライドしまくりで、バグ防止しました。 やっぱりアセンブラの方が速いんでしょうね。 ディープラーニングな評価関数の方ですが、突然収束を始めました。 まだ途中ですが、見た感じざっくりで、平均二乗誤差の平方根(σ)が0.6石程度に 収まりそうです。2σで1石、スコアは2づつ変わるので、評価逆転が起きる確率を 数%程度にするには、0.5石以下にしたい。 肝はミニバッチのサイズだった様です(謎)。ハイパーパラメータとしては考慮対象外 でしたが、テスト用に小さくすると収束が悪くなる感触があったので、思い切って大き くしてみたところ…大きくすればするほど記録を更新していくという状態。ついに212640 件という特大バッチサイズにしてしまいました。メモリー的にはまだいけるかも。 今までの比較検討データは全てパーになったので、検討済のネットワークも、バッチ サイズ変えて再評価です。今やってるのは、Buroさんパターンがベースのネットワーク ですが、もしかしたら入力ベタ打ちで「勝手に特徴抽出してくれる。すげー!」に戻るかも(汗 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/504
505: 名前は開発中のものです。 [sage] 2016/08/23(火) 19:39:22.88 ID:1+aieVpn >>502 ループはおろか条件分岐すらいらんのか(驚愕) >>504 おお、ディープラーニング期待してます。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/505
506: 名前は開発中のものです。 [sage] 2016/08/23(火) 21:26:59.10 ID:KqeLXU8U 文系の俺には全然分からん。 もっと簡素な3目並べなら勝てるAIとか作れないかな(´;ω;`) http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/506
507: 名前は開発中のものです。 [sage] 2016/08/23(火) 21:47:29.66 ID:1+aieVpn ちょっと興味が湧いたんでとあるオセロアプリ落としてやってみた。 弱設定AIが程よく負けてくれて嬉しいw 一方的にボコされたら詰まらんよな一般人は。 オセロAIはもう神の領域だし。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/507
508: 460 [sage] 2016/08/24(水) 01:02:17.32 ID:elb1k4A2 色々チューニングしてトライしましたが、FFO57を大きく落としてしまい、放心中ですw FFO57以外は全体的に高速化しているのですが、合計としてはあまり変わらない結果に・・・ 終盤MPC探索中にa6とg7でかなりふらつくので、置換表に次善手も入れておかないとダメかもしれません。 とりあえずEdaxとゼブラのオーダリングあたりのソースを見直す予定です。 name move time[s] node[Mn] FFO#40 a2:+38 1.05 10.61 FFO#41 h4:+0 3.23 37.85 FFO#42 g2:+6 2.43 31.69 FFO#43 G3:-12 7.69 79.04 FFO#44 D2:-14 5.09 48.95 FFO#45 b2:+6 30.21 409.43 FFO#46 b3:-8 7.23 78.8 FFO#47 G2:+4 3.1 38.9 FFO#48 F6:+28 19.58 207.46 FFO#49 e1:+16 45.11 527.45 FFO#50 d8:+10 144.14 1330 FFO#51 E2:+6 39.91 502.74 FFO#52 a3:+0 52.56 687.22 FFO#53 d8:-2 617.63 8360 FFO#54 c7:-2 944.7 13410 FFO#55 G6:+0 測定中 FFO#56 H5:+2 262.85 3410 FFO#57 a6:-10 1523.67 19710 FFO#58 g1:+4 674.09 9760 FFO#59 g8:+64 1.08 5.57 合計4385.35[s](FFO55未測定) 合計ノード数:58645.71[Mn] http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/508
509: 310 [sage] 2016/08/24(水) 10:40:19.04 ID:GpcelPIW こちらも大バグを見つけて放心中です(汗 ミニバッチサイズごときで収束具合が大きく変わるのがおかしい点。 ミニバッチサイズを大きくすると、収束点がかなり規則的に減少していくように見える点。 この2点から、寝ながらデバッグしてたんですが、テストデータの件数で平均を出すべき ところで、ミニバッチサイズで割っていた事に思い当りました。 で、修正して、行列の列数で割るようにしたのですが、今度は列数がリセットされていない 事が判明。どうもポインタ渡しで行列を渡した時に行数・列数が正しく引き継がれないよう な現象のようです。 というわけで、一瞬大喜びしましたが、全くのやり直しとなりました。 http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/509
510: 460 [sage] 2016/08/24(水) 14:56:52.40 ID:Kkx6VEyM >>509 学習プログラムのバグはやっかいですよね。 自分も何回ひどい目に遭ったか… 今でもまだありそうな気がして怖いですw http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/510
511: 460 [sage] 2016/08/24(水) 22:16:05.70 ID:elb1k4A2 FFO57をどうにかしようとチューニングをして、なんとかFFO57が1200秒台に縮まりました。 ある程度縮まったので、期待せずにもう一度全部を測定してみると 全体がかなり高速化されていて、FFO55がまさかの3774秒までに縮まりました!(奇跡) とりあえずこれをオーダリングの暫定最終結果として、次は並列化に手を出してみようと思います。 まずはYBWCアルゴリズムの実装方法の検討から・・・ FFO#40 (a2:+38) 1.05s FFO#41 (h4: +0) 3.19s FFO#42 (G2: +6) 2.55s FFO#43 (G3:-12) 7.82s FFO#44 (D2:-14) 4.18s FFO#45 (b2: +6) 29.77s FFO#46 (b3: -8) 6.99s FFO#47 (G2: +4) 3.10s FFO#48 (F6:+28) 19.49s FFO#49 (e1:+16) 36.63s FFO#50 (d8:+10) 128.15s FFO#51 (E2: +6) 50.46s FFO#52 (a3:+0) 36.88s FFO#53 (d8:-2) 427.77s FFO#54 (c7:-2) 730.26s FFO#55 (G6:+0) 3774.07s FFO#56 (H2:+0) 185.22s FFO#57 (a6:-10) 1281.31s FFO#58 (g1:+4) 556.86s FFO#59 (g8:+64) 1.08s 合計:7286.83[s] http://mevius.5ch.net/test/read.cgi/gamedev/1057763418/511
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 491 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.010s