//データ 重さ群 = [12,2,1, 4,1] 価値群 = [ 4,2,1,10,2] //目的 ナップザック内の価値が高くなる入れ物リストを求める //処理 リスト群 = [[有,無,有,無,無],...,[無,有,無,有,有]] while 世代数<指定数: // 評価 for リスト in リスト群: リストから総重量を取得 リストから総価値を取得 if 総価値>ナップザック容量: 総価値 = 0 // 選択 (ルーレット選択) while 親リストの数<指定数: 的 = 総価値の合計 矢の場所 = ランダム(0〜的) 価値ごとの色塗り領域 = 0 for リスト in リスト群: 価値ごとの色塗り領域 += リストの総価値 if 矢の場所<価値ごとの色塗り領域: リストを親リスト群に追加 // 交叉(2点交叉) for 親1,親2 in 親リスト群: if 一定確率: 子供1 = 親1のどこかを親2に入れる 子供2 = 親2のどこかを親1に入れる 子供1,子供2を子供世代に追加 // 突然変異 for 子供 in 子供世代: if 一定確率: 変更点 = ランダム; 子供[変更点] = 入れる or 入れない; // 世代交代 リスト群 = 子供世代 最後の世代で総価値が最大のものが解となる

画面クリックで説明





他のアルゴリズムの解説も見たい方へ