TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

2019-08-01から1ヶ月間の記事一覧

ref localでC#のコードを高速化する

C#

.NET Frameworkと.NET CoreでDictionaryの性能が異なる。ランダムな整数をキーとして、AddとTryGetValueを5000000回行った結果10回の平均時間(ms)は以下の通りである。 バージョン Add TryGetValue .NET Framework 4.6 681.8 268.5 .NET Core 2.1 585.9 266.…

cshogiのビルド済みパッケージ

cshogi(Pythonの高速な将棋ライブラリ)をインストールするには、CythonとC++コンパイラが必要で、コンパイルに時間がかかっていた。 Google Colabでインストールを実行すると1分近く待つ場合があった。そこで、待ち時間をなくしてすぐに試せるように、ビル…

Google ColabでUSIエンジン同士の対局を行う

Pythonの高速な将棋ライブラリcshogiにUSIエンジン同士の対局機能を追加した。先日、cshogiにJupyter Notebook上で盤面をSVGで表示できるようにしたが、その機能を使って対局中の盤面を表示するようにしている。 これによって、Google Colab上で、USIエンジ…

Pythonのタプルのリストから列を抽出する

Pythonで、タプルのリストから列を抽出する3種類の方法を比較してみた。次のような要素が2つのタプルのリストからそれぞれの列を抽出する場合を考える。 抽出前 [('a', 1), ('b', 2), ('c', 3), ('d', 4)] 抽出後 (['a', 'b', 'c', 'd'], [1, 2, 3, 4]) 方法…

.NET Coreでログ出力する方法

「C# ログ出力」で検索するとlog4netの情報が見つかるが、.NET Coreのアプリの場合、設定ファイルのlog4net.configを読み込むことができなかった。 NLogを使うと、あっさり解決できたのでメモを残しておく。内容はほぼチュートリアル通り。 NLogをパッケージ…

Prioritized Experience Replayのsum-treeの実装

つくりながら学ぶ!深層強化学習のPrioritized Experience Replayの実装は、説明をシンプルにするためReplay Memoryを線形で探索する実装が紹介されていた。 つまり、各transitionのTD誤差を優先度として、0からReplay Memoryの優先度の合計の間で、ランダム…

Pythonで将棋の盤面をSVGで表示する

以前に作成したPython向けの高速な将棋ライブラリ「cshogi」に、盤面をSVGで表示する機能を追加した。Jupyter Notebookで実行すると、以下のように盤面が画像で表示されるので視認しやすくなる。 from cshogi import * board = Board() board 歩香桂銀金角飛…

Windows上でPyTorchを使って強化学習を試す

以前はOpenAI GymはWindowsに対応してなかったが、以下のようにpipからインストールするだけで動くようになっている。 atariも問題なく動く。 pip install gym pip install gym[atari]ただし、env.render()で描画するとウィンドウの位置変更などができないと…

将棋AIの進捗 その33(末端ノードでの詰み探索)

dlshogiでは末端ノードで短手数(7手)の詰み探索を実施しているが、終盤ではゲーム木中に詰みの局面が多くなり、王手の合法手も多くなるため、探索速度が大幅に低下することがあった。 先日、MCTSにAND/OR木を組み込む実装を行ったことで、MCTSで詰み探索を行…

迷路を方策勾配法で解く

最近買った「つくりながら学ぶ!深層強化学習」という強化学習の本で、迷路を方策勾配法で解くという内容が記載されていたが、数式展開がなく自分で式を導出するのに苦労したのでメモを残しておく。 この本の迷路の問題の内容は、Webにも掲載されている。 第…

SocketでC#とPythonを連携する

先日、gRPCでC#とPythonを連携する方法について書いたが、Pythonで受信したProtobufのデータを処理すると実行速度に問題があることがわかった。 速度が必要なケースでは、Protobufの使用はあきらめた方がよさそうだ。今回は、シンプルにSocket通信でデータを…

LinuxでC#からC++で作成した共有ライブラリを呼び出す

cmakeでC++の共有ライブラリプロジェクトを作成する CMakeLists.txt cmake_minimum_required(VERSION 3.8) project(SampleDll) enable_language(CXX) add_library(SampleDll SHARED sample_dll.cpp ) sample_dll.cppに、C++で処理を記述する。 Windowsでも使…

WindowsでPyTorchをC++(Visual C++)で動かす

WindowsでPyTorchをC++のサンプル(MNIST)をVisual Studio 2017でビルドして動かす手順のメモです。 LibTorchのインストール https://pytorch.orgのQUICK START LOCALLYから、Stable/Windows/LibTorch/C++/10.0(CUDAのバージョンが10.0の場合)を選んでlibtorc…

将棋AIの進捗 その32(MCTSの探索にAND/OR木を導入する)

Leela Chess Zeroの状況を定期的にウォッチしないとなと思って、issueを眺めていたら"Exact-Win Strategy for Overcoming AlphaZero" #799という投稿がされていた。 Leela Zeroのissue#2276にも同様の投稿がある。 ざっくり説明すると、子ノードが勝ちの場合…

AlphaStarについて

次回の技術書典に、参加している強化学習の勉強会のメンバで合同誌として頒布を行うべく執筆を行っている。 自分は、ネタとしてAlphaStarについて選んだのだが、書く内容がまとまらないのでブログにもアウトプットすることにする。 AlphaStarについて Google…

Visual Studioを使わずにNuGetのパッケージを検索する

Microsoft系のプログラミング言語では、NuGetを使用するとパッケージインストールが楽にできる。 しかし、NuGetは基本的にVisual Studioから使うことが前提になっている。 .NET Coreは、Visual Studioを前提としていないため、Visual Studio使わずにNuGetの…

gRPCでC#とPythonを連携する

C#のプログラムから機械学習などの処理をPythonで実装したい場合がある。 C#とPythonの連携方法について調べたところいくつか方法があったが、gRPCが良さそうだったので試してみた。 調べた方法 Python for .NET C#とPythonを直接連携させるには、「Python f…

Visual Studio 2017に.NET Core 2.1を追加する

ほぼ自分用のメモです。Visual Studio 2017がサポートしている.NET Coreのバージョンは2.1.508だが、先により新しいバージョン2.1.801をインストールしていたため、アンインストールしてから、Visual Studio Installerから「.NET Core クロスプラットフォー…