データ構造 | |
union | F_GA_VALUE |
遺伝子の値 [詳細] | |
struct | F_GA_RANGE |
遺伝子の値の範囲 [詳細] | |
型定義 | |
typedef DOUBLE(FVALGAPI * | F_GA_FUNC )(enum f_ga_type, INT, VOID *) |
適用度を算出するコスト関数(評価関数) | |
列挙型 | |
enum | f_ga_type { F_GA_INT_TYPE, F_GA_FLOAT_TYPE, F_GA_ORDER_TYPE } |
遺伝子の型 [詳細] | |
enum | f_ga_select { F_GA_PROPORT_SELECT, F_GA_EXPECT_SELECT, F_GA_RANK_SELECT, F_GA_RANDOM_SELECT } |
選択の方式 [詳細] | |
enum | f_ga_cross { F_GA_ONE_POINT_CROSS, F_GA_TWO_POINT_CROSS, F_GA_UNIFORM_CROSS, F_GA_PARTIAL_CROSS } |
交叉の方式 [詳細] | |
enum | f_ga_alter { F_GA_NORMAL_ALTERNATE, F_GA_ELITE_ALTERNATE, F_GA_MERGE_ALTERNATE } |
世代交代の方式 [詳細] | |
enum | f_ga_end { F_GA_MAX_FITNESS_END, F_GA_MEAN_FITNESS_END, F_GA_STAGNATION_END, F_GA_NO_CONDITION_END } |
終了条件の方式 [詳細] | |
関数 | |
FHANDLE FVALGAPI | fnFIE_ga_open (enum f_ga_type gene_type, INT gene_num, INT chrom_num, const F_GA_RANGE *range, enum f_ga_select select, enum f_ga_cross crossover, DOUBLE cross_rate, DOUBLE mutat_rate, enum f_ga_alter alternate, F_GA_FUNC cost_func, enum f_ga_end rnd_cond, DOUBLE thresh, INT max_alter_cnt) |
GAの生成 | |
INT FVALGAPI | fnFIE_ga_execute (FHANDLE hga, INT pick_num, VOID *chrom, DOUBLE *fitness, INT *generate) |
GAの実行 |
enum f_ga_type |
enum f_ga_select |
enum f_ga_cross |
enum f_ga_alter |
enum f_ga_end |
FHANDLE FVALGAPI fnFIE_ga_open | ( | enum f_ga_type | gene_type, | |
INT | gene_num, | |||
INT | chrom_num, | |||
const F_GA_RANGE * | range, | |||
enum f_ga_select | select, | |||
enum f_ga_cross | crossover, | |||
DOUBLE | cross_rate, | |||
DOUBLE | mutat_rate, | |||
enum f_ga_alter | alternate, | |||
F_GA_FUNC | cost_func, | |||
enum f_ga_end | rnd_cond, | |||
DOUBLE | thresh, | |||
INT | max_alter_cnt | |||
) |
GAの生成
与えられた条件のもとで、遺伝的アルゴリズムに必要なテーブルをオープンします。
cost_func には、次の型に従った適応度を算出するコスト関数(評価関数)を指定します。
DOUBLE cost_func( enum f_ga_type gene_type, int gene_num, void *chrom_top );
本関数で生成したオブジェクトは不要になったら fnFIE_free_object() にて解放してください。
[in] | gene_type | 遺伝子の型を指定します。以下の内から指定してください。
|
[in] | gene_num | 1染色体当たりの遺伝子の個数(1以上) |
[in] | chrom_num | 集団内の染色体数(偶数のみ) |
[in] | range | 遺伝子の値のレンジの配列 gene_num で指定した個数分の遺伝子毎に、全て範囲を指定します。 gene_num の要素を確保した配列を渡してください。 ただし、 gene_type が F_GA_ORDER_TYPE の場合にはこの値は使用されません。 |
[in] | select | 選択淘汰の方式 選択淘汰とは、適応度の高い染色体がより多くの子孫を残すための方法です。 以下の内から選択してください。
|
[in] | crossover | 交叉の方式 交叉とは、選択された染色体の中から2つの染色体を使ってランダムな位置で部分的な入れ替えを行う方法です。 以下の内から選択して指定してください。
|
[in] | cross_rate | 交叉率(0.0〜1.0) 交叉率とは、交叉を生じさせる確率です。 0では交叉を行いませんし、1では必ず交叉を行います。0.9程度が一般的です。 |
[in] | mutat_rate | 突然変異率(0.0〜1.0) 突然変異率とは、ランダムに選び出された染色体の遺伝子を強制的に他の値に変えてしまう比率のことです。 0では突然変異を行いませんし、1では必ず突然変異を行います。 0.03〜0.05程度が一般的です。 |
[in] | alternate | 世代交代の方式 世代交代とは、「選択淘汰→交叉→突然変異」と遷移して生成された子の染色体集団を、 次の世代の親の染色体集団へ移行させる際の方式のことです。 次の内から選んで指定してください。
|
[in] | cost_func | 適用度を算出するコスト関数(評価関数) |
[in] | rnd_cond | 世代交代(進化)の終了条件 次の内から選んで指定してください。
|
[in] | thresh | 終了判定のためのしきい値 rnd_cond にて指定した条件により、意味が変わります。
|
[in] | max_alter_cnt | 最大世代交代数 終了条件を満たさないときでも、この値分の世代交代(進化)を行ってから処理を終了します。 |
INT FVALGAPI fnFIE_ga_execute | ( | FHANDLE | hga, | |
INT | pick_num, | |||
VOID * | chrom, | |||
DOUBLE * | fitness, | |||
INT * | generate | |||
) |
GAの実行
遺伝的アルゴリズムを実行します。
[in] | hga | GAのハンドル |
[in] | pick_num | 出力する染色体の個数(1以上) |
[out] | chrom | 適応度の大きい順に並んだ染色体の配列です。 「一遺伝子あたりのバイト数×一染色体あたりの遺伝子数× pick_num 」分の領域が必要です。 遺伝子の型により、以下の様に必要なサイズが変わります。
|
[out] | fitness | 抽出した各染色体の適用度の配列。 pick_num で指定した個数分の領域が必要です。 |
[out] | generate | 世代交代を行った回数 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 不正なオブジェクトが渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_NO_LICENCE | ライセンスエラー |