何よこれ、ずばり解説☆ position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1 moves 7g7f
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

何よこれ、ずばり解説☆ position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1 moves 7g7f

2015-05-20 19:45
  • 1

コンピュータ将棋エンジンを作り始めるような人は、
だいたい 次のような目的があるんじゃないだろうか☆

    (1)電王戦のPVに出たい
    (2)世界コンピュータ将棋選手権で優勝して最強になりたい
    (3)名人と戦いたい
    (4)フラッドゲートに放流したい
    (5)その他

とりあえず『将棋所』(しょうぎどころ)という画面ソフト(GUI)を利用するように
将棋エンジンを作っておくと、(1)、(2)、(4)は狙えるので オススメなんだぜ☆




コンピュータ将棋エンジンを作り始めると、最初の3ヶ月の間に、
だいたい 2つのコースを選ぶことになるぜ☆

  コースA ──────────→ USIプロトコル
  コースB ──────────→ CSAプロトコル

どっちに行けばいいんだぜ☆? というところなんだが、
コースAに行くと、将棋所が使える☆

USIを使うとしよう☆

ぶっちゃけ USI で難しい壁は、2箇所なんだぜ☆

ponder(ポンダー)と、  これ
                ↓

position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1 moves 7g7f

ponderはやらないという選択肢があるんだが、↑あれ は必要なんだぜ☆




あの長い文字列。よく見ると、次のような形をしているんだぜ☆

    position ~なんたら1~ moves ~なんたら2~ 改行


~なんたら1~ には、2つのパターンがあるんだぜ☆

(1)position startpos moves

(2)position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL w - 1 moves


(1)が飛んできたら、 平手初期局面 にしたらいいんだぜ☆
(2)が飛んできたら、 局面     を作成するんだぜ☆


局面 ってのは、「駒の配置」、「次の手番」、「持ち駒」、「次の手が何手目か」
の4つだぜ☆

  sfen 略/略/略/略/略/略/略/略/略 w - 1

なら、次の手番は w(最初に指す方の反対側プレイヤーという記号)で、
持ち駒は両者無し、次の手は1手目、なんだぜ☆
謎の記号の書き方については後で説明する予定☆


~なんたら2~ は、初手からの棋譜だぜ☆

  7g7f 3c3d 6g6f 4c4f

と進んでいくんだが、

  プレイヤー1プレイヤー2プレイヤー1プレイヤー2

と、指し手が交互に並んでいるんだぜ☆
謎の記号の読み方については後で説明する予定☆


この長い文字列は、

  どこかの局面の1手目から符号が載っている

というデータになっているわけだな☆



ここで、頭がすっきりする話を 1つ しておこう☆


USIの元ネタは チェスのUCI なんだぜ☆wwww
「SFENって何なんだぜ☆ なんだこの変な書き方は」と思うたびに
「ああ、元ネタはチェスのUCIで、将棋用にアレンジしたんだろうな」と
思うようにすると 精神的に 健康になるんだぜ☆www

暗号に見える文字も、チェスの駒と思うと、
元ネタでは チェスの盤そのまんま なんだぜ☆

pは後手のポーン、Rは先手のルック☆ww
漢字に大文字/小文字がなくて残念だったな☆www

a1 は a列1段目☆www
    参考: チェス入門 棋譜の読み方
7七 じゃなくて 7g ☆wwww 漢数字じゃなくて残念だったな☆www


将棋指しには 暗号に見える☆wwwwww



では、チェスと比較しながら SFEN を解説しよう☆www

      チェス                  将棋
━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━
最初に指す方が     白(w) 将棋盤の下が 黒(*) 平手(先手)/駒落ち下手(後手)
最初に指す方の反対側が 黒(b) 将棋盤の上が 白(*) 平手(後手)/駒落ち上手(先手)

                    (*)ただし☆! ↓

                        コンピュータ将棋
                 ━━━━━━━━━━━━━━━━━━━━━━━━
                 最初に指す方が     黒(b)
                 最初に指す方の反対側が 白(w)

