将棋プログラミング

(将棋に関する)ソフトウェア開発のノウハウ等。

Android - ScrollView を2重にする - NestedScrollView

Android で ScrollView を単純に2重に使った場合、一方しかスクロールしないようだ。
NestedScrollView で、2重にスクロール可能となった。
ScrollView では setScrollbarFadingEnabled が使えたが、NestedScrollView では、NullPointerException が発生した。

|java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ScrollBarDrawable.setAlpha(int)' on a null object reference

AlphaZero の棋譜の戦型分析

昨年12月に公開された AlphaZero の棋譜100局の戦型を分析しました。

f:id:ykakinoki:20190105050749p:plain
AlphaZero の棋譜の戦型分析

1.AlphaZero が先手

前回の記事(次)で書いたように、AlphaZero が先手の場合、初手は▲2六歩と▲7八金だけで、49勝1敗です。

ykakinoki.hateblo.jp

   次の手    棋譜数(%)    先手勝率
────────────────────────────
 1.▲2六歩      33 ( 66%)     1.000     33勝      0敗
 2.▲7八金      17 ( 34%)     0.941     16勝      1敗
────────────────────────────
計               50            0.980     49勝      1敗

その戦型は、次のようになりました。

                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
                      (なし):     0   0.0%
  1:                  相掛かり:    33  66.0%    1.000
  2:        横歩取り△3三角型:    17  34.0%    0.941
────────────────────────────
計                                 50   100%    0.980

33局が相掛かりで、AlphaZeroが全勝、17局が横歩取り△3三角型(elmo の選択)で16勝1敗です。

横歩取り△3三角型での△3三角の次の手(17手目)は、次のように、すべて▲5八玉の青野流です。

   次の手    棋譜数(%)    先手勝率
────────────────────────────
 1.▲5八玉      17 (100%)     0.941     16勝      1敗
────────────────────────────
計               17            0.941     16勝      1敗

2.AlphaZero が後手

前回の記事で書いたように、AlphaZero が後手の場合、elmo の初手はすべて▲7六歩で、elmoの9勝41敗です。

   次の手    棋譜数(%)    先手勝率
────────────────────────────
 1.▲7六歩      50 (100%)     0.180      9勝     41敗
────────────────────────────
計               50            0.180      9勝     41敗


その戦型は、次のようになりました。

                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
                      (なし):     0   0.0%
  1:            角換わりその他:    33  66.0%    0.152
  2:          角換わり腰掛け銀:    13  26.0%    0.308
  3:                      雁木:     2   4.0%    0.000
  4:              その他の戦型:     1   2.0%    0.000
  5:                      矢倉:     1   2.0%    0.000
────────────────────────────
計                                 50   100%    0.180

角換わりが46局と大多数です。他は、雁木が2局、矢倉とその他の戦型が1局でした。

なお、AlphaZero の棋譜は、既にプロ棋士に影響を与えている模様です。
www.toyama-shogi.com

AlphaZero の棋譜をデータベースで解析する

AlphaZero の棋譜が公開されました。
この棋譜を柿木将棋IXに付属している棋譜データベースで解析する方法を説明します。

1.AlphaZero の棋譜の入手

次のサイトの "100 AlphaZero-Elmo games (.zip file)." をダウンロードし、展開します。拡張子が .csa のCSA形式の棋譜ファイルが100局あります。
deepmind.com

2.棋譜データベース KifuBase の入手

柿木将棋IXは、Vector で1080円で販売しています。
www.vector.co.jp
また、今回の棋譜は100局なので、次で公開しているフリー版でも使えます。フリー版でも1000局の棋譜を登録できます。
将棋棋譜データベース KifuBase

3.棋譜データベース KifuBase を起動し、AlphaZero の棋譜を登録する。

(1) 棋譜データベース KifuBase を起動する。

f:id:ykakinoki:20181212071844p:plain
KifuBase の起動

(2) AlphaZero の100局の棋譜を登録する。

表操作/フォルダ指定追加のメニューを実行します。
フォルダで、AlphaZero の100局の棋譜のフォルダを指定します。
種類で、CSAを指定します。

f:id:ykakinoki:20181212072132p:plain
AlphaZero の100局の棋譜を登録する。
次のように、登録されます。
f:id:ykakinoki:20181212072432p:plain
登録後の表示

(3) データベースを保存する。

ファイル/名前を付けて保存のメニューを実行します。
例えば、"AlphaZero100"という名で、バイナリ形式で保存します。

f:id:ykakinoki:20181212072840p:plain
データベースを保存する。

4.初手を分析する。

(1) 初期配置の局面検索

柿木将棋Ⅸを起動し、ツール/棋譜データベースで局面検索のメニューを実行します。

