问题标签 [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.
scipy - 除了可优化变量之外,目标函数可以有多个输入变量吗?
在使用 scipy.optimize 时,我尝试成功的目标函数只能取一个变量,标量或向量。
例如,此代码有效:
但是,如果我想要跟踪 res.x 随 a、b、c 的变化?以下代码不起作用,但是如何使它起作用?
我能想到的唯一方法是这样的:
另一个函数里面的函数让我感觉很糟糕,还有其他方法吗?谢谢。
python - 从 Matlab/fmincon 到 SciPy/minimize
我正在尝试将最小化过程从 Matlab 转换为 Python/SciPy。
下面,主要的 Matlab 脚本:
目标函数定义如下:
在 Matlab 中一切运行顺利,最小化过程在几秒钟内完成,提供以下结果:
这是我尝试在 Python 中复制这个框架,使用 SciPy 优化工具,特别是minimize
函数:
您可能已经注意到,我从目标函数返回了一个空雅可比矩阵,因为我不知道梯度。如果我不返回它,该过程将永远无法完成,并用以下消息淹没我的控制台:
这是上面代码建议的解决方案,与 MATLAB 发现的方案相去甚远:
我尝试了所有可用的替代有界最小化算法:L-BFGS-B
和SLSQP
. 它们未能收敛到解决方案,并且发出了很多警告,可能与传递给日志函数和除法的 NaN 或 Inf 值有关:
python - Scipy 优化最小化总是返回初始猜测(SLSQP)
就像标题解释的那样,我的程序总是返回最初的猜测。
就上下文而言,该计划正试图找到在多个商店中分配某些产品的最佳方式。每家商店都有他们预计在接下来几天内销售的商品的预测 (sales_data)。这个预测不一定是整数,或者大于 1(很少是这样),它是统计意义上的预期。因此,如果一家商店的 sales_data = [0.33, 0.33, 0.33] ,则预计 3 天后,他们将售出 1 件产品。
我想尽量减少出售我分配的单位所需的总时间(我想以最快的速度出售它们),我的限制是我必须分配我可用的单位,并且我不能分配负数的产品到一家商店。我现在可以进行非整数分配。对于我的初始分配,我在所有商店中平均分配我可用的单位。
以下是我遇到问题的代码的较短版本:
优化成功完成,只有 1 次迭代,无论我如何更改参数,它总是返回初始的guess_allocs。
有什么建议吗?
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
python - 如何找到一个方程的根,其中变量是函数的输出,目标变量作为参数本身?
我正在尝试在 python 中求解变量“X”的方程,其中方程中的一些变量(“ABC,PQR”)是从函数“计算”输出的。问题是,为了从函数中获取输出,我需要将变量 X 作为参数本身传递。我在这里陷入了一个循环。我尝试了两种不同的方法,但没有取得任何成功。有没有办法可以解方程?
非常感谢任何帮助/指导。
我的第一种方法是从一个小值开始并运行一个循环。我尝试使用 math.isclose() 但一旦值超出范围就会收到“数学绑定错误”并且它会进入无限循环。第二种方法是编写完整的表达式并使用 scipy.optimize fsolve() 但我无法理解如何正确实现它。
python - 将余弦平方拟合到python中的点
我正在尝试将余弦平方曲线拟合到我使用来自 scipy optimise 的 curve_fit 的数据。但不幸的是,我得到了一条直线。希望有人能帮助我。
我得到下图,以直线拟合作为输出
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。
关于开始参数的推理是否正确?为什么我会收到这个错误?
python - 如何加速跳盆全局优化
我正在开发一个应该执行大约 6750 次优化的程序。现在,问题是一项优化的持续时间约为 3 分钟。乍一看这似乎并不多,但如果我必须执行 6750 次,我将等待 2 周......显然这不是我想要的,因此这是我如何提高速度的问题跳盆全局优化算法。我有一种感觉,我在这里忘记了一些东西,比如另一种方法或一些可能对我有帮助的参数。只是我想不通是什么...
简而言之,我有两个问题。一项优化可能需要长达 3 分钟才能收敛,这是否正常?我将如何加快优化速度?
下面的一段代码显示了我目前的工作方式。第一种方式进行了 1750 次优化,第二种方式进行了 5000 次优化。
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 函数还接受除最后一个之外的所有分配,并将最后一个分配设置为剩余单元(因为这相当于约束所有单元,
这是我的代码: