将棋ベーシック改のAIは何を読んでいるのか

 「sum of sum of sum」とか「最大値の最大値」という風な噂を耳にして。

 いやツイッターだから目にしたの方が正確だが。どうして分からないかなと考えたとき、ひとつの指し手を求めるのに3つの関数形があって、それぞれ極大が1つずつなので指し手を求めるときに3つの極大を求めてその中からひとつを選ぶ。どう選ぶかというのが難儀なので、現状は3つの関数に重み係数を掛けて係数を掛けた後の値の合計の最大値を取ってる。

 だいたい駒得があればそれがベストだが、序盤で駒得が見つからない時に何をするかというので定跡を使ったとして、定跡から外れると端歩のような手しか指せなかったコンピュータ将棋が囲いや寄せを覚えたってのは進歩だと思うのよね。

 そこから、自分が将棋かなりへぼいので、既に自分で指す相手として十分で。出来ない子は可愛いが、出来る子になると大きくなったペットを施設に預ける的なオープンソースにしちゃったと反省してるんだ。結局、誰にも構われずというかGitHubの運営チームのおかげで保存されててたまに自分で構う。いや正確には幾人かの同業者に見られてケチを付けられて、悔しいから手を入れるというのを何回かやった。

 負けるようになったのはシステムの肥大化で作った本人にも分からない挙動をするからなので、挙動をどう捕まえるかというとプリントデバッグをかけるしかなく、その中で出てきたのが「sum of sum of sum」とか「最大の最大」という感想なのだよな。

 合計とか、最大を求めてるのは分かるけど、関数の関数の関数なのでx,yの関数f(x)しかまだ見たことのない学生さんからは何求めてんのか分かんない、想像もつかないのはそうだと思うんです。分かってもらえないで残念だと最初は思ったけど、そういう感想を持ったということは数学的な視点でコードを読みつつ、当たらずとも遠からずのところを突いているわけで。

 まあ、先の方に答えに近いこと書いたけど、整理するとある局面の3手後に駒得と寄せと囲いの3関数に重みを付けた合計が最大値となる指し手を求めているわけです。


🄫1999-2023 id:karmen