忍者ブログ

ぐれーすけーるブログ

ゲームプログラミングを独習中なんだぜ☆

↑同人活動☆w
ホームページ☆
『きふわらべ』のダウンロード
は、ホームページへ飛ぶ↑☆

ぐれーすけーる は、ゲーム86パーセントでお送りするんだぜ☆↑押すと最新記事に飛ぶぜ☆



第25回世界コンピュータ将棋選手権1日目に
初出場した『きふわらべ』の記事はこちら↑☆
↑東方二次創作音楽
CD78サークル分買った
No image
(↑終了)
秋葉原裏通りの潰れそうなオリジナル同人
ソフト店『さんげっと』の記事はこちら☆

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【将棋】めざせ電王戦(41) あと1日(作業時間はあと5時間30分)☆

2014-10-30 01:33

むくり☆ 20時からぐっすり寝て、6時間後に起きたんだぜ☆

『きふわらべ』の思考部が未着手なことから、
電王トーナメントの参加資格として、
「思考部について、自力で十分な工夫を施したものに限る。」
という部分に 引っかかっていると思うが
とりあえず 作成を進めるぜ☆

『きふわらべ』のログ作成を続けるぜ☆



2014-10-30 03:05

1時間30分かけて、将棋盤に飛車を6枚置けるように改造したんだぜ☆w



これで駒の利きが見やすくなるぜ☆
全駒の利きを 1つの将棋盤に表示したいんだが、テキストファイルでは駒を
重ね合わせられないので やらなかった☆w 良し悪しなんだぜ☆


2014-10-30 04:05

まったくの盲点だったんだぜ☆



将棋エンジンの中で このように、エラーがあれば Exception を投げていたんだが、
将棋エンジンは、将棋GUIとは 別アプリケーション☆

将棋GUIから将棋エンジンを起動しても、
将棋エンジンで投げられている Exception はまったく見えないんだぜ☆
ただ 動かなくなるだけなんだぜ☆


2014-10-30 04:45

こんな感じで、全ての Exception はログファイルに書き出すことにし、
ダイアログボックスが出るように改造したんだぜ☆




そして目撃してしまった 中飛車からの5九飛不成。


バグを直そう☆



2014-10-30 04:53



確かに、飛車が貫通しているんだぜ☆
図解付きのログは便利なんだぜ~☆



2014-10-30 06:14

移動可能な升から、この升は移動できない、という指定をしたあとに、もともとの升の数より、移動できないと指示した後の升が増えている☆ ウーム☆

あと30分だけ調べよう☆



2014-10-30 06:30


まず、ここがバグっている。

将棋の駒の動き:
  飛車は、相手の駒と重なるところまでは移動可能で、
  そこから向こうは移動できない。

不具合:
  これを書いたコードを実行すると、確かにそのようになるのだが、
  それ以前の設定「飛車は、味方の駒の手前までしか移動できない」
  が消えてしまう。

上書き、差替えになっている気がするんだぜ☆


調べてみたところ、どうも単純に 上書きになっている☆
例えるなら、aーb-c と書いたのに aーc になっている状況なんだぜ☆
ーb が無視されてしまっている☆
なぜなのか☆?



トレースしたいのだが 将棋エンジンで起こっている不具合なのでトレースが利かない☆
将棋GUI側で ダミーコード を書いて テストしたいんだが
この朝はもう 時間がないんだぜ☆ また 夜 かもしれない☆


2014-10-30 06:52

まだ ねばる☆ww



↑一目瞭然の できてなさ☆


帰宅


2014-10-30 19:06

ソースを開く☆





目星も 見当も 何もないので ひとまず とにかく標準出力することにしてみるぜ☆




?!

いきなり おかしいんだぜ☆
赤線のところはオッケーなんだが、1行しか出ていないのがおかしいんだぜ☆?




5二 に、1個の先手の駒がいて、 8二の後手の飛車は 5二より向こうへ
行けない、というシチュエーションなんだぜ☆

確かに このプログラムだと、 b.Elements には 「5二」 が1個だけ入って
いると思うので、その「最初の1個は飛ばします。」だと 何にもならないんだぜ☆



2014-10-30 19:22

やりたかったことを整理しよう☆

ここで、
アルファベットの大文字には袋のように沢山中身が入り、
アルファベットの小文字は 1個ぽっち という意味として、説明するぜ☆


    A - b = C

が、やりたかった計算なんだぜ☆
Aには、後手の飛車の動きが入っているとするぜ☆(一部抜粋)


    A = 7二、6二、5二、4二、3二、2二、1二


bは、飛車の通り道を邪魔する先手の駒だぜ☆


    b = 5二

(先手の駒が 5二 にある)

Aからbを引いた答えは、

    C = 7二、6二、5二

になるのが目標なんだぜ☆



次に、 C.RemoveElement( b ) という便利なものがある☆

これを使えば、 bを含めて、そこから後ろを 切る んだぜ☆
だから、

    b = 4二

のときに、 C.RemoveElement( b ) をしたかったんだぜ☆




ソースコードを確認すると、

    ループは1回しか回らないのに、最初の1個は飛ばす。

となっているんだぜ☆




わたしは今、頭が沸騰していて 細かく考えることができない☆

    C.RemoveElement_OverThere( b )

という関数を作ってしまおう☆

意味としては、 bを含めず、それより後ろを 切る んだぜ☆



2014-10-30 19:59



さて、どうなんだぜ☆?



2014-10-30 20:07

平手初期局面から 2手目 将棋エンジン☆ の合法手?



落ち着いて考えてみよう☆ 温かいコーヒーを入れるのもいいかも知れないんだぜ☆


2014-10-30 20:18



マイナスの効果は なぜ消えるのか☆ まず実行してみるぜ☆





確かに、 8二 を消すと、 8二 だけが消えるんじゃなくて
8二 から ポキッ と折れて 後ろが全部消えるんだぜ☆

作った本人が仕様を理解していないんだぜ……☆



2014-10-30 20:32

実践的には、次のような不具合なんだぜ☆
 

さて、どうなっているのか☆




これは できているのか☆ すると 複合したときに おかしいのかなんだぜ☆?



2014-10-30 20:55



作った部品は ほとんど 動いていなかったという感じなんだぜ☆

マージもテストだぜ☆





あれ☆? 動いてる☆?







2014-10-30 21:23

大会の規約を読んだんだが、
各大会の前々日の18時を超えてると思うので、
最初の対戦ができる状態には持っていきたいと思うんだぜ☆


まず、飛車、角、香車が貫通してしまう不具合が 取れないので、1マスしか動かないようにできるかどうか 試してみるぜ☆




飛車がまっすぐ進むように書いてあるのは この部分なので、




むむむ☆ 将棋を指すことはできないのか☆ むむむむ☆








拍手[0回]

PR

【将棋】めざせ電王戦(40) あと2日(恐らく作業はあと6時間)なんだぜ☆www

2014-10-29 04:09

むくり☆ 6時間寝て起きたんだぜ☆


予定
    10月29日(水) 朝4時~7時 (3時間)
    10月30日(木) どこか    (3時間)
    10月31日(金) 会場下見
    11月 1日(土) 本番

あと6時間ぐらいしかないんだぜ☆wwwwwwwwwww


公開ソースレビューを行う☆www


別に ローカルPCの中でもソースレビューはしているのだが、
どうも 頭が働いていない ようなんだぜ☆wwwww
ブログに公開すれば 頭も目覚める だろう☆wwwwww
ソースをブログで公開するのは メンタル面 の理由なんだぜ☆wwwww



現在、「駒をてきとうに選び、その駒を突く」しかできていない☆ww

目標は 合法手を洗い出し、1手先の局面を読み、
王手されている局面を回避すること☆wwwww

作っている気なんだが 動いていない☆ まず このログを取るんだぜ☆


2014-10-29 04:24

やりすぎだとは思うが、USIコマンドを受け取ったところから始めるんだぜ☆ww

