问题标签 [differential-evolution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
367 浏览

parallel-processing - 优化不与 Scilab 中的 parallel_run 函数收敛

我正在尝试对 Scilab 执行优化,并且我想使用 parallel_run 函数并行运行差分进化代码。

代码的原始版本包括我想要并行化的部分的 for 循环,它工作得很好。当我使用 parallel_run 函数修改代码并在 Windows 机器上运行它时,它又可以工作了,但据我所知,这个函数不适用于 Windows,它只能在单个内核上运行。最后,我再次尝试在没有错误的 Linux 机器上运行修改后的代码,但是优化并没有收敛并且给了我更糟糕的最终结果。

在试图找出问题的同时,我意识到代码打印的部分内容在 Scilab 控制台上,而另一部分在终端上。即使在终端中进行了一些计算,优化过程也无法从那里检索数据。

这是原始代码版本的 for 循环:

这是我用来替换循环并尝试使其并行运行的嵌套函数:

如果满足某些条件,则此处更改弹出矩阵的第 i 列。我在 if 语句之前和之后打印第 i 列。i 是一个从 1 到 40 的向量。我可以从 Scilab 控制台看到前 10 个打印件,然后从终端看到最后 30 个打印件(我的机器有四个内核,我认为这与此有关)。然后我在并行运行完成其工作后打印整个弹出矩阵。从这个 pop 的最终版本中,我意识到只有我在 Scilab 控制台上观察到的变化才会生效,而我在终端上观察到的变化都没有。

原始代码的完整版本位于http://www1.icsi.berkeley.edu/~storn/code.html#scil

我认为这些损失是我得到糟糕结果的原因。有没有人知道可能发生的事情?谢谢。

0 投票
0 回答
347 浏览

python - Scipy中的Differential_evolution没有给出jacobean

我正在使用该differential_evolution算法scipy来拟合一些具有与高斯函数卷积的各种指数函数的数据 - 这本身不是问题,该函数非常适合。

然而,它没有在结果字典中给出雅可比(我想用它来计算我的拟合常数的错误),尽管我已经设置了“抛光”(即使用scipy.optimize.minimizeL-BFGS-B方法来抛光最佳人口最后的成员)为真,因此文档说明它应该给雅可比。我的函数采用高斯宽度和任意数量的指数,并且像这样拟合:

有什么理由没有在结果输出中给出雅可比?

0 投票
1 回答
14137 浏览

python - Scipy,差异进化

问题是,我试图为我的目的设计拟合程序,并希望使用 scipy 的差分进化算法作为初始值的一般估计量,然后将其用于 LM 算法以进行更好的拟合。我想用 DE 最小化的函数是解析定义的非线性函数和一些实验值之间的最小二乘。我坚持的一点是功能设计。正如 scipy 参考中所述:“函数必须采用f(x, *args)形式,其中 x 是一维数组形式的参数,而 args 是完全指定所需的任何附加固定参数的元组函数

有一个丑陋的代码示例,我只是为了说明目的而编写的:

我想将原始数据作为元组提供给函数,但它似乎不是它的假设方式,因为解释器对该函数不满意。这个问题应该很容易解决,但我真的很沮丧,所以建议将不胜感激。

0 投票
1 回答
765 浏览

r - DEoptim 错误:目标函数结果的长度与参数矩阵不同

我正在尝试使用 DEoptim 命令(来自同名的 R 包)来最小化一个函数,但是我得到了这个奇怪的错误“目标函数结果的长度与参数矩阵不同。” 除了一些我看不懂的发布的 C 代码之外,我找不到任何关于这个问题的信息。

当我尝试通过参数将其他参数传递给函数时出现错误...。在以下示例中,我将 Rosenbrock 函数(取自 DEoptim 文档)修改为具有第二个参数pow(我将其设置为 2,以便该示例与文档中的示例相同)。这行得通。然后我尝试对 Rastrigin 函数(来自 GenSA 文档)做同样的事情。同样的技巧在这里失败了(但如果我在我的第二个参数中硬编码,优化器可以正常工作,如记录的情况)。

这是示例代码:

自然,这个问题出现在一个更复杂的例子中,但我希望对这个简单案例的解释可以帮助我。如果有任何额外的帮助,最终目标是从data.table对象调用函数,其中函数的第一个参数是要最小化的(标量)参数,其余参数是从data.table.

0 投票
1 回答
349 浏览

algorithm - 差分进化与遗传算法中的参数区间

我习惯于遗传算法(GA)中的每个参数都可以表示为二进制字符串的方法,该字符串可以在指定的时间间隔内编码为实数值。

我目前正在编写差分进化 (DE) 代码,但我还没有读到任何关于像在 GA 中那样控制参数间隔的信息,所以我对这个过程有点困惑......这是我的问题:

1)有什么东西可以控制DE中的参数间隔吗?我意识到任何人都可以根据自己的目的修改 DE,但我很好奇它传统上是如何使用的。

