Novice_mini 使い方

Novice_miniの使い方が分からないと各所から問い合わせがあったので。

まず、実行環境は現状では mac OSLinux を想定しています。

windowsに関してはビルドしたものを後ほど公開する予定です。

ここでは、mac OSLinuxでの使い方を説明します。

まず、githubからNovice_miniのソースコードを落として来ます。

github.com

その後、srcフォルダ上で端末(terminal)を開き、make all してコンパイルします。

以下から実行に必要な評価関数ファイルと、定跡のハッシュシードファイルをダウンロードします。
(bin.zipにまとめてあります。)

bin.zip - Google ドライブ

最後に、binフォルダ以下にKKP_synthesized.bin、KPP_synthesized.bin、PolyGlotRamdons.binを配置します。

これで、src以下で./Noviceを実行すれば動きます。

Novice_mini ソースコード公開

第28回世界コンピュータ将棋選手権で使用したソースコードを一部変更してNovice_miniとして公開します。

Noviceとの差分は一部探索パラメータや枝刈りが変更されています。

Novice_miniではStockfishのパラメータをほぼ変更なしで使用しています。

もしソースコードにバグ等見つけましたらプルリクエスト頂ければ幸いです。

ソースコードはライブラリ登録しようかなと考えております。

以下、Githubのリンクとなります。

github.com


ちゃっかり以下にAmazonほしい物リスト公開しておきます()

http://amzn.asia/bis9kTX


追記

使い方は以下で解説しています

novice.hatenadiary.jp

第28回世界コンピュータ将棋選手権に参加した話

まず、謝罪から。

二次予選でelmoが反則負けを複数回起こした問題ですが、

どうやら去年自分がk_ohgaさんのsshクライアントを見ながら書いたコードにバグがあったようで、

それを去年の大会の際にelmoの瀧澤さんに渡したことに起因するものだったようです。

これに関しまして、私がしっかりとテストを行わなかったことで瀧澤さんやk_ohgaさんには多大なご迷惑をお掛けしてしまいました。

本当に申し訳ありませんでした。

現在、当バグについて自分の環境で修正を行おうとしていますが再現しておりません。

原因究明が出来次第twitterなどでご連絡できればと思います。

とりあえず、以下にwindowsの機能とbatファイルを用いたsshのエンジン登録について記事を書いておきました。

参考になれば幸いです。

novice.hatenadiary.jp


さて、今回のNoviceですが、結果は56チーム中14位で二次予選で敗退となりました。

半年前の電王トーナメントでPonanzaの一成さんやほかの開発者の方からNoviceなかなか強くならないし努力が足りないと言われ、

反省をして今大会に大学を休学して開発を行ってきました。

レーティングとしては手元の計測(10分+フィッシャー10秒)でApery_sdt5に六割強勝つものになっています。

なので電王トーナメントから約R1000+程度伸びたことになります。

しかし、決勝には進めませんでした。

正直めちゃめちゃ悔しいです。

決勝をみれば分かる通り現状の最強の探索部はやねうら王です。

今回はこれを超えたいと思い開発を続けてきましたが、各所でバグを取り切れずなかなかうまくいきませんでした。

(秋に電王トーナメントがあれば)半年後、今回のくやしさをバネに探索部最強を目指して結果を出しに行きたいと考えています。

大会で使った実行ファイルですがライセンスの問題で公開するか少し迷っています。公開する場合はまた記事書きます。

最後に、研究室のファカルティの先生方や同研究室のメンバー、応援してくださったコンピュータ将棋ファンの皆様、開発者の皆様、

大会運営をしてくださった皆様に本当に感謝をしています。ありがとうございました。

引き続きコンピュータ将棋プログラムNoviceを何卒宜しくおねがいいたします。

外部サーバー上のエンジンを将棋所で動かす on windows 10

手元のノートPCなどの将棋所で外部サーバー上のエンジンを動かす。

まず以下を参考にしてwslを導入する(これはwindows上でLinuxを動かすもの)

www.atmarkit.co.jp

次にコマンドプロンプトから"wsl"と叩いてwsl上に入る。

ssh-keygen をしてssh用の鍵生成を行う。

sshの公開鍵(id_rsa.pub)をサーバー側のauthorizedkeysに追加(ここら辺は普通のsshと同じ)

wsl上からssh出来ることを確認してコマンドプロンプトを終了。

次に適当な場所にengine.bat的なバッチファイルを作成。

