- 1 名前:名前は開発中のものです。 [03/07/10 00:10 ID:6FQp6G+O.net]
- 比較的地味なボードゲーム専用のスレが欲しくて立ててみました。
私はc言語で作ったデータベースを使って人間と対戦できる将棋かチェス みたいなソフトを作りたいと思ってますが、グラフィックインターフェースの 作り方がわからなくてつっかえているレベルです。
- 408 名前:名前は開発中のものです。 mailto:sage [2016/02/29(月) 19:34:26.59 ID:etqtABZA.net]
- 好きな言語
C++ C# Ruby 嫌いな言語 Java Python Perl
- 409 名前:406 mailto:sage [2016/03/01(火) 20:52:33.32 ID:6wFQeZGp.net]
- とりあえずHTML5の本買ってきた
- 410 名前:406 mailto:sage [2016/03/03(木) 19:44:49.47 ID:Hi4nZgiL.net]
- fast-uploader.com/file/7012557196681/
碁石をぽちぽち置けるところまで作った
- 411 名前:310 mailto:sage [2016/03/04(金) 10:15:09.55 ID:Q4DtXsqP.net]
- >>410
一晩考えてみた。 通信回りに興味を持って遊んだのは15年くらい前だし、Javaとかイメージしかないし。 あまり助言できる事はありませんが、一つ言えるのは、UIに凝ったりサービス内容を 考えたりするのは最後で良いと思います。 Rubyが好きなら、まずはCGIベースで、テキスト表示で対戦を実現する仕掛けを作る事 だと思います。次に複数のユーザーが接続するのであれば、身元確認のためのID/パス ワード管理が必要になりますし、個々の対戦を区別するにはセッション管理が必要になり ます。この辺は、スタンドアロンのアプリには無い、独特の世界なので、結構新しい技術、 テクニックの習得が必要になるかと思います。いまどきあるのかわかりませんが、チャット のスクリプトとかあれば、参考になるかも。 その辺から入り込んで、いろいろ調べていくと、だんだんと必要な技術、知識が増えてくる んじゃないかと思います。
- 412 名前:406 mailto:sage [2016/03/04(金) 18:58:38.77 ID:w3YPuhPg.net]
- >>411
レスありがとうございます。 確かにセッション管理とか知らないです。 チャット調べてみます。
- 413 名前:406 mailto:sage [2016/03/07(月) 21:05:27.22 ID:NI+TTWmM.net]
- RoRの本買ってきた。
チャットはまだ調べてない。
- 414 名前:名前は開発中のものです。 mailto:sage [2016/03/09(水) 19:45:29.94 ID:Cf1/SDqU.net]
- うおおおおセドルがああああぁぁぁ
- 415 名前:310 mailto:sage [2016/03/10(木) 02:00:10.79 ID:hvbQwbFh.net]
- うむむ。
これにて、オセロができたら次は囲碁という目標が雲散霧消してしまいました。 どうしよう。
- 416 名前:310 mailto:sage [2016/03/10(木) 18:05:03.79 ID:b1SmaPOg.net]
- AlphaGO強すぎ・・・orz
今夜は、囲碁関係者だけじゃなく、AI周りの人も、Google以外全員お通夜ですね。
- 417 名前:名前は開発中のものです。 mailto:sage [2016/03/10(木) 19:38:43.78 ID:SphVvbk5.net]
- 310氏もalpha碁注目してたか。
セドル一発入れてほしいなぁ
- 418 名前:名前は開発中のものです。 [2016/03/11(金) 09:04:36.30 ID:HTdTU0Fi.net]
- 浮上
- 419 名前:名前は開発中のものです。 mailto:sage [2016/03/12(土) 12:19:15.41 ID:k2nAbsiz.net]
- おお、このスレ生きてたんだ
なんで RoR なんか見てるのよスレ間違えたかと思った
- 420 名前:名前は開発中のものです。 mailto:sage [2016/03/13(日) 18:01:59.50 ID:X9umXTnK.net]
- せどるううううッよくやったあああああぁっ
人類の勝利やあああぁぁっ
- 421 名前:名前は開発中のものです。 mailto:sage [2016/03/13(日) 19:02:49.19 ID:Gv0++KTh.net]
- お、第四局はセドル勝ったか
- 422 名前:310 mailto:sage [2016/03/13(日) 20:47:23.70 ID:50OeMIN8.net]
- うむ。なんか期待を裏切られっぱなしw
この負けっぷりを見ると、囲碁もトライしたくなってくる希ガス。
- 423 名前:406 mailto:sage [2016/03/15(火) 20:44:49.53 ID:NF77F+OG.net]
- RoRとjavascriptの連携がよくわからん。
でもちょっとづつだけど進んでる。
- 424 名前:310 mailto:sage [2016/03/16(水) 23:06:52.43 ID:YEZK1fac.net]
- アルファ碁ロスまっただ中ですw
オセロ作ったおかげで、一連の勝負をいままでとは違う視点で見れたかなぁ。 とりあえず、囲碁のモンテカルロ解説した本と、ディープラーニングの入門書を 買ってきた。さらっと読んだけど、ディープラーニングは理解に時間がかかりそうorz オセロで3層パーセプトロンを試したときは、結局うまく動かなかった。 実装が悪いのもあるけど、学習にもすごく時間がかかった。 あれをディープにしたら、どうなっちゃうんだろうかは不安ではある。 こちとら、SurfacePro3しかないし(汗
- 425 名前:406 mailto:sage [2016/03/19(土) 20:06:25.11 ID:Ik15FlWh.net]
- railsでdeviseとかいうgemをつかってユーザー認証機能実装したけど、
複数ユーザーがログインして対局させる方法がサッパリわからん。
- 426 名前:406 mailto:sage [2016/03/24(木) 20:20:54.97 ID:C08ak5N3.net]
- ブラウザ閉じたときに自動ログアウトのやり方がわからん
- 427 名前:名前は開発中のものです。 mailto:sage [2016/03/25(金) 13:51:48.34 ID:9Ea9sx62.net]
- ブラウザは通信があった時にしかクライアントの消息が確認できない。
n分アクセスが無かったらサーバー側で勝手にログアウトさせちゃう タイムアウト方式が普通かなと。その時間経過後にアクセスがあっても ログインからやり直し。 このログインからタイムアウト(ログアウト)までの間をセッションと呼ぶ。
- 428 名前:名前は開発中のものです。 mailto:sage [2016/03/25(金) 14:16:19.46 ID:9Ea9sx62.net]
- 1行目おかしかった。
>WEBサーバ、ブラウザという仕組みは、ブラウザから通信があった時にしか、 >サーバーはブラウザの消息を確認できない。 に修正。 1.初画面からログインする 2.サーバが、HTMLにセッションNoを埋め込んで、ブラウザに表示。 サーバでは、セッションIDを配列などで管理して、IDと最終アクセス時間をとっておく。 3.ブラウザ側からのCGIリクエストには、必ずセッションNoを入れて送信。 セッションNoで、相手がだれか(ID)を特定して、処理を行う。 つまり、個々の処理はセッションNoで管理されている。 4.ブラウザからCGIリクエストが来た時に、タイムアウトしていたら、ログアウト処理へ あと、ゴミ掃除で1日1回くらいタイムアウトしているものを削除。 この辺が基本。対局型の場合。 5.2つのセッションが対局している事になるので、対局管理する配列を用意。 6.相手の着手待ちの時に、どうするのか?その辺が肝。 HTMLに細工して、1秒ごとにリロードさせる。リロードにより、着手が行われたか それとも秒読み時間切れになったか?判断をサーバーに依頼する。 などなど。やり方は色々あるかと思う。 とにかく、肝は、情報がブツ切れで、あちこちにある事。これにより、サーバーで簡単に判断 ができない事があるので、いくつかの機能をブラウザスクリプトに依頼しなきゃならん。 それでも、相手が放置して逃げた時、ブラウザを閉じて逃げた時(回線切断やPCダウン)、 などなどの例外が起きるので、それらをタイムアウト検出などで拾わにゃならん。 どうするのかなどの、例外処理をリストアップして、一つずつ対応を決めていく事。 プログラムテクニックはどうとでもなるけど、例外事象の拾い上げの方が大変。
- 429 名前:406 mailto:sage [2016/03/25(金) 17:43:19.31 ID:/V6G/Eic.net]
- 丁寧にありがとうございます。
javascriptのwindow.oncloseからなんとかならないかといろいろ調べていましたが、無理筋なんでしょうか。 タイムアウト検討してみます。
- 430 名前:名前は開発中のものです。 mailto:sage [2016/03/26(土) 21:27:54.24 ID:DUGO8n57.net]
- >>429
そういう事を考えるんなら、Javaアプレットとか、ActiveXとかの、 ブラウザ上で動いて通信できる方法を試した方が良いかもね。
- 431 名前:406 mailto:sage [2016/03/30(水) 21:45:07.64 ID:yYbYes7U.net]
- すいません、教えてください。
4.ブラウザからCGIリクエストが来た時に、タイムアウトしていたら、ログアウト処理へ あと、ゴミ掃除で1日1回くらいタイムアウトしているものを削除。 このゴミ掃除というのはサーバー側がクライアント側から何のアクションも受けずに 能動的にタイムアウトしているセッションをみつけ削除するということですか? どうやって書けばいいのかわからないのですが…
- 432 名前:名前は開発中のものです。 mailto:sage [2016/03/30(水) 23:26:15.10 ID:DNbQONAE.net]
- >>431
そうです。別にしなくても良いし、月1回手作業で削除しても良いけどね。
- 433 名前:406 mailto:sage [2016/03/31(木) 20:31:39.10 ID:dkaj1Oq1.net]
- >>432
手作業ですかうーん。 まあ、頭の片隅に置いておきます。 ありがとうございます。
- 434 名前:名前は開発中のものです。 mailto:sage [2016/04/01(金) 19:52:02.46 ID:JLskKsZt.net]
- 隠しコマンド受け付けるようにしておいて
管理者のクライアントから定期的にコマンドを投げればいい
- 435 名前:310 mailto:sage [2016/04/05(火) 10:45:13.03 ID:82XTVDoH.net]
- 久々登場。アルファ碁ロスがでかすぎて、やる気がでないです。
とりあえず、BOOK上で乱数入れて手をばらけさせるようにしました。あとの課題は、 1.持ち時間制度 2.ステータスバーの更新 標準のStatusBarだとOnMouseMoveなどで更新されるとの事。 リアルタイムに更新させるためには、マウスくるくるさせてなければならん。 3.中盤探索の高速化 反復深化+置換表で高速化が効いていない懸念があるけど未確認。その他の高速化検討 4.同じ手順で負けないためのBOOKの自動学習 5.オフラインでの引分手順の自動生成 となります。けど・・・本当にモチベーション上がらない。 時々、気が向いた時に、Zebra先生やEDAX+UB師匠相手にポチポチ手打ちで対戦して、 相手のBOOKに登録されている引き分け手順を見つけて、手入力でBOOK更新してます。 Zebraは研究モードがあるので、ほぼ拾い終わりましたが、逆に引き分けだらけになりました。 EDAX+UB相手だと、こちらが定石から外れるケースでも、EDAX側は学習データで先が 見えていて打ってくるので、ほぼ負けになります。 たまに、EDAX+UBも中盤探索が走ってくれて、極まれに勝勢になる事がありますが・・・ 何が腹が立つと言って、そういう時に限って完全読み時にEDAXがバグって、既に石がある 所に着手して逆転した事にされます。もちろん反則なので勝利は勝利ですが、すっきりと 勝たせてもらえないのが腹立たしい。をのれ。 というわけで。やはりオセロは、引き分け手順のリストアップが、強さの肝である事も再確認 してしまいまして。そこまでの根性は無いなぁというのも、モチベーション低下の原因。
- 436 名前:406 mailto:sage [2016/04/06(水) 22:31:38.47 ID:SXJnF3U3.net]
- ログインユーザー一覧表示できるようになりました。
RoRのコーディングは一休みして棋譜管理にとりかかろうと思ってます。 SGFをパクろうかとおもってますが、結構難しい orz.
- 437 名前:406 mailto:sage [2016/04/08(金) 22:18:30.78 ID:kkoRA2nm.net]
- 棋譜ツリー表示すんの結構メンドクサイような希ガス
いいライブラリはないんか
- 438 名前:406 mailto:sage [2016/04/09(土) 23:59:42.58 ID:SBv5rCvL.net]
- KGSのレーティングシステム難しい。
まだそんなこと考える段階じゃないけど。
- 439 名前:406 mailto:sage [2016/04/11(月) 21:25:49.37 ID:A4FL2sT8.net]
- javascriptでオブジェクトの比較ってjsonで変換してそれを比較しろとか某ページで見たけど
そんな事せにゃならんの?
- 440 名前:406 mailto:sage [2016/04/12(火) 23:02:53.74 ID:xYnFmhAQ.net]
- textuploader.com/5w3sq
棋譜ツリーだいぶ形になってきた。
- 441 名前:406 mailto:sage [2016/04/16(土) 22:59:10.60 ID:MXucFBba.net]
- Rails側とjavascript側の連携がやっぱわからん。
色々めんどくさすぎ。
- 442 名前:406 mailto:sage [2016/04/23(土) 00:16:56.63 ID:Gce7F8Ms.net]
- エンコード間違えてて動かなかったわ。
railsがログ吐いてくれてなきゃ一生気づかなかっただろうな。
- 443 名前:406 mailto:sage [2016/04/27(水) 21:48:14.23 ID:JGExYAi7.net]
- 開発に使ってたノートのキーボードが一部効かなくなったわorz.
windowsにログインできなくて焦った。 アカウントでも乗っ取られたのかと思ったらソフトキーボード使ったらログインできた。 USBキーボードとかで代用できればいいんだがどうかな〜。
- 444 名前:406 mailto:sage [2016/05/02(月) 21:58:59.67 ID:i7WwatVD.net]
- invalid multibyte character
とかってエラーが出るんだけど、どこに全角があるのかさっぱりわからん。 app/controllers/application_controller.rb:1にあるらしいんだけどいくら調べてもみつからん。
- 445 名前:406 mailto:sage [2016/05/02(月) 23:06:51.86 ID:i7WwatVD.net]
- 以下のログが出るんだけど、だれか原因わかる人いない?
Started GET "/" for ::1 at 2016-05-02 22:55:10 +0900 ActiveRecord::SchemaMigration Load (1.2ms) SELECT "schema_migrations".* FROM "schema_migrations" ArgumentError (invalid multibyte character): app/controllers/application_controller.rb:3:in `<top (required)>' app/controllers/home_controller.rb:5:in `<top (required)>'
- 446 名前:406 mailto:sage [2016/05/03(火) 11:00:58.43 ID:6pwgCgml.net]
- すいません、解決しました。
- 447 名前:406 mailto:sage [2016/05/13(金) 22:42:29.22 ID:Zx20RSfa.net]
- やはりポーリングだけでは限界があるか?
- 448 名前:310 mailto:sage [2016/05/16(月) 21:32:31.63 ID:KQ1qSDyb.net]
- モチベーションダダ下がりだったけど、なんとなくソースの整理していたら、
直したいところがいろいろ出て来て、見直し中。 後ろ向き枝刈で探索時間は変わらないけど、探索ノード数が2/3になった。 この枝刈手法の速度アップできたら面白いかもと思いつつ、元々自分が 結構高速に書いていた処理(未使用)を流用しているから、これ以上速度アップ できるかわからん。 でも、EDAXには勝てないんだろうなぁ・・・ EDAXの孫情報からインスピレーション得てるネタだし。
- 449 名前:310 mailto:sage [2016/05/26(木) 16:01:37.05 ID:ZBCA70ec.net]
- 遅々として進んでいます。
ソースを一から組みなおして、いろいろと綺麗にしてます。 並列探索を入れない段階で、FFO#40が結構速くなった。 いまさらながらに、FFOテストを40〜59まで実行して比較しようとしたところ、 前から薄々気づいていたけど、FFO#41以後が遅い。酷いケースになると 探索ノード数が10倍=時間も10倍になる(#51)。自分のは指数関数的に 比較的にきれいにノード数が増加している。同じようなノード数のものもあるので、 ZebraやEdaxはどこかで上手にばっさり刈り込んでいる感じ。#52以後は時間が かかりすぎて、未検証ですが。 ZebraやEdaxもノード/秒が一定しているので、置換表みたいな重い方法では なく、簡単な方法で刈り込んでいるっぽい。とすると、moveorderかなぁ。 一応、MPCの99%で評価値の並び順は置換表に残してあるので、そんなに 間違った順番でソートしていないと思うんだけど。 あと、mtd(f)だと最初から最後までNullサーチしかしない事に思い至り、そこで 処理の効率化できる箇所が無いかと考えてます。Nullしかやらないんなら、 アルファ越えの再探索でウィンドウを広げる必要もないわけで。逐次探索部分 では効果不明だけど並列探索だとYBWCでPVを検索し終わるまで待つ必要が そもそもない(仮アルファを求める必要がない)ので、多少速度アップできない かなぁと。
- 450 名前:310 mailto:sage [2016/05/27(金) 00:36:10.52 ID:gIFpjm1c.net]
- 早々に状況が判明しました。ここに書くと進むんだよなぁ。
mtd(f)+negaScoutで繰り返し探索しながら、置換表に置換データを置いて、更に それを並び替えに利用していたのですが、最初にPVを探索してしまうと、その後は 別の着手も評価値がαになってしまい、並び替えの意味が無くなっている感じです。 ちなみにPVだけは別ルートで必ず先頭に探索するようにしてあります。 というわけで、テスト的に初段のみ敢えて並び順を逆転させてmtd(f)を未使用にして ただのnegaScoutで、mpc99%→全探索をしてみたところ、探索ノード数がかなり減り ました。置換表使用の深さ全部で並び順を逆転させてみたら、mpcの99%ですら全く 終了する気配がなくなりました。 さて、どうやって実現しようかなと。 今のところ、mpcはかなり高速なので、これをnegaMaxにして。 いわゆる並び替え専用の浅い探査にしようかなと。
- 451 名前:406 mailto:sage [2016/06/27(月) 22:12:32.72 ID:rUgIsnK8.net]
- 対局場は結構難しいorzので一旦横に置いておいて
手始めにもうすこし簡単な1人ゲームからPHPで作ろうと思ってます。 具体的にはこれ www.vector.co.jp/soft/winnt/game/se513226.html の一人プレー場とランキングを作りたいです。 元ネタはコンウェイの天使と悪魔という問題みたいですね〜。
- 452 名前:406 mailto:sage [2016/07/02(土) 23:28:52.20 ID:qo9Pciu3.net]
- textuploader.com/5iagw
とりあえず、HTML & javascriptでシコシコ書いてます。 だいぶ大分形になってきました。 遊んでみてください。
- 453 名前:406 mailto:sage [2016/07/02(土) 23:40:37.16 ID:qo9Pciu3.net]
- なんか文字化けしてんなぁ
なんでだ? まあいいか
- 454 名前:名前は開発中のものです。 mailto:sage [2016/07/14(木) 21:31:20.75 ID:GXGadAU3.net]
- 必殺技が使えるリアルタイムアクションオセロまだですか
- 455 名前:名前は開発中のものです。 mailto:sage [2016/07/17(日) 23:40:28.28 ID:M3Q2Msci.net]
- とりあえず公開しました。
ランキングはまだ未実装です。 nagata442000.xxx.ne.jp/EngelDevil.html xxxはさくらに変えてください。
- 456 名前:455 mailto:sage [2016/07/18(月) 00:05:57.51 ID:Lx2YZiAH.net]
- 455=406です。
- 457 名前:406 mailto:sage [2016/07/21(木) 23:55:32.48 ID:oilR8wYn.net]
- うーんアクセスがないぜ。
検索エンジンにも引っかからないし。 SEOとかいうのに手を染めるしかないのか?
- 458 名前:406 mailto:sage [2016/07/27(水) 00:25:34.27 ID:42/ungMS.net]
- 結果を保存できるようにした。
- 459 名前:406 mailto:sage [2016/07/27(水) 22:44:58.98 ID:42/ungMS.net]
- 棋譜を登録&閲覧&再生できるようにした。
そろそろ宣伝かな〜。
- 460 名前:名前は開発中のものです。 mailto:sage [2016/08/01(月) 12:39:59.89 ID:BFi+UVWj.net]
- このようなスレがあるとは…
自作でオセロソフトを作成している者です 現在は自己対局による学習中です 初手f5 以降ランダム7手〜8手、 中盤8手読み 中盤で次善手を85%の確率で一手のみ打つ 終盤20マス空き読み切り で300万棋譜集めようかと この設定であれば一局1〜3秒程度なので2ヶ月半くらいで達成できる予定です まだ86万局程度ですが、今のところFFOはこんな感じです FFO#40 (a2:+38) 1.36sec FFO#41 (h4: +0) 3.75sec FFO#42 (G2: +6) 4.86sec FFO#43 (C7:-12) 6.33sec FFO#44 (B8:-14) 9.46sec FFO#45 (b2: +6) 64.88sec FFO#46 (b3: -8) 13.20sec FFO#47 (G2: +4) 5.66sec FFO#48 (F6:+28) 67.74sec FFO#49 (e1:+16) 121.90sec FFO#50 (d8:+10) 376.73sec FFO#51 (E2: +6) 86.08sec FFO#52 (a3:+0) 132.61sec
- 461 名前:406 mailto:sage [2016/08/02(火) 00:17:59.05 ID:R38aaX9h.net]
- だれかSEOのやりかた教えてくれ。
- 462 名前:460 mailto:sage [2016/08/02(火) 09:44:26.07 ID:/HFRnWj4.net]
- 白の得点が微妙にマイナスに傾いているので9手目までランダムに固定しました。
初手はf5なので8手目までだと白の方がランダム手数多くなってしまうことに気づいて・・・ 9手目ランダムだと7手目までの評価値はまともな値にならないのですが、そこはBOOKでどうにかしようかと。 まともな値にならないだけで、互角定石以外に進行したりとかはしないので、とりあえず無視します。
- 463 名前:406 mailto:sage [2016/08/02(火) 20:37:12.35 ID:R38aaX9h.net]
- Google検索で引っかかるようになったみたいです。
でもコンウェイの天使と悪魔なんてワード検索する人そんなにいないだろな。
- 464 名前:310 mailto:sage [2016/08/03(水) 14:35:23.97 ID:WXOcEHjz.net]
- ここしばらく、評価関数に新機軸をと、ディープラーニングにトライ中ですが、
囲碁のように、畳み込みの画像認識の応用では、なかなか上手くいかないと 言うか、自分のパソコンで手におえるくらいの規模のネットワークだと全く歯が 立たない感じです。 というわけで、色々と手はいっぱい動かしているのですが、何にも成果があら われていない状況です。
- 465 名前:名前は開発中のものです。 mailto:sage [2016/08/03(水) 22:36:32.67 ID:u2EcbVrc.net]
- >>464
ディープラーニングってライブラリ使ってんの? それとも自家製?
- 466 名前:310 mailto:sage [2016/08/04(木) 01:59:01.51 ID:XH3ZGPYC.net]
- >>465
最初はGitHUBのDeepLearningの参考プログラムを元に自家製でAutoEncoderにDropoutをつけ たりしてました。 次にCNNで、GitHUBでtiny-cnnというライブラリを落として使用。技術的に凝りすぎライブラリで、 解読するのにC++の勉強が主になってしまいそうなので、改造はあきらめました。 そして、今は、行列ライブラリ(Eigen)落としてきて、自家製に戻りつつあります。Sparse正則化の ために、ミニバッチ処理をしようかと思って(最初のは逐次処理のみ)、ついでにAVX2命令や 並列化対応を、この行列ライブラリに頼ろうかと思ってます。 Eigen使ったMLPでxor解くテストプログラムは、さきほどできましたが、本当にこれで良いのか、 結構不安です。多少間違っていても、収束しちゃうときがあるので。 明日はAdagradに対応させる予定。何とか2〜3層程度で収まらないかな。 パソコン環境が貧弱なので、あまり重い処理ができないのが最大の難点です。 もっとも、できあがった評価関数が重いと、探索深さが浅くなってしまうので、ある程度は妥協 しなきゃならんかなと思っています。
- 467 名前:名前は開発中のものです。 mailto:sage [2016/08/04(木) 22:03:08.50 ID:5/KmfpOW.net]
- 壮絶やな。
その情熱がうらやましいぜ。
- 468 名前:310 mailto:sage [2016/08/05(金) 20:44:21.05 ID:sOgjr/Uz.net]
- 楽しんでやってますので(笑
で、AdagradとSparse正則化ができました。Sparse正則化は思ったより時間がかかり ませんでした。さすが行列ライブラリって感じです。AdagradとSparse正則化込みで、 結果も、正則化もちゃんと出来てますので、多分間違いはないでしょう。 今夜はオセロ関連ライブラリ持ってきて、学習データ作って、Sparse Auto Encoder にしてテストです。全結合層クラスを積み重ねていくだけだし、データ作成は3回目 なので、後は簡単ですが、隠れ層のノード数と、目標とする活性ノード数を色々試す のが面倒です。 まあ、ここまで全敗なので、あんまり期待していないけどさ(汗 やればやるほどBuroさんの評価関数の凄さがわかってきます。
- 469 名前:460 mailto:sage [2016/08/08(月) 01:32:00.53 ID:1caSYJwt.net]
- PV-LINE(最善の着手リスト)の表示を実装してみました。
PVノードの更新は非常にまれな事象ですが、あまり深い所で表示更新すると やはり探索速度に影響与えてしまうので、6手目以下の浅いノードで表示更新しています。 あと自己対局棋譜が100万局集まったので、中盤MPCパラメータを作成中です。 現在20手読みのカットペアの計算に入ったところで、これが終われば終盤MPCの実装に入ろうと思います。
- 470 名前:名前は開発中のものです。 mailto:sage [2016/08/10(水) 01:12:31.39 ID:BL+f+Yy5.net]
- 310と460はホントに別人なのか?
ディープにオセロAIに取り組む人が2人も現れるとはにわかには信じがたいw
- 471 名前:310 mailto:sage [2016/08/10(水) 22:37:11.88 ID:C09Nh62j.net]
- >>470
他のスレで出会って、誘導させていただきました。 ほんと絶滅危惧種ですよね(汗 Auto EncoderにSparse正則化を加えましたが、やっぱり特徴抽出は 簡単ではないようです。Auto Encoderとしては申し分なく機能している のですが・・・線形回帰をつけて評価値を算出してみたのですが、ただの 乱数返しているような状態になります。 なんか、微妙に恒等変換を学んでいる臭いんだよなぁ。むむむ。
- 472 名前:名前は開発中のものです。 mailto:sage [2016/08/10(水) 22:53:03.62 ID:BL+f+Yy5.net]
- >>310はかなりハイレベルだと俺は思ってるが
>>310からみて>>460はいい線行ってるの?
- 473 名前:310 mailto:sage [2016/08/11(木) 23:18:44.20 ID:M0iE7EXH.net]
- >>472
僕は全然ハイレベルじゃないですよ。 すぐ脱線して役に立たないことばかりやってるだけです。 別スレでお互いのFFOテストの結果を見せっこしたところ、 前半5つで、速度はほぼ同じくらいでした。 >>460さんと情報交換したところ、末端ノードの高速化の 方向性が全く逆だったのが意外でした。
- 474 名前:名前は開発中のものです。 mailto:sage [2016/08/12(金) 00:22:58.37 ID:+2V5AEwc.net]
- ほほう
460さんも期待出来そうですな
- 475 名前:460 mailto:sage [2016/08/12(金) 02:42:42.36 ID:mvQ0iJdF.net]
- >>472
自分はディープランニングなどの人工知能系はさっぱりなので・・・ 310さんはよく勉強されていると思います。 自作オセロですが、今まで32bitで開発していましたが 今ではもう32bitOSを使用する方が稀だと考えて思い切って64bitに移行しました。 探索ノード数がいきなり10〜20%程度上がってビックリしています・・・
- 476 名前:460 mailto:sage [2016/08/12(金) 04:26:50.73 ID:mvQ0iJdF.net]
- あ、探索ノード数ではなく探索速度ですw
終盤探索だと10000Knps〜15000Knps程度出せるようになりました。 自分の環境だとWZebraが20000Knpsなので、大幅に負けています・・・ そろそろチューニングも視野に入れつつやっていこうと思います。 まずは探索ノード数を終盤MPCで削減しなくては・・・
- 477 名前:460 mailto:sage [2016/08/12(金) 07:59:35.21 ID:mvQ0iJdF.net]
- 64ビット移行+120万局の学習でFFOテストの結果をまとめました。
32ビット+86万局の学習だと合計が17219.7sだったので36%ほど高速化しています。 シングルスレッド動作なので、将来的にはマルチに移行したいところ・・・ OS:Win10 CPU:i5-6500 キャッシュサイズ:128MB FFO#40 (a2:+38) 1.04s FFO#41 (h4: +0) 3.22s FFO#42 (G2: +6) 4.01s FFO#43 (G3:-12) 13.10s FFO#44 (D2:-14) 3.22s FFO#45 (b2: +6) 58.63s FFO#46 (b3: -8) 10.27s FFO#47 (G2: +4) 4.60s FFO#48 (F6:+28) 36.09s FFO#49 (e1:+16) 50.33s FFO#50 (d8:+10) 354.14s FFO#51 (E2: +6) 59.20s FFO#52 (a3:+0) 142.79s FFO#53 (d8:-2) 656.87s FFO#54 (c7:-2) 1718.85s FFO#55 (G6:+0) 5588.48s FFO#56 (H2:+0) 314.27s FFO#57 (a6:-10) 1045.01s FFO#58 (g1:+4) 973.58s FFO#59 (g8:+64) 0.25s 合計11037.95s(トッププログラムは合計で600秒台orz)
- 478 名前:460 mailto:sage [2016/08/12(金) 08:01:32.72 ID:mvQ0iJdF.net]
- >>477
FFO#56はH2:+0ではなくH5:+2に訂正です。。
- 479 名前:310 mailto:sage [2016/08/12(金) 15:16:23.38 ID:USoZXJIB.net]
- がーん。今まで、こちらはノートPCだしと、密かに思っていましたが、32bitでしたか・・・。
完全に脱帽です。 だったら、僕もこのスレで教わったAVX2とかBMIとかの組込関数使って、あとPPLとか OpenMPとかで並列化して4コアなら3倍強程度なので、トータル4倍以上に速度アップ すると思いますよ。つまり、その辺やるだけでEdax並まで行くかなと(汗 ちなみに、DeepLearningはあきらめ方向にだいぶシフトしてきました。
- 480 名前:名前は開発中のものです。 mailto:sage [2016/08/12(金) 16:41:11.53 ID:8u/4Xx1J.net]
- 仲間が出来ていいのう
- 481 名前:460 mailto:sage [2016/08/12(金) 17:56:57.44 ID:wDmYSTDl.net]
- シングルスレッドだとトッププログラムですら合計2000秒台と限界があるので、マルチスレッド対応は必須ですよね
ただybwc等の並列化アルゴリズムの理解に時間がかかりそう…
- 482 名前:310 mailto:sage [2016/08/12(金) 20:50:39.55 ID:USoZXJIB.net]
- >>481
YBWCはnegascoutのnull window searchを並列化して一括処理する ようなものだと解釈して実装しました。 この辺はゲーム計算メカニズムなる本で勉強したかな。 並列処理のフレームワーク何使うかが問題ですね。 自分はVC++なのでmsdnで情報が得やすいPPLを使いました。 インテルTBBとかOpenMPなんてのもあります。 PPLは結構使いやすかったですが、速度は不明。 まあ、ルートの方でしか使わないので、あまり影響ないと思っています。 手組でマルチスレッドなプログラム書ける人には不要かも知れません。
- 483 名前:310 mailto:sage [2016/08/13(土) 14:18:44.65 ID:D+1dBs0T.net]
- あ、考え方がnegascoutみたいだという事で。
- 484 名前:名前は開発中のものです。 mailto:sage [2016/08/13(土) 20:35:07.80 ID:p7EbJiId.net]
- avx2って256bitだよな
オセロだと128bitしか使えないような?
- 485 名前:310 mailto:sage [2016/08/13(土) 20:47:52.09 ID:D+1dBs0T.net]
- 方向が8つあって、それぞれの処理を8回計算するとき、
右シフト方向が4つ、左シフト方向が4つ。 256bitは64bit×4。右シフトと左シフトで2回。 というわけで、mobilityとかflipとかで便利に使えます。
- 486 名前:460 mailto:sage [2016/08/14(日) 16:41:37.52 ID:ALD5heTO.net]
- 現在、終盤用MPCパラメータ作成中です。
23手完全読みのカットペアに入っています。24手読みの計算が終わったらいったん実装に入るつもりです。 >>310 YBWCに関して調べましたが、そうみたいですね。 MPCパラメータを作成している間に、なんとなくで適当に実装してみましたが なぜかエラーで落ちまくりでしたw 排他がかかっていない致命的な箇所があるのか・・・置換表は排他をかけたのですが・・・ PVライン生成あたりも怪しい、とりあえずもう少し調べてみないとダメそう。
- 487 名前:460 mailto:sage [2016/08/14(日) 16:42:16.06 ID:ALD5heTO.net]
- >>310は>>482の間違いです。。
- 488 名前:名前は開発中のものです。 mailto:sage [2016/08/17(水) 21:19:58.40 ID:Z2gXWq7v.net]
- 俺もボードゲーム系AIでディープラーニング書いてみたいと思ってるけど難しいんだろな。
論理もそうだけど膨大なデータが必要そうだし。 >>479 どのへんで諦めました?
- 489 名前:310 mailto:sage [2016/08/18(木) 15:43:08.07 ID:7GnJQiSP.net]
- >>488
まだ細々やってます(汗 Eigenの導入と、少しづつ進んでいくC++技術のおかげで、前よりは試行の スピードはアップしていますが、なかなか成果は出ません。まだ、色々な パターンを試しながらディープラーニングって何ぞやを体感しているところ なんだと思います。 少なくとも「簡単に凄い事ができそう」という幻想は捨てる事ができました(汗 ボードゲームがターン制なら、基本はmin-Maxになると思います。 まずは、盤面の状態に(恣意的で構いません)点をつける評価関数作るところ から始めたらどうでしょう? 次のステップで評価関数に統計(線形回帰)を持ち込むと、ディープラーニング じゃなくても、プレイ譜がたくさん必要になります。 オセロの場合は、Buroさんという先人が、実用レベルの評価関数が線形回帰 で作れる事を示してくれています。 僕がディープラーニングを適用しようと思っているのは、ただの思いつきでして。 場合によっては、より軽くて正確評価関数が作れるかと思いましたが、実際に 始めてみると、なかなか評価関数として機能してくれないし、仮にできたとしても 重いものになっちゃいそうという感じです。
- 490 名前:488 mailto:sage [2016/08/19(金) 23:15:11.39 ID:i9HkvHw2.net]
- >>489
手動評価関数はかなり昔五目並べで書いたことあります。 min-maxで思考時間が1手5分くらいかかったけど、 自分でプレーして負かされることもあるくらいの強さにはなりました。 そのBuroさんの線形回帰とやらはWebで論文とか見れたりしますか? 読んでも多分理解できないだろうけどちょっと興味あります。
- 491 名前:488 mailto:sage [2016/08/19(金) 23:23:27.55 ID:i9HkvHw2.net]
- ぐぐったらこんなのがあったけど多すぎ。
https://skatgame.net/mburo/publications.html
- 492 名前:310 mailto:sage [2016/08/20(土) 16:51:13.03 ID:m44rb9b4.net]
- >>490
Buroさんが作った伝説のオセロプログラムがLogistelloです。 Thellというオセロプログラムの作者の方が日本語で解説してくれています。 sealsoft.jp/thell/learning.pdf 5.2の計算の高速化のところの説明(P.8の冒頭)のところ。 自分なりに解釈したら、自分が解釈違いしたのか、説明がおかしいのか、 この通りではなかった記憶があります。 とはいえ、これはオセロの考え方であって、将棋なんかだとbonanzaなどを 参考にすべきだし、全く別のゲームであったら、別な事を考えなければなり ませんね。当たり前ですが。
- 493 名前:488 mailto:sage [2016/08/20(土) 20:33:47.55 ID:+7ONDgCM.net]
- >>492
パターンの重みの線形和が評価関数になる的なことが書いてあるっぽいですけど、 パターンというのは人間が与えてやるわけですよね? そのパターンすら学習で求めるというのがディープラーニングなのかと思ってますけど。 まあディープラーニングにはロマンがありますね。
- 494 名前:310 mailto:sage [2016/08/20(土) 21:29:23.21 ID:m44rb9b4.net]
- >>493
ですです。 あと、Deepじゃなくても、2層以上のパーセプトロンだと、線形分離不可能問題の 分類ができるようになります。XORの学習が典型ですね。 ところが、パターンの部分まで学習で求めてくれるってのは、やっぱり幻想でして。 ある程度パターンを想定しながら、ネットワークを作らないといかんのではないか という事に思い至っています。 例えば畳み込みニューラルネットワーク(CNN)で、何故畳み込みをするのかという と、縦線横線などの隣接ドット同士もつながりを識別してもらうためですし。そもそも 畳み込みのフォワード計算自体が、画像に対して例えば輪郭線強調といったフィル ターかけるのと、プログラム的に同じものだったりします。学習対象は、フィルターに なります。 オセロは、囲碁とかと違って、石の色がコロコロ変わるので、隣同士の石のつながで 判断するCNN的なネットワークをそのまま適用できないよなぁというのが、最近の諦め ポイントであります。 じゃあ、何に頼るかというと、自分はオセロ弱いので・・・No ideaだったりします。 あんな簡単な(DeepLearningと比較して)線形和でBuroさんの評価関数ができています ので、パターンを活かして、まずはそこに点数を割り振るところをMLPなんかでできない かなぁと思っています。
- 495 名前:488 mailto:sage [2016/08/21(日) 00:04:33.21 ID:EnsCDbgT.net]
- >>494
>ところが、パターンの部分まで学習で求めてくれるってのは、やっぱり幻想でして。 >ある程度パターンを想定しながら、ネットワークを作らないといかんのではないか >という事に思い至っています。 ふーむそうなのか。残念。 聞きかじった知識だと夢のような技術なのかと思っちゃったけど、 実戦してみるとなかなか難しいのかぁ。
- 496 名前:名前は開発中のものです。 mailto:sage [2016/08/21(日) 21:39:11.08 ID:EnsCDbgT.net]
- いくらオセロの盤面が小さいからってシングルスレッドで
10000Knps〜15000Knpsというのはとてつもなく速く感じるんだが。 どうやったらそんな速度がでるんだ? オセロ業界じゃ普通なのか?
- 497 名前:310 mailto:sage [2016/08/22(月) 02:41:50.59 ID:2ubnBUwd.net]
- Kが余計で3桁間違えているんじゃないかと(汗
- 498 名前:310 mailto:sage [2016/08/22(月) 02:46:41.58 ID:2ubnBUwd.net]
- あ、違った。自分が3桁間違えていた。
全然おかしくないです。自分の2コアで13000Kくらい出てます。 シングルで同等の速度ですから、かなり速いとは思いますが、 敢えて言うなら2倍程度なら縮められないとは思えない差です。
- 499 名前:460 mailto:sage [2016/08/22(月) 08:13:03.66 ID:yZES3OuI.net]
- 終盤MPCを実装完了してFFOを測定してみました。。
残すのはFFO#57のみですが、この時点で9364秒と1万秒を割ってるので 10%程度の高速化は期待できそうです。(評価テーブルは64ビット移行+120万局から変更なし)
- 500 名前:460 mailto:sage [2016/08/22(月) 09:20:01.85 ID:qlwiS2PE.net]
- >>496
簡単な実装だと終盤探索は2000万ノード/秒いけますね。 合法手生成が将棋などより速いので。 とはいえ、中盤探索だと色々やるので5000knps程度に落ちてしまってます。
- 501 名前:496 mailto:sage [2016/08/22(月) 21:10:28.52 ID:WzxI/O2e.net]
- 2000万ノード/sとかってsseやavx使って始めて可能になるレベル?
オセロの合法手の実装になにかすごい効率的なビット演算やってるとか?
- 502 名前:460 mailto:sage [2016/08/23(火) 11:44:32.28 ID:sSUGbl7L.net]
- >>501
終盤探索だと合法手生成は葉ノードの近くでは使わないので、ループや条件分岐を使ったコードでなければアセンブラでなくても速度はそれなりに出ますよ。 こことかが参考になります。 d.hatena.ne.jp/ainame/touch/20100426/1272236395 自分はこんな感じのコードをアセンブラに落として少し改変したものを使ってますー
- 503 名前:460 mailto:sage [2016/08/23(火) 11:47:50.11 ID:sSUGbl7L.net]
- 置換表に超大バグがあることに気づき修正したらFFO45が32秒になりました…w
180万局の学習を朝に終えたので今晩再度FFOを測定しようと思います。
- 504 名前:310 mailto:sage [2016/08/23(火) 13:54:12.88 ID:LVh7XLe+.net]
- >>502
そのサイトは知りませんでしたが、同じことやっています。 自分の場合は、それをAVX2命令で1,7,8,9ビットシフトを4つ並列で動かす様にして、 右シフト左シフト2回の演算をC++で組んでます。並べて書くと混乱しそうだったので 演算オーバーライドしまくりで、バグ防止しました。 やっぱりアセンブラの方が速いんでしょうね。 ディープラーニングな評価関数の方ですが、突然収束を始めました。 まだ途中ですが、見た感じざっくりで、平均二乗誤差の平方根(σ)が0.6石程度に 収まりそうです。2σで1石、スコアは2づつ変わるので、評価逆転が起きる確率を 数%程度にするには、0.5石以下にしたい。 肝はミニバッチのサイズだった様です(謎)。ハイパーパラメータとしては考慮対象外 でしたが、テスト用に小さくすると収束が悪くなる感触があったので、思い切って大き くしてみたところ…大きくすればするほど記録を更新していくという状態。ついに212640 件という特大バッチサイズにしてしまいました。メモリー的にはまだいけるかも。 今までの比較検討データは全てパーになったので、検討済のネットワークも、バッチ サイズ変えて再評価です。今やってるのは、Buroさんパターンがベースのネットワーク ですが、もしかしたら入力ベタ打ちで「勝手に特徴抽出してくれる。すげー!」に戻るかも(汗
- 505 名前:名前は開発中のものです。 mailto:sage [2016/08/23(火) 19:39:22.88 ID:1+aieVpn.net]
- >>502
ループはおろか条件分岐すらいらんのか(驚愕) >>504 おお、ディープラーニング期待してます。
- 506 名前:名前は開発中のものです。 mailto:sage [2016/08/23(火) 21:26:59.10 ID:KqeLXU8U.net]
- 文系の俺には全然分からん。
もっと簡素な3目並べなら勝てるAIとか作れないかな(´;ω;`)
- 507 名前:名前は開発中のものです。 mailto:sage [2016/08/23(火) 21:47:29.66 ID:1+aieVpn.net]
- ちょっと興味が湧いたんでとあるオセロアプリ落としてやってみた。
弱設定AIが程よく負けてくれて嬉しいw 一方的にボコされたら詰まらんよな一般人は。 オセロAIはもう神の領域だし。
- 508 名前:460 mailto:sage [2016/08/24(水) 01:02:17.32 ID:elb1k4A2.net]
- 色々チューニングしてトライしましたが、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]
|

|