数字は独身に限る

進化計算班最終発表
竪山&新里班
数字は独身に限る
略して・・・
要求仕様書
宮里&与儀班から提案された「9」×「9」マスの数独の問題を
作成するプログラムを作成する。
・問題の作成には必ずGAを用いる。
・あらかじめ用意した解答に,決まった数の空白をかぶせて評価をする。
・プログラム言語は問わない。
成果物の仕様書
・問題の作成にはGAを用いた。
・あらかじめ用意した解答に,決まった数の空白をかぶせて評価をした。
・プログラム言語はC言語を用いた。
・空白数、交叉回数、個体数の変更がdokusu.hで変更可能。
・最終的な結果(問題)をresulut.txtに出力。
・マス、行、列の順に見ていき、各候補を消していくことで空白マスを
埋めていく。3種類の探索で空白マスが埋まらない場合は仮置をして
再び3種類の探索を行う。
GA設計
1.コーディング
空白の位置を構造体で定義した配列に格納し,任意の数作成する。(40個)dokusu.h の
#define BLK で指定する数字を変えることで空白の数を変更できる。
2.適応度計算
問題を読み込み,数独のルールに従い空白を埋めていく,その際の手数をカウントし評価と
する。また,仮置も1度ごとにカウントしていく。
3.選択
作成された問題にランキングをつけ,評価の高い問題を残していく。(ランキング選択)
4.交叉
選択され,ランク付けのされた上位同士交叉をし、個体を生成する。dokusu.hの
#define CHANGE の指定数を変えることで交叉回数変更可能。
5.突然変異
空白を新たに作り、作られた空白位置とは異なる位置の空白を答えに置き換え,空白の数
は固定する。
実験結果
パラメータの値
N
40//!問題生成数
BLK
40
//!空白生成数
CROPROB
MUPROB
CHANGE
MURAND
60 //! 交叉を行う確率
10 //! 突然変異が起こる確率
3600 //!世代交代数
20 //!突然変異時における格マスが変化する確率
実行方法
% make
% ./dokusu > data.txt
適応度推移図
手
数
作成された問題
感想
ところで皆さんは,この講義が始まったときに,富間先生からお借りした
参考書を返却しましたか?
私は、まだなので、今度返したいとお申します。
適応度計算に利用していた、ネットから拝借したプログラムにバグが
あり、結局プログラムを書き直さないといけないと気づいた時には軽く
絶望しました。