2021-02-15に更新

NngsClient.rb を解析しようぜ(^~^)?

ぽふーーー(^~^) 公開下書き

2021-02-06 sat

ramen-tabero-futsu2.png
「 NngsClient.rb を解析しようぜ?」

kifuwarabe-futsu.png
「 ディープラーニングから どんどん遠くなる……」

ohkina-hiyoko-futsu.png
「 さっさと解析を終わらせましょう!」

20210206go5a1.png
20210206go5a2.png
20210206go5a3.png
20210206go5a4.png
20210206go5a5.png

ramen-tabero-futsu2.png
「 ↑ これだけのプログラムなんだが、何日経っても Go言語に書き直せないんだぜ」

kifuwarabe-futsu.png
「 上から順に読んでいけだぜ」

20210206go6a1.png

ramen-tabero-futsu2.png
「 ↑ クラスは こうだろ」

20210206go6a2.png
(※注: ↑ 右のは GTP command ではなく、CUI のクラスが使うイベント・ハンドラのようなものらしい)

ramen-tabero-futsu2.png
「 ↑ オブザーバーは多分、オブザーバー(傍聴者)に向かって GTP コマンドを送信するんだぜ」

20210206go6a3.png

ramen-tabero-futsu2.png
「 ↑ parse は、こう。
文字列を int 型に変換するとか、細かなことは省いたぜ」

20210206go6a4.png

ramen-tabero-futsu2.png
「 ↑ まず 分配して……」

20210206go6a5.png

ramen-tabero-futsu2.png
「 ↑ parse_1 は何か、順繰りになってるんだぜ」

kifuwarabe-futsu.png
「 もっと 簡単に書けんのか……」

20210206go6a6b1.png

ramen-tabero-futsu2.png
「 ↑ parse_9 は 部分として parse_1 を含むぜ」

ohkina-hiyoko-futsu.png
「 構造化プログラミングしなさいよ!」

20210206go6a7.png

ramen-tabero-futsu2.png
「 ↑ はー つら、今日は ここまでほっほ」

2021-02-07 sun

ramen-tabero-futsu2.png
「 どうやったら シンプルになるのか」

20210207go7a1.png
20210207go7a3b1.png
20210207go7a2.png
20210207go7a4.png

ohkina-hiyoko-futsu.png
「 prompt の 5 とか 6 とか 7 って何なの?」

20210207go8a1b1.png
20210207go8a2b1.png
20210207go8a3b1.png

ramen-tabero-futsu2.png
「 ↑ なんか ポツポツ 流れてくる いち、スペース、数字 ほっほ」

kifuwarabe-futsu.png
「 指し手を入力するときも、そうでないときも、同じように流れてくるのは 何でなんだぜ?」

ramen-tabero-futsu2.png
「 割り込みしても いいんじゃないか?」

ohkina-hiyoko-futsu.png
「 じゃあ parse_1 は 入力のタイミングの合図だけなのね」

ohkina-hiyoko-futsu.png
「 1 5 の直後の 1 6 が 対局開始の合図なのよ」

ramen-tabero-futsu2.png
「 めんどくさ……」

ohkina-hiyoko-futsu.png
「 1 6 の後の 1 7 は きっと 整地とか 死に石のウチアゲとかをしてるのよ」

ramen-tabero-futsu2.png
「 省略したいぜ」

ohkina-hiyoko-futsu.png
「 1 7 の後の 1 5 は 対局終了の合図か何かね」

ramen-tabero-futsu2.png
「 なんで 15,16,17 でサイクルしてんだぜ、 わかりづら」

kifuwarabe-futsu.png
「 1 7 は 対局してるんじゃなくて、 多分 死に石 のウチアゲをしてるだけだぜ。
指し手を入力する部分を 使い回しているのだろう」

ramen-tabero-futsu2.png
「 使い回し 止めてほしいぜ」

20210207go9a1.png

ohkina-hiyoko-futsu.png
「 間にスペースのない 15 は、一手指した後か、前ぐらいに ゲーム情報を投げてくるのかしら?」

ramen-tabero-futsu2.png
「 まあ、相手が何秒 時間使ったかは 分かるな。
もっと他に 良い方法が 無かったのか」

kifuwarabe-futsu.png
「 自分が 何秒使ったかが サーバー時間で 分かるぜ」

ramen-tabero-futsu2.png
「 この状態遷移図、 サーバー側の状態遷移が書かれてないから 見づらいぜ」

20210207go10.png

ramen-tabero-futsu2.png
「 ↑ おまとめしたほっほ」

ohkina-hiyoko-futsu.png
「 元のソースに忠実に従うより、 理解した通りに 書き直した方がよくない?」

ramen-tabero-futsu2.png
「 この図に、 オブザーバー がどう対応するのか 図示したいぜ」

20210207go11.png

ramen-tabero-futsu2.png
「 ↑ おまとめしたぜ」

