问题标签 [scipy-optimize]

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 回答
39 浏览

scipy - 除了可优化变量之外,目标函数可以有多个输入变量吗?

在使用 scipy.optimize 时,我尝试成功的目标函数只能取一个变量,标量或向量。

例如,此代码有效:

但是,如果我想要跟踪 res.x 随 a、b、c 的变化?以下代码不起作用,但是如何使它起作用?

我能想到的唯一方法是这样的:

另一个函数里面的函数让我感觉很糟糕,还有其他方法吗?谢谢。

0 投票
0 回答
1753 浏览

python - 从 Matlab/fmincon 到 SciPy/minimize

我正在尝试将最小化过程从 Matlab 转换为 Python/SciPy。

下面,主要的 Matlab 脚本:

目标函数定义如下:

在 Matlab 中一切运行顺利,最小化过程在几秒钟内完成,提供以下结果:

这是我尝试在 Python 中复制这个框架,使用 SciPy 优化工具,特别是minimize函数:

您可能已经注意到,我从目标函数返回了一个空雅可比矩阵,因为我不知道梯度。如果我不返回它,该过程将永远无法完成,并用以下消息淹没我的控制台:

这是上面代码建议的解决方案,与 MATLAB 发现的方案相去甚远:

我尝试了所有可用的替代有界最小化算法:L-BFGS-BSLSQP. 它们未能收敛到解决方案,并且发出了很多警告,可能与传递给日志函数和除法的 NaN 或 Inf 值有关:

0 投票
1 回答
2847 浏览

python - Scipy 优化最小化总是返回初始猜测(SLSQP)

就像标题解释的那样,我的程序总是返回最初的猜测。

就上下文而言,该计划正试图找到在多个商店中分配某些产品的最佳方式。每家商店都有他们预计在接下来几天内销售的商品的预测 (sales_data)。这个预测不一定是整数,或者大于 1(很少是这样),它是统计意义上的预期。因此,如果一家商店的 sales_data = [0.33, 0.33, 0.33] ,则预计 3 天后,他们将售出 1 件产品。

我想尽量减少出售我分配的单位所需的总时间(我想以最快的速度出售它们),我的限制是我必须分配我可用的单位,并且我不能分配负数的产品到一家商店。我现在可以进行非整数分配。对于我的初始分配,我在所有商店中平均分配我可用的单位。

以下是我遇到问题的代码的较短版本:

优化成功完成,只有 1 次迭代,无论我如何更改参数,它总是返回初始的guess_allocs。

有什么建议吗?

0 投票
0 回答
126 浏览

python - 具有公共变量的分布式优化

我是优化技术的新手,对我的方法有疑问。

考虑我有一个代理试图优化 3 个变量 C1,x11,x12 以最小化功率。我有60个这样的代理构成一个系统。所有这些代理都可以归为一类,C1 是所有代理的公共变量。所以agent2在C1,,x21,x22上进行优化。C1、x31、x32 上的代理 3 等等……

我尝试以组合方法进行优化,其中我的优化器在 (C1,x11,x12,x21,x22,x31,x32...) 上进行优化变得计算昂贵且不可行。

如果我尝试单独优化每个代理,这些代理中的每一个都会给出不同的 C1 ,这是所有代理的公共变量。但是由于 C1 是所有代理的公共变量,所有代理应该协调并具有共同的值。

有人可以帮助解决他的问题。对于我的用例来说,这是一种更好的方法。

我目前正在使用 scipy 差分进化算法代码进行组合方法

个人方法的代码

我愿意改变我的技术和策略以获得更好的结果。谢谢

在评论中询问:

我有一个函数f1=f1(c1,x11,x12)要最小化,c1,x11,x12其值可以在一定范围内变化,以g1(c1,x11,x12) < 0.