になるんだぜ☆

  「基本的に チェスで、 将棋に合わせて 黒白だけ ひっくり返したんだ☆
   なるほど、ぽろ~☆(/_\)」

と考えれば、頭が すっきり したな☆wwwwwwwww


  sfen 略/略/略/略/略/略/略/略/略 w - 1

次の手番が b か、 w か、これは分かるようになったな☆ww





次に。

  sfen 略/略/略/略/略/略/略/略/略 w - 1

これは -1 ではなくて、 1 なんだぜ☆ そして 1 固定なんだぜ☆

何を言っているか分からないかもしれないんだが、 1 固定なんだぜ☆

将棋所の説明文に
「将棋所の場合、この数字は必ず1にしています。」と記されているんだから、
将棋所を使うんなら 1 固定でいいんだぜ☆




さらに次は☆

  sfen 略/略/略/略/略/略/略/略/略 w - 1

これは、 左端のが 将棋盤の1段目 で、右端のが 将棋盤の9段目 なんだぜ☆
だから
   /
の棒の数は 8本あるんだぜ☆
じゃがりこを舐めた指で数えてみるといいんだぜ☆ 8本あるな☆
間に棒が8本あれば、段は9つあるんだぜ☆

では謎の記号の見方を一覧するぜ☆

      チェス                  将棋
━━━━━━━━━━━━━━━   ━━━━━━━━━━━━━━━━━━━━━━━━
P ポーン  (pawn)     P ポーン   歩   (pawn)
N ナイト  (knight)   L ランス   やり、香(lance)
B ビショップ(bishop)   N ナイト   桂馬  (knight)
R ルック  (rook)     S シルバー  銀   (silver)
Q クイーン (queen)    G ゴールド  金   (gold)
K キング  (king)     K キング   王   (king)
                  R ルック   飛   (rook)
                  B ビショップ 角   (bishop)

左端が謎の記号なんだぜ☆
これは うまく 当てはまっているんだぜ☆
そして 最初に指す方が 大文字、 最初に指す方の反対側が 小文字 なんだぜ☆


      チェス                  将棋
━━━━━━━━━━━━━━━   ━━━━━━━━━━━━━━━━━━━━━━━━
p ポーン  (pawn)     p ポーン   歩   (pawn)
n ナイト  (knight)   l ランス   やり、香(lance)
b ビショップ(bishop)   n ナイト   桂馬  (knight)
r ルック  (rook)     s シルバー  銀   (silver)
q クイーン (queen)    g ゴールド  金   (gold)
k キング  (king)     k キング   王   (king)
                  r ルック   飛   (rook)
                  b ビショップ 角   (bishop)


目が見慣れてきたかなんだぜ☆wwwwww

    「飛車が r ☆? フンガー☆!」

だったのが、

    「ルック、あ☆ 分かる分かる」

ぐらいには 謎が解けたかなんだぜ☆?www

コンピュータ将棋を作っている最中のヒマに チェスの棋譜を 1つ2つ ちょっと
眺めておくと、塩を振ったおにぎりのように 食べやすくなるぜ☆wwwwww


次に、 成り駒 はどうするのかなんだぜ☆?

      チェス                  将棋
━━━━━━━━━━━━━━━   ━━━━━━━━━━━━━━━━━━━━━━━━
                  +P ポーン   先手 と金 (pawn)
     チェスに         +L ランス   先手 成香 (lance)
     成り駒など        +N ナイト   先手 成桂 (knight)
     ない☆!!        +S シルバー  先手 成銀 (silver)
                  +R ルック   先手 龍  (rook)
                  +B ビショップ 先手 馬  (bishop)
                  
                  +p ポーン   後手 と金 (pawn)
                  +l ランス   後手 成香 (lance)
                  +n ナイト   後手 成桂 (knight)
                  +s シルバー  後手 成銀 (silver)
                  +r ルック   後手 龍  (rook)
                  +b ビショップ 後手 馬  (bishop)

