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

python - 微电网中电池调度的约束优化

给定诸如电力消耗、太阳能电池板发电量、价格等输入(在给定时间 t),我们有一个电池,我们想要评估在任何给定时间它应该(dis)/充电多少。问题可以表述如下:

Pt = price of electricity at time t

Lt = consumption of electricity at time t

Zt = charge of battery at time t (how much is in the battery)

St = Electricity generated from solar generator at time t

Qt = amount the battery (dis)/charges at time t

我们试图优化的功能是 Ct = Pt *(Lt - St - Qt)

这样做的目的是尽量减少购买的电量

具有以下约束:

Lt - St - Qt >= 0 (our demand has to be non-negative)

Qmin <= Qt <= Qmax ( the battery can only (dis)/charge between certain values at any given time)

Zmin <= Zt <= Zmax. (the battery has to be within its capacity, i.e. you can't discharge more than the battery holders, and you can charge more than the battery can hold)

Zt+1 = Zt + Qt+1 ( this means that the battery level at the next time step is equal to the battery level at the previous time step plus the amount that was (dis)/charged from the battery)

我遇到的问题是如何在 python (Scipy) 中制定问题,特别是更新电池电量。

我知道存在其他图书馆(Pyomo,Pulp),欢迎使用其中的解决方案。

0 投票
1 回答
261 浏览

python - 为什么 scipy.optimize 参数上的误差线会超出范围

我正在查看使用 python 中的 optimize.leastsq 方法获取拟合参数的标准错误,因为我想使用 optimize.least_squares 来拟合一些数据,但是我的参数有界限(出于物理原因),例如参数 A 必须为 [0 ,1]。我看到使用协方差矩阵并乘以残差的方法会导致误差线超出参数范围。什么是统计上正确和严谨的事情?在允许的范围内人为地切断我的误差线,还是有其他方法可以将误差线保持在边界内?

我得到的结果是:

请注意,参数上的 perr 超出了边界范围。也许有办法获得方向错误?也就是说,例如,第一个参数上的误差线只会在负方向?

0 投票
2 回答
216 浏览

python - 将基矩阵的变化拟合到数据

取简单的关系:

A*X + X0 = B,

其中 X、X0 和 B 是 2*1 向量,A 是 2*2 矩阵,我想在给定一组点 (X, B) 的情况下找到最好的 (A, X0)。

scipy.optimize我在图书馆里找不到任何直接适合这个问题的东西。

0 投票
2 回答
1834 浏览

python - 如何将参数传递给 scipy.optimize.differential_evolution 中的回调函数

我正在使用来自 scipy.optimize 的差分进化来解决我的优化问题。我的优化器需要一些参数进行优化。

代码 -

我还有一个回调函数。我想将我的参数发送到我的回调函数,这就是我的问题出现的地方。

如果我不将任何参数传递给我的回调函数,它工作正常 -

但是,如果我arguments在函数定义中作为参数给出 -

它抛出一个错误。

将参数传递给回调函数的正确方法是什么?

0 投票
1 回答
81 浏览

python - 多元最小化的最小示例

所以我正在尝试编写一个 scipy.optimize.minimize 的最小工作示例,而不仅仅是一个示例。

基本上,我的示例适用于一个变量的 lambda 函数,但只要我添加另一个变量,它就会崩溃。

前三行执行没有错误并给出正确的结果,但最后三行给我以下错误

任何人都可以给我一个提示我做错了什么?

0 投票
1 回答
123 浏览

python - 如何使用 multible 变量正确使用 scipy 中的最小化?

我有五个变量,我想根据、、、和scipy.optimize.minimize来找到我正在寻找的解决方案。首先,我导入并定义了初始猜测(基于实验室实验,因此它们应该是有效的)。ABCDEminimizescipy

其次,我定义了组成目标函数的各个函数,命名方便Objective。我还尝试将F, G, H, and组合I成一个函数,但没有任何运气,所以我决定暂时保持这种状态。

第三,为了简单起见,我定义了constraint(ie (F/G)/(H/I)=1) 以及命名bnds为初始猜测的边界。+/- 10%

第四也是最后,minimize为我提供了一个名为sol.

如果 sol 要由 打印print(sol),将出现以下消息。

对我的新手来说,constraint这似乎是问题所在,但由于缺乏经验,我不确定minimize

  • 我做错了什么?
  • 为什么它没有成功执行?
  • root_scalar在这种情况下,按照@fuglede 的建议使用会更好吗?
  • 是否可以将所有单独的功能包含在一个功能中以避免造成混乱?

请注意D0d不包含在任何功能中,但作为五个自变量之一在事物的宏伟计划中很重要。

0 投票
2 回答
3013 浏览

python - scipy.optimize.minimize(method='trust-constr') 不会在 xtol 条件下终止

我已经建立了一个线性等式约束的优化问题,如下所示

是加权和函数,其objective系数/权重将被优化以使其最小化。由于我对系数和约束都有界限,因此我使用trust-constrscipy.optimize.minimize.

最小化有效,但我不理解终止标准。根据trust-constr文档,它应该终止于xtol

算法将在 时终止tr_radius < xtol,其中tr_radius是算法中使用的信任区域的半径。默认值为 1e-8。

但是,verbose输出显示,终止确实是由barrier_tol参数触发的,如下面的清单所示

很明显,一旦 ,tr_radius < xtoltr_radius重置为其默认值1并且barrier param被减小。一旦barrier param < barrier_tol(即 1e-8) 和tr_radius < xtol,优化成功终止。该文件说关于barrier_tol

当存在不等式约束时,算法将仅在障碍参数小于 时终止barrier_tol

这将解释在不等式约束的情况下的行为,但我所有的约束都是定义为字典的等式约束

有足够深入的人trust-constr向我解释这个吗?

0 投票
1 回答
377 浏览

python - 为 Python 的 scipy 最小化结合目标和雅可比

我想知道是否可以使用一个同时返回目标值和雅可比值的函数,这样程序就不必计算某些值两次。

我想在 Python 的 scipy 优化最小化例程中使用它。在示例https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html他们不这样做,所以我只是想知道是否可能。

我正在寻找的是这样的:

接着:

目标是 obj_jac 的第一个返回值,而雅可比是第二个。然而,上面的格式给出了错误:“TypeError: 'function' object is not subscriptable”。

这是当前有效的代码,但计算 A2 两次:

有没有办法避免必须计算 A2 两次?(这只是一个非常简单的例子)。

0 投票
1 回答
9049 浏览

python-3.x - scipy.optmize.minimize:超出迭代限制

我开始将 scipy.optimize.minimize 用于一个工作项目,在该项目中,我尝试在给定每个商店的历史销售数据的情况下优化产品在商店之间的分配。

我从 Excel 表中获取约 300 家商店的数据并将其存储在 Store 类中。使用数据构建直方图并将正态分布拟合到直方图,并将拟合正态分布的均值和标准差保存在各自的 Store 对象中。(到目前为止,这部分没有问题)。

当我试图根据我在商店中分发产品的方式来最大化产品销售的总“概率”时,问题就出现了。

我的程序中还有更多内容,但这是相关部分(缺少的是从 excel 文件中获取数据,以及对每个商店进行正态分布的拟合):

运行我的程序,我收到以下消息:

为什么会这样?

0 投票
0 回答
1282 浏览

python - python中fmincon的替代方法,用于约束非线性优化问题

我在解决涉及约 20,000 个决策变量的 python 优化问题时遇到了麻烦。问题是非线性的,我希望对问题应用界限和约束。除此之外,可以计算关于每个决策变量的梯度。

界限很简单,每个决策变量必须位于区间 [0, 1] 中,并且对变量施加单调约束,即每个决策变量必须大于前一个。

我最初打算使用scipy.optimize包提供的 L-BFGS-B 方法,但我发现虽然它支持边界,但它不支持约束。

然后我尝试使用支持约束和边界的 SQLSP 方法。然而,因为它比 L-BFGS-B 需要更多的内存,而且我有大量的决策变量,所以我很快就遇到了内存错误。

这个问题来自的论文使用fminconMatlab 中的求解器来优化函数,据我所知,除了比 scipy 提供的 SQLSP 方法更节省内存之外,它还支持边界和约束的应用。但是,我无权访问 Matlab。

有谁知道我可以用来解决这个问题的替代方案?

任何帮助将非常感激。