参考:
プ:カドケシ風白黒マップ
プ:カドケシ風白黒マップ結果
かっちゃんからコメントをもらった。「境界条件はどうなっているんでしょうか?」。それを受けて、モロモロについて説明・考察記事を書いてみる。
■盤面のプログラミング的なあつかい。
今回も、使い慣れている「プ:「パンの耳」法」を使った。「番人」や「門番」とか言われてる方法の応用版。
例えば、3×3の盤面を調査するときにはもうひとまわり、大きい5×5の用意している。そこを白マスで埋めた。
これで何の意味があるかというと、
if(x<0 || 3<x || y<0 || 3<y){ -※
そこは範囲外なのでゴニョゴニョ・・・
}
といったプログラムを書く必要をなくそうということ。
今回は「黒マスはひとつながりか?」をチェックする関数で有効。
黒マスを一個みつかたら、上下左右に再帰的に見ていってつながってる黒マスは全部赤く塗りつぶす。そして、黒が無くなれば、ひとつながり、まだ、黒が残っていえば、そうでない。
白マスでまわりを埋めてあるおかげで、上下左右にとなりを見ていくときに黒のまわりには必ずマスが存在することになる。
言語がC#をだったので、配列範囲外アクセス時の「例外処理」を使うこともできたろうとは思うが、結局、
例外がおこった場合は{
こんな書式で、こんな、こんな、ゴニュゴニャ・・・
}
と書かなきゃいけないので上記※印の条件式の場合以上にめんどくさいかも。
■GA:個体VS個体が引き分け
個体対個体のバトルが引き分けだった場合は農場中のどちらかが生き残り、どちらかが消滅する。扱いとしては優劣なし。
今回のテーマの場合、調整の結果、個体が両方とも「黒がひとつながりでない場合」は「カドの多少」によらず、引き分けに設定した。
”お山の大将”=「ひとつながり」でないのに、「カドが多い」。 ローカルミニマムな彼が幅を利かせて、集団としてそれ以上の成長が望めなくなるのを避けるため。
■今回のカドケシルールを租借すると・・・。
この回のカドケシルールは租借すると、概ね。
・真っ黒に塗った盤面から白マスをできるだけ多く抜く。
・白同士は縦横にはつながらないようにする。
・もともとのコーナーは残す。 <= とこの記事を書いた当初は思っていたが次の記事へ・・・
・黒のひとつながりをキープ。
ということになりそうだ。