GA研究グループ研究報告(Jiro Kamiura:2002.07.17)
MOGADESにおける重み分散島と重み変化島の分離とその影響
2002.07.17
■■■ 概要 ■■■
■■■ 従来の重み分散と重み変化 ■■■
従来の重み分散の方法
従来の重み変化の方法
近傍移住
従来の重み変化
島数 i_num
目的関数の数 j_num
島iの重み変化前の目的関数jに対する重み W(i,j) i=1..i_num
島iの重み変化後の目的関数jに対する重み W'(i,j) i=1..i_num
島iのエリートのFjの値 F(i,j) i=1..i_num, j=1..j_num
procedure 重み変化
// i = 1 と i = i_num は端島なので対象外
for(i = 2; i < i_num ; i++) {
// 島i-1よりも島i+1に近い → 島i-1に近づける
if( |F(i-1,j)-F(i,j)| > |F(i+1,j)-F(i,j)| ) {
// 変化後の重みが変化前の2倍を越える
if( (W(i-1,j) + W(i,j))/2 > W(i,j) * 2 ) {
W'(i,j) = W(i,j) * 2;
// 変化後の重みが変化前の1/2倍を下回る
} else if( (W(i-1,j) + W(i,j))/2 < W(i,j) / 2 ) {
W'(i,j) = W(i,j) / 2;
// 変化後の重みは変化前の1/2倍から2倍の間
} else {
W'(i,j) = (W(i-1,j) + W(i,j))/2;
}
}
// 島i+1よりも島i-1に近い → 島i+1に近づける
else if( |F(i-1,j)-F(i,j)| < |F(i+1,j)-F(i,j)| ) {
// 変化後の重みが変化前の2倍を越える
if( (W(i+1,j) + W(i,j))/2 > W(i,j) * 2 ) {
W'(i,j) = W(i,j) * 2;
// 変化後の重みが変化前の1/2倍を下回る
} else if( (W(i+1,j) + W(i,j))/2 < W(i,j) / 2 ) {
W'(i,j) = W(i,j) / 2;
// 変化後の重みは変化前の1/2倍から2倍の間
} else {
W'(i,j) = (W(i+1,j) + W(i,j))/2;
}
}
// 島i+1からも島i-1からも同距離
else {
W'(i,j) = W(i,j);
}
// W(i,j)以外の重み W(i,k) の比は重み変化の前後で変わらないようにする
var_1 = 1.0 - W(i,j);
var_2 = 1.0 - W'(i,j);
if( W(i,j) != 1 ){ // == (var_1 != 0) {
for( k = 1; k < j_num; k++) {
if( k != j ) {
W'(i,k) = W(i,k)*var_2/var_1;
}
}
} else {
for( k = 1; k < j_num; k++) {
if( k != j ) {
W'(i,k) = 0;
}
}
}
}
従来手法の問題点と対処法
問題点
対処法
■■■ 重み分散島と重み変化島の分離 ■■■
■■■ 性能の検証 ■■■
対象問題
ZDT4

ZDT6

KUR

Zero-One Knapsack Problem (750items 3knapsacks)

数値実験
■■■ 結論 ■■■