首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >萤火虫算法:如何理解运动公式

萤火虫算法:如何理解运动公式
EN

Stack Overflow用户
提问于 2015-06-29 04:49:05
回答 1查看 583关注 0票数 2

萤火虫算法的标准移动公式类似于this

代码语言:javascript
复制
x_i^{t+1} = x_i^t + \beta_0 e^{-\gamma {r_{i,j}^2}}(x_j^t - x_i^t) + \alpha \epsilon_i^t

虽然我理解算法的思想以及公式的单个组成部分应该做什么,但我在将公式转换为工作实现时遇到了困难。

具体地说:

1) beta0应该是“源头上的吸引力”,所以当将萤火虫i移向萤火虫j时,beta0越高,意味着ffi越靠近ffj。但是当执行最小化时,较高的适应值表示较差的解决方案,因此ffi应该较少地向ffj移动。所以我猜,beta0应该是一个从0到1的值,越接近1越好。那么我如何将最小化适应值(包括负适应值)映射到0-1尺度?

2)是每个萤火虫都朝其他萤火虫移动,还是每个萤火虫只朝它看到的最亮的萤火虫移动?大多数论文建议在所有群体成员上使用两个嵌套循环,但这也意味着走向更糟糕的解决方案(当然,beta0可以最小化转向如此糟糕的解决方案)

3)如果您将每个萤火虫移向其他萤火虫,您是每次都添加随机值,还是每个萤火虫和迭代只添加一次?

基本上,我想要以下代码片段来完成移动:

代码语言:javascript
复制
void MoveFireFlies(double alpha, double gamma, double*** rand, double** NewPopulation, double** Population, double* Fitness, int populationSize, int dimensions)
{
    int i;
    for(i=0;i<populationSize;i++)
    {
        int j;
        for(j=0; j<populationSize; j++)
        {
            double beta0 = 1.0;
            double distance = [...] //euclidian distance between ffi and ffj
            double factor = exp(-gamma * distance * distance);
            int d;
            for(d=0;d<dimensions;d++)
            {
                NewPopulation[i][d] = Population[i][d] + beta0 * factor * (Population[j][d] - Population[i][d]) + alpha * rand[i][j][d];
            }
        }
    }
}

其中,rand包含范围(-0.5,0.5)中的随机值,Population包含前一次迭代的解。Fitness值已提供,但当前未在任何地方使用。当然,这个代码片段目前不能执行任何类型的可行优化。

任何帮助都是非常感谢的,我在这方面工作了相当长的一段时间,并开始绝望。

一篇关于萤火虫算法的论文:

Firefly Algorithm: Recent Advances and Applications

EN

回答 1

Stack Overflow用户

发布于 2020-09-24 07:17:12

  1. 首先,光的强度(亮度)和吸引力是有区别的。用目标函数计算光强。如果问题是关于寻找最大全局最优值,那么你必须使光照强度与目标函数的值成正比。否则,光强度必须与目标函数的值成反比。另一方面,吸引力与适合度无关。Beta0不被认为是适应度,Beta0是一个必须在开始时定义的参数,以及Alpha和Gamma参数。如果你有一个最小化问题,你把这个目标函数作为适应值,那么适应值较高的萤火虫会吸引到较小的适应值。

  1. 是的,每一只萤火虫都会向另一只萤火虫移动,但当你得到一个新的解决方案时,你必须在旧的和新的解决方案之间进行贪婪的选择,并只保留其中最好的。

  1. 是,每次都必须生成新的随机值。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31104587

复制
相关文章

相似问题

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