自分の手番になったとき、将棋サーバー(将棋所)は

    go btime 60000 wtime 50000 byoyomi 10000
           ↑       ↑        ↑
        ブラックタイム   │      秒読み
        ▲持ち時間    │
                ホワイトタイム
                △持ち時間

    ※0を3桁消すと秒になる☆

といった感じで メッセージを送ってくるんだぜ☆
参考: http://www.geocities.jp/shogidokoro/usi.html







2014-10-29 04:46


むずでょ@『きふわらべ』将棋電王T出場@muzudho1
やべ~~☆!! 今まで 勝ったことがなかったので気づかなかったのだが、相手の王さまを詰ませたことが分かった瞬間に 投了するようにプログラムを書いてある☆ww 去年のひまわりもこんな感じじゃなかろうか☆ grayscale.dou-jin.com/Entry/77/ #電王トーナメント #将棋ソフト
27秒前



まさかの 差し手を考える前の、読み抜けだぜ☆wwwww!!!!

  “やりすぎだとは思うが、USIコマンドを受け取ったところから始めるんだぜ☆ww”

↑orz

説明しよう☆
対人用に作っていたので、(※対人とはわたしのことだぜ)
詰ませたのだからゲームエンジンを止めよう、という意味合いで投了している☆ww


2014-10-29 04:58

むずでょ@『きふわらべ』将棋電王T出場@muzudho1
でも、勝ったあとに go コマンドが送られてくることはないと思うんだぜ……☆? これはこのままでいいんじゃないか☆? #電王トーナメント #将棋ソフト

むずでょ@『きふわらべ』将棋電王T出場@muzudho1
というか そもそも 将棋盤上に 王さまがいなくなっているのに、 go コマンドが送られてくることは ないんじゃないか☆? わたしの書いたコードには 死にコード がたくさんありそうなんだぜ……☆? 


2014-10-29 05:14

わたしのプログラムが 投了 するのは、指し手がないときだぜ☆



投了するなら まだいい方で、反則手を指してしまうのが問題なんだぜ☆


2014-10-29 06:44

問題箇所を絞り込んでいるだけで 1時間30分使ってしまったんだぜ☆(>_<)



問題箇所は、

  ①次の1手の合法手作成ルーチン

  ②ログを出力するルーチン

  ③手のリストから1手ランダムに選択するルーチン

の、
「どこか」または「いずれか」はたまた「全て」あるいは「まったくの見当違い」
のどれかなんだぜ☆



この1時間30分の間に、ログ出力を大改造していた☆

Before


After

ログはこのように、駒の動かし方がでる☆wwwwww
初期局面だけで ちゃんと30個の将棋盤が出てくる☆wwwwwwwwww
タテに長すぎて読みにくいんだぜ……☆ でも はるかに見やすくなったな☆ これでバグが見つかるかも……☆

時間なくなってしまったんだぜ☆ 次は仕事から帰ってきたあとで。


拍手[1回]

【将棋】めざせ電王戦(39) 反省会(2日目)なんだぜ☆

2014-10-27 19:07


わたしの将棋エンジン『きふわらべ』が floodgateの練習対局サーバーで
初めての1勝をあげたようなんだぜ☆ まずは おめでとう☆

  戦績: 1勝 101敗

では 反省会2日目を行うんだぜ☆



わたしのプログラムは、

 ① 将棋ライブラリー 『きふららべ』
 ② 将棋エンジン   『きふわらべ』
 ③ 将棋GUI    『きふならべ』

の3つで できている☆ この、3つに分かれている、というのが
失敗の原因の1つかと思う☆ 説明しよう☆





  ↑ 左が③の将棋GUI     ↑右が②の将棋エンジン
   『きふならべ』         『きふわらべ』
   USIサーバー付きの          USIクライアント付きの
   すぐれもの             すぐれもの

GUIとエンジンは、別べつに作っているということは 分かるだろうか☆




  ↑ これが①のライブラリ
    『きふららべ』
    摩訶不思議な思想のもと
    設計されている

将棋ってどんなゲームだろうか☆? という構想が入っているプログラムなんだぜ☆
③の『きふならべ』と、 ②の『きふわらべ』の両方とも、
『きふららべ』を使って できているんだぜ☆


