1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

将棋評価値バーを作る(第2回)

Last updated at Posted at 2023-08-15

前回からの続きです。

開発の最難関,指し手の表記方法

評価値を勝率に換算してバー表示するだけなら,C# でフルスクラッチから作り直してもプログラムは非常に簡素なものになります。しかし,指し手(最善手)を人間の分かり易いように表示しようとするだけでプログラムの量が倍増することになりました。

というのも USI プロトコルではたとえば将棋の初手2六歩を 2g2f と表現します。これは移動元の座標 2g(2七)から移動先の座標 2f(2六)に駒が移動するという意味です。持ち駒を打つ場合を除き,移動する駒の種類すら伝えません。すなわち,どの駒を移動したのかは移動元の座標にある駒を記憶しておく必要があります。

また「同歩」のような表現をしようと思うと,前局面で指した手を記憶しておく必要があります。

さらに移動先に移動できる同種の駒が複数ある場合「引・寄・上・右・左・直」およびこれらを組み合わせた修飾子を追加することで移動する駒を特定しますが,これらのルールはとても複雑です。たとえば下記の例題1の配置では「銀左」ではなく「銀上」とします。もう一枚銀が増えた例題2では「銀上」では区別できないので「銀左」となり,さらに一枚銀が増えた例題3では「銀上」でも「銀左」でも区別できないので「銀左上」となります。

:移動する銀将,:移動しない銀将,:移動先

例題1 例題2 例題3
   
   
   
   
   
 
 
   
 
銀上 銀左 銀左上

これらの処理を行ってくれるのが cshogi ライブラリだったのです。chogi ライブラリを使用しているたややん氏の Python スクリプトがコンパクトにまとまっているのもそのためです。機能のほんの一部とはいえ cshogi の代替品を作ることになったわけで,苦労するのも当然ですね。

なお指し手の表記方法については日本将棋連盟から公式ルールが公開されています。
指し手の表記方法について(日本将棋連盟)

指し手表記のプログラム化について

まず指し手に「引・寄・上・右・左・直」などの修飾子が必要なのは,金将(成駒を含む),銀将,桂馬,飛車,角行,竜王,竜馬の7種の駒だけで,香車と歩兵と玉将(王将)は必要ありません。駒の種類別に整理していくことにします。

金種(金将・成銀・成桂・成香・と金)の場合

記号を定義します。は移動先の駒の位置,は移動元の駒の位置を示します。は移動しない味方の駒の位置,は移動しない味方の金が0個以上,は移動しない味方の金が1個以上存在する,は移動不可能な位置という意味です。また空白は味方の金が存在しないという意味です。

※左右対称なので右側の条件は省略しています。

移動元の位置に対して,移動先の駒以外に移動可能な金将が存在しない場合,とくに修飾子はつかず無印となります。

上(あがる)は上方向に移動するという意味,引(ひく)は下方向に移動するという意味ですが,左(ひだり)とは左方向に移動するという意味ではなく,左側の駒が右方向に移動するという意味なので注意が必要です。寄(よる)は真横に移動するという意味ですが,左右どちらの駒か区別がつかない場合のみ「左寄」「右寄」と表記します。つまり,省略可能な場合はできるだけ省略するというルールです。また真上に移動するときのみ直(すぐ)と表記します。

おそらく長年の慣習をルール化したものだと思われますが,例外が多くてプログラム化が大変です。金将の場合,移動可能な位置が6通り,このうち1つは実際に移動する駒の位置,残りの5つに味方の金将がいるかいないかの二択なので,考えられる組み合わせは $6×2^{6-1}=192$ 通りです。この程度なら全ての組み合わせを事前に計算しておき,テーブル化しておくことも可能でしょう。なお,金将や成銀,成桂,成香は最大でも4枚しか存在しえないので,やろうと思えば組み合わせの数をもっと減らせますが,と金に合わせてプログラムを共通化・コンパクト化することにしました。

無印の場合
   
     
 
 
     
 
   
   
 
   
   
左の場合 上の場合
 
 
   
   
引の場合 寄の場合 直の場合 左寄の場合 左上の場合
 

銀将の場合

銀将の場合,金将と違って引く方向が2通りあるので「左引」「右引」という表現が現れます。銀将の場合,移動可能な位置が5通り,このうち1つは実際に移動する駒の位置,残りの4つに味方の銀将がいるかいないかの二択なので,考えられる組み合わせは $5 \times 2^{5-1} = 80$ 通りです。

無印の場合
 
     
   
   
   
   
上の場合 左の場合
   
   
 
 
引の場合 直の場合 左引の場合 左上の場合
 

桂馬の場合

桂馬の場合,移動可能な位置が2通り,このうち1つは実際に移動する駒の位置,残りの1つに味方の桂馬がいるかいないかの二択なので,考えられる組み合わせは $2 \times 2^{2-1} = 4$ 通りです。

無印の場合 左の場合
 

飛車の場合

飛車のような大駒の場合,1マス以上の移動が可能になるので,下記の表では真上ではなく上の方向という意味とします。飛車を含めた大駒の場合,最大でも2つしか存在しえないので組み合わせの数をより絞ることができます。移動可能な配置(方向)は4通り,このうち1つは実際に移動する駒の位置(方向)で,残りの3つのいずれかに飛車がいるか,いずれにもいないかの4通りなので $4 \times 4 = 16$ 通りとなります。

