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

python - Python:用 scipy different_evolution 拟合参数,如何强制一个参数小于另一个参数?

例如

那么 a, b, c = [0.85699693 0.5 0.5]

现在,如果有人想强制c 必须大于a,即c>a 用于参数拟合结果。我怎么能做到这一点?

我自己的解决方案是对定义的函数使用条件返回,所以替换return sum(result)return sum(result) if c>a else np.Inf. 这给了我一组新的 a, b, c = [0.83454878 0.50031474 0.83487768]

0 投票
1 回答
524 浏览

python - 如果目标函数有太多参数,SciPy 差分进化会失败

差分进化算法的 SciPy实现是否有最大变量数?我的代码适用于具有 8 个变量的问题的玩具版本,但是当我尝试使用 4000 个变量优化实际问题时,目标函数始终返回无穷大值。

代码(有关输入文件,请参阅 GitHub存储库)

实际问题的程序输出

...等等数百个步骤

有关优化问题的更多信息

我正在尝试确定一组 1000 个汉字,以最大限度地提高你写常用单词的能力。该数组w是一个稀疏布尔矩阵,形状为 4000(潜在字符数)乘以 30000(字数)。w如果对应于该行的字符出现在对应于该列的单词中,则元素 of为真。该数组freq是一个长度为 30000 的向量,其中包含词频值。

目标函数kf将 4000 个元素的数组x作为其参数。该数组x包含介于 -1 和 1 之间的值。试用字符集由 中的正元素确定x。非线性约束将正元素的数量限制x为 1000。

0 投票
0 回答
248 浏览

python - SciPy 差分进化:即使工人 = -1 也不能在多核上运行

语境:

伪代码:

  • 该代码用于工作,所以我不能分享它。我的目标和约束函数需要很多常量,因此我将它们包装成一个类。我知道该args参数是为此,但约束函数没有该参数。
  • 代码结构如下所示:

然后,我创建一个类实例o = MyClass(),并用类模块调用差分进化函数:differential_evolution(func = o.obj, ...).

问题:

  • 有没有人遇到过以下问题,即即使您设置了多个工作人员,代码也运行在一个工作人员上?
  • 您对如何更好地设计目标和约束函数以使它们有资格进行并行处理有什么建议吗?

谢谢!

0 投票
1 回答
200 浏览

python - 什么是“人口能量”?

scipy.optimize.differential_evolution中,收敛标准是:

这就引出了一个问题,请问什么是“人口能量”

这可能是一个后续问题: 解释 scipy 差分进化中 tol 参数的直觉

我尝试查看代码,但我得到了:

因此,后续问题将是请做什么?

0 投票
1 回答
498 浏览

python-3.x - 获取用于在差分进化工作者中使用的可腌制函数 = -1

#I EDITED MY ORIGINAL POST 为了举一个更简单的例子。我使用 Scipy 的差分进化 (DE) 来优化某些参数。我想在此任务中使用所有 PC 处理器,并尝试使用选项“workers=-1”

要求的代码是 DE 调用的函数必须是可腌制的。

如果我在https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.differential_evolution.html#scipy.optimize.differential_evolution中运行示例,则优化有效。

但是如果我定义一个自定义函数“Ros_custom”,优化会崩溃(不给出结果)

如果我尝试 pickle.dumps 和 pickle.loads 'Ros_custom' 我会得到相同的行为(优化崩溃,没有答案)。

如果我用莳萝

我收到以下消息错误

我的问题是:为什么我会收到错误消息?以及是否有办法让“Ros_custom”可腌制以使用 DE 中的所有 PC 处理器。

提前感谢您的任何建议。

0 投票
1 回答
63 浏览

python - 如何使函数可挑选,以便可以通过 scipy.optimize.differential_evolution 的并行版本将其最小化

我需要使用差分进化的 scipy 实现来最小化一个函数。我想利用并行性来加快计算速度,我尝试设置workers=-1。

我收到一个错误并搜索我发现问题是我试图最小化的功能不可选择。我需要帮助来了解如何让它变得可挑选。

最小化函数的工作方式如下:

  • 一个类对象有一个属性向量,即观察到的数据。
  • 该类的一种方法采用一些参数并计算向量的估计值。
  • 最小化函数计算向量和计算估计之间的均方误差。

该函数的伪代码可能是这样的:

0 投票
1 回答
268 浏览

python - 差异进化中的收敛

我正在使用 Scipy 的差分进化优化器,并且看到一些我无法协调的行为,并且正在寻找对 DE 有一点专业知识的人。

一点背景知识,我将人口中所有成员的目标函数视为具有“best1exp”突变策略的迭代函数。

best1exp 策略通过取

在此处输入图像描述

其中 b_0 是最知名的解决方案,F 是突变常数 m^i_r 表示第 i^th 种群迭代的随机成员。

best1exp 中的“exp”部分是交叉策略,它与我关心的效果无关(即使设置 bin=exp 的 CR=1 也存在)。

看起来人口正在支持两种解决方案,这应该是不可能的,因为所有成员都围绕每次迭代的“最佳”解决方案进行随机化(我知道存在交叉,但忽略该细节,因为它不依赖于 CR。对于不同的 CR、F 有和没有抖动、exp 和 bin,存在相同类型的结构。)

在此处输入图像描述

那么问题来了,DE如何支持这样的结构呢?需要明确的是,我不是在问这个问题,告诉我为什么“我的”代码会生成这个,而是它怎么可能。

0 投票
1 回答
317 浏览

python - 由于solve_ivp抛出runtime_warnings,使用scipy.differential_evolution对ODE系统的参数优化失败

我正在尝试在 python 中解决模型并将模型的未知参数拟合到实验数据。该模型由 2 个 ODE 组成,我使用 scipy.integrate.solve_ivp 对其进行求解。模型的参数是未知的,因此,我想使用多种方法来拟合它们。我的第一选择是差分进化,因为它可以为更复杂的模型提供非常好的结果(之前将它用作另一个包的一部分)。然而,问题是,当我给出我的模型(我希望它找到计算点和实验点之间的最小二乘的全局最小值)时,它会找到模型变得不稳定的参数(LSODA 无法整合它,因为内部步长为 0)。我试图捕捉 LSODA 在这些情况下抛出的运行时警告,但这并没有帮助。

我的模型和代码如下:

0 投票
1 回答
287 浏览

python - Scipy 最小化返回比最小值更高的值

作为多启动优化的一部分,我正在运行差分进化 (DE),我将其输出作为初始值提供给 SLSQP 的 scipy 最小化(我需要约束)。

我正在测试 Ackley 函数上的程序。即使在 DE 返回最优值(零)的情况下,scipy 最小化也会偏离最优初始值并返回高于最优值的值。

您知道如何使 scipy 最小化返回最佳值吗?我注意到它有助于指定 scipy 最小化的容差,但它确实完全解决了这个问题。缩放目标函数会使事情变得更糟。COBYLA 求解器不存在该问题。

以下是优化步骤:

在我的情况下产生

下面是 Ackley 函数的实现:

0 投票
1 回答
129 浏览

python - scipy 的线性约束问题。人口的所有要素都被拒绝

我正在使用 scipy 差分进化。我必须设置以下线性约束。0<x1+x2+x3+x4<=1。x2+x3=1。我设置了以下矩阵 A=[0 1 1 0] B=[1]。线性约束 = 线性约束(A,B,B,真)。我还将下限和上限设置为 0 和 1。然而,在每次迭代过程中,目标函数的输出是 InF,而差分进化没有调用目标函数

谁能提出什么问题?我的 Scipy 版本是 1.5.4 和 python 3.7。

感谢提前..