プラスのピーは、プロモートのピー とダジャレで覚えておくといいんじゃないか☆www
USIを考えた人、チェスに無くて将棋に有るような 困ったルールが出てきたときは
まず + を使いまわして、
それでも足りないときは * を使いまわして 頑張ったように
わたしには見えたんだぜ☆wwww


そして、空きマスは、連続している数を入れるんだぜ☆

  ┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
  │歩│ │ │ │ │ │ │ │ │
  └─┴─┴─┴─┴─┴─┴─┴─┴─┘

なら P8 だぜ☆ 書き方は1段毎に完結する☆

  ┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
  │ │ │ │ │ │ │ │ │ │
  └─┴─┴─┴─┴─┴─┴─┴─┴─┘

なら 9 だぜ☆

  ┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
  │香│桂│銀│ │ │金│銀│桂│ │
  └─┴─┴─┴─┴─┴─┴─┴─┴─┘

なら LNS2GSN1 だぜ☆

  ┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
  │ │桂│ │金│ │金│ │桂│ │
  └─┴─┴─┴─┴─┴─┴─┴─┴─┘

なら 1N1G1G1N1 だな☆ww

空きマスには 特別なルールはないんだぜ☆



さて、

  lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL

を見て、読めるようになってきただろうかなんだぜ☆?
盤上に駒が無い場合は

  9/9/9/9/9/9/9/9/9

になるんだぜ☆

小説を読むように、将棋盤の左上から右上へ、1段下がって左端から右端へ、と、
カウンターを進めながら 駒を置いていけばいいな☆




そして次は☆

  sfen 略/略/略/略/略/略/略/略/略 w - 1

このハイフンなんだが、持ち駒があると 例えば、 次のように書くんだぜ☆

  sfen 9/9/9/9/9/9/9/9/9 w KRB2G2S2N2L9Pkrb2g2s2n2l9p 1

  「2枚以上のときは、その枚数」「駒の種類」

で1セットなんだぜ☆ 先手が歩を18枚持っていれば、

  18P

になるんだぜ☆

日本語なら「ハンバーガー2個ください」と言うが、
英語 なら「ツー ハンバーガーズ, プリーズ」と言うな☆www
これから 「持ち駒は ツー銀ズ、ファイブ歩ゥズ」とか言おうぜ☆wwwwww

先手が歩を1枚持っているときは、1は書かずに

  P

と書くんだぜ☆
英語で  「ワン ハンバーガーズ, プリーズ」とか言わないな☆wwwww
日本語なら「いくつですか?」「1個なんだぜ☆!」と言うかも知れないが☆wwww

わたしは、持ち駒の書き方は

  K → R → B → G → S → N → L → P → k → r → b → g → s → n → l → p

の順に並んでいる、と決め付けて実装したんだが、将棋所を使っていて いまのところ
問題はないぜ☆ もしかするとバグになるかもしれない☆ww

それに 王が持ち駒になっていることがあるんだろうか☆ww変だぜ☆ww
わたしは実装している☆ww

なお、持ち駒に成り駒はない☆ww




では、この長い文字列を読めるだろうか☆

8l/1l+R2P3/p2pBG1pp/kps1p4/Nn1P2G2/P1P1P2PP/1PS6/1KSG3+r1/LN2+p3L w Sbgn3p 1

  参考: USI草案1 から一部改変


わたしは、多分、考えて手動で書いたんだが、次のような将棋盤になると思うんだぜ☆