無印の場合
   
 
 
 
 
 
   
引の場合 寄の場合 左の場合 上の場合
 
 
 

角行の場合

角行も1マス以上の移動が可能なので,下記の表では斜めの方向という意味とします。また角行も最大2つしか存在しえないので組み合わせの数をより絞ることができます。移動可能な配置(方向)は4通り,このうち1つは実際に移動する駒の位置(方向)で,残りの3つのいずれかに角行がいるか,いずれにもいないかの4通りなので $4 \times 4 = 16$ 通りとなります。

無印の場合
 
   
   
 
左の場合 引の場合 上の場合
   
   
 
 

竜種(竜王・竜馬)の場合

竜王と竜馬の動きは異なりますが,全方向に1つ以上は移動可能であるという点では共通なのでまとめて示します。竜王・竜馬の場合,「直」は用いず「左」「右」で表します。移動可能な配置(方向)は8通り,このうち1つは実際に移動する駒の位置(方向)で,残りの7つのいずれかに竜王・竜馬がいるか,いずれにもいないかの8通りなので $8 \times 8 = 64$ 通りとなります。

無印の場合
   
   
     
   
   
     
     
 
     
     
   
   
     
   
   
左の場合
   
     
 
   
     
     
     
     
   
     
   
 
引の場合 上の場合 寄の場合
   
   
   
   
 

指し手表記の全パターン

移動可能な駒の配置を下記のように記号で示します。

金種の場合 銀将の場合 桂馬の場合
   
 
   
   
     
 
角行の場合 飛車の場合 竜種の場合
 
   
 
   
   
金種の指し手表記の全パターン
No 表記 No 表記
1           無印 97           無印
2         98        
3         99        
4       100      
5         101        
6       102      
7       103      
8     104    
9         105        
10       106      
11       107       左上
12     108     左上
13       109      
14     110    
15     111     左上
16   112   左上
17         113        
18       114      
19       115       左上
20     116     左上
21       117      
22     118    
23     119     左上
24   120   左上
25       121      
26     122    
27     123     左上
28   124   左上
29     125    
30   126  
31   127   左上
32 128 左上
33           無印 129           無印
34         130        
35         131        
36       132      
37         133        
38       134      
39       左寄 135      
40     左寄 136    
41         137        
42       138      
43       139      
44     140    
45       141      
46     142    
47     左寄 143    
48   左寄 144  
49         145        
50       146      
51       147      
52     148    
53       149      
54     150    
55     左寄 151    
56   左寄 152  
57       153      
58     154    
59     155    
60   156  
61     157    
62   158  
63   左寄 159  
64 左寄 160
65           無印 161           無印
66         162        
67         163        
68       164      
69         165        
70       166      
71       167      
72     168    
73         169        
74       170      
75       171      
76     172    
77       173       右上
78     174     右上
79     175     右上
80   176   右上
81         177        
82       178      
83       右寄 179      
84     右寄 180    
85       181       右上
86     182     右上
87     右寄 183     右上
88   右寄 184   右上
89       185      
90     186    
91     右寄 187    
92   右寄 188  
93     189     右上
94   190   右上
95   右寄 191   右上
96 右寄 192 右上
$\hspace{740px}$
銀将の指し手表記の全パターン
No 表記 No 表記
1         無印 49         無印
2       50      
3       51      
4     左引 52    
5       53      
6     54    
7     55    
8   左引 56  
9       57      
10     58    
11     59    
12   左引 60  
13     61    
14   62  
15   63  
16 左引 64
17         無印 65         無印
18       66      
19       67      
20     68    
21       69      
22     70    
23     71     右上
24   72   右上
25       73      
26     右引 74    
27     75     右上
28   右引 76   右上
29     77    
30   右引 78  
31   79   右上
32 右引 80 右上
33         無印
34      
35      
36    
37      
38     左上
39    
40   左上
41      
42     左上
43    
44   左上
45    
46   左上
47  
48 左上
桂馬の指し手表記の全パターン
No 表記
1   無印
2
3   無印
4
飛車の指し手表記の全パターン
No 表記
1       無印
2    
3    
4    
5       無印
6    
7    
8    
9       無印
10    
11    
12    
13       無印
14    
15    
16    
角行の指し手表記の全パターン
No 表記
1       無印
2    
3    
4    
5       無印
6    
7    
8    
9       無印
10    
11    
12    
13       無印
14    
15    
16    
竜種の指し手表記の全パターン
No 表記
1               無印
2            
3            
4            
5            
6            
7            
8            
9               無印
10            
11            
12            
13            
14            
15            
16            
17               無印
18            
19            
20            
21            
22            
23            
24            
25               無印
26            
27            
28            
29            
30            
31            
32            
33               無印
34            
35            
36            
37            
38            
39            
40            
41               無印
42            
43            
44            
45            
46            
47            
48            
49               無印
50            
51            
52            
53            
54            
55            
56            
57               無印
58            
59            
60            
61            
62            
63            
64            

長くなり過ぎたので次回に続きます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?