将棋プログラミング

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

MFC によるネットワークのデータ受信の高速化

次のコードで、ネットワークの 約8MB のテキストデータを受信していた。

    CHttpFile* pFile;
    (省略)
    CString strContent;
    CString LINE_SEPARATOR = "\r\n";
    CString buf;
    while (pFile->ReadString(buf)) {
        strContent += buf;
        strContent += LINE_SEPARATOR;
    }

Visual Studio 2005 で実行していた時は、25,000 ms かかっていた。
このプログラムを Visual Studio 2013 でビルドし、実行したところ、58,000 ms と2倍以上かかるようになった。
ReadString(CString) が遅いと思われるので、次のように書き換えた。

    CString strContent;
    TCHAR * buf = new char[DATA_SIZE];
    for (;;) {
        int result = pFile->Read(buf, DATA_SIZE);
        if (result <= 0)
            break;
        buf[result] = 0x00;
    }
    strContent = buf;
    delete[] buf;

その結果、Visual Studio 2005 と Visual Studio 2013 のいずれで実行しても 8,000 ms と大幅に高速化できた。

Xcode 15 と App ID Prefix

2024年4月29日から、App Store Connect に提出するアプリは、Xcode 15 で開発することが必要になった。
それで、Xcode 15 で開発し、アプリをアップデイトしたが、次の警告がでた。

ITMS-90076: Potential Loss of Keychain Access
 - The previous version of software has an application-identifier value of ['****** 1'] 
and the new version of software being submitted has an application-identifier of ['****** 2']. 
This will result in a loss of keychain access.

App ID Prefix が変わった。
Xcode 14 と同じ Provisioning Profile を使っても App ID Prefix が変わる。
この報告は、次でもある。

forums.developer.apple.com

Apple から次のコメントがある。

Using your Team ID as your App ID prefix is now the default. 

Xcode 15 で、App ID Prefix の仕様が変わったのだろうと考えれる。

UTF-8 の BOM について

1.はじめに

UTF-8文字コードのファイルには、BOM (Byte Order Mark) がある場合とない場合がある。

Unicode の規格では、BOM は、推奨されないが、許容されている。

ja.wikipedia.org

今回、必要があり、色々な OS や言語で、UTF-8文字コードのファイルを作成した時、BOM が記録されるか、されないか、を調べた。

2.色々な OS や言語での BOM

2.1 Windows 10, Visual Studio, C++, _wfopen (_tfopen)

// Visual Studio 2005 以降 保存
FILE *fp = _wfopen(name, _ L"w, ccs=UTF-8");
if  (fp == NULL)  {
   // エラー処理
}
fwprintf_s(fp, L"ABC漢字123\n");
fclose(fp);

// 読み込み
FILE *fp = _wfopen(name L"r, ccs=UTF-8");

保存では、 BOM付になる。

learn.microsoft.com

マイクロソフトのドキュメントでも、次のように明記されている。

Unicode モードで書き込むように開かれたファイルには、自動的に BOM が書き込まれます。


読み込みは、BOM があっても無くても問題はない。
BOM によって文字コードの自動判定まで行っている。

2.2 Windows 10, Visual Studio, C++, _wfopen (_tfopen), BOM 無しにする方法

_wfopen() を使い、BOM 無しにするには、次の二つの方法がある。

(1) fseek() でBOM を上書き
FILE *fp = _wfopen(name, _L"w, ccs=UTF-8");
if (fp == NULL) {
   // エラー処理
}
// BOM (EF BB BF) を上書き
fseek(fp, 0L, SEEK_SET);
fwprintf_s(fp, L"ABC漢字123\n");
fclose(fp);
(2) バイナリで保存
FILE *fp = _wfopen(name, _L"wb");

2.3 Windows 10, Visual Studio, C++, MFC

CStdioFile file(_tfopen( name, L"w, ccs=UTF-8"));
file.WriteString(L"ABC☖☗漢字123\n");
file.Close();

保存では、 BOM付になる。
読み込みは、BOM があっても無くても問題はない。

2.4 Windows 10, Visual Studio, C++, Stream

std::wofstream stream("bom_test_15-2.txt");
const std::codecvt_utf8<wchar_t> * converter = new std::codecvt_utf8<wchar_t>;
const std::locale utf8_locale = std::locale(std::locale::empty(), converter);
stream.imbue(utf8_locale);
if (! stream.bad()) {
    std::wstring str = L"ABC☖☗漢字123\n";
    stream << str;
    stream.close();
}

