4

我正在做一个 GA。我的问题如下。我有一个适应度函数,它有几个值:

A - 值很大,但不太重要,例如 999999。(重要性权重占最终结果的 30%)

B - 值小几倍但更重要,例如 50。(重要性权重占最终结果的 70%)

我假设这两个值都力求无穷大。如何在我有类似的地方建立一个健身功能:

long calculateFitness(A, weightOfA, B, weightOfB);

结果将是任何长数字,这将使 B 变量更加重要。

4

2 回答 2

1

您需要每个目标值的上限和下限。如果无法估计上限(下限),您可以考虑当前迭代中的最高(最低)值。

设目标 A 和 B 的上限分别为 ubA 和 ubB,目标 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

于 2019-09-09T12:42:43.180 回答
0

假设您有 {V1,W1} 和 {v2,W2} 其中 V 代表值,W 代表它的重要性权重。

calcualteFintess(V1,W1,V2,W2){

值Part1 = 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%。这就是我对您的问题的理解,如果我错了,请纠正我。

于 2019-09-08T19:09:38.617 回答