首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遗传算法:Langermann函数与竞赛选择

遗传算法:Langermann函数与竞赛选择
EN

Stack Overflow用户
提问于 2016-04-01 02:53:20
回答 1查看 658关注 0票数 4

我很难理解如何在我的遗传算法中实现Langermann的函数和锦标赛选择。我把作为朗格曼函数的参考,但我不明白C值是从哪里来的,因为我只有X和Y。C值总是一个常量的数字集吗?

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

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-01 13:25:37

C值总是一组常量的数字吗?

mcA的建议值是Molga & Smutnicki (2005年)给出的值。

c是一个常量向量(其他值可能/正在使用)。

该函数通常在(x, y) ∈ [0, 10] x [0, 10]上进行评估。它提出了m极小值,其重要性由c决定。它们被余弦的乘积调制,这给了它们一个振荡的特征。

对于每一个复杂表达式,转换Langermann函数的最好方法是从简单的子表达式开始。

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

代码语言:javascript
复制
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);

下面是主要的总结:

代码语言:javascript
复制
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包含函数的值。

如何在不使用相同数字的情况下从向量中选择3个唯一的随机元素?

简单的方法是:生成一个随机数,然后检查它是否已经使用过,如果已经使用了,只需生成另一个数字,直到找到一个未使用的数字。

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

如果人口规模很小,或者选择范围受到人为限制(10/15个人),这可能是相当昂贵的。

C语言中整数数组中唯一的随机数中描述了许多替代方案

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36347221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档