保存では、BOM無しになる。

読み込みは、BOM があっても無くても問題はない。

2.5 Windows 10, Visual Studio, C#

Encoding enc = Encoding.GetEncoding("utf-8");
StreamWriter writer = new StreamWriter(@"D:\ファイル名", false, enc);
writer.WriteLine("ABC☖☗漢字123");
writer.Close();

保存では、 BOM付になる。

StreamReader sr = new StreamReader(name, Encoding.GetEncoding("utf-8"));
string str = sr.ReadToEnd();
sr.Close();

読み込みは、BOM があっても無くても問題はない。

2.6 Android OS, Java

// 保存
String fileName = “android_bom_test.txt";
String str = "ABC☖☗漢字123\n";
OutputStream out = null;
try {
    out = context.openFileOutput(fileName, Context.MODE_PRIVATE);
    out.write(str.getBytes());
    out.close();
} catch (Exception e) {
}

保存では、 BOMなしになる。

// 読み込み
FileReader reader = new FileReader(path);
char[] buffer = new char[BUF_SIZE];
reader.read(buffer);
String str = new String(buffer);
reader.close();

読み込みは、BOM があっても無くても問題はない。

2.7 macOS / iOS, Objective-C

// 保存
NSString *str = @"ABC☖☗漢字123\n"; 
NSError *error = nil;
BOOL result = [str writeToFile: file_name atomically: YES 	
	encoding: NSUTF8StringEncoding error: &error];

保存では、 BOMなしになる。

// 読み込み
NSError *error = nil;
NSString *str = [NSString stringWithContentsOfFile: file_name
                           encoding: NSUTF8StringEncoding error: &error ];

読み込みは、BOM があっても無くても問題はない。

2.8 Perl

!/usr/bin/env perl
use utf8;
use Encode;

open(file, "> $file_name");
print file Encode::encode( 'UTF-8', "ABC☖☗漢字123\n" );
close(file);

保存では、 BOMなしになる。

open(rfile, "<:utf8", $file_name);

読み込みは、BOM があっても無くても問題はない。

2.9 PHP

<?php
$file_name = "php_bom_test.txt";
file_put_contents($file_name, "ABC☖☗漢字123\n");
// 保存では、 BOMなしになる。

$str = file_get_contents($file_name);
print ("str=".$str."\n");
// 読み込みは、BOMがあっても無くても問題はない。
?>
PHP のテスト

2.10 JavaScript

const save = document.createElement('a');
save.href = URL.createObjectURL(new Blob(["ABC☖☗漢字123\n"], {type: 'text/plain'}));
save.download = 'JavaScriptTest.txt';	// file name
save.style.display = 'none';
document.body.appendChild(save);
save.click();

保存では、 BOMなしになる。

2.11 まとめ

以上をまとめると、次のようになる。

BOM まとめ

Windows で、Microsoft の開発ツールを使った場合、BOM が自動で記録される場合が多い。

・他の OS 等では、BOM が記録されない。

・読み込みは、BOMがあっても無くても問題はない。

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

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

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

1.棋譜の入手

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

www2.computer-shogi.org

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

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

2.戦型の自動判別

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

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

棋譜情報の一括設定

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


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

www.vector.co.jp

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

フォルダ指定追加

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

保存

4.決勝

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

4.1 決勝の統計計算

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

2024年決勝
────────────────────────────
棋譜数    :    28
先手勝ち   :    18  宣言勝ちを含む
後手勝ち   :     7  宣言勝ちを含む
先手宣言勝ち :     3
後手宣言勝ち :     1
千日手    :     2
持将棋    :     1    320手
中断     :     0
先手勝率   : 0.720  18勝7敗
後手勝率   : 0.280
平均手数   : 177.393  千日手を含む
平均手数   : 183.538  千日手を除く
────────────────────────────

先手勝ち   :    18  0.643
後手勝ち   :     7  0.250 
千日手・持将棋:     3  0.107
────────────────────────────
計         28    1.000

先手勝率   : 0.696  千日手・持将棋を 0.5勝0.5敗とした場合、19.5勝8.5敗

入玉宣言勝ちは4局、千日手は1局でした。

320手で引き分けとなった棋譜は1局でした。
先手勝率は、0.720 と上がりました。
千日手持将棋を 0.5勝0.5敗とした場合、0.696 です。)
平均手数は、千日手を除くと約184手と、今年もかなり長くなりました。

  決勝の先手勝率と平均手数の推移
