如何缩放和加权给定值的适应度?

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