そのバッチファイルに"wsl ssh -o ServerAliveInterval=60 username@hostname cd Novice_wcsc28/src \"&"\"&" ./Novice"みたいな感じで書く。(sshのログインと同時にcdで実行ファイルのディレクトリに移動 + 実行を行っている)

後はこのbatファイルを将棋所に登録すれば良い。

コンピュータ将棋にみる人間とコンピュータの今と未来

お久しぶりです。

最近、TwitterをみていたらPonanzaの山本さんの呟きに色々考えさせられました。
そのTweetがこちら


AI(という呼び方は嫌いなのですが)によって失業者が増えるという話は最近色々なところで聞きますね。

でもこれ、今に始まったことなのでしょうか。

コンピュータ将棋の界隈ではよく、人間が走っても車に勝てない(から棋士がコンピュータに負けるのは仕方ない)という話がされます。

現代っ子な私たちは車に負けるのは当たり前と受け入れていますが、

車が開発された当時は現代と同様に受け入れられていたのでしょうか?

人の職業が機械にとって変わられるというのは今に始まったことではありません。

歴史を見ると近代化によって失職する、あるいは雇用条件が悪化するということは200年以上前から起きています。

現代にとって当たり前に受け入れている便利なものは、それが出てきた当時の人にとっては失業を引き起こす原因であったわけです。

しかし、これらは受け入れられ現代に至っているわけです。

なぜか?

私は価値の変化によるものではないかなと思っています。

将棋界では昨年、Ponanzaが佐藤天彦名人に勝つことでコンピュータ将棋が人間を越えました。(実際はもっと前からではとかは今は触れません)

ではそれによりプロ棋士という職業はなくなった、あるいは価値が下がったでしょうか。

羽生さんや、藤井聡太六段の活躍によってより一層、人気が出ているのではないでしょうか。

これが価値の変化だと私は考えています。

今までは将棋が強いということに棋士の価値があったものが、より強いコンピュータ将棋の登場によって棋士本人の人間性やキャラクター、

指す将棋の芸術性に価値が置かれるようになったと考えています。

つまり、コンピュータが人間を越えた時点でそのことにおける人間の価値は減ると考えます。

一方で、コンピュータに出来ることが増えるということは、人間にしかできないことにはこれまで以上に価値が出るのではないかなと思っています。

今後はもっと演劇とか音楽とか文化的なことに需要が増えて、それにお金を払う人も増えて、それを職業にする人も増えていったらいいなぁと思います。

ではこの辺で。

バズワードから考えるAIってなんやねん

SFC-RG Advent Calendar 12/20分の記事です(1日遅れ)
www.adventar.org

最近、AIって言葉流行ってますよね。

kaden.watch.impress.co.jp

人工知能搭載の髭剃りなんてものもあるようです。

AIってなんなんでしょう?

近年、Ponanzaを代表とする将棋プログラムは人間との勝負で対等以上の結果を出しています。

これらのプログラムは将棋AIと呼ばれるようになりました。

これを事例を考えるとAIとは「思考を行っているように見える機械」と定義できるのでしょうか。

しかし、おそらく「将棋AI」と呼ぶ人たちにファミコンの将棋ソフトを渡してこれはAIですと言っても違うと言われるような気がします。

最近の流行りの言葉には「機械学習」があります。

ここで、AIの定義を「機械学習を行っている機械」にしてみます。

では、機械学習とはなんなんでしょう。

本当に簡単なものでは、スマホなどの予測変換なども機械学習の一つであると言えるでしょう。

では、スマホのキーボードは「AI」と言えるのでしょうか。

これもまた違うと言われそうです。

さて、ここでまた流行りの言葉を一つ。「ディープラーニング」です。

これを用いて「ディープラーニングを行っている機械」を「AI」としてみます。

ここまで狭めれば確かに「AI」になるのかもしれません。

ですが、この定義では大半のAIと呼ばれる将棋プログラムはここから漏れます。

そもそも、2016年現在でも「ディープラーニング」で成果を上げてる例なんて身近なことにはほとんどないと思います。

さて、結論としては身の回りに溢れかえってる「AI」は結局何かよくわかりません。

AI搭載の髭剃りって本当になんなんでしょうか。

僕の手には余る内容でしたね。

世の中のすごい人たちがきっとディープラーニング機械学習して人工知能作ってくれるんでしょう。

ではこの辺で。

コンピュータ将棋実装の話

「コンピュータ将棋 Advent Calendar 2016」の二番手の熊谷です。よろしくお願いします!
「コンピュータ将棋 Advent Calendar 2016へのリンクはこちら。
http://www.adventar.org/calendars/1457