────────────────────────────
年   先手勝率 平均手数(千日手を除く)
2024年 0.720  183.538
2023年 0.679  176.250
2022年 0.583  193.615
2021年 0.560  185.680
2019年 0.538  200.308
────────────────────────────

棋譜数が少ないので、信頼性は低いですが、先手勝率が毎年、上がってきました。
ほんの数年前、2022年までは50%台だったので、平和な時代だったと言えます。

勝率推移
平均手数の推移


今年の2次予選と1次予選のデータです。

────────────────────────────
2024年2次予選
棋譜数    :   126
先手勝ち   :    65  宣言勝ちを含む
後手勝ち   :    43  宣言勝ちを含む
先手宣言勝ち :     3
後手宣言勝ち :     1
千日手    :     9
持将棋    :     9
中断     :     0
先手勝率   : 0.602  65勝43敗
後手勝率   : 0.398
平均手数   : 168.349  千日手を含む
平均手数   : 175.598  千日手を除く
────────────────────────────
────────────────────────────
2024年1次予選
棋譜数    :   112
先手勝ち   :    61  宣言勝ちを含む
後手勝ち   :    50  宣言勝ちを含む
先手宣言勝ち :     0
後手宣言勝ち :     0
千日手    :     1
持将棋    :     0
中断     :     0
先手勝率   : 0.550  61勝50敗
後手勝率   : 0.450
平均手数   : 95.902  千日手を含む
平均手数   : 95.901  千日手を除く
────────────────────────────

  今年の決勝、2次予選、1次予選のデータ
────────────────────────────
2024年  先手勝率 平均手数(千日手を除く)棋譜
決勝   0.720  183.538  28
2次予選 0.602  175.598 126
1次予選 0.583   95.901 112
────────────────────────────
1次予選、2次予選、決勝と先手勝率が上がり、平均手数が伸びています。


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

2023年決勝
────────────────────────────
棋譜数    :    28
先手勝ち   :    19  宣言勝ちを含む
後手勝ち   :     9  宣言勝ちを含む
先手宣言勝ち :     1
後手宣言勝ち :     1
千日手    :     0
持将棋    :     0
中断     :     0    320手
先手勝率   : 0.679  19勝9敗
後手勝率   : 0.321
平均手数   : 176.250  千日手を含む
平均手数   : 176.250  千日手を除く
────────────────────────────
2022年決勝
────────────────────────────
棋譜数    :    28
先手勝ち   :    14  宣言勝ちを含む
後手勝ち   :    10  宣言勝ちを含む
先手宣言勝ち :     0
後手宣言勝ち :     0
千日手    :     2
持将棋    :     0
中断     :     2
先手勝率   : 0.583  14勝10敗
後手勝率   : 0.417
平均手数   : 188.536  千日手を含む
平均手数   : 193.615  千日手を除く
────────────────────────────
2021年決勝
────────────────────────────
棋譜数    :    28
先手勝ち   :    14  宣言勝ちを含む
後手勝ち   :    11  宣言勝ちを含む
先手宣言勝ち :     1
後手宣言勝ち :     1
千日手    :     3
持将棋    :     0
中断     :     0
先手勝率   : 0.560  14勝11敗
後手勝率   : 0.440
平均手数   : 175.071  千日手を含む
平均手数   : 185.680  千日手を除く
────────────────────────────
2019年決勝
────────────────────────────────────────────────────────
棋譜数    :    28
先手勝ち   :    14  宣言勝ちを含む
後手勝ち   :    12  宣言勝ちを含む
先手宣言勝ち :     2
後手宣言勝ち :     2
千日手    :     2
持将棋    :     0
中断     :     0
先手勝率   : 0.538  14勝12敗
後手勝率   : 0.462
平均手数   : 190.143  千日手を含む
平均手数   : 200.308  千日手を除く
────────────────────────────────────────────────────────

4.2 決勝の戦型

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

今年は、角換わりが復活した年でした。
ただし、角換わり腰掛け銀よりも角換わり早繰り銀が増えたのが特徴です。
2023年と2022年は、相掛かりが最多でした。
振り飛車は、昨年同様、無かったです。
昨年、谷合四段のソフトは、ご自身と同様に、振り飛車を指していましたが、今年、決勝に進んだ谷合四段のソフトは、振り飛車を指さなくなっていました。
昨年、無かった矢倉が復活しました。
角換わり、相掛かり、矢倉以外が無かったのも特徴で、初めてかも知れません。

