我正在做一个GA。我的问题如下。我有一个适应度函数,它采用几个值:
A - 值很大,但不太重要,例如999999。 (重要性权重为最终结果的30%(
B - 值小几倍,但更重要,例如 50。 (重要性占最终结果的70%(
我假设这两个值都努力做到无穷大。如何构建一个健身函数,我有这样的东西:
long calculateFitness(A, weightOfA, B, weightOfB(;
结果将是任何长数,这将使 B 变量变得更加重要。
每个目标值都需要一个上限和下限。如果无法估计上限(下限(,则可以考虑当前迭代中的最高(最低(值。
设目标 A 和 B的上限分别为 ubA 和 ubB,目标 A 和 B 的下限分别为 lbA 和 lbB。这里我假设 lbA 和 lbB 等于 0,ubA 和 ubB 分别是 999999 和 50。
现在假设您的值 A = 642465 且值 B = 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
假设你有{V1,W1}和{v2,W2},其中V表示值,W表示它的重要性权重。
calcualteFintess(V1,W1, V2,W2({
值部分 1 = V1*W1;
值部分 2 = V2*W2;
并用 valuePart1 和 valuePart2 施展你的魔力 }
例如:
V1 = 120, W1 = 30% V2 = 30, W2 = 70%
结果将从 120*0.3 = 36 和 30*0.7 = 21 计算,它将包含值 V1 的 30% 和值 V2 的 70%。 这就是我理解你的问题的方式,如果我错了,请纠正我。