下向き側┌──┬──┬──┬──┬──┬──┬──┬──┬──┐
    │  │  │  │  │  │  │  │  │香↓│
 角  ├──┼──┼──┼──┼──┼──┼──┼──┼──┤
 金  │  │香↓│龍 │  │  │歩 │  │  │  │
 桂  ├──┼──┼──┼──┼──┼──┼──┼──┼──┤
 歩3 │歩↓│  │  │歩↓│角 │金 │  │歩↓│歩↓│
    ├──┼──┼──┼──┼──┼──┼──┼──┼──┤
    │王↓│歩↓│銀↓│  │歩↓│  │  │  │  │
    ├──┼──┼──┼──┼──┼──┼──┼──┼──┤
    │桂 │桂↓│  │歩 │  │  │金 │  │  │
    ├──┼──┼──┼──┼──┼──┼──┼──┼──┤
    │歩 │  │歩 │  │歩 │  │  │歩 │歩 │
    ├──┼──┼──┼──┼──┼──┼──┼──┼──┤
    │  │歩 │銀 │  │  │  │  │  │  │
    ├──┼──┼──┼──┼──┼──┼──┼──┼──┤
    │  │王 │銀 │金 │  │  │  │馬↓│  │
    ├──┼──┼──┼──┼──┼──┼──┼──┼──┤ 銀
    │香 │桂 │  │  │と↓│  │  │  │香 │
    └──┴──┴──┴──┴──┴──┴──┴──┴──┘上向き側

次は 下向き側 の手番☆

こういった情報なんだぜ☆ どうだろうか☆?




これで残るは

    position ~なんたら1~ moves ~なんたら2~ 改行

なんだぜ☆ ここには棋譜の符号が入る☆

では、 盤の見方 を比べてみるんだぜ☆ww

        チェス                 将棋
━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━
                     9 8 7 6 5 4 3 2 1
                    ┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
                    │ │ │ │ │ │ │ │ │ │一
 ┌─┬─┬─┬─┬─┬─┬─┬─┐  ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
8│ │ │ │ │ │ │ │ │  │ │ │ │ │ │ │ │ │ │二
 ├─┼─┼─┼─┼─┼─┼─┼─┤  ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
7│ │ │ │ │ │ │ │ │  │ │ │ │ │ │ │ │ │ │三
 ├─┼─┼─┼─┼─┼─┼─┼─┤  ├─┼─┼─╋─┼─┼──┼─┼─┤
6│ │ │ │ │ │ │ │ │  │ │ │ │ │ │ │ │ │ │四
 ├─┼─┼─┼─┼─┼─┼─┼─┤  ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
5│ │ │ │ │ │ │ │ │  │ │ │ │ │ │ │ │ │ │五
 ├─┼─┼─┼─┼─┼─┼─┼─┤  ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
4│ │ │ │ │ │ │ │ │  │ │ │ │ │ │ │ │ │ │六
 ├─┼─┼─┼─┼─┼─┼─┼─┤  ├─┼─┼──┼─┼──┼─┼─┤
3│ │ │ │ │ │ │ │ │  │ │ │ │ │ │ │ │ │ │七
 ├─┼─┼─┼─┼─┼─┼─┼─┤  ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
2│ │ │ │ │ │ │ │ │  │ │ │ │ │ │ │ │ │ │八
 ├─┼─┼─┼─┼─┼─┼─┼─┤  ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
1│ │ │ │ │ │ │ │ │  │ │ │ │ │ │ │ │ │ │九
 └─┴─┴─┴─┴─┴─┴─┴─┘  └─┴─┴─┴─┴─┴─┴─┴─┴─┘
  a b c d e f g h

                          ↓ しかし☆

    コンピュータ・チェス           コンピュータ・将棋
━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━
                     9 8 7 6 5 4 3 2 1
                    ┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
                    │ │ │ │ │ │ │ │ │ │a
                    ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
                    │ │ │ │ │ │ │ │ │ │b
       チェスと         ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
      同じほっほー☆       │ │ │ │ │ │ │ │ │ │c
      (^▽^)         ├─┼─┼──┼─┼──┼─┼─┤
                    │ │ │ │ │ │ │ │ │ │d
                    ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
                    │ │ │ │ │ │ │ │ │ │e
                    ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
                    │ │ │ │ │ │ │ │ │ │f
                    ├─┼─┼──┼─┼──┼─┼─┤
                    │ │ │ │ │ │ │ │ │ │g
                    ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
                    │ │ │ │ │ │ │ │ │ │h
                    ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
                    │ │ │ │ │ │ │ │ │ │i
                    └─┴─┴─┴─┴─┴─┴─┴─┴─┘
                    
「6f…、エフゥ☆?!」

