问题标签 [scipy-optimize-minimize]

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

python-3.x - 如何为 scipy 最小化例程创建可调用的雅可比函数?

我可以scipy在不使用可调用雅可比的情况下执行最小化。我想使用可调用的 jacobian,但无法弄清楚这种函数输出的正确结构。我在网上查了一些例子;此处此处提出的类似问题没有任何解决方案,并且此处发布的解决方案使用了可导入的功能,这使问题看起来不必要地复杂。下面是一个示例,显示了没有雅可比的成功最小化,以及使用雅可比最小化的不成功尝试。

考虑使用最小二乘法来找到为椭圆提供最佳数据拟合的参数。首先,生成数据。

椭圆数据

这些是定义椭圆的函数:

这是最小化的成本函数:

没有雅可比的最小化:

上面注释掉的打印语句输出以下内容:

根据scipy docs,该函数jacobian应返回与输入向量大小相同的数组。此外,可调用的 jacobian 函数仅适用于 提供的少数方法scipy,包括'L-BFGS-B''SLSQP'。用雅可比最小化:

引发以下错误:

从错误中,我认为问题是调用返回的数组jacobian包含太多条目,所以我尝试转置它。这引发了以下错误:

应如何输出可调用函数jacobian以使其与 scipyminimize(...)例程兼容?

0 投票
1 回答
52 浏览

python - 如何在 lambda 表达式中保持某些参数不变

情况:我正在使用 scipy 来解决优化问题。由于需要许多约束,系数位于 pandas.dataframe 对象中。我正在尝试使用循环输入所有这些约束。问题是在下一个周期,参数已经改变,所以实际上只剩下了约束。

为了更清楚地表达问题,我举个例子(在这个例子中,只给出了几个参数。但在实际情况下,可能有50多个参数)。Step1:我使用的代码如下:约束是w1 + w2 * 2 >= 0; w1 * 3 + w2 * 5 >= 0

Step2:使用如下所示的代码测试cons:只使用w作为[1, 1],我预计cons中存储的fun会输出3和8,但实际上是8和8。

任何人都可以就如何解决这个问题提供一些帮助吗?或者只是出了点问题。

0 投票
1 回答
61 浏览

python - 如何在 python 中为“optimize.minimize”定义边界?

我有一些变量的功能:

我需要为“optimize.minimize”定义“bound”,并为“A”的变量定义“A1”,但我不知道“A”值的范围

我该怎么做?

我想通过指定函数的三个变量(“a”,“b”,“alpha”)的值来最小化一个函数,这些变量的范围=(1,5),并定义其他变量函数作为数字或某个函数

请帮我

0 投票
0 回答
1067 浏览

parameter-passing - python优化最小化参数x0、参数边界、成本函数和雅可比之间的维度误差

我想尝试不同的策略来将我的数据拟合到给定的模型中,并提供边界并提供分析雅可比行列以改进结果。我可以运行optimize.least_squares,例如:

但是当我尝试使用使用相同参数和数据的任何可用方法进行优化时,我发现了几个错误(见下文):

  • method='L-BFGS-B'
  • 如果我这样做,例如np.transpose(param_bounds)

同样,它适用于 least_squares,所以我想问题在于我如何传递参数(为什么它们与 least_squares 不同??)而不是在代码中。但是,按照找到的文档和示例,我无法理解错误在哪里。

我真的很感激这方面的任何帮助。提前致谢。


我正准备放代码、数据示例等,但为了避免让它太长,我认为以下信息就足够了。让我知道我是否错了并且需要其他东西。

  • 有 5 个参数:S0, d, theta, phi, f. 这些和其他需要的参数(例如数组bvalsbvecs)是从 aconfigfile和其他所需的函数中读取的sys_path(传入args)。

  • cost_function返回一个向量Fdata, Sj因此F是形状为 (65,) 的数组)。基本上,它是这样的:

  • x0(5 个参数的初始化)在形状 (5,) 的数组中提供。例如:array([ 1.46732834e+02, 1.00000000e-03, 6.81814424e-01, -2.07406186e-01, 1.27062049e+01])

  • 下边界和上边界作为 param_bounds 提供,形状为 (2,5)。例如,

  • grad_Vis 是一个用户定义的 jacobian 函数,它返回一个形状为 (65,5) 的数组,并且作为cost_functionargs=(data, sys_path, configfile)作为输入参数。
0 投票
2 回答
47 浏览

python - 使用带有量化整数范围的 scipy.optimize.minimize

