
今年の7月にメジャーバージョン3をリリースしましたが、リリース前に入れたら下手したら大惨事(といってもロールバックで済むはずですが)になりそうな大改造を控えて、やり切る前に今までの分を出そうとまとめてリリースに至ったわけです。
当然、大改造はまだ片付いておらず、結局改造後の絵が見えている俺にしか分からない小改造を繰り返してリファクタリングするという現場仕事の要領で少しずつ改造してます。これを改造前に人にうまく説明できると分業できそうなのですが、だいたい他に分かる人のいないところでひとり突っ張るということを10年以上やっちまいました。
転職してみると、大手にはもっと出来る人がいるので、鶏頭牛後に関西のデキるSEだと勘違いできた若手の頃の方がモチベも給料も上です。いま親父の店の2階で食費だけで生活しながらプログラミングに打ち込んでますから。ただ通勤しなくていいしテレビは見放題だし、昼飯も週3回ほど買いに行くだけであとは親父が支度してくれて、洗濯までしてくれる。けど病人だからとはいえ、勤めたら月給ナンボだから大きいよなーってたまに思ってしまうんですけどね。だんだん離職期間が長いと再就職が困難で定年年齢に近づくんですが。このまま商店街のひとりの老人になるのでしょうか?
さて、何をしたというと指し手生成部を配列からリストに改造した時にソートを組んで、そのソートがBUGってないかふと気がかりになってコードを見直すと「効いてない」空回りコードになっており、他の改造中の不具合も含めて午前中でやり切りました。
配列とはいえデータ構造的に木構造で、それがリストの木構造になっても大差はないですが、リストの木構造だと親ノードのソートが出来るから長手読みになったら効いて来るはずって、三手読みくらいしかやる気ないけど五手読み試すと3分ほどでした。
前に測った時1分くらいじゃなかったかと思っていたけど10分だったかもしれず。早くなってんのか遅くなってんのか、まあメモリリークもしているし大改造中です。
目標は五手読みの1分切りだったから、1分だったってことはないか。何分だったんだろう?
てか、原初の探索部が配列で実装されているのも俺がしたと言えば俺がしたんですけど、右も左もな時にZ80上がりの凄腕プログラマにメールで解説してもらった部分が配列構造になっていてそのままで、高級言語になったVBならもっと楽な書き方ないかなぁって、けどアセンブラレベルからBASICまで繋がっているから世代間で話題の合うところがあって、俺が突っ走って改造したらそこに断絶が起きるかもだけど、皆さん勉強家だからその心配は無くて、反対に若い人が新しいの持ってきて後れを取っているくらいでちょうどそんな感じかもですが、将棋ソフト業界ではなく将棋ベーシックソフト単体で見ると編纂しているのは俺ひとりです。けど学会が技術交換会の意味を持っていて、どっかのソフトが新しいことすると他の多くのソフトがそれが強かったら追随して、やらずにサボっているとどんどん遅れて行きます。
遥か後ろを走っている将棋ベーシック改にようやく千日手の判定が付いて、千日手判定の出る局面から人間(俺)対ソフト(三手読み)で対局すると勝ててしまうので、論理的最善手が駒得で千日手を出していても勝ちまで行くなら千日手より勝ちの方が結果が良いわけで、千日手の段階で終局まで読み切って勝てると判断出来たら勝ちに行くという論理性もまた成り立つわけですが、論理回路で読めるのが三手先までなので、これは長手読みが3手から15手くらいになっても理屈の上では同じことなんです。
この意志判断が出来るのはAIではなく人間で、プログラマがAIに千日手で諦めるか続きを指すかは命令で先んじてどっちを取るか判断をプログラムしている事になります。
まあ今日は取り掛かる前に落語のテレビを見ていて、丁稚奉公の子供が口上を忘れて家にいる女奉行に尻をつねったら思い出すんですといって、色々あって、最後は大工にくぎ抜きで尻をつねられて思い出して「なんで尻をつねられると思いだせるんだい?」というと「主人に忘れねぇよう釘を刺されていて」で客も誰も笑わなくて、ムカついてテレビ消したんですけど、それは釘を刺されていたがオチなら、話の中ほどで出てくる女奉行につねられて思い出すそのつねりと不整合をおこしてしまうのが「おかしい」と。このおかしいが笑いのツボではなく、釘を刺されてと釘抜きという小さな小咄が最後についている無駄話だったというのに腹が立ち、そう思うと森博嗣の小説も今読んでいる京極夏彦も長すぎて全部覚えきれないから許しているだけでミステリィとして300ページとか700ページ全部に無駄な叙述のない整合性のある話かというと、それはそれで無理筋で、そうかもなと思って俺は大阪のお笑い芸人から商店街の丁稚にみえているのかもなぁ、という苛立ちは親父がスーパーで弁当買って来てくれと頼むのを断れないからだけど、もともとプログラマで将棋ソフト組み上げたのが自信の根拠であって、けどそれが学会の「論理的最善手」という文言との不整合で折れているので、腹を立てるならここをあらためないといけないと思って今回の大改造に火が付いたのです。
まあ腹が立ってやる気が出ただけ我慢して落語を聞いて良かったかもです。
まあ、頭の中に将棋盤を描くと言っても81マスと手駒くらいのもので、それを動かすプログラムというと三手でも数十万ノードになるので、それを頭に描けってのも言われてできる人がいないからコンピュータでやってるんですけど、学会発表は形式的に書類数枚の論文形式にするのが普通みたいですし、大会なら内容もあるけど勝敗表で賞金制なわけです。
そうすると、俺の研究も将棋ソフトの探索部がどっかで少し速くなったらしい、くらいの噂に消えておしまいという物悲しいオチに終わっているので、オチは嫌いです。
なんかもうちょっと出来んかなぁ、というところは考え中ですが、10万ノードくらいの読みには自分で指す方が強いので、これも自作のコンピュータソフトが自分で勝てないくらい強くなってくれた方が作者としては嬉しいけど、勝ててしまうと物悲しさと自尊心がシーソーゲームを始めてしまうんですよね。
んで結局なんやねん、というと中ほどにもう書いたのですが、ソフトが千日手を叩きだした局面から、自分対ソフトをさして先手で勝った、勝ってしまったという話。なぜ三手読みが論理的最善と言えるかというと、持ち時間に応答が返って来ることが本将棋の要件だからで、長手数の方が優れた手を指すとしても、現状のハードとソフトの両面で、これが今の俺の最善だからなんです。
当然、機械学習系も参加のゼロ回戦を突破するには大会期日が締め切りとなってそこまでに学習を終えられる手数がその時点での論理的最善となるわけです。
入賞は出来ていないけど、コンピュータの専門学校というのがチョット舐められ過ぎていないかと思って始めた研究ですが、戦績は下位に甘んじていて悔しい限りです。