と、最初は面喰らうんだが、簡単に覚える方法を紹介するんだぜ☆




    アルファベットで段を覚える歌
    ======  作詞・むずでょ

    ♪CDをフライングゲット☆

     盤を挟んで両端に AI☆

     真ん中で立会人は イー顔☆
   
     あなた ビールで☆ わたし ハイボール☆


将棋盤には4つの星があるな☆
CD(cd)をフライングゲット(fg)する場所はそこなんだぜ☆

盤の端っこは(ai)だし、 真ん中は(e)☆

相手はビール(b)で、わたしはハイボール(h)なんだぜ☆



符号で f が出てきたら、はい フライングゲットするんだぜ☆ww
7g とか、 7f とか書かれていても すぐには頭の中に思い浮かべられないので、
暗号みたいな文字列さえ読めれば良しとするんだぜ☆

  7g7f

という4桁の符号が出てきたとき、これは「7g から 7f へ動く」と読むんだぜ☆
歩なのか、銀なのか、何が動いたのかは書いていないんだぜ☆


慣れただろうか☆wwwwww

       チェス                    将棋
━━━━━━━━━━━━━━━━━━    ━━━━━━━━━━━━━━━━━━━
  1. e4 e6                 1. 7六歩
                         2. 3四歩 
  2. d4 d5                 3. 6六歩 
                         4. 3二金
 

    コンピュータ・チェス             コンピュータ将棋
━━━━━━━━━━━━━━━━━━    ━━━━━━━━━━━━━━━━━━━
  position startpos moves e2e4        position startpos moves 7g7f
   e7e6 d2d4 d7d5               3c3d 6g6f 4a3b




わたしには 人間の棋譜は どうしろ、進め進め、と 命令 になっているように
見えるんだが、
時間は過去から未来へ一方的に進み、戻れない時間を今生きている動物のような感じが
するぜ☆www

コンピューターの棋譜は どの場所の何かの駒が どの場所に動いたのか
起こったできごとの マスの番号の記録 になっているんだぜ☆ww
わたしには まるで未来人が 過去の記録に当たっているかのような感じがするぜ☆ww


なんだか わたしには 人間の棋譜が 動詞(+名詞)のように言語の形に見えるし、
コンピューターの棋譜は 名詞の羅列のデータに見えるんだぜ☆wwwwww


コンピュータ・チェスは アルファベット・数字 の順で、
コンピュータ将棋  は 数字・アルファベット の順なんだが、
どちらも 筋・段 の順でマスが記されているという点は同じなんだぜ☆



マス だけ棋譜に残しても 足りないんだぜ☆

まだ、「成り」なのか、「打」なのか、 アクション の記録も必要だな☆


駒が成るときは、うしろに「+」記号を付けるんだぜ☆

       将棋                   コンピュータ将棋
━━━━━━━━━━━━━━━━━━    ━━━━━━━━━━━━━━━━━━━
      2三歩成                    2d2c+


駒を打ったときは、
打った駒の種類を大文字で書いて「*」記号を付け、打ち込んだマスを書くんだぜ☆

       将棋                   コンピュータ将棋
━━━━━━━━━━━━━━━━━━    ━━━━━━━━━━━━━━━━━━━
      5五銀打                    S*5e
      5五銀 (※)

   ※「打」と分かる場合は
    「打」を省くんだぜ☆



これで、あの長い文字列の仕組みは 全部説明したと思うんだが
どうだろうかなんだぜ☆?



その他の話題☆

この 長い文字列、取った駒を記録していない んだぜ☆
「待った」(棋譜の巻き戻し)をしたいときに、
取られた駒が元に戻ってなくて 困るんだぜ☆

棋譜の巻き戻し機能 を付けたい場合は、
駒を取るたびに 何らかの方法で パソコンの中に覚えておく必要があるな☆ww




とりあえず ひとまず書き上げなんだぜ☆
分からないところがあれば 質問が出るだろうから それを拾っていく予定なんだぜ☆

あと、今(2015年5月21日現在)無職なので仕事くれ☆wwwww

広告
コメントを書く
コメントをするには、
ログインして下さい。