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

我正在研究一个遗传算法。我的问题如下。我有一个适应度函数,它接受几个值:

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 = 642465let lbB = 0;let ubB = 50let valueB = 47let 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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注