2024年決勝
                  戦型         棋譜数  割合(%)  先手勝率 先手勝ち 後手勝ち
──────────────────────────────────────
  1:            角換わりその他:    13  46.4%    0.750         9       3
  2:          角換わり腰掛け銀:     6  21.4%    0.750         3       1
  3:                  相掛かり:     5  17.9%    0.800         4       1
  4:                      矢倉:     4  14.3%    0.500         2       2
──────────────────────────────────────
計                                  28   100%    0.720        18       7
角換わりは、計19局  12勝4敗  先手勝率 0.750

角換わりをさらに詳細に分類すると、次になります。
角換わり早繰り銀は、全て後手の早繰り銀です。ただし、1局は、相早繰り銀です。
早繰り銀も先手の勝率が高く(5勝1敗)、後手の早繰り銀が成功しているとは言えません。

2024年決勝
                  戦型         棋譜数  割合(%)  先手勝率 先手勝ち 後手勝ち
──────────────────────────────────────
  1:          角換わり早繰り銀:     7  25.0%    0.833         5       1
  2:          角換わり腰掛け銀:     6  21.4%    0.750         3       1
  3:                  相掛かり:     5  17.9%    0.800         4       1
  4:                      矢倉:     4  14.3%    0.500         2       2
  5:          角換わり飛先交換:     2   7.1%    1.000         2       0
  6:            角換わりその他:     2   7.1%    0.500         1       1
  7:              角換わり右玉:     1   3.6%    1.000         1       0
  8:              角換わり棒銀:     1   3.6%    0.000         0       1
──────────────────────────────────────
計                                  28   100%    0.720        18       7
角換わりは、計19局  12勝4敗  先手勝率 0.750

2次予選の戦型は、次です。
角換わりの先手勝率は、0.682 です。
相掛かりの先手勝率は、0.500 です。

2024年2次予選
                  戦型         棋譜数  割合(%)  先手勝率 先手勝ち 後手勝ち
──────────────────────────────────────
  1:            角換わりその他:    36  28.6%    0.667        20      10
  2:                  相掛かり:    33  26.2%    0.500        13      13
  3:          角換わり腰掛け銀:    13  10.3%    0.667         8       4
  4:                      矢倉:    13  10.3%    0.583         7       5
  5:              その他の戦型:     7   5.6%    0.800         4       1
  6:                  三間飛車:     6   4.8%    0.000         0       6
  7:        横歩取り△3三角型:     5   4.0%    1.000         5       0
  8:            ゴキゲン中飛車:     4   3.2%    0.500         2       2
  9:          角交換型振り飛車:     3   2.4%    0.000         0       2
 10:                  四間飛車:     2   1.6%    1.000         2       0
 11:                向かい飛車:     2   1.6%    1.000         2       0
 12:            一手損角換わり:     2   1.6%    1.000         2       0
──────────────────────────────────────
計                                 126   100%    0.602        65      43
角換わりは、計51局  30勝14敗  先手勝率 0.682


参考として、2023年の決勝の戦型は、次でした。
2022年同様、相掛かりが12局(42.9%)と最多で、2022年の8局より増えました。
ただし、相掛かりの先手勝率は、下がっています。
2022年、6局あった振り飛車が無くなりました。
角換わりは10局と増えました(2022年は6局)。
なお、▲5六銀、または、△5四銀とする角換わり腰掛け銀は1局だけで、早い桂跳ねの仕掛けが多かったです。
2022年、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六歩が25局と最多で、昨年より増えました。
増えた角換わりも1局を除き、初手▲2六歩です。
振り飛車が無くなったことも影響していると思われます。
また、初手は、▲2六歩▲7六歩の2手だけでした。

2024年決勝
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩      25 ( 89.3%)     0.739     17勝      6敗
 2.▲7六歩       3 ( 10.7%)     0.500      1勝      1敗
─────────────────────────────
計               28             0.720     18勝      7敗

参考として、2023年の決勝の初手は、次でした。
▲2六歩が22局と最多で、2022年より大きく増えました。
矢倉と振り飛車が無くなったことが影響していると思われます。
また、初手は、▲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だった千日手が12局と大きく増えています。

2024年全棋譜
────────────────────────────
棋譜数    :   266
先手勝ち   :   144  宣言勝ちを含む
後手勝ち   :   100  宣言勝ちを含む
先手宣言勝ち :     6
後手宣言勝ち :     2
千日手    :    12
持将棋    :    10    320手
中断     :     0
先手勝率   : 0.590  144勝100敗
後手勝率   : 0.410
平均手数   : 138.797  千日手を含む
平均手数   : 141.583  千日手を除く
────────────────────────────