何を書こうか未だに悩んでいるのですが、昨日カツ丼将棋さんからリクエストされたNoviceが動くまでの話とコンピュータ将棋の実装周りの話を少し書こうかなと思います。


・Noviceが動くまで

僕はコンピュータ将棋のためだけにプログラミングを始めたのですが、それが去年の3月のこと。

最初は1手先だけ読んで動かせるプログラムを作ろうと思ったのですが、それすらもままならず。

ネットで最初に読むべきソースコードはれさぴょんという話を見て、れさぴょんを読もうとするも全く理解できずに挫折。

まあ今考えればプログラミングを始めたばかりの素人がれさぴょんのソースコードを読めるはずもないわけですがw

結局、全て我流で2ヶ月作ったらなんとか動くものが出来ました。

このときの実装は本当にひどいもので、当時の僕は関数の再帰呼び出しができることを知らず読む深さ分だけ関数を増やすという実装でしたw

まあでも、初めて動いたときの喜びは未だに忘れられないものになっています。

この喜びがNoviceを作り続けることへのきっかけになったと思います。

・コンピュータ将棋実装周りの話

コンピュータ将棋の実装って大変じゃないかと色んなひとに聞かれるのですが、

動かすまでならそんなに難しくないというのが僕の考えです。

段階を踏んで少しずつ実装を行っていけばいいんじゃないかなと思います。

ここでは、その段階の話を書きます。

STEP1 将棋盤で初期局面を表示する
 
 ボードゲームは配列を使って表現するのに非常に分かりやすいものです。

 例えば将棋なら9✕9の計81マスの盤を Board[9][9] などで表現すればいいわけです。

 マスにある駒の表現は数字を使います。

 空きマスなら0、先手の歩なら1、後手の歩なら16みたいなかんじです。

 初期局面を表示するならBoard[0][0] = 17(後手の香) みたいに一つずつ配列に入れていき、

 for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 9; j++)
{
printf("[%d]",Board[i][j]);
}
printf("\n");
}

 のように表示すれば良いわけです。

 ただし、このままだと数字でしか表示されないです。

 これを文字で表示するところは考えてみてください。

STEP2 手の入力を可能にする。
 
 STEP1のままだと、初期局面を表示するだけになってしまいます。
 
 これを、駒をうごかせる将棋盤にしてみます。

 実装は簡単で、scanfでfromの段、筋、toの段、筋を入力してもらい

Board[to段][to筋] = Board[from段][from筋];
Board[from段][from筋] = 0;

として、局面を再度表示すれば将棋盤が出来ます。

 ただし、これだけでは成りの処理などが出来ないので別途その処理も追加する必要があります。

 ここではヒントだけ示しておきます。

 先手の歩の番号は1、先手のとの番号は9であることを考えてみてください。

STEP3 内部の思考エンジンをつくる

 いよいよ思考エンジンを作る所ですが、ここについての記事を以前書いたのでそれを共有し説明とさせて頂きます(ごめんなさい)

 novice.hatenadiary.jp


STEP4 様々なサイトを参考に作りこんでいく

 いくつかお世話になったサイトを紹介させて頂きます。

 うさぴょん作者の池さんのサイトです。
  非常にシンプルな実装になっている解説です。(一番のおすすめです)
  将棋プログラムの作り方

  れさぴょんの解説が載っています。
  コンピュータ将棋のアルゴリズム

 YSSの山下さんのサイトです。
  YSS 7.0‚Ì‹Zp‰ðà

 クマ将棋さんのサイトです。主にソースコードが参考になります。
  http://suzumer.web.fc2.com/simk.htm


STEP5 大会に出る

 世界コンピュータ将棋選手権
 コンピュータ将棋協会

 電王トーナメント
 denou.jp

 以前、強くならないと大会に出ても.....みたいなお話をされている方にお会いしましたが、

 コンピュータ将棋界にはネタ勢という概念があります。弱いからこそ面白い将棋を指すソフトたちです。

 実は現在最強の呼び声高いPonanzaも元々はBonanzaを文字ったネタ勢だったのです。

 なので、ソフトが少しでも動くなら積極的に大会に出るといいと思います。

 コンピュータ将棋界の人たちは非常に良い人、面白い人が多いです。絶対、良い経験になると思います。

STEP6 時には休む

 休憩しましょう。

いかがだったでしょうか?
この記事がコンピュータ将棋を始められる方々のきっかけになれば幸いです。
では、wcsc27でお会いいたしましょう。