f:id:ykakinoki:20181212073840p:plain
棋譜データベースで局面検索
KifuBase では、次のように表示されます。
f:id:ykakinoki:20181212073950p:plain
局面検索
OKを押すと、初期配置の局面検索が実行され、次の手の欄に、初手が表示されます。
なお、表示/表示項目のメニューで、棋戦等の不要な項目は表示しない設定にしています。

f:id:ykakinoki:20181212074230p:plain
初期配置の局面検索結果

(2) AlphaZero が先手

表操作/条件検索のメニューを実行します。
先手を"AlphaZero"とし、OKを押します。
ツール/次の手分析のメニューを実行します。

f:id:ykakinoki:20181212074926p:plain
AlphaZero が先手の場合の初手

AlphaZero が先手の場合、初手は▲2六歩と▲7八金だけで、49勝1敗です。

(3) AlphaZero が後手

表操作/全棋譜表示のメニューを実行し、条件検索で後手を"AlphaZero"とします。

f:id:ykakinoki:20181212075335p:plain
elmo が先手の初手
elmo が先手の50局では、初手がすべて▲7六歩で、elmoの9勝41敗です。

1局を選択し、ツールバーの"次"を押し、ツール/次の手分析のメニューを実行します。

f:id:ykakinoki:20181212075636p:plain
AlphaZero の2手目
AlphaZeroの2手目は、△8四歩が41局、△3二金が9局です。

(3) AlphaZero の成績

ツールバーの"全"を押し、ツール/対局者の統計計算のメニューを実行します。
対局者に"AlphaZero"を入力します。

f:id:ykakinoki:20181212080021p:plain
AlphaZero の成績

AlphaZero は、90勝10敗、平均手数が 204.180 とかなり長いことがわかります。

(4) その他の機能

その他、棋譜形式を一括で KIF に変換したり、戦型を自動認識し、戦型を分析したりもできます。

コンピューターに mfc140.dll がないため、プログラムを開始できません。

ScanSnap iX1500 のセットアップ中に起きた問題を記録しておく。

scansnap/d/ からセットアップするように表示されたが、これは、次の URL にアクセスする。

スキャナーScanSnap ドライバダウンロード : 富士通

ScanSnap と接続する際に、次のエラーが表示された。

f:id:ykakinoki:20181026025954p:plain

OS は、64bit の Windows 7 である。
なお、C:\Windows\System32 に mfc140.dll はある。
この問題は
Download Microsoft Visual C++ 2015 再頒布可能パッケージ Update 3 RC from Official Microsoft Download Center
の 32bit vc_redist.x86.exe をインストールして解決した。
こういう問題が起きるので、MFC は、スタティックライブラリをリンクすべきと思う。

iOS版 Twitter Kit: Attempt made to Log in or Like a Tweet without a valid Twitter Kit URL Scheme set up in the app settings.

iOS版アプリに Twitter Kit を組み込んだ。
インストール方法は、次に説明がある。
github.com

まず、次のエラーが表示され、動作対象を iOS 9.0 以降にしないといけなかった。

error: "TwitterKit doesn't support iOS 8.x and lower. Please, change your minimum deployment target to iOS 9.0"

Tweet すると、次のエラーが表示された。

'TWTRInvalidInitializationException', reason: 'Attempt made to Log in or Like a Tweet without a valid Twitter Kit URL Scheme set up in the app settings. Please see https://dev.twitter.com/twitterkit/ios/installation for more info.'

原因は Info.Plist の記述だった。

<key>CFBundleURLSchemes</key>
<array>
<string>twitterkit-<consumerKey></string>
</array>

と書くべきところ、次のように、空白が一個入っていた。

<key>CFBundleURLSchemes</key>
<array>
<string>twitterkit-<consumerKey> </string>
</array>

Twitter apps dashboard: Error You must add your mobile phone to your Twitter profile before creating an application.

Twitter を使うアプリを開発する際、Twitter apps dashboard にアプリを登録する。
今回、新しいアプリを登録しようとすると、次のエラーになった。

Error
You must add your mobile phone to your Twitter profile before creating an application. Please read https://help.twitter.com/managing-your-account/how-to-add-a-phone-number-to-your-account for more information.

以前は必要なかったが、現在、アプリを登録するには、携帯電話の番号の登録が必要になっていた。
そこで、Twitter のアカウントに携帯電話の番号を登録しようとすると失敗する。
原因は、携帯電話の番号をそのまま登録しようとしたことで、先頭の 0 を消さないといけなかった。
090-XXXX なら、 90-XXXX と登録する。
携帯電話の番号の登録後、アプリを登録できた。
参考:
qiita.com