この3つが、別々のソフトとして作られていることで
かなりの不利益をこうむったので 反省点として 記しておきたい☆




不利益

  トレース、ブレークポイントが利かない☆
  ===================

    Visual Studio 2012 は、
    今動いているプログラムを、ソースコードの指定の行で一時停止させたり、
    ビデオのコマ送りのように 1行ずつ実行する仕組みを持っている☆

    これをトレースとか、ブレークポイントと呼ぶんだぜ☆


    Visual Studio 2012 で 将棋GUI>『きふならべ』を動かして
    将棋エンジン>『きふわらべ』と戦っているときは、
    <将棋GUI>『きふならべ』 のトレースをすることができる☆
    これは バグ を発見しやすい☆


    しかし、<将棋エンジン>『きふわらべ』 や <ライブラリ>『きふららべ』
    で起こった不具合はトレースできないんだぜ☆
    それらは 別ソフト(別プロジェクト)として動いている扱いなので
    Visual Studio 2012 で止められなかったんだぜ☆
    これは バグ を発見しにくい☆
  

    『きふららべ』『きふわらべ』『きふならべ』の3つを
    1つのプロジェクト(C#ではソリューションと呼ぶ)にまとめた方が
    トレースができて バグを発見しやすかったのではないか☆?w



言っても、不利益は これぐらいのことで、
あとは 3つに分かれていることで 利点の方があったんだが☆
しかし 『トレース、ブレークポイントが使えない』というのは
利点の総合値を上回る不利益 だったよな気がするんだぜ☆



2014-10-27 21:00

と、思って 『きふららべ』『きふわらべ』『きふならべ』の3つを
1つのソリューションにまとめたのだが、



Process.Start( ~ ) と書いてあるように、<将棋エンジン>『きふわらべ』は
別プロセスとして動かしているんだぜ☆

1つのソリューションにまとめても、プロセスは別ものなんだぜ☆
トレースできないじゃないか☆




そのあと いろいろ探してみたんだが
別プロセスで動いている 将棋エンジン をトレースする方法が
分からなかったんだぜ☆

3つのプロジェクトを1つのソリューションにまとめることは
問題解決にならなかったな☆

ログ出力でがんばるしかないのだろうか☆??



2014-10-27 22:03



しかたないので このヘボいログで がんばるぜ☆

(a)GoteOh=5a4b というのは、5一にいる後手の王が 4二 に行こうとしている、
という意味だぜ☆

銀の4枚目は動けないからこのリストには無く、
歩の14枚目は 私が取ったので このリストには無い☆
後手の駒が 1個だけ候補を選んで並べているリストだな☆

↓局面的には こうなっている☆


これが、(b) で一気に 0件 になっているので、このバグを取りたいんだぜ☆



2014-10-27 22:28

なぜ 駒1個につき 1個だけの候補を選んでいるのかというと、
「まず動かそう」 と "とりあえず” 作ったプログラムだからなんだぜ☆


↑ 駒の動きの全パターンを調べると こうなる☆
 このままでは駒が貫通するんだぜ☆ 角が4方向を フル に指している☆ww

1マスしか動かないのであれば、貫通する心配はない☆ww
とはいえ、
一応、貫通しないプログラムも作ってある☆



なんにしろ (b) で 0件 になっている☆


拍手[0回]

【将棋】めざせ電王戦(38) 反省会なんだぜ☆


2014-10-26 21:59



作り方の くせ なんだが、

 「変なプログラムでも わりと動く」

ように私は 書くので、これが バグ を量産しているような気がするんだぜ☆


というか、変なプログラム を書けるように許容しているので、
バグを所蔵しているのは 意図 そのものなんだが、


う~む☆

「わりと動く」ように作ってしまう癖は やめた方がいいのか☆



2014-10-26 22:11



これは ヌル・オブジェクト という☆

    例えるなら、自販機に おもちゃのコイン を入れるようなものなんだぜ☆
    自販機は おもちゃのコイン を無視して、取り出し口に落とすな☆

    そのように、

    ここに、間違ったデータを入れると動かなくなるプログラムがあるとする。
    ヌル・オブジェクトという "代替データ” は、
    そんなプログラムに 突っ込んでも、
    まるで間違っていないデータかのように振る舞い 無視される☆
    これにより、プログラムは止まらずに動く

という しろもの なんだぜ☆


  ↑ヌル・オブジェクト☆  それなりに動いてくれるんだぜ☆


なんで そんな危なっかしい プログラムを書くのか、というと

 「変なプログラムでも わりと動く」

という設計思想なんだぜ☆
これも おもちゃのコイン を繁殖させる方向に働いているし、
そういう 意図 したもんなんだぜ☆

これも 今回は悪い目が出た気がするんだぜ☆




拍手[0回]

【将棋】めざせ電王戦(37) やべー☆ 何やってるか分からないif文が出てきた☆www

2014-10-25 08:29

ツリー構造がバグっていて 将棋エンジンが思考しないバグ(←致命的じゃないか☆w)
があるんだが、今 その原因っぽい場所が 根元(平手局面とか根元中の根元じゃないか☆w)
にあるっぽいことを発見した☆wwwww




発見とか 出てきた とかじゃなくて ずっとあったじゃないか☆ww

わざわざ if文 を書いているぐらいだから 何かあるのだろうと思っていたんだが、
これは 「動けばいいやコード」(*1) ではないのか☆w?


    *1 動けばいいやコード ……

       たとえば夏場、網戸がレールから外れて蚊が入ってくるようなら
       網戸をレールに戻すという現状復帰をしなければならない。
       しかし動けばいいやコードは、
       網戸を ただ立てかけ、
       「俺は 網戸を閉めたことを宣言したんだ、蚊は入ってくるなよ!」
       と虫に俺ルールを押し付ける霊長類のコードなのであるんだぜ☆


想像はつく☆ww

きふわらべ は [←戻る][コマ送り→] 操作ができる一直線上のデータ構造だったが
これを 将棋エンジンに改造するために ツリー型のデータ構造に置き換えるために
最初に ばりっ と新旧をバージョン分けした if分岐 なんだぜ☆


精査せねばなるまいんだぜ☆ww



2014-10-25 09:04

気分的に 一週間ぐらいはかかっていたバグは 5分で直った☆

……のだが もちろん別のバグと こんにちわ している☆ww



ログを出しまくることで 場所を絞り込むことはできたんだが、
構造の欠陥までは発見できなかったんだぜ☆

ログだけではなく ソースも追いかけなければ見つからない、
ということは分かったんだぜ☆(^ー^)

というか 「動けばいいやコード」 のせいだろう☆wwwwwwwwww(^▽^)

間違ったまま動いてくれるぐらいなら、止まってくれた方がいいのか何だぜ☆?w



2014-10-25 09:24



おかしなところが表示されるのって いいななんだぜ☆
さっきまで 途中で強制終了 していたからな☆wwww



2014-10-25 10:36



「動けばいいやコード」は バグの原因をどんどん深いところに隠す 
という性質があることが 分かったので、

「痛かったら叫べコード」に プログラミング・スタイルを変えることにしたぜ☆ww

さて こっちは どういう性質に収束していくのか☆ww
はたまた 発散するのか揺らぐのか☆ww



2014-10-25 11:08



むう☆

初期局面にクリアーしたのなら

 ツリー型リンクリスト
 ─
 [0] 平手局面

という、1個のデータだけ残っている状況にしたいので、Length = 1 なはずなんだが
クリアー 「も」 おかしいのか☆wwwwwwwwwwww

バグの複合施設なのかだぜ☆ww



2014-10-25 11:15

  引用:
     「~中略~ それが誤りであることに気づかないかも知れないです」

        『ひなた先生が教えるデバッグが256倍速くなるテクニック』
        165ページ ▽リスト6 ダウンカウントによるn回繰り返し

  ↓

 

このループは、リストの中の最後の1個だけ残して 他全部削除するループなんだぜ☆

max を -1 して、 > 1 していたら、先頭と最後の2個無視するんじゃないか☆w?



2014-10-25 11:35

いや違うんだぜ☆ max - 1 は合ってるんだぜ☆
> 1 するから 2個無視するんだぜ☆

 

 > 1 で2個無視、
 > 0 で1個無視、
 >=0 で無視しない、

なんだぜ☆ うわあ☆↓↓ なんということなんだぜ☆(↓↓)





                        気分



2014-10-25 11:41

あ、はい☆ さっきのがバグの原因(の1つ)でしたなんだぜ☆

バグ取れたんだぜ☆ 次進むぜ☆ (そそくさ)


  バグ・ステータス
  ─

   ・【修正済み!】 後手の銀が真後ろに引く

   ・        飛車が歩を飛び越えて前に進む

   ・
【修正済み!】 SFEN書式で棋譜入力してコマ送りしていたときに
            後手 2三歩打 で強制終了


   ・        王さまが逃げない


え☆? 飛車が歩を飛び越えて前に進んで、王様が逃げないだって☆?ww

すごいバグが残ってるな☆ww




むずでょ@『きふわらべ』将棋電王T出場@muzudho1
昆虫ウォッチ 次回予告 ①飛車が歩を飛び越えて前に進む ②王様が逃げない をお送りします☆ grayscale.dou-jin.com/Entry/74/ #電王トーナメント



飛車が歩を飛び越えて前に進む


2014-10-25 12:00

このバグを修正するぜ☆

もしかすると、今までの修正によって 直っていてくれればいいのだが、
調査は省けないぜ☆



まず、 乱数のたね が固定されていることを確認しますなんだぜ☆

これで、将棋エンジンは 毎回 手を変えずに指してくるぜ☆
これで 再現パターン を探すんだぜ☆



2014-10-25 12:15



ぼーっと 眺めていたんだが 飛車は 自分とこのコマを避けているようだったんだぜ☆
しばらく再発しなければ 直っているとみて よいだろう☆



  バグ・ステータス
  ─

   ・【修正済み!】   後手の銀が真後ろに引く

   ・【勝手に直った?】 飛車が歩を飛び越えて前に進む
               (ツリー構造修正に伴い、勝手に直った?)

   ・
【修正済み!】   SFEN書式で棋譜入力してコマ送りしていたときに
              後手 2三歩打 で強制終了


   ・          王さまが逃げない


既知のバグは あと ひとーつ☆ 次のも直すぜ☆



王さまが逃げない



2014-10-25 23:36

今日は吉祥寺におでかけしてきたぜ☆ 帰ってきて早速 開発再開だぜ☆

私の将棋エンジンには

  ・(旧)配列型の棋譜格納モデル
  ・(新)リンクリスト型の棋譜格納モデル

があり、(新)に置き換えようと思っている☆


改造方針

  現状、伝達手段として ①配列index、②手目 という2つの単位が混在している☆
  これを、命令を伝達するときは ②手目 だけを単位として使うよう、統一したい☆






拍手[0回]

ブログ内検索

PR



絶版・品切れ本を皆さまからの投票で復刊させる読者参加型のリクエストサイト
復刊ドットコム

ネイフィールウォーター

応援フリーエリア

デジゲー博
むずでょは、第1回から毎年 出展しているんだぜ☆

ウサギのように新品入荷☆
カメのようにまだ置いてある既刊☆

同人ソフト一押し店 さんげっと
むずでょは、さんげっと を応援しているんだぜ☆

TVアニメ「Charlotte(シャーロット)」公式サイト
ニコ生の Angel Beats! 一挙放送が 面白かったので次のも応援するぜ☆ww

プロフィール

HN:
むずでょ
性別:
非公開

最新コメント

[01/02 Free Tax Marlboro Gold Regular Cigarettes Coupons 3 Cartons]
[12/30 Hot Selling Newport Regular Cigarettes Outlet 160 Cartons]
[12/29 http://www.patersonlabs.com/Marlboro/41.html]
[12/29 http://xz84.com/Marlboro/16.html]
[12/29 http://www.paragoninks.co.uk/Marlboro/93.html]

P R