- 1 名前:名前は開発中のものです。 [03/07/10 00:10 ID:6FQp6G+O.net]
- 比較的地味なボードゲーム専用のスレが欲しくて立ててみました。
私はc言語で作ったデータベースを使って人間と対戦できる将棋かチェス みたいなソフトを作りたいと思ってますが、グラフィックインターフェースの 作り方がわからなくてつっかえているレベルです。
- 398 名前:310 mailto:sage [2016/02/07(日) 21:48:19.14 ID:xNqeS9Ve.net]
- ここら辺で、EDAXとかとの速度差の原因を考えたところ、次の2点が考えられました。
1.評価関数の精度が悪い可能性 2.個々の関数で速度アップの余地がある可能性 という事で、1は熟考が必要なので後回しで、速度アップの対象として、flipとmobilityの 高速化を検討。とはいえ、良い知恵があるわけでもないので、ネット徘徊。 現在、ポインタ関数で分岐して処理しているflip関数を1発で処理するopenCLのソースを 発見。Master Othelloの作者のものでEDAX4.3のflip関数を参考にしているらしい。 中身を解読するとベクターを使っている。とりあえず処理を真似て逐次処理で組んでみたら 結構速度アップしました。 解読の過程で、ようやくベクタ化の意味がわかったので、mm256系の命令を使って、 ベクタ化してみましたが、若干速度低下。原因は恐らくlzcntで一回ベクタを抜けてしまう 所だと思うので、ハッカーのたしなみを読んでベクタ演算で組み直してみる予定。 合わせてmobility関数もベクタ化。若干速度アップしたかなという程度。 組み込み関数は使い方が面倒臭いので、演算子のオーバーロードしまくってみました。 flip関数は非ベクタの分岐無しバージョン、mobilityはベクタという状態で、500msを切る 数字が出るところまで来ました。flipのベクタ化ができて、パラメータ調整するともうちょい 良い数字が出るかなと期待。
- 399 名前:310 mailto:sage [2016/02/09(火) 01:09:41.58 ID:MeGl+gwc.net]
- flip関数続き
・lzcntを自前で組んでみましたが、やはり処理が重く速度低下。ボツ。 ・右方向と左方向で処理が違うので、片側+180度回転で、同じ処理にしてlzcnt不使用 にしてみたが、180度回転×4が重くて速度低下。ボツ。 ・できるところまでベクタ化して、lzcnt以後はスカラ計算で、速度若干改善。 ・上記からlzcnt後、再度ベクタ化してみたら、速度若干低下したのでボツ。 ・64bit×4の値を代入する関数を変更したら、意に反して結構速度改善。 ・闇雲に__declspec(align(32)) してみたら若干速度改善してバラツキ減少。 これらにより、450msくらいになりました。 ベクタ化はまだ何かありそう。 ちゃんと書いてなかったですが、途中からノート数カウントを外してます。入れると100ms 程度の速度低下になります。一応、デバッグ用に#ifで切り替えられるようになってます。 が、そんな状態なので、nps計算に意味が見いだせないという・・・。 続いて評価関数をベクタ化できないか考えましたが、BMI命令使っているので厳しい。 計算楽にするため、でかい配列を何回も引いているので、ここを何とかしたい気がする。 黒・白・空の3を基数とする3進数でナンバリングしているんだけど、高速で計算する方法 が見つからず。 平衡3進法を手早く計算する方法があると、黒を1、白を-1、空を0にして、定数足すとか できるんだけど、どんなに調べても、基数変換に王道なしという言葉しか見つからない。
- 400 名前:名前は開発中のものです。 mailto:sage [2016/02/15(月) 00:14:34.50 ID:2rfyeFpJ.net]
- 高速化については一旦棚上げ。何やっても速度が上がらない。
ひたすらノード数カウントの速度低下を抑えて、カウントのバグ取りして。 色々発見はあったけど、結局ソースを綺麗にしただけだった。 後は、いずれゆっくり時間をかけて、評価関数を作り直すかな。 MPCを組みました。一応動作している模様。 これからしばらく、GUI作りに入ります。 MFCよくわからん。
- 401 名前:310 mailto:sage [2016/02/20(土) 13:43:08.30 ID:ZGi2V8ih.net]
- GUIできた。昔作った序盤定石部分と合体。
中盤探索を反復深化にして、3秒を超えて新しい深さに入らないあたりで調整。 MPCで25手くらいまで読めるように調整。 終盤完全読みは38手から。36手からMPC付で完全読み(つまり完全ではない)。 こんな感じでできたので、早速プレイ。自分だと軽く全滅負けしてしまうので、zebra先生 にお越しいただきました。が、滅茶苦茶弱い。 良く見ると、定石が効いている段階で+16だったのが、中盤読みになった瞬間に一気に −14くらいまで落ちて、そのまま挽回できない感じ。zebra先生は、その前に定石から外れ て、既にzebraから見て+14程度の評価値を算出している。つまり、定石部分がおかしい。 それ以外は、評価値もzebraとは大きく違わないし、終盤探索もちゃんと機能している感じ。
- 402 名前:310 mailto:sage [2016/02/20(土) 23:06:47.33 ID:ZGi2V8ih.net]
- zebra先生にならって定石の評価を表示するオプションをつけてみました。
ロジック的には間違いなさそうですが、定石DBがおかしいというか、定石に登録がない 手順に正しい変化があって、それを無視しているため、間違った判断をしているみたい。 一応、完全読みという触れ込みの棋譜を元にしているはずなので、使い方をどこかで 勘違いしているんだと思います。しばらく悩むしかなさそうです。
- 403 名前:310 mailto:sage [2016/02/21(日) 01:04:17.33 ID:nPWuqcvw.net]
- 試しに定石部分を外して、中盤探索で開始してみたら、zebraの20手読みに対して
2戦して1勝1分となりました。読みの深さは、こちらが上なので、こんな感じでしょうか。 序盤20手分は評価値が無いので、20手近い探索を反復無しで探索するため、MPCを 使っても最初の数手は1手あたり5分以上掛かってしまいます。 定石については、以前にウェブで見つけてテキストに起こした定石データがあるので、 それを評価0で登録してみようかなぁと思っています。 定石の自己学習とか、評価付けとか、どうやるんだろ。
- 404 名前:310 mailto:sage [2016/02/25(木) 21:06:56.39 ID:fXRsnvrs.net]
- 定石データを、上記の手打ちデータで作り直しました。
当初は並び取りとかの極端な進行以外は評価0.0にしたため、mobility関数のビット列 の下から定石に従って着手する形となり、zebra先生のBookに誘導されるように、少しずつ 不利な定石に乗り換えていき、負けるという展開に(汗 悔しかったので別のソフトを拾い、戦ってみると、そちらには圧勝。決して弱くはないと思う。 また、zebraとの対戦時にBookで評価値がついているものは、それを参考に修正したところ、 時々勝てるような感じになりました。 EDAX先生+UnifiedBookなるものを拾って、そちらと戦ってみたところ、軽く惨敗。 fjt定石とかだと終盤近くまでBookがあるみたいで、Bookが続く限り紛れが無い。 こちらが中盤探索などでミスるたびに−2づつ落としていき、お話にならないレベル差を感じました。 しばし熟考の上、定石の拡張、評価付けを考えてみようかと思います。 あと、評価値が近い時には、何らかの確率で手を選択するようにもしてみたいと思います。
- 405 名前:310 mailto:sage [2016/02/28(日) 01:10:48.52 ID:hQzoi2Tz.net]
- 縦取り系は白番黒番試して、定石の評価値を修正してみました。
あと、AIの進行ごとのパラメータを試行錯誤して、なるべく負けないようにしてみました。 これにより、AIの読み時間が結構伸びて、1ゲームワーストケースで1手2分、トータル 5分くらい思考してしまいます。これは、反復深化などで、タイムアップをせずに、次の ステップに入る制限時間だけ決めているためです。 EDAX+Unified Book先生はレベル21で、黒番白番ともに引き分けになります。 こちらは20手前に定石が切れていますが、その後も最善手が打てているという事になり ます。こちらは何局打っても手を変えないので、EDAX先生のBookの進行に合わせた だけですが。一方zebra先生は比較的手をいろいろ変えてくるので、勝ち負けが発生します (もちろん、各アプリの設定次第ですが)。 序盤定石の評価値をそれなりにしたら、後は引き分け進行をひたすら登録していって、 相手が最善しか着手しないと信用すると負けないプログラムができちゃうのではないか と、ふと思いましたが・・・。トップ同士の対局が引き分けばかりになるのは、こういう事 なんでしょうね。というか、完全解析ってこれが完成した状態なのか。 EDAX先生のUnified Bookは、いくつかの引き分け進行棋譜の集合体のようですが、 元データが幸い既知のWthor形式なので、それをもらってしまうと、トップレベルになる のかなぁ。トップな人がBook構築に主眼を移したり、開発が止まったりする訳だと。 そろそろ、混とんとしているプログラムを綺麗に直して、パクリBook作って開発終了しちゃ おうかと思い始めています。速度的には、まだまだ改善の余地はありそうですが。
- 406 名前:じょげなら ◆kXDiHQuNQ2 mailto:sage [2016/02/29(月) 19:18:07.19 ID:etqtABZA.net]
- ライフゲーム囲碁というゲームのネット対局場を作りたいです。
囲碁でいうKGSみたいなのが理想です。 プログラムはある程度わかりますが、ネット関連の知識が乏しいです。 何から始めればいいですか?
- 407 名前:名前は開発中のものです。 mailto:sage [2016/02/29(月) 19:21:39.28 ID:etqtABZA.net]
- URLがNGワードに引っかかる…
- 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倍程度なら縮められないとは思えない差です。
|

|