コンピュータ将棋の思考ルーチンを検討

実際に人間が対局する場合の次の1手をベースに検討してみる。次の1手を検討する場合のチェックポイント。

・相手玉に詰みがあるか
・自玉が王手がかかっているか
・自軍の駒で敵駒の利きが入っている駒はあるか
 ・敵駒の利きに入っている駒の内、味方駒の紐がついているかどうか
・自軍の駒の利きに入っている敵駒はあるか
 ・利きに入っている敵駒の内、敵駒の紐がついているかどうか
・持ち駒がある場合、有効な打ち場所があるか
・序盤であれば玉形を固めることを検討
・飛車先の歩、角道の歩を前進して
攻め駒を押し上げていく
・銀・桂も飛車角に先行して進める

大まかには上から順にこんな感じで次の1手を検討していくのではないだろうか(初心者は)。将棋というゲームは複雑なルールで難しい形勢判断を必要とするため局面によっては上記順序を入れ替えて検討するというのもよくある。駒得をして終盤全力で寄せるというのが一般的だが、局面が有利になるのなら多少駒損はやむを得ないという判断も人間の対局では一般にあり、コンピュータ将棋の思考ルーチンの作成の難しさはその人間の微妙な心理の形勢判断をプログラムとして反映させることにある。

nsmutablearrayの参照コピー仕様

参照コピー・・・というものに慣れていなくて戸惑った。実体を複製するわけではなくて、実体のもつアドレスつまり参照だけコピーするので、コピーされたものに対して変更を加えようとするとコピー元のオリジナルに変更を加えることを意味する。

NSMutableArrayをコピーする場合は参照コピーになる。参照コピーではなくて、実体をコピーする、ハードコピーとかディープコピーとか呼ばれるコピーがしたくてその仕方を色々試してみた。
その方法は下記のようにいくつかある

  • [array mutablecopy]
  • [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES]
  • NSArray* array = [NSKeyedUnarchiver unarchiveObjectWithData:
    [NSKeyedArchiver archivedDataWithRootObject:oldArray]]
  • 上記方法を試してみたが、結論からいうと全部ダメだった。私のやり方が悪いのかなんなのか。何をやっても参照コピーになってしまうので、最後の手段として力づくで複製することにした。つまりnewの段階から新しいオブジェクトを作って、コピー元の要素をループで回して新しいオブジェクトの中に入れるという方法。さすがにこの方法なら複製できる。

    デギンの憂鬱編をプレイ

    ジオンの系譜のデギンの憂鬱編をプレイしてみた。

    55ターンまでやった

    デギンの憂鬱編はプレイヤーはギレン率いるジオン公国を操作して、敵は正統ジオンと新生ジオン。ジオン公国のニュータイプは5人(シャリア・ブル、グレミー・トト、NT-002,003,004)。オールドタイプのエースパイロットはガトーやシーマ、ノリスなど他にもいて人材は十分揃っている。新生ジオンと正統ジオン、手ごわいのは強力なニュータイプがいる正統ジオンの方。シャア、ララァ、クスコ、マリオンウェルチの4人がいてジオングやエルメスに高確率で乗ってくるので非常に苦戦する。したがって先に攻略するのは正統ジオンの方にした(本拠地サイド3に敵本拠地グラナダが近接しているというのも)。

    55ターンほどやってようやく正統ジオンは滅亡させることに成功した。攻略の方針はまず宇宙を手っ取り早くグラナダ以外制圧して、その後正統ジオンが制圧している地上の特別エリアにザンジバルで降下して制圧していくというパターン。グラナダに隣接するエリアは攻めてこられても対応できるように少数のニュータイプ搭乗のジオングやエルメスかノイエジールを配備して対処するようにして、そのまま最終攻略まで閉じ込めておく。シャアなどのニュータイプなどにはシャリア・ブルや002をジオングに乗せて前衛に高アーマーのGBアルファを置いて仕掛ければ2〜3ターンあれば倒せる。

    正統ジオン倒して宇宙を全部制圧した後は地球の新生ジオンだが、もう勝ち確定が見えているためモチベーションが激しくダウン。ニュータイプもいないし、地上ではどのみちサイコミュ兵器も使えないし。エースパイロットもランバラルやドズル、シンマツナガなどは強いことは強いがシャアなどを倒した後では今更というかなんというか。

    モチベーションを維持するためには先に新生ジオンを倒すのがいいかもしれない。ただし正統ジオンを後にするとAランク以上にシャアやララァが成長する可能性もありそうなると手がつけられなくなる。

    デギン編をやってみて発見したことは002が予想以上に強かったこと。Sランクで射撃17、A覚醒なので実質射撃は21にもなる。他には登場ユニットはジオンで生産できるものに限定されているのでZガンダムやキュベレイといった強力なMSがいないのでニュータイプ相手でも数で押せばそのうち倒せるということ。

    NT-002のステータス

    ジオンの系譜に登場するNT-002というパイロットのステータスの射撃値の上限は14と思っていたが17ということに最近気づいた。射撃17と反応14でA覚醒によるボーナスを適用すると実質の最大ステータスは射撃21と反応18になる。NT-001(レイラ)はB覚醒なので実質の最大ステータスは射撃20と反応23になる。指揮と射撃は002の方が優れて魅力と反応は001の方が優れている。魅力の値が0というのがどれだけのデメリットかというのは実感のしづらいところで、顔なしの002だからといって見くびっていたが001とさほど戦闘力的には変わらない印象。

    シナリオの進行ではプロトゼロと001を選ぶか、それとも002,003,004の3人を選ぶか選択するが、002がこれほど強いのなら3人の方を選択するのもアリかもしれない。ちなみにプロトゼロはC覚醒で実質の最大ステータスは射撃23と反応24になる。格闘が19と飛び抜けているが耐久は5とかなり低いので強化人間らしい不安定な特徴を持つ。人材難のアクシズならまだしも豊富なジオン公国ならプロトゼロと001を選択がやはり無難だろうか。

    別の機会にプレイしたらステータスが攻略情報通りだった

    別の機会にジオンの系譜をプレイした時、NT-002のステータスをチェックしたら上記のようにはならず攻略情報通り射撃の上限はSランクで14となっていた。NT-002のステータスが射撃17になっているのは確かに確認したはずなんだが・・・。ジオンの系譜にはバグのある初期版などいくつかのバージョンが存在しているため、あるバージョンによってはキャラのステータスも微妙に異なることがある・・・とかそういうのかもしれない。それとも幻を見て記事を書いたのだろうか。