将棋ソフト開発(仮)

将棋のソフトを作るのです。趣味で。

ソフトの強さ、人間の強さ

自宅のディスプレイが壊れて昔のブラウン管に・・・

なんと言う画質の悪さ。

字がぼやけて読むのも一苦労。

 

さて、人間とコンピュータ、どちらが強いのか。

ですが、これはなかなか難しい問題で、

 

ただ、私の見解としましては、おそらく皆様が思っているよりは

ずっと人間のほうが強い、と思います。

場合によってはアマの全国クラスのほうが最新スペックのソフトより強いかもしれません。

ただこの時、勝率はソフトに軍配が上がると思います。

 

 

そして、アマの全国クラスはプロ中堅辺りには全く歯が立たないのに対して、

ソフトは素晴らしい将棋を指した上で勝ちに行くこともできるわけです。

 

こうゆうのを見て、一般のかたはソフトのほうが強いって思うのかもしれませんけど、

そうじゃないんですよねぇ。将棋と言うのは。

 

ソフトは抜け目がないのでプロ相手にも勝ちに行けるわけですが、

それは思考プロセスの違いと言うやつで、強さの違いとは少し違うのです。

 

人間が格上に歯が立たないのは、それは人間が人間たる所以であって、

ソフトの思考プロセスだとそれがまかり通ったりもするわけです。

 

ソフトと人間の違いと言うのは、書いても書きつくせないくらいいっぱいあって、

単純な強さの優劣を付けることはすごく困難です。

そう言ったことも追々少しづつ書いて行こうかと思います。

 

 

コンピューターが最上位のプロであろうと、4段のフリークラスであろうと、アマ強豪であろうと、いい勝負を行うのは、

今までの将棋の常識では考えられなかったことです。

 

そこまでソフトが強い、と言う事ではなくて、

普通アマ強豪は最上位のプロとはいい勝負できないんです。

でもソフトはできるんです。すごいですね。

で、たぶん最新スペックのソフトの本来の実力は、奨励会上位クラスなのです。

(この言い方がいちばんしっくりきます。人間を物差しにソフトの実力を測定するときは奨励会が一番比べやすいです。素早く読む人が多いから)。

 

だからソフトのほうが強いんじゃん、ってのが今までの常識での

強さの測定法であって、

そこの部分の常識についてソフトは見事にひっくり返したと思います。

 

具体的にどうゆうこと?

というと、そこはまた次回と言う事で。

 

 

ああ、それにしても、字がほとんど見えない・・・

現在プログラミングも中止中ですよまったくもう。

 

ソフトの特徴

さて、私の将棋ソフトについて少し書いてみようかと思います。

と言っても、実は何度も最初から作り直してるので、

実は現時点では進行度は0に近い状態です。

 

別に作り直さなくてもそのまま作って行けるか? と言われれば作っていけるのですが、

どうも気持ち的な問題で一度作った物を全部リセットしてしまいます。

 

なので、どんなソフトなのか?と言うよりもどんなソフトにしたいのか?

と言うほうが適切かもしれませんね。

 

 

まず、既存のソフトとはかなり違った内部仕様になるんじゃないかと思います。

 

例えば、現在私が知ってるソフトは全て評価関数と言うのを持ち、

盤面に対して点数を付けております。

そして、将棋上合法の差し手を次々と検索していって、

未来の推定盤面を算出し、一番点数が高くなるような差し手を選ぶわけですね。

 

だから、今あるソフトは簡単に言えば、差し手を全検索(に近いようなこと)をして、

次々とその盤面に点数をつけていくわけですが、

私はそれとは少し違うソフトを作ってみようと思ってるわけです。

 

一応盤面の評価点は出せるようにはなってるのですが、

出さなくても動作します。

もちろんコンピューターなので数値を出し評価する、と言う事は必ずやりますが、

他のソフトは盤面全体であるのに対し、私のソフトはそれとは違った数値を出しています。

 

そして、様々な種類の点数を算出します。

例えば、学校では、国語、数学、物理、科学、政治、歴史、体育、家庭科、音楽・・・

などと様々な教科があって、それぞれに点数がつくように、

私のソフトでもそれをやる、と言うわけですね。

この時、国語の点数と音楽の点数は全く別物なのであります。

 

盤面全体の評価だと、全教科の合計点数みたいなもので、

個人の総合能力は分かりますが、その内訳がどうなってるのかはさっぱりです。

 

このように点数を細分化すると、

政治の点数が高ければ盤面を意図的に政治の勝負に持ち込むことが可能になったり、

どのくらい自分が攻撃してるのかが判断できたり、

現実的に玉がどの程度危ないのかを出してみたり、

詰みをどの程度の意識で検索してよいかが判別できてみたり、

ソフトの棋風を調節したり、現在の盤面がどうなっているのかを判別したり、

あとから棋譜の検証が楽になったり、プログラムの調整が楽になったりと、

そのほか様々なメリットを持ちます。

 

また、盤面が一様に総合評価であると、

状況による点の付け方が困難になってくる場合もあるので、

細分化した点数はその辺もカバーしています。

 

人間だと、

