読者です 読者をやめる 読者になる 読者になる

euphonictechnologies’s diary

Haskell超初心者の日記です。OCamlが好きです。

follow us in feedly

Swift製のオセロエンジンを公開しました

Swift オセロ iPhone

Swift製オセロエンジンです

苦労に苦労を重ねて書いたおかげでとても遅くて弱いエンジンです。まだまだ若輩者です。

これは何か

オセロAIとオセロ環境、あとオセロエンジンと喋るプロトコルとそれをコマンドラインで動かすためのアプリケーションです。

github.com

github.com

GraphiteとGraphene

オセロエンジンはGrapheneといいます。中にはオセロをやるための盤面クラス、ゲーム進行に必要なクラス、高速な盤面処理のためのビットボード、オセロエンジンのための探索、静的評価当一式が入っていてSwiftで書かれたフレームワークの形をしています。使うためには普通にフレームワークとして取り込んでもらえば大丈夫です。

その使用例がGraphiteです。コマンドラインでEdaxっぽく喋ります。

Grapheneは炭素の薄い膜みたいなやつです。それを集めてGraphiteとなるので部品であるAIはGraphene、遊べるアプリケーションはGraphiteという名前にしました。

何が含まれているか

  • Swiftで書かれたオセロAI
  • 普通のAlpha-beta search
  • そこそこ高速なbit board(まだまだ高速化は足りませんがまあまあぐらいのものが入っています)
  • 前時代的な静的評価関数(それでも作者より強いです。作者がオセロ激弱なだけですが)
  • オセロエンジンのための普通の構造(マシなコード構成になっていると思います)
  • 一部高速化のためにCでintrinsicsを呼び出しています(Cのコード呼び出す良いサンプルになっているかと思います)

何が含まれていないか

  • 強いAIエンジン
    • 本物のEdaxに100先100敗のボロ負けするほど弱いです。
  • 高速なAIエンジン
    • Shallow searchもTransposition tableも何も入っていません。Move orderingすらも入っていないので遅いし深くまで読めませんです。
  • 素晴らしい評価関数
    • それでも評価関数の係数はAWSで金かけて最適化しました。

さらに

そのGrapheneを使ったiPhone用のオセロアプリがFlatReversiです。

github.com

まとめ

そんなわけで最近水面下でやっていたことを少しまとめてみました。 Swiftでなんかやりたい人の参考になれば幸いです。

超かんたんなSwift on Linux用のMakefile

Linux Swift

あると便利

gist.github.com

こんなもので良ければどうぞ。

使い方

$ make
# make buildに同等。ビルドします。
# コンパイルオプションで分けたりしてもいいと思います。
# make buildでデバッグ版、make build_releaseでリリース版とか。

$ make update
# swift package updateに同等。単にタイプ数少なくてすむ

$ make run
# パスは適宜替えてください。

自明ですがどうぞ。

まとめ

風邪を引きました。みなさんもどうぞご自愛ください。

Python Redisでredis.exceptions.ConnectionError: Error 99 connecting to ~~~.com:XXXX. Cannot assign requested address.

Python Redis

が出た

多分大量の接続を作っては切ってを繰り返している。OSがあなたが要らなくなったポートやコネクションを開放するより早くあなたが新しいのを作ろうとしているので足らなくなっている。

対処法

全部おんなじDBへのアクセスならいちいち繋いで切ってを繰り返さない。コネクションプールみたいなものを作って再利用する。そのほうが全体の処理も早くなる。