将棋プログラミング

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

Xcode 15 に更新した際の問題

Xcode 14.2 で開発したアプリを App Store Connect にアップロードしたところ、次の問題が表示された。

SDK version issue. This app was built with the iOS 16.2 SDK. Starting April 29, 2024, all iOS and iPadOS apps must be built with the iOS 17 SDK or later, included in Xcode 15 or later, in order to be uploaded to App Store Connect or submitted for distribution.

Xcode 15 で開発しないといけない、とのことなので、Xcode 15.2 に更新した。
なお、Xcode を更新するとプロジェクトも変更が必要になるので、元のプロジェクトはバックアップしておくことが望ましい。
ビルドすると、次のエラーが表示された。

clang: error: SDK does not contain 'libarclite' at the path ...

動作対象OSを上げないといけないらしい。
そこで、deployment target を 9.0 から 13.0 に変更した。

次に、次のエラーが表示された。

A function declaration without a prototype is deprecated in all versions of C ...

使用しているライブラリが古く、pod update が必要なようなので、これを実行したが、次のエラーが表示された。

requires CocoaPods version `>= 1.12.0 ...

そこで、次のコマントで、CocoaPods を 1.12.0 にアップデイトした。

sudo gem install -n /usr/local/bin cocoapods -v 1.12.0

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

DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead

これは、CocoaPods を 1.13.0 以上にする必要があるらしいので、次のコマントで、CocoaPods を 1.13.0 にアップデイトした。

sudo gem install -n /usr/local/bin cocoapods -v 1.13.0

この後、pod update を実行し、ようやく、エラーなくビルドできるようになった。

Windows:プログラムの終了

Windows で、MFC を使い、プログラムを終了する場合、次のコードを実行する。

	ASSERT(AfxGetApp()->m_pMainWnd != NULL);
	AfxGetApp()->m_pMainWnd->SendMessage(WM_CLOSE);

ただし、このコードは、タイマーから起動された場合等で、異常終了する場合がある。
その場合、次のコードで、解決する場合がある。

	ASSERT(AfxGetApp()->m_pMainWnd != NULL);
	AfxGetApp()->m_pMainWnd->PostMessage(WM_CLOSE);

learn.microsoft.com

Android: Gradle と Java のバージョン

新しい PC で、Android Studio (Giraffe | 2022.3.1) をインストールし、従来のプロジェクトをビルドしようとしたところ、次のエラーが表示されるようになった。

Gradle project sync failed. Basic functionality.
Unable to make field private static final java.util.Map ...

これらのエラーは、色々な原因で起きるようだが、色々やってみた結果、Java のバージョンが新しいことが原因だった。

Android Gradle Plugin (AGP) Version: 3.3.3
Gradle Version: 4.10.1

この場合、Gradle で Java 21 や Java 17 を使うと、上記エラーになる。
Java 8 にすると、エラーなくビルドできるようになった。
なお、この AGP の Version は古いので、その後、更新した。

Gradle Version の設定は、File - Project Structure の Project でできる。
Java の設定は、File - Settings - Build... - Build Tools - Gradle でできる。


別のプロジェクトでは、次のエラーが表示された。

Android Gradle plugin requires Java 11 to run. 
You are currently using Java 1.8.

こういうエラーメッセージは、わかりやすい。

Android Gradle Plugin Version: 7.0.0
Gradle Version: 7.0.2
の場合、Java 17 にすると、エラーが解決した。


さらに、別のプロジェクトでは、次のエラーが表示された。

Unsupported Java. 
Your build is currently configured to use Java 17.0.6 and Gradle 6.7.1.

Possible solution:
 - Upgrade Gradle wrapper to 7.2 version and re-import the project

AGP Upgrade Assistant を使い、次の設定にしたところ、ビルドできるようになった。

Java: 17
Android Gradle Plugin Version: 7.4.2
Gradle Version: 7.5

Android Gradle プラグインと必要な環境は、次に説明されている。

developer.android.com


Android Gradle プラグイン(AGP) のバージョンと必要な Gradle のバージョン

3.3.0 ~ 3.3.3 : 4.10.1 以降
4.2.0 以降 : 6.7.1 以降
7.0 : 7.0 以降

また、必要な Java のバージョンや SDK Build Tools のバージョンも書かれている。
ただし、こういった様々なバージョンを合わせていくのは面倒なので、AGP Upgrade Assistant が便利だとわかった。
なお、AGP Upgrade Assistant を使った場合でも、Java のバージョンは更新されず、ビルドエラーになる場合もあった。

Android Studio のバージョンと必要な AGP のバージョンは、次のリリースノートに書かれている。

developer.android.com


Giraffe | 2022.3.1 の必要な AGP バージョンは、3.2 ~ 8.1 とある。

また、API レベルと Android Studio の最小バージョンと AGP の最小バージョンも書かれている。
2023年12月の時点で、必要な API レベルは 33 (Android 13) なので、Android Studio の最小バージョンは Flamingo | 2022.2.1 だが、今後、必要な API レベルが 34 (Android 14) になった場合、Hedgehog | 2023.1.1 以上にアップデイトすることが必要になる。

Android Studio のプロファイル

Android アプリのある機能の実行が遅く、

「***」は応答していません

が表示されていた。

入力イベントに対する応答が 5 秒以内にないと、この ANR ダイアログが表示されると説明されている。

developer.android.com

それで、Android Studio のプロファイルを使ってみた。

developer.android.com

developer.android.com

次の手順で、各 Method の実行時間を計測できる。

1. ツールバーの [Profile] をクリック

2. + をクリックし、デバイス等を選択

3. [CPU] タイムラインの任意の場所をクリックして CPU Profiler を開く。

4. 記録構成の Java/Kotlin Method Sample (legacy) を選択(図1)

5, Record をクリックし開始(図1)。Stop をクリックし停止。

最初、CPU Profiler を開く部分がわかり難かった。

図1 記録構成

次の図は、実行結果の例だが、onPostExecute() 内の load() 内で実行している replaceAll() が非常に遅く、78% の時間がかかっていることがわかった。
これを書き換えたところ、load() の実行時間は、6754 ms から 537 ms になり、1/10 以下に高速化できた。
別の部分でも、遅い部分がわかり、書き換えたところ、 6890 ms から 1185 ms に高速化できた。

図2 結果

java.lang.NoSuchFieldError: No field Companion of type Lokhttp3/RequestBody$Companion;

Android で使っているライブラリを更新したところ、次の Crash が起きた。

java.lang.NoSuchFieldError: No field Companion of type Lokhttp3/RequestBody$Companion;

次のように、com.squareup.okhttp3:okhttp: のバージョンを上げる必要があった。

dependencies {
//    implementation 'com.squareup.okhttp3:okhttp:3.3.1'
↓
    implementation 'com.squareup.okhttp3:okhttp:4.10.0'
}

square.github.io

第33回世界コンピュータ将棋選手権の戦型分析

今年(2023年)の第33回世界コンピュータ将棋選手権の棋譜266局の戦型を分析しました。

1.棋譜の入手

棋譜ファイルは、次の CSA のサイトから入手できます。

www2.computer-shogi.org


第33回 (2023年5月3,4,5日) から wcsc33_kifu.zip をダウンロードし、展開します。
拡張子が .csa のCSA形式の棋譜ファイルが266局あります。

今回は、評価値・読み筋付きです(送られた場合)。
ファイル名の形式が昨年までと違います。
なお、今回、棋譜ファイルを作成したのは、僕のソフトですので、問題がある棋譜がありましたら、お知らせ下さい。

2.戦型の自動判別

柿木将棋Ⅸを起動し、ツール/棋譜情報の一括設定 のメニューを実行します。

「フォルダ」で、CSA形式の棋譜ファイルがあるフォルダを指定します。
「入力」で CSA、「出力」で KIF を選択します。
「戦型を自動設定」をチェックします。
OK 押すと、CSA形式の棋譜を読み、戦型を自動判別し、KIF形式に変換し、保存します。

棋譜情報の一括設定

3.棋譜データベース KifuBase に登録

柿木将棋IXに付属する棋譜データベース KifuBase を起動します。

www.vector.co.jp

表操作/フォルダ指定追加 のメニューを実行します。
フォルダで、選手権の棋譜のフォルダを指定します。
種類で、KIF を指定します。

フォルダ指定追加


ファイル/名前を付けて保存 のメニューを実行します。
例えば、"第33回選手権"という名で、バイナリ(KBK)形式で保存します。

保存

4.決勝

表操作/条件検索 のメニューを実行し、ファイル名に "33-F" を入力し、OKを押すと、8チームによる決勝の28局が表示されます。

図 決勝

4.1 決勝の統計計算

ツール/統計計算 のメニューを実行すると、決勝の28局の勝率・平均手数等が表示されます。

2023年決勝
────────────────────────────
棋譜数    :    28
先手勝ち   :    19  宣言勝ちを含む
後手勝ち   :     9  宣言勝ちを含む
先手宣言勝ち :     1
後手宣言勝ち :     1
千日手    :     0
持将棋    :     0
中断     :     0    320手
先手勝率   : 0.679  19勝9敗
後手勝率   : 0.321
平均手数   : 176.250  千日手を含む
平均手数   : 176.250  千日手を除く
────────────────────────────

入玉宣言勝ちは3局、千日手はなかったです。
なお、千日手は、一次予選、二次予選でもありませんでした。
決勝7回戦:アストラ将棋-東横将棋の51手、二次予選3回戦:ponkotsu-やねうら王の42手と67手で、千日手を打開しています。
過去の選手権で、千日手0はあったか、思い出せません。

320手で引き分けとなった棋譜(中断)は、なかったです。
先手勝率は、0.679 と、大きく上がりました。
2022年は 0.583 でした。
平均手数は、約176手と、今年もかなり長いですが、昨年(約194手)より短くなりました。

参考として、2022年の決勝のデータは次でした。

2022年決勝
────────────────────────────
棋譜数    :    28
先手勝ち   :    14  宣言勝ちを含む
後手勝ち   :    10  宣言勝ちを含む
先手宣言勝ち :     0
後手宣言勝ち :     0
千日手    :     2
持将棋    :     0
中断     :     2
先手勝率   : 0.583  14勝10敗
後手勝率   : 0.417
平均手数   : 188.536  千日手を含む
平均手数   : 193.615  千日手を除く
────────────────────────────

参考として、2021年の決勝のデータは次でした。

2021年決勝
────────────────────────────
棋譜数    :    28
先手勝ち   :    14  宣言勝ちを含む
後手勝ち   :    11  宣言勝ちを含む
先手宣言勝ち :     1
後手宣言勝ち :     1
千日手    :     3
持将棋    :     0
中断     :     0
先手勝率   : 0.560  14勝11敗
後手勝率   : 0.440
平均手数   : 175.071  千日手を含む
平均手数   : 185.680  千日手を除く
────────────────────────────

参考として、2019年の決勝のデータは次でした。

2019年決勝
────────────────────────────
棋譜数    :    28
先手勝ち   :    14  宣言勝ちを含む
後手勝ち   :    12  宣言勝ちを含む
先手宣言勝ち :     2
後手宣言勝ち :     2
千日手    :     2
持将棋    :     0
中断     :     0
先手勝率   : 0.538  14勝12敗
後手勝率   : 0.462
平均手数   : 190.143  千日手を含む
平均手数   : 200.308  千日手を除く
────────────────────────────

4.2 決勝の戦型

決勝の戦型は、次の通りです(ツール/戦型分析)。

今年も昨年同様、相掛かりが12局(42.9%)と最多ですが、昨年の8局より増えました。
ただし、相掛かりの先手勝率は、下がっています。
昨年、6局あった振り飛車が無くなりました。
角換わりは10局と増えました(昨年は6局)。
なお、▲5六銀、または、△5四銀とする角換わり腰掛け銀は1局だけで、早い桂跳ねの仕掛けが多かったです。
昨年、6局あった矢倉が無くなりました。
横歩取りは、3局ありましたが、後手は0勝でした。

2023年決勝
                  戦型         棋譜数  割合(%)  先手勝率 先手勝ち 後手勝ち
──────────────────────────────────────
  1:                  相掛かり:    12  42.9%    0.667         8       4
  2:            角換わりその他:     9  32.1%    0.667         6       3
  3:            横歩取りその他:     3  10.7%    1.000         3       0
  4:                      雁木:     2   7.1%    0.500         1       1
  5:              その他の戦型:     1   3.6%    0.000         0       1
  6:          角換わり腰掛け銀:     1   3.6%    1.000         1       0
──────────────────────────────────────
計                                  28   100%    0.679        19       9
角換わりは、計10局

参考として、2022年の決勝の戦型は、次でした。
相掛かりが8局(28.6%)と最多ですが、前年の13局より減りました。
前年、1局もなかった振り飛車が計6局と大きく増加しました。
角換わりも6局(前年と同じ)、矢倉も6局(前年は4局)です。

2022年決勝
                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:                  相掛かり:     8  28.6%    0.833
  2:                      矢倉:     6  21.4%    0.000
  3:          角換わり腰掛け銀:     4  14.3%    0.750
  4:          角交換型振り飛車:     3  10.7%    1.000
  5:                  三間飛車:     2   7.1%    0.000
  6:            角換わりその他:     2   7.1%    1.000
  7:                  四間飛車:     1   3.6%    1.000
  8:            横歩取りその他:     1   3.6%    0.000
  9:                      雁木:     1   3.6%    1.000
────────────────────────────
計                                 28   100%    0.583
角換わりは、計6局
振り飛車は、計6局

参考として、2021年の決勝の戦型は、次でした。
2021年は、相掛かりが13局(46.4%)と最も多く、角換わりが6局、矢倉が4局と続きます。
相掛かりが急増した年でした。

2021年決勝
                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:                  相掛かり:    13  46.4%    0.500
  2:            角換わりその他:     5  17.9%    0.750
  3:                      矢倉:     4  14.3%    0.667
  4:              その他の戦型:     2   7.1%    0.500
  5:          角換わり腰掛け銀:     1   3.6%    0.000
  6:                      雁木:     1   3.6%    1.000
  7:        横歩取り△3三角型:     1   3.6%    1.000
  8:          角交換型振り飛車:     1   3.6%    0.000
────────────────────────────
計                                 28   100%    0.560
角換わりは、計6局
※1回戦 PAL - elmo 戦は、角換わりその他と判別されていますが、
相掛かり模様の出だしで、相掛かりに分類した方がいいかも知れません。

参考として、2019年の決勝の戦型は、次でした。
2019年は、角換わりが18局と最も多く、相掛かり4局、矢倉3局と続いていました。
振り飛車横歩取りは、1局もありませんでした。

2019年決勝
                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:            角換わりその他:    11  39.3%    0.600
  2:          角換わり腰掛け銀:     7  25.0%    0.200
  3:                  相掛かり:     4  14.3%    1.000
  4:                      矢倉:     3  10.7%    0.333
  5:                      雁木:     2   7.1%    1.000
  6:              その他の戦型:     1   3.6%
────────────────────────────
計                                 28   100%    0.545

4.3 決勝の初手


柿木将棋で初期配置を表示し、ツール/棋譜データベースで局面検索(F9)のメニューを実行し、
ツール/次の手分析 を実行すると、初手を分析できます。

初手は、次のように、▲2六歩が22局と最多で、昨年より大きく増えました。
矢倉と振り飛車が無くなったことが影響していると思われます。
また、初手は、▲2六歩▲7六歩▲4八金の3手だけでした。

2023年決勝
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩      22 ( 78.6%)     0.773     17勝      5敗
 2.▲7六歩       4 ( 14.3%)     0.000      0勝      4敗
 3.▲4八金       2 (  7.1%)     1.000      2勝      0敗
─────────────────────────────
計               28             0.679     19勝      9敗

参考として、2022年の決勝の初手は、次でした。
初手は、次のように、▲2六歩が14局と最多です。相掛かりが多いためと言えます。
▲2六歩の先手勝率が 0.818 と、とても高くなっています。
やねうら王が変わった初手を指しています。

2022年決勝
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩      14 ( 50.0%)     0.818      9勝      2敗
 2.▲7六歩       8 ( 28.6%)     0.143      1勝      6敗
 3.▲9六歩       2 (  7.1%)     1.000      2勝      0敗
 4.▲7八飛       1 (  3.6%)     0.000      0勝      1敗
 5.▲7八金       1 (  3.6%)     1.000      1勝      0敗
 6.▲3六歩       1 (  3.6%)     0.000      0勝      1敗
 7.▲5八玉       1 (  3.6%)     1.000      1勝      0敗
─────────────────────────────
計               28             0.583     14勝     10敗

参考として、2021年の決勝の初手は、次でした。
▲2六歩が18局と最多です。相掛かりが多いためと言えます。
W@nderER と DaigorillaEX が変わった初手を指しています。

2021年決勝
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩      18 ( 64.3%)     0.688     11勝      5敗
 2.▲7六歩       6 ( 21.4%)     0.400      2勝      3敗
 3.▲5八玉       1 (  3.6%)     0.000      0勝      1敗
 4.▲3八銀       1 (  3.6%)     1.000      1勝      0敗
 5.▲5八金右     1 (  3.6%)     0.000      0勝      1敗
 6.▲4八銀       1 (  3.6%)     0.000      0勝      1敗
─────────────────────────────
計               28             0.560     14勝     11敗

参考として、2019年は、次のように、▲7六歩が21局と最多でした。

2019年決勝
   次の手    棋譜数(%)    先手勝率
────────────────────────────
 1.▲7六歩      21 ( 75%)     0.444      8勝     10敗
 2.▲2六歩       5 ( 17%)     1.000      3勝      0敗
 3.▲7八金       2 (  7%)     1.000      1勝      0敗
────────────────────────────
計               28            0.545     12勝     10敗

5.全棋譜

5.1 全棋譜の統計計算

棋譜の勝率・平均手数等です。
平均手数は、決勝だけより短くなります。
先手勝率は、決勝だけより下がります。
千日手が0です。

2023年全棋譜
────────────────────────────
棋譜数    :   266
先手勝ち   :   142  宣言勝ちを含む
後手勝ち   :   121  宣言勝ちを含む
先手宣言勝ち :     2
後手宣言勝ち :     3
千日手    :     0
持将棋    :     0
中断     :     3
先手勝率   : 0.540  142勝121敗
後手勝率   : 0.460
平均手数   : 127.786  千日手を含む
平均手数   : 127.786  千日手を除く
────────────────────────────

参考として、2022年は次でした。

2022年全棋譜
────────────────────────────
棋譜数    :   279
先手勝ち   :   141  宣言勝ちを含む
後手勝ち   :   123  宣言勝ちを含む
先手宣言勝ち :     1
後手宣言勝ち :     1
千日手    :     8
持将棋    :     0
中断     :     7
先手勝率   : 0.534  141勝123敗
後手勝率   : 0.466
平均手数   : 132.251  千日手を含む
平均手数   : 133.424  千日手を除く
────────────────────────────

参考として、2021年は次でした。

2021年全棋譜
────────────────────────────
棋譜数    :   298
先手勝ち   :   146  宣言勝ちを含む
後手勝ち   :   138  宣言勝ちを含む
先手宣言勝ち :     2
後手宣言勝ち :     5
千日手    :    10
持将棋    :     0
中断     :     4
先手勝率   : 0.514  146勝138敗
後手勝率   : 0.486
平均手数   : 134.070  千日手を含む
平均手数   : 135.688  千日手を除く
────────────────────────────

5.2 全棋譜の戦型

選手権の全棋譜266局の戦型は次です。やはり相掛かりが最も多く、決勝程ではありませんが、先手の勝率も高いです。
振り飛車もかなりあります。

2023年全棋譜
                  戦型         棋譜数  割合(%)  先手勝率 先手勝ち 後手勝ち
──────────────────────────────────────
  1:                  相掛かり:    57  21.4%    0.582        32      23
  2:            角換わりその他:    41  15.4%    0.610        25      16
  3:              その他の戦型:    29  10.9%    0.552        16      13
  4:                      矢倉:    24   9.0%    0.500        12      12
  5:                  四間飛車:    20   7.5%    0.600        12       8
  6:          角換わり腰掛け銀:    20   7.5%    0.579        11       8
  7:          角交換型振り飛車:    17   6.4%    0.471         8       9
  8:                  三間飛車:    14   5.3%    0.500         7       7
  9:            横歩取りその他:    10   3.8%    0.600         6       4
 10:                      雁木:     8   3.0%    0.250         2       6
 11:                    中飛車:     7   2.6%    0.286         2       5
 12:                  戦型未定:     6   2.3%    0.333         2       4
 13:            一手損角換わり:     6   2.3%    0.667         4       2
 14:        横歩取り△3三角型:     3   1.1%    0.667         2       1
 15:                相振り飛車:     2   0.8%    0.000         0       2
 16:            ゴキゲン中飛車:     1   0.4%    0.000         0       1
 17:                向かい飛車:     1   0.4%    1.000         1       0
──────────────────────────────────────
計                                 266   100%    0.540       142     121

参考として、2022年は次でした。
前縁より、振り飛車が増えました。

2022年全棋譜
                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:                  相掛かり:    62  22.2%    0.621
  2:                  四間飛車:    44  15.8%    0.571
  3:              その他の戦型:    43  15.4%    0.429
  4:            角換わりその他:    25   9.0%    0.500
  5:                      矢倉:    22   7.9%    0.400
  6:          角交換型振り飛車:    17   6.1%    0.750
  7:          角換わり腰掛け銀:    15   5.4%    0.692
  8:                  三間飛車:    10   3.6%    0.400
  9:                      雁木:    10   3.6%    0.667
 10:            ゴキゲン中飛車:     8   2.9%    0.000
 11:        横歩取り△3三角型:     7   2.5%    0.833
 12:                    中飛車:     6   2.2%    0.167
 13:            横歩取りその他:     5   1.8%    0.800
 14:                相振り飛車:     4   1.4%    0.500
 15:                  戦型未定:     1   0.4%    0.000
────────────────────────────
計                                279   100%    0.534

参考として、2021年は次でした。
やはり相掛かりが最も多く、先手の勝率も高いです。

2021年全棋譜
                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:                  相掛かり:    75  25.2%    0.667
  2:            角換わりその他:    59  19.8%    0.411
  3:              その他の戦型:    47  15.8%    0.468
  4:                      矢倉:    26   8.7%    0.667
  5:        横歩取り△3三角型:    16   5.4%    0.467
  6:          角換わり腰掛け銀:    13   4.4%    0.167
  7:                  三間飛車:    13   4.4%    0.308
  8:          角交換型振り飛車:    11   3.7%    0.636
  9:                  戦型未定:     8   2.7%    0.375
 10:                      雁木:     8   2.7%    0.571
 11:                  四間飛車:     7   2.3%    0.857
 12:                    中飛車:     5   1.7%    0.200
 13:            横歩取りその他:     4   1.3%    0.000
 14:            一手損角換わり:     3   1.0%    1.000
 15:            ゴキゲン中飛車:     2   0.7%    0.500
 16:                相振り飛車:     1   0.3%    1.000
────────────────────────────
計                                298   100%    0.514

参考として、2019年は次でした。
角換わりが最も多く、次が相掛かりです。
四間飛車が21局、横歩取りが28局です。

2019年全棋譜
                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:            角換わりその他:    57  19.3%    0.431
  2:                  相掛かり:    46  15.5%    0.524
  3:              その他の戦型:    42  14.2%    0.525
  4:                      矢倉:    22   7.4%    0.571
  5:                  四間飛車:    21   7.1%    0.476
  6:        横歩取り△3三角型:    20   6.8%    0.650
  7:          角換わり腰掛け銀:    19   6.4%    0.353
  8:          角交換型振り飛車:    16   5.4%    0.467
  9:                      雁木:    10   3.4%    0.700
 10:            横歩取りその他:     8   2.7%    0.500
 11:                  三間飛車:     8   2.7%    0.500
 12:                    中飛車:     7   2.4%    0.571
 13:                      未定:     6   2.0%    0.500
 14:            ゴキゲン中飛車:     6   2.0%    0.667
 15:                相振り飛車:     3   1.0%    1.000
 16:                向かい飛車:     3   1.0%    1.000
 17:            一手損角換わり:     1   0.3%    1.000
 18:                ひねり飛車:     1   0.3%    0.000
────────────────────────────
計                                296   100%    0.521

5.3 全棋譜の初手

棋譜の初手も、次のように、▲2六歩が最多です。

2023年全棋譜
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩     123 ( 46.2%)     0.633     76勝     44敗
 2.▲7六歩      94 ( 35.3%)     0.479     45勝     49敗
 3.▲7八飛       9 (  3.4%)     0.556      5勝      4敗
 4.▲6六歩       8 (  3.0%)     0.250      2勝      6敗
 5.▲7八金       7 (  2.6%)     0.143      1勝      6敗
 6.▲9六歩       5 (  1.9%)     0.400      2勝      3敗
 7.▲7八銀       4 (  1.5%)     0.500      2勝      2敗
 8.▲6八玉       4 (  1.5%)     0.500      2勝      2敗
 9.▲4八金       4 (  1.5%)     0.750      3勝      1敗
10.▲5六歩       2 (  0.8%)     0.000      0勝      2敗
11.▲3八銀       2 (  0.8%)     0.500      1勝      1敗
12.▲3六歩       2 (  0.8%)     1.000      2勝      0敗
13.▲1六歩       1 (  0.4%)     1.000      1勝      0敗
14.▲5八金右     1 (  0.4%)     0.000      0勝      1敗
─────────────────────────────
計              266             0.540    142勝    121敗


参考として、2022年は、次のように、▲7六歩が最多でした。

2022年全棋譜
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲7六歩     112 ( 40.1%)     0.528     56勝     50敗
 2.▲2六歩     111 ( 39.8%)     0.663     69勝     35敗
 3.▲5六歩      10 (  3.6%)     0.200      2勝      8敗
 4.▲6六歩       7 (  2.5%)     0.286      2勝      5敗
 5.▲3八飛       7 (  2.5%)     0.286      2勝      5敗
 6.▲7八金       6 (  2.2%)     0.333      2勝      4敗
 7.▲5八飛       5 (  1.8%)     0.200      1勝      4敗
 8.▲6八飛       5 (  1.8%)     0.600      3勝      2敗
 9.▲9六歩       4 (  1.4%)     1.000      2勝      0敗
10.▲3六歩       2 (  0.7%)     0.000      0勝      2敗
11.▲6八銀       2 (  0.7%)     0.000      0勝      2敗
12.▲7八飛       1 (  0.4%)     0.000      0勝      1敗
13.▲5八金左     1 (  0.4%)     0.000      0勝      1敗
14.▲5八玉       1 (  0.4%)     1.000      1勝      0敗
15.▲3八銀       1 (  0.4%)     0.000      0勝      1敗
16.▲4八飛       1 (  0.4%)     0.000      0勝      1敗
17.▲1八香       1 (  0.4%)     0.000      0勝      1敗
18.▲7八銀       1 (  0.4%)     0.000      0勝      1敗
19.▲5八金右     1 (  0.4%)     1.000      1勝      0敗
─────────────────────────────
計              279             0.534    141勝    123敗


参考として、2021年は次でした。

2021年全棋譜
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩     142 ( 47.7%)     0.652     86勝     46敗
 2.▲7六歩      98 ( 32.9%)     0.421     40勝     55敗
 3.▲1六歩       9 (  3.0%)     0.444      4勝      5敗
 4.▲7八金       6 (  2.0%)     0.333      2勝      4敗
 5.▲7八飛       5 (  1.7%)     0.600      3勝      2敗
 6.▲9六歩       5 (  1.7%)     0.400      2勝      3敗
 7.▲4八玉       4 (  1.3%)     0.500      2勝      2敗
 8.▲6八銀       4 (  1.3%)     0.250      1勝      3敗
 9.▲6六歩       4 (  1.3%)     0.250      1勝      3敗
10.▲4八銀       3 (  1.0%)     0.000      0勝      2敗
11.▲5八金右     2 (  0.7%)     0.500      1勝      1敗
12.▲3八銀       2 (  0.7%)     0.500      1勝      1敗
13.▲5六歩       2 (  0.7%)     0.500      1勝      1敗
14.▲3六歩       2 (  0.7%)     1.000      2勝      0敗
15.▲3八金       2 (  0.7%)     0.000      0勝      2敗
16.▲8六歩       2 (  0.7%)     0.000      0勝      2敗
17.▲6八玉       2 (  0.7%)     0.000      0勝      2敗
18.▲1八飛       1 (  0.3%)     0.000      0勝      1敗
19.▲6八飛       1 (  0.3%)     0.000      0勝      1敗
20.▲4六歩       1 (  0.3%)     0.000      0勝      1敗
21.▲5八玉       1 (  0.3%)     0.000      0勝      1敗
─────────────────────────────
計              298             0.514    146勝    138敗

参考として、2019年は次でした。

2019年全棋譜
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲7六歩     171 ( 57.8%)     0.488     80勝     84敗
 2.▲2六歩      65 ( 22.0%)     0.547     35勝     29敗
 3.▲7八金      12 (  4.1%)     0.750      9勝      3敗
 4.▲3八銀       8 (  2.7%)     0.625      5勝      3敗
 5.▲6八玉       5 (  1.7%)     0.800      4勝      1敗
 6.▲4六歩       5 (  1.7%)     0.400      2勝      3敗
 7.▲5八玉       5 (  1.7%)     0.400      2勝      3敗
 8.▲1六歩       5 (  1.7%)     0.333      1勝      2敗
 9.▲9八香       4 (  1.4%)     0.750      3勝      1敗
10.▲6六歩       4 (  1.4%)     0.500      2勝      2敗
11.▲5六歩       3 (  1.0%)     0.667      2勝      1敗
12.▲7八飛       2 (  0.7%)     0.500      1勝      1敗
13.▲6八銀       1 (  0.3%)     0.000      0勝      1敗
14.▲3八金       1 (  0.3%)     0.000      0勝      1敗
15.▲3八飛       1 (  0.3%)     0.000      0勝      1敗
16.▲6八金       1 (  0.3%)     0.000      0勝      1敗
17.▲6八飛       1 (  0.3%)     1.000      1勝      0敗
18.▲4八玉       1 (  0.3%)     0.000      0勝      1敗
19.▲4八銀       1 (  0.3%)     1.000      1勝      0敗
─────────────────────────────
計              296             0.517    148勝    138敗

6.2次予選と決勝

コンピュータ将棋選手権の1次予選は棋力の差が大きいですが、2次予選以降はレベルが高いです。
それで、2次予選と決勝の棋譜 154局 の戦型を分析しました。

2次予選と決勝のデータベースを作成するのは、例えば、次のようにします。
表操作/条件検索 のメニューを実行し、ファイル名に "33-L" を入力し、OKを押すと、1次予選の棋譜が表示されます。
次に、編集/すべてを選択 のメニューを実行し、編集/削除 を実行します。この時、棋譜ファイルは削除しません。
データベースを例えば、"第33回選手権-2次予選決勝"という名で保存します。

6.1 統計計算

平均手数等は、次でした。
先手の勝率は、昨年とほぼ同じで、56% です。

2023年2次予選と決勝
────────────────────────────
棋譜数    :   154
先手勝ち   :    85  宣言勝ちを含む
後手勝ち   :    66  宣言勝ちを含む
先手宣言勝ち :     2
後手宣言勝ち :     3
千日手    :     0
持将棋    :     0
中断     :     3    320手
先手勝率   : 0.563  85勝66敗
後手勝率   : 0.437
平均手数   : 152.312  千日手を含む
平均手数   : 152.312  千日手を除く
────────────────────────────

参考として、2022年の2次予選と決勝の平均手数等は、次でした。

2022年2次予選と決勝
────────────────────────────
先手(下手)勝ち:    78
後手(上手)勝ち:    61
先手(下手)宣言勝ち:     1
後手(上手)宣言勝ち:     1
千日手    :     8
持将棋    :     0
中断     :     5
先手(下手)勝率: 0.560
後手(上手)勝率: 0.440
平均手数   : 163.513  千日手を含む 
平均手数   : 167.404  千日手を除く 
────────────────────────────

参考として、2021年の2次予選と決勝の平均手数等は、次でした。

2021年2次予選と決勝
────────────────────────────
先手(下手)勝ち:    72
後手(上手)勝ち:    71
先手(下手)宣言勝ち:     2
後手(上手)宣言勝ち:     4
千日手    :    10
持将棋    :     0
先手(下手)勝率: 0.497
後手(上手)勝率: 0.503
平均手数   : 166.926  千日手を含む 
平均手数   : 172.118  千日手を除く 
────────────────────────────


参考として、2019年の2次予選と決勝の平均手数等は、次でした。

2019年2次予選と決勝
────────────────────────────
先手(下手)勝ち:    63
後手(上手)勝ち:    60
先手(下手)宣言勝ち:     2
後手(上手)宣言勝ち:     4
千日手    :     7
持将棋    :     0
先手(下手)勝率: 0.504
後手(上手)勝率: 0.496
平均手数   : 160.669  千日手を含む 
平均手数   : 165.419  千日手を除く 
────────────────────────────

6.2 戦型

相掛かりが 29.2% で最多、先手勝率も 0.605 と高いです。

2023年2次予選と決勝
|                  戦型         棋譜数  割合(%)  先手勝率 先手勝ち 後手勝ち
──────────────────────────────────────
  1:                  相掛かり:    45  29.2%    0.605        26      17
  2:            角換わりその他:    33  21.4%    0.606        20      13
  3:          角換わり腰掛け銀:    19  12.3%    0.611        11       7
  4:          角交換型振り飛車:    12   7.8%    0.500         6       6
  5:                      矢倉:    12   7.8%    0.583         7       5
  6:                  四間飛車:     7   4.5%    0.429         3       4
  7:            横歩取りその他:     7   4.5%    0.571         4       3
  8:                      雁木:     5   3.2%    0.400         2       3
  9:                  三間飛車:     5   3.2%    0.200         1       4
 10:              その他の戦型:     4   2.6%    0.750         3       1
 11:                  戦型未定:     2   1.3%    0.000         0       2
 12:            一手損角換わり:     2   1.3%    0.500         1       1
 13:        横歩取り△3三角型:     1   0.6%    1.000         1       0
──────────────────────────────────────
計                                 154   100%    0.563        85      66
|<

参考として、2022年の2次予選と決勝の戦型は、次でした。
相掛かりが 29.9% で最多、先手勝率も 0.667 と高いです。

>||
2022年2次予選と決勝
                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:                  相掛かり:    46  29.9%    0.667
  2:                  四間飛車:    22  14.3%    0.350
  3:            角換わりその他:    18  11.7%    0.588
  4:                      矢倉:    15   9.7%    0.308
  5:          角換わり腰掛け銀:    15   9.7%    0.692
  6:              その他の戦型:     9   5.8%    0.500
  7:          角交換型振り飛車:     8   5.2%    0.750
  8:                      雁木:     7   4.5%    0.833
  9:        横歩取り△3三角型:     5   3.2%    0.800
 10:            ゴキゲン中飛車:     4   2.6%    0.000
 11:            横歩取りその他:     3   1.9%    0.667
 12:                  三間飛車:     2   1.3%    0.000
────────────────────────────
計                                154   100%    0.560

参考として、2021年の2次予選と決勝の戦型は、次でした。

2021年2次予選と決勝

                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:                  相掛かり:    55  33.7%    0.612
  2:            角換わりその他:    36  22.1%    0.364
  3:                      矢倉:    18  11.0%    0.625
  4:        横歩取り△3三角型:    13   8.0%    0.417
  5:          角換わり腰掛け銀:     9   5.5%    0.125
  6:                      雁木:     7   4.3%    0.500
  7:              その他の戦型:     7   4.3%    0.286
  8:                  三間飛車:     7   4.3%    0.571
  9:          角交換型振り飛車:     5   3.1%    0.800
 10:            横歩取りその他:     3   1.8%    0.000
 11:            一手損角換わり:     1   0.6%    1.000
 12:                  四間飛車:     1   0.6%    1.000
 13:            ゴキゲン中飛車:     1   0.6%    1.000
────────────────────────────
計                                163   100%    0.497

参考として、2019年の2次予選と決勝の戦型は、次でした。
2019年は、角換わりが最も多く、相掛かり、横歩取り、矢倉と続いていました。

2019年2次予選と決勝
                  戦型        棋譜数  割合(%)  先手勝率
────────────────────────────
  1:            角換わりその他:    39  28.7%    0.471
  2:                  相掛かり:    20  14.7%    0.474
  3:          角換わり腰掛け銀:    16  11.8%    0.188
  4:        横歩取り△3三角型:    15  11.0%    0.733
  5:                      矢倉:    13   9.6%    0.583
  6:                      雁木:     7   5.1%    0.857
  7:                  四間飛車:     6   4.4%    0.500
  8:          角交換型振り飛車:     5   3.7%    0.400
  9:            横歩取りその他:     5   3.7%    0.200
 10:              その他の戦型:     3   2.2%    1.000
 11:            ゴキゲン中飛車:     2   1.5%    0.500
 12:                向かい飛車:     2   1.5%    1.000
 13:                  三間飛車:     2   1.5%    0.500
 14:                      未定:     1   0.7%    0.000
────────────────────────────
計                                136   100%    0.504

6.3 初手

初手は、次のように、▲2六歩が最多で、先手の勝率も高いです。
▲7六歩は、先手の勝率が低くなっています。

2023年2次予選と決勝
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩      87 ( 56.5%)     0.655     55勝     29敗
 2.▲7六歩      50 ( 32.5%)     0.440     22勝     28敗
 3.▲7八飛       5 (  3.2%)     0.200      1勝      4敗
 4.▲4八金       4 (  2.6%)     0.750      3勝      1敗
 5.▲7八金       3 (  1.9%)     0.000      0勝      3敗
 6.▲3八銀       2 (  1.3%)     0.500      1勝      1敗
 7.▲3六歩       2 (  1.3%)     1.000      2勝      0敗
 8.▲1六歩       1 (  0.6%)     1.000      1勝      0敗
─────────────────────────────
計              154             0.563     85勝     66敗


参考として、2022年の2次予選と決勝の初手は、次でした。

2022年2次予選と決勝
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩      80 ( 51.9%)     0.676     50勝     24敗
 2.▲7六歩      54 ( 35.1%)     0.449     22勝     27敗
 3.▲5六歩       5 (  3.2%)     0.200      1勝      4敗
 4.▲9六歩       4 (  2.6%)     1.000      2勝      0敗
 5.▲6八飛       3 (  1.9%)     0.333      1勝      2敗
 6.▲3六歩       2 (  1.3%)     0.000      0勝      2敗
 7.▲5八金右     1 (  0.6%)     1.000      1勝      0敗
 8.▲7八金       1 (  0.6%)     1.000      1勝      0敗
 9.▲7八銀       1 (  0.6%)     0.000      0勝      1敗
10.▲7八飛       1 (  0.6%)     0.000      0勝      1敗
11.▲5八玉       1 (  0.6%)     1.000      1勝      0敗
12.▲6八銀       1 (  0.6%)     0.000      0勝      1敗
─────────────────────────────
計              154             0.560     79勝     62敗

参考として、2021年の2次予選と決勝の初手は、次でした。

2021年2次予選と決勝
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩      93 ( 57.1%)     0.578     48勝     35敗
 2.▲7六歩      47 ( 28.8%)     0.386     17勝     27敗
 3.▲1六歩       9 (  5.5%)     0.444      4勝      5敗
 4.▲7八飛       4 (  2.5%)     0.750      3勝      1敗
 5.▲4八銀       3 (  1.8%)     0.000      0勝      2敗
 6.▲5八金右     2 (  1.2%)     0.500      1勝      1敗
 7.▲6八玉       2 (  1.2%)     0.000      0勝      2敗
 8.▲3八銀       1 (  0.6%)     1.000      1勝      0敗
 9.▲5八玉       1 (  0.6%)     0.000      0勝      1敗
10.▲7八金       1 (  0.6%)     0.000      0勝      1敗
─────────────────────────────
計              163             0.497     74勝     75敗

参考として、2019年の2次予選と決勝の初手は、次でした。
▲7六歩が最多でした。
このときも、▲7六歩の先手勝率は低く、▲2六歩の方が高かったです。

2019年2次予選と決勝
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲7六歩      89 ( 65.4%)     0.458     38勝     45敗
 2.▲2六歩      29 ( 21.3%)     0.615     16勝     10敗
 3.▲7八金       6 (  4.4%)     0.800      4勝      1敗
 4.▲1六歩       4 (  2.9%)     1.000      1勝      0敗
 5.▲3八銀       4 (  2.9%)     0.500      2勝      2敗
 6.▲5六歩       2 (  1.5%)     0.500      1勝      1敗
 7.▲7八飛       2 (  1.5%)     0.500      1勝      1敗
─────────────────────────────
計              136             0.512     63勝     60敗

7.振り飛車を指した局数

振り飛車を最も多く指したソフトに賞金があるので、プログラムを作り調べ、次の結果になりました。

HoneyWaffle:17 局  一次予選、二次予選の全17局で振り飛車
Daigorilla:9 局    二次予選の全9局で角交換型振り飛車
こまあそび:8 局    一次予選の全8局で振り飛車
山田将棋:6 局      一次予選の8局中6局が振り飛車
臥龍:5 局
ティー○の振り飛車気持ちよすぎだろ!:5 局
隠岐:3 局
CGP:3 局
まったりゆうちゃん:3 局
手抜き:3 局
カツ丼将棋:1 局
東横将棋:1 局

最多は、HoneyWaffle:17 局です。
HoneyWaffle は、一次予選、二次予選の全局で振り飛車です。

HoneyWaffle

Daigorilla も、二次予選の全局で角交換型振り飛車です。

Daigorilla

こまあそびも一次予選の全8局で振り飛車です。

こまあそび

8.振り飛車の勝率

8.1 先手振り飛車の勝率

戦型で、先手振り飛車と後手振り飛車を判定させた場合、戦型で「先」を指定することで、先手振り飛車の勝率を調べることができる。

先手振り飛車

次のように、先手振り飛車の勝率は、0.406 となった。

棋譜数    :    32
先手勝ち   :    13  宣言勝ちを含む
後手勝ち   :    19  宣言勝ちを含む
先手宣言勝ち :     0
後手宣言勝ち :     0
千日手    :     0
持将棋    :     0
中断     :     0
先手勝率   : 0.406  13勝19敗
後手勝率   : 0.594
平均手数   : 113.344  千日手を含む
平均手数   : 113.344  千日手を除く

8.2 後手振り飛車の勝率

後手振り飛車


次のように、後手振り飛車の勝率は、0.393 となった。

棋譜数    :    28
先手勝ち   :    17  宣言勝ちを含む
後手勝ち   :    11  宣言勝ちを含む
先手宣言勝ち :     0
後手宣言勝ち :     1
千日手    :     0
持将棋    :     0
中断     :     0
先手勝率   : 0.607  17勝11敗
後手勝率   : 0.393
平均手数   : 110.643  千日手を含む
平均手数   : 110.643  千日手を除く

iOS WKWebView のクッキーを処理する

Objective-C のコード例が殆どないので、記録しておく。

1.WKWebView のクッキーを取得する

    if (@available(iOS 11.0, *)) {
        [WKWebsiteDataStore.defaultDataStore.httpCookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *aCookies) {
            NSLog(@"aCookies=%@", aCookies);
            for (NSHTTPCookie *cookie in aCookies) {
                NSLog(@"%@ : %@", cookie.name, cookie.value);
            }
            
        }];
    }

2.クッキーを WKWebView に設定する

    WKWebViewConfiguration *webConfig = [[WKWebViewConfiguration alloc] init];
    webConfig.dataDetectorTypes = WKDataDetectorTypeLink; // iOS 10.0+ 
    webConfig.preferences.javaScriptEnabled = true;
    WKWebView *myWebView = [[WKWebView alloc] initWithFrame: webFrame configuration: webConfig];
    [webConfig release];

    WKHTTPCookieStore *cookieStroe = myWebView.configuration.websiteDataStore.httpCookieStore;
	NSArray *Cookies;	// 設定するクッキー
    for (NSHTTPCookie *cookie in Cookies) {
        NSLog(@"%@ : %@", cookie.name, cookie.value);
       [cookieStroe setCookie:cookie completionHandler:^{
             NSLog(@"set cookie");
         }];
    }

3.クッキーを NSURLConnection に設定する

	NSURL *url;	// URL
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: url
                        cachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
											  timeoutInterval:60];

	NSArray *Cookies;	// 設定するクッキー
    NSDictionary *header = [NSHTTPCookie requestHeaderFieldsWithCookies: Cookies];
    [request setAllHTTPHeaderFields:header];

	connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
	[request release];