序盤、中盤、終盤、自分の形、相手の作戦、その相性、

と言ったところで同じ自分の形でも点数の付け方は変わってきますよね。

点数を細分化することで、そういった状況判断による自己評価がしやすくなってくるわけです。

 

と言うわけで、私のソフトではいわゆる「盤面評価関数」と言うのは採用してません。

 

 

定跡の取り扱いに関しても違いがあります。

私のソフトは丸暗記形式の定跡はあまり重点をおきません。

そのかわり、序盤での計算内容は (定跡ファイルのように) 保存され再使用されます。

ソフトは駒がぶつからない序盤は損得の計算を苦手とするのですが、

この処理をファイルに保持することで、膨大な序盤の盤面も計算できるようにしようという趣旨です。

ただし、これはファイルのサイズが常識外れになったと言う問題を抱え始めたため、

却下になる可能性も残されています。

 

 

あとは、検索システムもかなり違うんじゃないかと思います。

あまり詳しくは書きませんが、現在のソフトは、

今の局面から順番に合法的な手をどんどん試して行って・・・

みたいな方式だと思うのですが、私のソフトはそれとは少し違う方式を取ります。

例えば、先に目標やゴールを設定して、みたいなこともおこないますし、

突発的に存在しない駒を仮定して、玉の耐久度を測り始めたり、

戦闘地域を推定して、入手できそうな駒と出来なさそうな駒を仮定して形の良し悪しを考え始めたり、

けっこう複雑なことをし始めます。

 

中でも一番違う (と私が思ってる) のが検索の物量作戦についての考え方です。

現在のソフトは、検索数が多ければ強いという風潮があり、

同じ時間内により多くの検索ができるよう動作の速度を速める方式が主流ですが、

私のソフトはあまりそういった考えはとっていません。

むしろ、検索速度は他のソフトの 1/1000 程度にまで落ち込んでいても構わないとさえ思っています。

 

すごく簡単に言うと、有り得ない手の検索の見切り、

と言う事に重点を置くわけですが、

 1: 有り得ない手は徹底的に検索しない 

 2: ありえる手なのに見限らない

の2点に重点がおかれます。

 

もう少し書くと、この表現も少し間違っていて、

例えば現在のソフトは

「一度全ての指し手を検索し、その中から検索不要な手を探す」

と言うことをおこなっています。いわゆる消去法ですね。

力押しの総当り検索はコンピューターの得意分野です。

(なので1億盤面検索した、と言っても、棋力面には直結しない場合も多いです)。

 

逆に人間は「手を見つける、手を作る」と言う考えで将棋を指します。

その人間が1億盤面も検索したら、それは序盤から終盤まで読み切っているレベルで、

同じ1億盤面でも、全然違うわけですね。

ソフトの1億盤面は、次の1手を読み切るだけの効果に過ぎません。

 

私のソフトは、この人間的な 「手を見つける」 と言う事にもある程度重点をおいています。

 

そうゆう設計方針を採っているので、検索速度は他のソフトの 1/1000 以下でも構わないと思っています。

検索に処理時間を使うのではなく、判断に処理時間を使うということですね。

 

ただ、この方式は検索の切捨てと採用を一つでも間違うとえらいことに・・・

なのでまず今は「絶対に有り得ない手」をいかに精度よく大量に算出する、と言う所に力を入れています。

 

もしくは一切検索する前から精度良く検索対象を特定する、と言う所にも力を入れています。

これはすごく難しいです。情報を取り入れる前に情報を判断することなので・・・。

(プログラマーの方はお気づきかもしれませんが、私のソフトは何段階にも分けて様々な情報の整理が行われています)。

 

 

まだ既存のソフトとの違いはいっぱいあると思うのですが、今回はこの辺で。

 

そうそう、今さらですが私のソフトは一般向けではないと思います。

動作環境もちょっと特殊で、皆様のPCではそのまま動かないと思うのですが、

それ以前に、ソフトのサイズは少なくとも2T以上です。

メモリは最低でも20GB使います。

CPUは最低10コアは必要です。

なんて言われても困りますよね。

 

最初の記事

やっほい。誰も読んでないとは思いますが皆様やっほい。

 

文才はないし、そもそもブログを書く必要性もないんでございますけども、

こうゆうのを書いていたほうが開発のモチベーションが上がると言う物でございます。

 

さて、私が作っているソフトですが、

公開はしてません。と言うよりソフト名すら決まってません。

作っているのは思考エンジンのみで、現在USIと言うプロトコル上のみで動作します。

将棋のルールは覚えてくれたみたいで、最近はほぼ反則をしません。

たまに原因不明の意味の分からない反則をします。

困ったものですね。

 

別に仕事の一貫で作っているわけでもなく、ほぼ趣味のようなものなので

いつまとまった形になることやらか・・・

最近のソフトの傾向だと、プロと戦ってもまともな対局になるくらいが目安だと考えてはおりますが、

果たしてそこまでたどり着けるものなのかどうなのか・・・

 

ソフト自体は公開する予定は全然なくて、

開発に関わることじゃなくても、

将棋のソフトに関して、なにかいろいろなことを書いていけたらな、

と思います。