同样,我有多种功能 `, f2,f3...f60 。

f2 可以表示为 f2(c1,x21,x22) 以最小化 c1,x21,x22 的值,这些值可以在确定的范围内变化,前提是 g2(c1,x21,x22) < 0。

f3 可以表示为 f3(c1,x31,x32) 以最小化 c1,x31,x32 的值,这些值可以在确定的范围内变化,前提是 g3(c1,x31,x32) < 0。

所以在这里,如果我们看到 c1 是所有函数的命令变量。

与 f4,f5...f60 一样,约束为 g4,g5,g6..

我的最终目标是最小化 f1,f2,f3...f60 的总和。

IE

0 投票
1 回答
86 浏览

numpy - 如何最好地使用 Numpy/Scipy 为一组不同的线性方程找到最佳公共系数?

我有 n(大约 500 万)组特定的 (k,m,v,z)* 参数来描述一些线性关系。我想找到最佳的正 a、b 和 c 系数,以最小化它们的绝对值的相加,如下所示:

在此处输入图像描述

我事先知道每个 a、b 和 c 的范围,所以我可以用它来加快速度。但是,我不知道如何正确实施此问题以最好地利用 Numpy(或 Scipy/等)。

我正在考虑使用不同的 a、b 和 c 系数(基于一个步骤)迭代地进行检查,并最终保持能够提供最小总和的组合。但在 Numpy 中正确实现这一点是另一回事。

* (k,m,v 是 0 或正数,实际上是 k,m,v,i,j,p)(z 也可以是负数)

欢迎任何提示!

0 投票
1 回答
76 浏览

python - 如何找到一个方程的根,其中变量是函数的输出,目标变量作为参数本身?

我正在尝试在 python 中求解变量“X”的方程,其中方程中的一些变量(“ABC,PQR”)是从函数“计算”输出的。问题是,为了从函数中获取输出,我需要将变量 X 作为参数本身传递。我在这里陷入了一个循环。我尝试了两种不同的方法,但没有取得任何成功。有没有办法可以解方程?

非常感谢任何帮助/指导。

我的第一种方法是从一个小值开始并运行一个循环。我尝试使用 math.isclose() 但一旦值超出范围就会收到“数学绑定错误”并且它会进入无限循环。第二种方法是编写完整的表达式并使用 scipy.optimize fsolve() 但我无法理解如何正确实现它。

0 投票
1 回答
373 浏览

python - 将余弦平方拟合到python中的点

我正在尝试将余弦平方曲线拟合到我使用来自 scipy optimise 的 curve_fit 的数据。但不幸的是,我得到了一条直线。希望有人能帮助我。

我得到下图,以直线拟合作为输出

0 投票
1 回答
58 浏览

python-3.x - 确定开始参数 2D 高斯拟合

我正在研究一些需要能够执行二维高斯拟合的代码。我的代码主要基于以下问题:Fitting a 2D Gaussian function using scipy.optimize.curve_fit - ValueError and minpack.error。现在的问题是我对需要使用的不同参数并没有真正的初步猜测。

我试过这个:

data.reshape(201,201) 只是我从上述问题中得到的。

如果我尝试这样做,我会收到以下错误消息:ValueError: setting an array element with a sequence。

关于开始参数的推理是否正确?为什么我会收到这个错误?

0 投票
0 回答
655 浏览

python - 如何加速跳盆全局优化

我正在开发一个应该执行大约 6750 次优化的程序。现在,问题是一项优化的持续时间约为 3 分钟。乍一看这似乎并不多,但如果我必须执行 6750 次,我将等待 2 周......显然这不是我想要的,因此这是我如何提高速度的问题跳盆全局优化算法。我有一种感觉,我在这里忘记了一些东西,比如另一种方法或一些可能对我有帮助的参数。只是我想不通是什么...

简而言之,我有两个问题。一项优化可能需要长达 3 分钟才能收敛,这是否正常?我将如何加快优化速度?

下面的一段代码显示了我目前的工作方式。第一种方式进行了 1750 次优化,第二种方式进行了 5000 次优化。

0 投票
0 回答
367 浏览

python - 为什么 scipy.optimize 没有给我正确的答案?

(几天前我发布了一个类似的问题,但是鉴于上一篇文章中的答案,我已经改变了我的方法并且有不同的方法)

我正在尝试使用 scipy.optimize 来解决我的优化问题,但我一直得到一个不正确的答案,它只是返回我最初的猜测(x0)。在这里,我使用的是 dual_annealing 算法,但我也尝试了不同的全局优化算法(差分进化,shgo)以及局部最小化(使用方法 SLSQP 最小化,但这会导致问题,因为我的函数没有梯度)但没有利用。

就上下文而言,该计划正试图找到在多个商店中分配某些产品的最佳方式。每家商店都有他们预计在接下来几天内销售的商品的预测 (sales_data)。这个预测不一定是整数,或者大于 1(很少是这样),它是统计意义上的预期。因此,如果一家商店的 sales_data = [0.33, 0.33, 0.33] ,则预计 3 天后,他们将售出 1 件产品。

我想尽量减少出售我分配的单位所需的总时间(我想以最快的速度出售它们),我的限制是我必须分配我可用的单位,并且我不能分配负数的产品到一家商店。我现在可以进行非整数分配。对于我的初始分配,我在所有商店中平均分配我可用的单位。

因此,以更数学的方式陈述,我想最大化 time_objective 函数,受制于所有分配必须具有非负值(min(allocations)> = 0)并且我必须分配所有单元的约束可用(总和(分配)==单位可用)。由于 dual_annealing 不支持约束,我通过将 0 指定为每个分配的下限(并将 unitsAvailable 作为上限)来处理第一个约束。对于第二个约束,我将目标函数包装在 constrained_objective 函数中,如果违反了约束,它将返回 numpy.inf。这个 constrained_objective 函数还接受除最后一个之外的所有分配,并将最后一个分配设置为剩余单元(因为这相当于约束所有单元,

这是我的代码: