如何缩放和加权给定值的适应度?
How to scale and weight fitness of a given values?
我正在研究 GA。我的问题如下。我有一个适应度函数,它有几个值:
A - value which is huge, but less important for example 999999.
(weight of importance 30% of the final result)
B - value couple times smaller but more important for example 50.
(weight of importance 70% of final result)
我假设这两个值都力求无穷大。如何在我有类似内容的地方构建适应度函数:
long calculateFitness(A, weightOfA, B, weightOfB);
结果将是任何长数字,这将使 B 变量更加重要。
假设您有 {V1,W1} 和 {v2,W2},其中 V 表示值,W 表示它的重要性权重。
calcualteFintess(V1,W1, V2,W2){
valuePart1 = V1*W1;
valuePart2 = V2*W2;
and do your magic with valuePart1 and valuePart2 }
例如:
V1 = 120, W1 = 30% V2 = 30, W2 = 70%
结果将从 120*0.3 = 36 和 30*0.7 = 21 计算得出,它将包含值 V1 的 30% 和值 V2 的 70%。
我是这样理解你的问题的,如有错误请指正。
每个 objective 值都需要一个上限和下限。如果无法估计上限(下限),您可以考虑当前迭代的最高(最低)值。
设 objective A 和 B 的上限分别为 ubA 和 ubB,objective A 和 B 的下限分别为 lbA 和 lbB。这里我假设lbA和lbB等于0,ubA和ubB分别为999999和50。
现在假设您有一个 valueA = 642465 和一个 valueB = 47。您可以这样做:
let lbA = 0;
let ubA = 999999;
let valueA = 642465
let lbB = 0;
let ubB = 50
let valueB = 47
let remappedA = remap(valueA, lbA, ubA, 0, 1);
let remappedB = remap(valueB, lbB, ubB, 0, 1);
let weightedValue = getWeightedValue(0.3, remappedA, 0.7, remappedB);
console.log(valueA + ' remapped to ' + remappedA);
console.log(valueB + ' remapped to ' + remappedB);
console.log("Weighted objective value: " + weightedValue);
function remap(n, start1, stop1, start2, stop2) {
return ((n - start1)/(stop1 - start1)) * (stop2 - start2) + start2;
}
function getWeightedValue(weightA, valueA, weightB, valueB){
return weightA * valueA + weightB * valueB;
}
你的输出值应该是0.8507396927396926
我正在研究 GA。我的问题如下。我有一个适应度函数,它有几个值:
A - value which is huge, but less important for example 999999. (weight of importance 30% of the final result)
B - value couple times smaller but more important for example 50. (weight of importance 70% of final result)
我假设这两个值都力求无穷大。如何在我有类似内容的地方构建适应度函数:
long calculateFitness(A, weightOfA, B, weightOfB);
结果将是任何长数字,这将使 B 变量更加重要。
假设您有 {V1,W1} 和 {v2,W2},其中 V 表示值,W 表示它的重要性权重。
calcualteFintess(V1,W1, V2,W2){
valuePart1 = V1*W1;
valuePart2 = V2*W2;
and do your magic with valuePart1 and valuePart2 }
例如:
V1 = 120, W1 = 30% V2 = 30, W2 = 70%
结果将从 120*0.3 = 36 和 30*0.7 = 21 计算得出,它将包含值 V1 的 30% 和值 V2 的 70%。 我是这样理解你的问题的,如有错误请指正。
每个 objective 值都需要一个上限和下限。如果无法估计上限(下限),您可以考虑当前迭代的最高(最低)值。
设 objective A 和 B 的上限分别为 ubA 和 ubB,objective A 和 B 的下限分别为 lbA 和 lbB。这里我假设lbA和lbB等于0,ubA和ubB分别为999999和50。
现在假设您有一个 valueA = 642465 和一个 valueB = 47。您可以这样做:
let lbA = 0;
let ubA = 999999;
let valueA = 642465
let lbB = 0;
let ubB = 50
let valueB = 47
let remappedA = remap(valueA, lbA, ubA, 0, 1);
let remappedB = remap(valueB, lbB, ubB, 0, 1);
let weightedValue = getWeightedValue(0.3, remappedA, 0.7, remappedB);
console.log(valueA + ' remapped to ' + remappedA);
console.log(valueB + ' remapped to ' + remappedB);
console.log("Weighted objective value: " + weightedValue);
function remap(n, start1, stop1, start2, stop2) {
return ((n - start1)/(stop1 - start1)) * (stop2 - start2) + start2;
}
function getWeightedValue(weightA, valueA, weightB, valueB){
return weightA * valueA + weightB * valueB;
}
你的输出值应该是0.8507396927396926