「角成らず」ツールを開発するとわかること
質問をいただきました。
サイト作成にはどんなツールを使っていますか?
作業を効率化のためにどんなツールを使っていますか?
という質問です。
私はアフィリ作業のためのツールのほとんどは自分で作成します。
これは、自分の必要な事が必要なだけ出来るようにと考えるからです。
余分な機能は要らないし、足らない機能が無いようにと。
これら売る気も無いツール達なので、今現在私しか操作できませんがw
さて先日、プロ棋士と将棋ソフトによる5対5の団体戦「将棋電王戦FINAL」の第2局で、
「永瀬拓矢 対 Selene(将棋ソフト)」の対局が行われました。
結果は、Seleneがプログラム上の問題で「角成らず」を認識できずに反則負けというもの。
ココで出てくるキーワードは「角成らず」。
将棋では、王と金以外の手持ち駒が敵陣内に入ると成りという駒のレベルアップができます。すなわち成ることで明らかに駒が強力になるというもの。
そんな中でも「飛車・角・歩」は、元々の動きにプラス王または金の動きがプラスされるので、通常は成るを選択するのですが、そこを敢えて不利な「成らず」を選択することも可能なのです。
しかし、通常は行われない異例の手。この指し手を将棋ソフトは認識できなかった。だから負けてしまったのです。
では、なぜ将棋ソフトはこの手を認識できなかったのか???
それは、将棋ソフトは無駄な手を読むことを省略することでより早く、より深く手を読める時間が取れます。このため、一部の駒の「成らず」を認識する機能を外すことでソフト自体の性能を高めようとしたわけです。
これはプログラムを組んだことのある人なら、なんとなくは判るでしょう。
【無駄を省くことで効率化を図った】
今回は、それが敗因でした。
通常起こり得ないと省略するのか、起こり得る可能性をすべて対応するのか?
結局これは費用対効果、時間対効果として考えるわけです。
例えば上記の将棋ソフトの場合、「成らず」をプログラムに組み込んだ場合(機能をプラスした場合)、どこにどれだけの影響が出るでしょうか?
その指し手が起きる可能性は極めて少ないですが、プログラムを組み込む時間は膨大な時間になるでしょう。そしてそれを解析する時間も大きく取られてしまうでしょう。
たったこれだけのこと。
と人間の頭では可能なこともプログラムというものでは、ものすごい時間と労力が必要になってくるわけです。
単純にいってしまうと、これまでのプログラムにたった一つのチェック項目を、しかも2択として追加するだけで、処理時間は2倍になります。チェック項目を2つ増やせば4倍かかります。
それが判ると効率化を図りたくなり、またチェック項目を外したくなるわけですね。たった1項目減らすだけで倍の速度になるのですから。
まとめると、
ツールやソフトといったものは効率化を図れば、対応できる範囲が狭くなるが対応時間やデータは少なくなる。抜け漏れを防ぎ網羅してけば、対応範囲が広くなるが対応時間やデータは巨大化してまう。
そこで、自作でツールを作るようになると、「必要な項目が必要な分だけあればよい」となるわけです。
だから、私は自作のツールを作ってアフィリ作業に活用しているのです。
そして、このあたりが判ると検索エンジンのアルゴリズム変動についても少し頭がまわるようになってきます。
この続きは別の記事で書こうと思います。