问题标签 [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.
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]
python - 如果目标函数有太多参数,SciPy 差分进化会失败
差分进化算法的 SciPy实现是否有最大变量数?我的代码适用于具有 8 个变量的问题的玩具版本,但是当我尝试使用 4000 个变量优化实际问题时,目标函数始终返回无穷大值。
代码(有关输入文件,请参阅 GitHub存储库)
实际问题的程序输出
...等等数百个步骤
有关优化问题的更多信息
我正在尝试确定一组 1000 个汉字,以最大限度地提高你写常用单词的能力。该数组w
是一个稀疏布尔矩阵,形状为 4000(潜在字符数)乘以 30000(字数)。w
如果对应于该行的字符出现在对应于该列的单词中,则元素 of为真。该数组freq
是一个长度为 30000 的向量,其中包含词频值。
目标函数kf
将 4000 个元素的数组x
作为其参数。该数组x
包含介于 -1 和 1 之间的值。试用字符集由 中的正元素确定x
。非线性约束将正元素的数量限制x
为 1000。
python - SciPy 差分进化:即使工人 = -1 也不能在多核上运行
语境:
- 我正在使用 SciPy 的差分进化包开发优化器。使用worker = 1,我得到了一些不错的结果,但我想加快运行时间。
- 我已经检查了以下关于如何在 scipy.optimize.differential_evolution 中启用并行的线程?即使我添加
if __name__ == "main":
并设置workers = -1,运行时也完全相同。我在本地机器(2 个物理处理器,4 个逻辑处理器)或我们的服务器环境(16 个核心)上测试了我的代码 - 我测试了以下用例https://medium.com/@grvsinghal/speed-up-your-code-using-multiprocessing-in-python-36e4e703213e。更改工作人员的数量确实会影响运行时间,因此我的笔记本电脑和服务器上的并行处理工作也是如此。
- 因此,我的假设是我定义目标和约束函数的方式可能是问题所在。
伪代码:
- 该代码用于工作,所以我不能分享它。我的目标和约束函数需要很多常量,因此我将它们包装成一个类。我知道该
args
参数是为此,但约束函数没有该参数。 - 代码结构如下所示:
然后,我创建一个类实例o = MyClass()
,并用类模块调用差分进化函数:differential_evolution(func = o.obj, ...)
.
问题:
- 有没有人遇到过以下问题,即即使您设置了多个工作人员,代码也运行在一个工作人员上?
- 您对如何更好地设计目标和约束函数以使它们有资格进行并行处理有什么建议吗?
谢谢!
python - 什么是“人口能量”?
在scipy.optimize.differential_evolution中,收敛标准是:
这就引出了一个问题,请问什么是“人口能量”?
这可能是一个后续问题: 解释 scipy 差分进化中 tol 参数的直觉
我尝试查看代码,但我得到了:
因此,后续问题将是请做什么?
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 处理器。
提前感谢您的任何建议。
python - 如何使函数可挑选,以便可以通过 scipy.optimize.differential_evolution 的并行版本将其最小化
我需要使用差分进化的 scipy 实现来最小化一个函数。我想利用并行性来加快计算速度,我尝试设置workers=-1。
我收到一个错误并搜索我发现问题是我试图最小化的功能不可选择。我需要帮助来了解如何让它变得可挑选。
最小化函数的工作方式如下:
- 一个类对象有一个属性向量,即观察到的数据。
- 该类的一种方法采用一些参数并计算向量的估计值。
- 最小化函数计算向量和计算估计之间的均方误差。
该函数的伪代码可能是这样的:
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如何支持这样的结构呢?需要明确的是,我不是在问这个问题,告诉我为什么“我的”代码会生成这个,而是它怎么可能。
python - 由于solve_ivp抛出runtime_warnings,使用scipy.differential_evolution对ODE系统的参数优化失败
我正在尝试在 python 中解决模型并将模型的未知参数拟合到实验数据。该模型由 2 个 ODE 组成,我使用 scipy.integrate.solve_ivp 对其进行求解。模型的参数是未知的,因此,我想使用多种方法来拟合它们。我的第一选择是差分进化,因为它可以为更复杂的模型提供非常好的结果(之前将它用作另一个包的一部分)。然而,问题是,当我给出我的模型(我希望它找到计算点和实验点之间的最小二乘的全局最小值)时,它会找到模型变得不稳定的参数(LSODA 无法整合它,因为内部步长为 0)。我试图捕捉 LSODA 在这些情况下抛出的运行时警告,但这并没有帮助。
我的模型和代码如下:
python - Scipy 最小化返回比最小值更高的值
作为多启动优化的一部分,我正在运行差分进化 (DE),我将其输出作为初始值提供给 SLSQP 的 scipy 最小化(我需要约束)。
我正在测试 Ackley 函数上的程序。即使在 DE 返回最优值(零)的情况下,scipy 最小化也会偏离最优初始值并返回高于最优值的值。
您知道如何使 scipy 最小化返回最佳值吗?我注意到它有助于指定 scipy 最小化的容差,但它确实完全解决了这个问题。缩放目标函数会使事情变得更糟。COBYLA 求解器不存在该问题。
以下是优化步骤:
在我的情况下产生
下面是 Ackley 函数的实现:
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。
感谢提前..