参考として、2023年は次でした。
千日手が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局の戦型は次です。やはり角換わりが最多です。
振り飛車もかなりあります。

2024年全棋譜
                  戦型         棋譜数  割合(%)  先手勝率 先手勝ち 後手勝ち
──────────────────────────────────────
  1:            角換わりその他:    59  22.2%    0.673        35      17
  2:                  相掛かり:    50  18.8%    0.488        21      22
  3:              その他の戦型:    38  14.3%    0.528        19      17
  4:                      矢倉:    25   9.4%    0.522        12      11
  5:          角換わり腰掛け銀:    19   7.1%    0.688        11       5
  6:                  三間飛車:    16   6.0%    0.438         7       9
  7:          角交換型振り飛車:    12   4.5%    0.636         7       4
  8:                  四間飛車:    10   3.8%    0.600         6       4
  9:        横歩取り△3三角型:    10   3.8%    0.900         9       1
 10:                向かい飛車:     6   2.3%    0.833         5       1
 11:            ゴキゲン中飛車:     6   2.3%    0.500         3       3
 12:            一手損角換わり:     6   2.3%    0.833         5       1
 13:                相振り飛車:     4   1.5%    0.250         1       3
 14:            横歩取りその他:     2   0.8%    0.500         1       1
 15:                  戦型未定:     2   0.8%    0.500         1       1
 16:                    中飛車:     1   0.4%    1.000         1       0
──────────────────────────────────────
計                                 266   100%    0.590       144     100


参考として、2023年は次でした。
相掛かりが最も多く、決勝程ではありませんが、先手の勝率も高いです。
振り飛車もかなりあります。

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六歩が最多です。昨年(123局)より増えました。

2024年全棋譜
   次の手    棋譜数(%)     先手勝率
─────────────────────────────
 1.▲2六歩     144 ( 54.1%)     0.705     91勝     38敗
 2.▲7六歩      84 ( 31.6%)     0.449     35勝     43敗
 3.▲7八飛       6 (  2.3%)     0.600      3勝      2敗
 4.▲7八金       6 (  2.3%)     0.500      3勝      3敗
 5.▲5六歩       5 (  1.9%)     0.400      2勝      3敗
 6.▲4八銀       5 (  1.9%)     0.400      2勝      3敗
 7.▲9六歩       4 (  1.5%)     0.500      2勝      2敗
 8.▲6六歩       3 (  1.1%)     0.667      2勝      1敗
 9.▲6八玉       3 (  1.1%)     0.333      1勝      2敗
10.▲9八香       1 (  0.4%)     1.000      1勝      0敗
11.▲1六歩       1 (  0.4%)     1.000      1勝      0敗
12.▲4八飛       1 (  0.4%)     0.000      0勝      1敗
13.▲3八銀       1 (  0.4%)     0.000      0勝      1敗
14.▲5八飛       1 (  0.4%)     1.000      1勝      0敗
15.▲1八香       1 (  0.4%)     0.000      0勝      1敗
─────────────────────────────
計              266             0.590    144勝    100敗


参考として、2023年も、次のように、▲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敗

AWS EC2 で C6i より高速なインスタンスタイプ C7i が使用可能に

少し古いニュースだが、AWS EC2 の東京リージョンで、2024年1月9日から、C6i より高速なインスタンスタイプ C7i が使用可能になった。

aws.amazon.com

C7i インスタンスは、C6i インスタンスと比較して最大 15% 優れたコストパフォーマンスを発揮

とのことである。

東京リージョンで、C6i が使えるようになったのは、2021年12月13日だった。
ykakinoki.hateblo.jp


費用は、東京リージョン、Windows の場合
c6i.2xlarge USD 0.796
c7i.2xlarge USD 0.8174
と2.7%程度増加する。

将棋AI の探索速度を調べたところ、C7i は C6i より 40 % 程度高速、という予想以上の結果だった。
費用は2.7%程度増加、速度は40%程度増加なので、今後は、C6i ではなく、C7i を使うべきである。

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 に変更した。
場所によっては、Minimum Deployments と表示される。

Minimum Deployments

Pods の target も変更しないと、次のような警告が表示される。

/Users/.../Pods/Pods.xcodeproj The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 10.0, but the range of supported deployment target versions is 12.0 to 17.2.99.


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

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