ohkina-hiyoko-futsu.png
「 サーバーから GTPコマンドが送られてきたら、 思考エンジンは 何をしたらいいの?」

20210207go12.png

ramen-tabero-futsu2.png
「 ↑ まあ、いろいろやって 最終的に 上図のように応答しろほっほ」

20210207go13.png

ohkina-hiyoko-futsu.png
「 ↑ うーん、 送られてくる GTPコマンドと、 受け取っている GTPコマンドが 対応付いてない!」

kifuwarabe-futsu.png
「 どこかに 勘違いがないか 調べ直せだぜ」

20210207go14a1.png
20210207go14a2.png
20210207go14a3.png

ramen-tabero-futsu2.png
「 ↑ あの謎の文字列は CUI のクラス の中に書かれてるぜ」

20210207go15a1.png

ramen-tabero-futsu2.png
「 ↑ まだ 見逃しているところがあるかも」

kifuwarabe-futsu.png
「 じゃあ GTP2NNGS は、いったん CUIか何かのクラス を仲介して 思考エンジンに通信してるわけかだぜ?」

ohkina-hiyoko-futsu.png
「 土日で 終わる予定が また 伸びたわよ」

20210207go16a1.png
20210207go16a2.png

ramen-tabero-futsu2.png
「 ↑ このクラスで 送信してるな」

20210207go17a1.png

ramen-tabero-futsu2.png
「 ↑ なんか send の数が少ない気がするが 対応付けを調べてみるか」

20210207go18a1.png

ramen-tabero-futsu2.png
「 ↑ よし、だいたい つながったほっほ」

kifuwarabe-futsu.png
「 囲碁エンジン用と、人間用の 文字列 が混ざってたんだな」

ramen-tabero-futsu2.png
「 コマンドでも何でもないよな」

20210207go19a1.png

ramen-tabero-futsu2.png
「 ↑ CUI で仲介して 思考エンジン用、人間用に振り分けるのを止めて、 思考エンジン専用にしたいぜwww」

2021-02-11 thu

ramen-tabero-futsu2.png
「 今日は何の日だぜ。 なんか 休みだよな」

20210211go20a1.png

ramen-tabero-futsu2.png
「 ↑ 人間プレイヤーの動きを まとめてみたぜ。
対局が終わると ログアウト までするのは GTP2NNGS だけの動きなのか、
大会のルールなのか よく分からんところだぜ」

kifuwarabe-futsu.png
「 この まとめ を元に、ノードと エッジ の2種類に 分けれそうだな」

20210211go21a1.png

ramen-tabero-futsu2.png
「 ↑ 対人戦は このように作ればいいのだから シンプルにできそうだな」

ramen-tabero-futsu2.png
「 しかし プログラミングに入るには まだ むずかしいぜ。
もっと シンプル & リピート にしようぜ?」

20210211go21a2.png

ramen-tabero-futsu2.png
「 ↑ うーん、まだ 状態遷移図になってないぜ、
もう少し 細かいところを詰めようぜ?」

20210211go22.png

ramen-tabero-futsu2.png
「 ↑ うーん、 9 は INFO、 15 は MOVE、 1 は PROMPT」

20210211go23.png

ramen-tabero-futsu2.png
「 ↑ PROMPT の次の数は 5 は WAITING、 6 は PLAYING_GO、 7 は SCORING」

kifuwarabe-futsu.png
「 分かってきたな!」

20210211go21a5.png

kifuwarabe-futsu.png
「 ↑ Move のところが すっきりせんな」

ramen-tabero-futsu2.png
「 激むず」

20210211go24a1.png

ramen-tabero-futsu2.png
「 ↑ うしろに改行が2つ入るタイミングで 正規表現が 計3回マッチしてしまうんで、完全一致にしたった」

kifuwarabe-futsu.png
「 そんなとこ変更して いいのか。また バグを盛り込みそうな気がする」

2021-02-13 sat

20210212pg8a1.png

ramen-tabero-futsu2.png
「 ↑ 正規表現 ヒットしなくなったな、と思ったら 事前に 文字列加工 とか されてるケースがあるから、
他人のコードを見て 自分のコードの書き方と思ってたら、 違って つまづく」

2021-02-15 mon

20210215go29a1.png
ramen-tabero-futsu2.png
「 ↑ 白黒が 反転してしまって つらい」

kifuwarabe-futsu.png
「 ↑ 仕様通りなのでは?」

20210215go30a1.png

ramen-tabero-futsu2.png
「 ↑ マジだった!」

20210215go31a1.png

ramen-tabero-futsu2.png
「 ↑ 応答は返ってくるようになったが、
作業ディレクトリに input ディレクトリや output ディレクトリを事前に作ってないと 強制終了するの 直したい。
あと、 Read は いつまで待機してりゃいいんだぜ?」

kifuwarabe-futsu.png
「 空行が来たら ループを抜けたらどうだぜ?」

<書きかけ>

何度でもクリック!→

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ の最近の記事