遺伝的アルゴリズム
[ビジョンツール]


データ構造

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

遺伝子の型

列挙型の値:
F_GA_INT_TYPE  整数型
F_GA_FLOAT_TYPE  浮動小数点型
F_GA_ORDER_TYPE  順序型

選択の方式

列挙型の値:
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  1点交叉(順序型以外)
F_GA_TWO_POINT_CROSS  2点交叉(順序型以外)
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の生成

与えられた条件のもとで、遺伝的アルゴリズムに必要なテーブルをオープンします。

cost_func には、次の型に従った適応度を算出するコスト関数(評価関数)を指定します。

    DOUBLE cost_func( enum f_ga_type gene_type, int gene_num, void *chrom_top );
このコスト関数のパラメータはそれぞれ次のようになります。
  • gene_type 入力:遺伝子の型
  • gene_num 入力:一染色体当たりの遺伝子数
  • chrom_top 入力:適応度を計算する染色体の先頭アドレス
コスト関数の出力値は 0.0〜1.0 の範囲に入っていなければなりません。

本関数で生成したオブジェクトは不要になったら fnFIE_free_object() にて解放してください。

引数:
[in] gene_type 遺伝子の型を指定します。以下の内から指定してください。
  • F_GA_INT_TYPE 整数型
  • F_GA_FLOAT_TYPE 浮動小数点型
  • F_GA_ORDER_TYPE 順序型
[in] gene_num 1染色体当たりの遺伝子の個数(1以上)
[in] chrom_num 集団内の染色体数(偶数のみ)
[in] range 遺伝子の値のレンジの配列
gene_num で指定した個数分の遺伝子毎に、全て範囲を指定します。 gene_num の要素を確保した配列を渡してください。 ただし、 gene_type が F_GA_ORDER_TYPE の場合にはこの値は使用されません。
[in] select 選択淘汰の方式
選択淘汰とは、適応度の高い染色体がより多くの子孫を残すための方法です。 以下の内から選択してください。
  • F_GA_PROPORT_SELECT 適応度比例戦略:各染色体の適応度に比例した確率で子孫を残すことができます
  • F_GA_EXPECT_SELECT 期待値戦略:各染色体の適応度に比例した確率で 子孫を残すことができるという点では「適応度比例」と同じですが、 1回選択されると次からはその確率を1/2にしてしまいます
  • F_GA_RANK_SELECT ランク戦略:各染色体の適応度によって、 染色体を1番から番号付けしてその順位に対して決められた確率で子孫を残します
  • F_GA_RANDOM_SELECT ランダム戦略: 乱数により選択します
[in] crossover 交叉の方式
交叉とは、選択された染色体の中から2つの染色体を使ってランダムな位置で部分的な入れ替えを行う方法です。 以下の内から選択して指定してください。
  • F_GA_ONE_POINT_CROSS 1点交叉:2つの染色体の遺伝子を、 ランダムに選択された点の後部で交換させて2つの子を作ります
  • F_GA_TWO_POINT_CROSS 2点交叉:2つの染色体の遺伝子を、 ランダムに選択された点の2点の間で交換させて2つの子を作ります。
  • F_GA_UNIFORM_CROSS 一様交叉:一様交叉 2つの染色体の遺伝子を、 各遺伝子ごとにランダムに交換させて2つの子を作ります。
  • F_GA_PARTIAL_CROSS 部分一致交叉:交叉位置と長さをランダムに選択し、 一方の親の選択された位置における遺伝子情報の順序をもう一方の親の対応する遺伝子情報と交換します。
gene_type の指定によって、選択できるパラメータが異なります。 遺伝子の型が整数型( F_GA_INT_TYPE )、浮動小数点型( F_GA_FLOAT_TYPE )の場合には F_GA_ONE_POINT_CROSS , F_GA_TWO_POINT_CROSS , F_GA_UNIFORM_CROSS が指定できます。 遺伝子の型が順序型( F_GA_ORDER_TYPE ) の場合には、 F_GA_PARTICAL_CROSS が指定できます。
[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 世代交代の方式
世代交代とは、「選択淘汰→交叉→突然変異」と遷移して生成された子の染色体集団を、 次の世代の親の染色体集団へ移行させる際の方式のことです。 次の内から選んで指定してください。
  • F_GA_NORMAL_ALTERNATE 通常戦略:子の染色体集団を そのまま新しい世代の親の染色体集団とします。
  • F_GA_ELITE_ALTERNATE エリート戦略:子の染色体集団の中の最小適応度を持つ染色体を、 親の染色体集団の中の最大適応度を持つ染色体と入れ替えます。
  • F_GA_MERGE_ALTERNATE マージ戦略:親の染色体集団と子の染色体集団とを合わせた集団の中から適応度の高い順に次の世代とします。
[in] cost_func 適用度を算出するコスト関数(評価関数)
[in] rnd_cond 世代交代(進化)の終了条件
次の内から選んで指定してください。
  • F_GA_MAX_FITNESS_END 最大適応度による
  • F_GA_MEAN_FITNESS_END 平均適応度による
  • F_GA_STAGNATION_END 世代交代の停滞による
  • F_GA_NO_CONDITION_END なし(世代交代の回数によるのみ)
[in] thresh 終了判定のためのしきい値
rnd_cond にて指定した条件により、意味が変わります。
  • F_GA_MAX_FITNESS_END 集団内の染色体の最大適応度がこの値より大きくなったときに終了します。
  • F_GA_MEAN_FITNESS_END 集団内の染色体の平均適応度がこの値より大きくなったときに終了します。
  • F_GA_STAGNATION_END 集団内の染色体の最近10回以内の集団平均適応度の標準偏差がこの値より小さくなったときに終了します。
  • F_GA_NO_CONDITION_END 終了しません。( max_alter_cnt パラメータの値で強制的に終了させるときにこれを使います。)
[in] max_alter_cnt 最大世代交代数
終了条件を満たさないときでも、この値分の世代交代(進化)を行ってから処理を終了します。
戻り値:
正常に終了した場合は、GAのハンドルを返します。 ライセンスエラー、メモリ不足、またはパラメータ不正により異常終了した場合には、NULLを返します。

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 」分の領域が必要です。 遺伝子の型により、以下の様に必要なサイズが変わります。
  • 整数型( F_GA_INT_TYPE_GENE ) sizeof(INT) × 一染色体あたりの遺伝子数× pick_num
  • 浮動小数点型( F_GA_FLOAT_TYPE_GENE ) sizeof(DOUBLE) × 一染色体あたりの遺伝子数× pick_num
  • 順序型( F_GA_ORDER_TYPE_GENE ) sizeof(INT) × 一染色体あたりの遺伝子数× 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 ライセンスエラー


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:48 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2