我可以用scipy.optimize.minimize它来限制它的答案,例如 2、3、4、6、8、10?只是那些值而不是浮点值?

0 投票
0 回答
1278 浏览

python-3.x - 在 scipy 优化最小化中忽略了终止容差

我有一个简单的优化问题,使用一些特定的数据,使scipy.optimize.minimize忽略该tol参数。根据我的理解,从文档tol确定“终止容差”,即目标函数接受的最大误差(我错了吗?)。然而,在下一个工作示例中,当tol设置为 0.1 或其他小数字时,即使目标函数 > ,优化也会以“优化成功终止”消息结束tol。这是 Scipy 方法中的错误还是我在这里误解了什么?

优化问题:我需要对 和 进行线性组合var1var2它们是两个时间序列,通过参数Btd和缩放它们Bta。我需要线性组合的平均值接近目标值Target,一个标量。np.mean(Btd*var1 + Bta*var2)所以我只是最小化和之间的绝对差异Target。约束条件是比例系数必须大于 0,并且均值的比率np.mean(Btd*var1)/np.mean(Bta*var2)应近似于函数gi/(1-gi),其中gi是区间 [0,1] 中的标量。

可重现的代码:

打印出来:

我的问题:fun: 3.0 > tol: 0.1 这是不想要的。

TL;DR: scipy.optimize.minimize 忽略 stop 参数tol。为什么?

编辑:此外,最佳解决方案 [0, 0] 忽略了两个 ineq 约束,旨在使这两个参数> 10**(-5)。这是同一个问题的一部分吗?

0 投票
1 回答
1592 浏览

python-3.x - scipy.optimize.minimize 中是否需要 ftol 和 gtol 是否适合给它一个非常低的值?

我正在使用有限内存 BFGS 优化器来最小化黑盒函数的值。我已经随机模拟了许多输入参数组合,并意识到ftolandgtol参数只是在路上,它对降低我的函数的值没有任何贡献(输出和随机输入之间存在正相关ftoland gtol,所以越小越好)。所以我设置1E-18并专注于配置其他参数,因此退出消息CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH意味着整个优化取决于eps我猜的正确值。

然后我将两者都设置ftolgtol1E-20妨碍,但随后我开始获得次优结果。

所以我的优化器是:

所以我将它设置为1E-20,其他值是随机输入的。较大样本的平均输出小于1E-20with 1E-18,我不明白为什么,它们应该是可以忽略不计的非常小的数字。我也开始收到退出消息CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL,我不知道这么小的公差怎么可能。所以我有以下问题:

1)是否值得设置ftol并设置gtol为如此低的值1E-20

2)如果已经设置,我应该设置(tol外部公差值)吗?我不希望它提前退出。或者,如果启用并且启用,作为退出阈值是否会被禁用?ftolgtoltolgtolftol

3) Scipy、Numpy 或 Python3 本身是否有可能无法处理 20 位小数的浮点值。我注意到 Python 主要为浮点数打印 18 位数字,所以问题可能是我输入了太多数字。如果是这样,那么 scipy.optimize 处理的最大位数是多少?(Scipy v1.4.1 | Numpy v1.18.1 | Python 3.5.3)

0 投票
1 回答
187 浏览

python - 在 scipy.optimize.minimize 中,如何将可选参数输入 args=() 元组?

所以我有一些功能

我想在 x 上最小化这个函数,但有时我会想要一个额外的参数 y。(本质上,我希望 y 始终采用其默认值,除非我最小化。)

通常,如果该功能只是def fun(x,y):我能够做到的scipy.optimize.minimize(x,args=(y))。但是当 y 是可选变量时我该怎么办?putargs=(y=value)给了我无效的语法,(当然,它看起来非常错误),但我不确定正确的语法是什么。

如果相关,我正在使用 Python 3.7。

0 投票
1 回答
342 浏览

scipy-optimize-minimize - Scipy.optimize - 最小化不尊重约束

使用下面的代码来了解 Scipy 优化/最小化是如何工作的。结果与我的预期不符。

当我运行时,这是 Python 在其输出控制台上抛出的内容:

尽管优化器说结果是成功的,但是由于结果应该为零,因此不遵守约束 3。我错过了什么?

0 投票
1 回答
103 浏览

python - Scipy优化:试图把函数最小化的错误

我想找到最小的函数值scipy.optimize.minimize_scalar

功能:

我想要w0 = 50并且w1 = [-5,5] 当我试图将函数置于 scipy 方法下时,我看到了不同的错误: