RSS

 

RSS


プ:カドケシ風白黒マップ結果

  • いわいまさか
  • at 2008/6/27 17:58:45

GAでなんか問題を解いてみようというのでやってみた。

条件おさらい
・白黒マスメ
・シマの数は1個 縦横に連結したひと
・カドの数は最大
・カドの数が同じなら黒マスの数が最大

3×3、4×4、5×5 結果は
kadomasu.jpg 


・・・・雑感。

・今回はC#を使ってみた。文法上からくる制約でキレイなソースになるのでいい。

・C#だと「不定長のDNA」というところがスッキリ書けた。

・「不定長のDNA」のときは評価関数に「DNAが短い方がよい」というところを加味した方がいいようだ。

・淘汰の方式は1対1の対戦方式にしてみた。参考:トーナメント方式。記事の末尾にはそのあたりのソースを載せた。

・マスメの数が大きくなってくると、「答えに到達するのか」?とか「スピードはだいじょぶか?」とか悩みは増える。

・もしも、全検索で済むような問題ならそちらの方がGAより確実。

・GAでは、各個体を評価する関数は成長するように、うまくかかないと
いけない。ここのところがやや「匠の世界」。

・でも全体的には、GAはプログラミングは、お気楽でよろしい。

以上

WINPUSH BattleCard(KadoCard acard, KadoCard bcard)
   {
       if (acard.m_shima == 1 && bcard.m_shima != 1){
           return (WINPUSH.AWIN);
       }else if (acard.m_shima != 1 && bcard.m_shima == 1){
           return (WINPUSH.BWIN);
       }else if (acard.m_shima !=1 && bcard.m_shima != 1){
                return (WINPUSH.PUSH);
       }

       if (acard.m_kado > bcard.m_kado){
                return (WINPUSH.AWIN);
       }else if (acard.m_kado < bcard.m_kado) {
                return (WINPUSH.BWIN);
       }

       if (acard.m_masu > bcard.m_masu) {
                return (WINPUSH.AWIN);
       }else if (acard.m_masu < bcard.m_masu){
                return (WINPUSH.BWIN);
       }

       if (acard.m_dnalength < bcard.m_dnalength){
                return (WINPUSH.AWIN);
       }else if (acard.m_dnalength > bcard.m_dnalength){
                return (WINPUSH.BWIN);
       }

        return (WINPUSH.PUSH);
}


  • コメント (2)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/52246

コメント

境界条件はどうなっているんでしょうか?

# 7x7の解はインベーダー風 (^^)

  • Posted by かっちゃん
  • at 2008/06/29 21:36:30

コメントありがとうございます。境界条件というと盤面に関してでしょうか? 追加でモロモロ考察記事を書いてみます。

  • Posted by いわいまさか
  • at 2008/06/30 22:07:31