问题标签 [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 投票
0 回答
21 浏览

python - 在 PyGMO 中访问代数和退出标志

在 PyGMO 中,有没有办法访问和存储总代数和退出标志?

我只想出了以下解决方案

但它非常慢,只解决了一半的问题。

0 投票
0 回答
71 浏览

r - Nelson Siegel 估计使用差分演化进行许多观测

我正在使用差分进化方法对 Nelson Siegel 进行非线性估计。我从一个名为NMOF(Gilli et al.)的包中获得了这个功能,但是,书中的过程只显示了一个单一的观察(日期)。下面是代码

现在我有 200 个观察值要运行,所以尝试了它apply,即使它有效,估计器也会产生很高的错误,以至于它是不可接受的。下面是我做的修改后的代码

我有点困惑,因为从概念上看,它应该产生与原始输出相同的输出,我检查了DEoptand的功能,OF无论我运行它有多少观察,两者似乎都无关紧要。你能帮我找到问题的核心吗?非常感激。请对我放轻松,我还是这个领域的新手。

0 投票
2 回答
89 浏览

python - 雅可比矩阵的伪逆问题

我正在使用基于梯度的突变算法(Takahama,2006)实现 E 约束差分进化。对于突变部分,我必须计算试验向量的每个约束函数的梯度,从而定义雅可比矩阵。我正在通过有限的差异来做到这一点。我理解矩阵应该是 mxn,其中 m = 约束数和 n = 维数(试验向量的长度)。试验向量上的扰动将是pseudo-inverse_of_Jacobian x delta_C。我不知道出了什么问题,但我收到消息操作数无法与形状 (4,5) (5,1) 一起广播。你能帮忙吗?这个乘法不应该产生一个 4x1 数组吗?谢谢。

您可以在下面找到我要解决的示例问题的相关定义。

文章中的文字:

基于梯度的突变

0 投票
0 回答
53 浏览

python - Python:使用 scipy.optimize.differential_evolution 的多处理能力共享字典

我正在使用模块运行优化问题scipy.optimize.differential_evolution。我写的代码相当复杂,我将尝试总结我遇到的困难:

  1. 目标函数是用外部数值模型计算的(即我没有优化分析函数)。为此,我创建了一个运行模型的特定函数和另一个用于后期处理结果的函数。
  2. 我用一些约束来约束我的问题。约束不是约束问题的实际参数,而是约束一些因变量,这些因变量只能在我的外部数值模型模拟结束时获得。每个约束都用一个单独的函数定义

2. 的问题是外部模型可能会针对同一组参数运行两次:第一次计算目标函数,第二次计算要评估约束的因变量。为了避免这种情况并加速我的代码,我创建了一个全局字典,每次调用外部模型时,我都会为每组参数(作为查找表)保存因变量的结果。这将阻止评估约束的函数针对同一组参数再次运行模型。

当我使用单个 CPU 优化时,这非常有效。但是,据我了解,该函数differential_evolution还允许通过为选项“workers”设置适当的值来进行多处理(请参见此处https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.differential_evolution。 html#r108fc14fa019-1)。我的问题是,当我启用多处理功能时,我不知道如何更新全局/共享变量。

上面的网页指出: “如果工人是一个整体,则人口被细分为工人部分并并行评估(使用multiprocessing.Pool)[...]”

所以我推断我必须找到一种在使用时修改共享变量multiprocessing.pool的方法。在这方面,我找到了以下解决方案:

python多处理中的共享变量

具有全局变量的 multiprocessing.Pool

为什么 multiprocessing.Pool 不能更改全局变量?

Python 在并行进程之间共享字典

我认为最后一个适合我的情况。但是,我不确定如何设置我的代码和该differential_evolution函数的 workers 选项。任何帮助将不胜感激。

我的代码是这样的:

上面的代码适用于单核。我正在尝试共享字典 dict_obj 和 dict_dep_var 的解决方案

0 投票
0 回答
32 浏览

c++ - 将 PAGMO2 批量适应度评估应用于单目标差分进化问题

无法理解我如何利用 PAGMO 的批量适应度评估来解决繁重的单目标差分进化问题。

我想使用 BFE 形式的多线程来加快进程。

代码:

以上是我尝试过的 BFE 实现,但它没有按预期正常工作。

我已经看到了 Python 的实现,这基本上只是将 bfe 应用于算法。

根据 C++文档,我们提供了问题和向量列表。这让我有点困惑。

  • BFE 如何知道应该使用什么算法?
  • 如何生成一组向量以传递给 BFE?
0 投票
2 回答
135 浏览

optimization - 为什么 scipy.optimize.differential_evolution 不返回最后一个人口?

差分进化是基于种群的算法。然而,scipy.optimize.differential_evolution返回结果OptimizeResult只给出了人口中最优秀的精英,而忽略了这一代人的其余部分。

有人如何保存有关最后一个人口的信息?

0 投票
1 回答
36 浏览

confidence-interval - Scipy.optimize.differential_evolution 可以计算估计参数的 SD 或 SE 吗?

我使用 Scipy.optimize.differential_evolution 来估计我的模型的参数;但是,与 Curve_fit 不同,它不能消除协方差。如何计算参数的不确定性?

0 投票
1 回答
34 浏览

python - scipy.optimize.differential_evolution 的整数解约束?

我正在尝试在我的程序中使用scipy.optimize.differential_evolution优化器。但我需要解决方案只有整数......

现在解决方案(scipy.optimize.OptimizeResult 的属性 x)总是看起来像这样:

但我需要解决方案中的所有元素都是整数,例如:

有什么办法可以强制执行吗?或者我可以使用其他/更适合的包吗?

0 投票
1 回答
42 浏览

python - Scipy 优化算法:提前停止

我想知道如何触发 scipy 优化算法的提前停止,如差分进化、双重退火和盆地跳跃。

我知道你可以调用一个返回 True 或 False 的回调函数,但是,我想知道当适应度函数在几个迭代中收敛到相同的值时如何触发整个算法停止。例如,如果 maxiter 设置为 250,但适应度函数在 100 次迭代时收敛,当它不再进行任何改进时,我如何触发它停止?

0 投票
0 回答
26 浏览

python - 如何在图像补丁列表上运行差分进化算法?

我遇到了一个实现,其中在32x32图像大小上运行差分进化,最终选择图像中的单个像素进行进一步操作(例如扰动)。我目前正在研究如何将类似的方法应用于图像的补丁而不是像素。

像素实现遵循以下路线:

一种预测图像类别的方法。xs是从差分进化中选择的像素。

设置搜索限制的界限

前两个 (0, 32) 是进行像素搜索的图像高度和宽度。最后三个 (0, 255) 是颜色通道的范围。像素只是我们想要搜索和更改的像素数,视情况而定。

predict_function传递callback_function给差分进化如下:

然后通过以下方式应用差分进化

结果的结果预计是选定的像素。然后按如下方式扰动该像素。

我正在做的是搜索一个补丁而不是像素,并推荐最好的补丁来扰动。我一直致力于像素实现,它对我来说工作得很好。为了尝试基于补丁的方法,我将图像划分为补丁,并暂时只用黑色扰动一个补丁(稍后我必须组合 3 个通道)

使用以下方式将我的大小图像划分(224 x224)196补丁。每个补丁都是16 x 16.

在这种情况下,与查找单个像素不同,每个补丁都有256像素。我需要在补丁上应用差分进化并推荐一个补丁来扰动。我不知道该怎么做。我也一定会感谢任何帮助解决问题的人。