2)我知道如何为初始随机群体指定间隔,但是有什么限制变异和交叉操作中的间隔吗?

3)如果参数没有任何界限,那么变异和交叉操作是否可以自由探索所有空间?

谢谢你的时间。

0 投票
3 回答
4471 浏览

python - 带整数的 Scipy 差分进化

我正在尝试使用 scipy.optimize.differential_evolution 进行优化。该代码要求为 x 中的每个变量设置边界。但我想要一个解决方案,其中部分 x 必须是整数,而其他部分可以自由地作为浮点数。我的代码的相关部分看起来像

我应该用什么替换 ???'s 来强制这些变量在给定范围内是整数?

0 投票
1 回答
346 浏览

genetic-algorithm - 微分进化可以解决需要依赖参数变异的问题吗?

差分进化 (DE) 和遗传算法 (GA) 之间的区别之一是 DE 会丢弃一个新候选者,除非它比它所衍生的旧候选者更合适,而 GA 允许“不太合适”的候选者以一定的概率存活。最初 DE 的方法听起来是个好主意,但我相信这会阻止它解决以下类别的问题。

想象一下,我们正在尝试最大化以下的适应度得分:

A - [max(0, A - 50) * B] + [max(0, A - 75) * 2 * B]

其中参数范围从0100

  • 最初增加它是有益的A,直到达到50.
  • 其次,设置B为零是有益的。
  • 接下来,增加到A75是有利的。
  • 其次,同时增加B和是有益的A

最后一点很重要:如果两者中的一个AB两个独立增加,则适应度得分将下降。

回到差分进化算法,我看不出它如何解决上述问题,因为最初我们希望每一代只改变一个参数,但最终我们希望每一代改变多个参数。如果我们过早地改变每一代的多个参数,我们会降低生存的概率,进而降低进化的速度。但是,如果我们一次改变一个参数,我们将永远找不到全局最大值。

我的问题如下:

  • 这是差分进化算法的一个已知问题吗?
  • 有已知的解决方案吗?
  • 通用算法会遇到同样的问题吗?

我不是要求解决上述特定功能。我在问差分进化是否有可能解决您事先不知道在任何给定时间需要改变多少参数并且您希望最终尽可能接近全局最大值的问题。

0 投票
1 回答
191 浏览

evolutionary-algorithm - 解释多目标差分演化

有人可以用简单的语言解释多目标差分进化,并指出它与正常差分进化的区别。

一个例子将不胜感激。

0 投票
2 回答
889 浏览

matlab - 使用粒子群优化的神经网络训练

我想在 Matlab 上使用粒子群优化和差分进化算法训练前馈神经网络,用于预测乳腺癌。

我是 Matlab 的新手,所以我搜索并找到了 George Ever 的工具箱,但在将工具箱添加到 Matlab 路径后,我不知道如何使用它。谁能告诉我训练神经网络的步骤谢谢

0 投票
3 回答
1164 浏览

r - R:如何向 DEoptim 添加额外的约束

我正在尝试使用 DEoptim 最小化目标函数,但要受到简单的约束。我不清楚如何将简单约束添加到对 DEoptim 的调用中。这是目标函数:

我的映射函数(施加整数约束)如下:

我对 DEoptim 的呼吁是:

我的 in_data 对象(数据框)是:

我想添加一个简单的约束:

换句话说,优化参数的总和 n 乘以我的 in_data 数据帧中的增量总和到某种目标。为简单起见,我们只说 0.5。我该如何强加

作为约束?谢谢您的帮助!