gpt4 book ai didi

c++ - 遗传算法 : Langermann's function and Tournament selection

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:38 24 4
gpt4 key购买 nike

我在理解如何在我的遗传算法中实现 Langermann 函数和锦标赛选择时遇到了一些困难。我有 this作为 Langermann 函数的引用,但我不明白 C 值从何而来,因为我只有 X 和 Y。C 值总是一组常数吗?

至于锦标赛选择,我想随机选择我的人群中的任意 3 个人并比较他们的健康状况。一旦能够使用 Langermann 函数生成适应度值,我会将每个适应度值存储在一个 vector 中。然后我想从 vector 中选择 3 个独特的随机元素并将它们相互比较。如何在不使用相同数字的情况下从 vector 中选择 3 个唯一的随机元素?

感谢任何帮助!

最佳答案

Lagermann function

is the C value always a constant set of numbers?

mcA 的建议值由 Molga & Smutnicki (2005) 给出。 .

c 是一个常数 vector (其他值是可能的/正在使用)。

该函数通常在 (x, y) ∈ [0, 10] x [0, 10] 上求值。它提供了 m 最小值,其重要性由 c 决定。它们由余弦乘积调制,从而赋予它们振荡特性。

对于每个复杂的表达式,翻译 Langermann 函数的最佳方法是从更简单的子表达式开始。

有两个相同的“内部”求和:

const double A[5][2] = {{3.0, 5.0},{5.0, 2.0},{2.0, 1.0},{1.0, 4.0},{7.0, 9.0}};
const double c[5] = {1.0, 2.0, 5.0, 2.0, 3.0};
const unsigned d = 2;

double s = 0.0;
for (unsigned j = 0; j < d; ++j)
s += std::pow(x[j] - A[i][j], 2.0);

现在进行主要总结:

const double pi = 3.1415926535897932;
const unsigned m = 5;

double ret = 0.0;
for (unsigned i(0); i < m; ++i)
{
// calculate `s`

ret += c[i] * std::exp(-s / pi) * std::cos(pi * s);
}

ret包含函数的值。


How do you select 3 unique random elements from a vector without using the same numbers?

天真的做法是:生成一个随机数,然后检查它是否已经被使用,如果已经被使用,就生成另一个数字,直到找到一个未使用的数字。

这是一个简单的 do ... while () 循环序列。

如果种群规模较小或人为限制选择范围(10/15 个体),这可能会非常昂贵。

Unique random numbers in an integer array in the C programming language 中描述了许多替代方案

关于c++ - 遗传算法 : Langermann's function and Tournament selection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36347221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com