今まで作ったプレイヤーの中で最強だった、MinMaxPlayerと対戦させました。これほど強くなるとは思いませんでした。MinMaxPlayerは探索を打ちきるときの局面で勝敗がついてない場合は「勝敗がつかない」という情報を与えるだけなのに対して、SmartMinMaxPlayerはどれだけ有利な局面なのかまで情報を渡してくれるので情報量がまったく違います。考えるとこのくらい強くなるのは妥当なのかもしれません。遅い部分の処理を高速化する。α-β探索を取り入れる。その後はモンテカルロ木を実装してみる。Fourソルバーを作る(3)単純なMinMax戦法をとるプレイヤーを作りました。枝刈りは自分の勝ちが確定した時点で探索を止めるという単純なものを採用しました。8手先まで読むことができます。8手読んでどう頑張っても負けると分かったら、潔く「負けました」と言ってくれます。プログラムソースちゃんと最適化とかしてませんが、上の要件は満たしているはずです。Playerどれくらい強いか?[対AI]今まで作ったAIと対戦させました。GreadyPlayerと戦わせた結果は、92勝8負。前回までの最強プレイヤーを軽くねじ伏せました。[対人間]対人間と言っても僕がプレーしてみただけです。ミスしたら確実についてくるのと、終盤の読みがするどいです。3回やって1回勝てるくらいです。評価関数を真面目に考える。Four既に解かれてる(お互いが最善手を指した場合の結果が分かっている)らしいです。先手の第一手が真ん中の隣なら、引き分け先手の第一手が上記以外なら、後手必勝なんと。数学的にもプログラミング的にも面白いテーマなのでもうちょっと続けようと思います。今日はテストコードを追加しました。GameクラスのwinOfというメソッドをテストしようとしましたが、winOfはprivateなメソッド。privateなメソッドをテストしたいとき、どうするか?JUnitかdjUnitに便利な機能があるかなと思いましたが見つけられなかったので、自前でリフレクションを使ってテストすることにしました。Fourをプレーするプログラムを書いてみました。暇な時更新していきたいと思います。https://github.com/Kenji-H/Connect4次は、DFSとかα-β探索とかを書く予定。あとちゃんと読んでないけど、このサイトが面白そう。その場かぎりのGready戦略を取るプレイヤーを対戦相手に学習(どの手を打つと勝てるか、どの手を打つと負けるか記憶させる)させて、minimax戦略を取るプレイヤーと戦わせたら98%勝利することが出来たらしい。深さがどの程度のminimaxか書いてないのですごいのかどうかはぱっと見では分からないけど、ソースがあるので今度読んで見ようと思う。Postsmemset()とmemcpy()恥ずかしながら、Cのmemset()とmemcpy()を今まで使ったことがなかった。みたいな話を聞いたことがあったので、「あーじゃ要らない機能なんだー。editorialに投稿された解答がmems...便利なPythonライブラリ(5)retryデコレータつけるだけで、リトライしてくれるという便利ライブラリ。失敗するかもしれない不安定な関数に@retryをつけると成功するまで実行してくれる。ret...S3のファイルを一般公開するAWSのS3のファイルを一般公開する方法について説明します。2つの場合に分けて説明します。本番中ゴリ押し解を思いつくには思いついたのだが、C++でマルチスレッドの処理を書いたことが無くて、ごにょごにょやってるうちにタイムアップとなってしまった。C++...C#入門(9)Action、Func、Predicateの違いAction、Func、Predicateについて簡単に整理しておく。メソッドへのDelegate。メソッドへのDelegate。スライド区間に対するクエリ処理の種類とそれに対するアルゴリズムをいくつか紹介します。「スライド区間」の定義ですが、窓関数のようなものを想像してください。まではコンピュータの力を使って正多面体をt色以下で塗るパターン数を数えていました。今回は手計算で計算してみようと思います。そのためにはまず回転を表す対称群をうまく列挙するために回転軸について考える必要があります。見聞きする木の用語を整理しておく。節点vから最も離れた節点をwとする。w)の長さをvの離心数と呼ぶ。記号で表すときは、ε(v)と書く。使って遊んでみました。いった便利な機能を提供してくれるテストフレームワークです。repor...キャッシュヒット率の測定perfというツールを使ってキャッシュヒット率を測定してみた。キャッシュの影響なんてたかが知れていると甘くみていたら、痛い目るので要注意。知らない用語がちらほらあったので、簡単にまとめておく。