python - 为 Python 的 scipy 最小化结合目标和雅可比
问题描述
我想知道是否可以使用一个同时返回目标值和雅可比值的函数,这样程序就不必计算某些值两次。
我想在 Python 的 scipy 优化最小化例程中使用它。在示例https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html他们不这样做,所以我只是想知道是否可能。
我正在寻找的是这样的:
def obj_jac(c1):
A2 = RR*A1 + y1 - c1
obj = some_fun1(A2)
jac = some_fun2(A2)
return obj,jac
接着:
sol = minimize(obj_jac[0],c1_0,jac=obj_jac[1])
目标是 obj_jac 的第一个返回值,而雅可比是第二个。然而,上面的格式给出了错误:“TypeError: 'function' object is not subscriptable”。
这是当前有效的代码,但计算 A2 两次:
def obj_fun(c1):
A2 = RR*A1 + y1 - c1
obj = some_fun1(A2)
return obj
def jac_fun(c1):
A2 = RR*A1 + y1 - c1
jac = some_fun2(A2)
return jac
sol = minimize(obj_fun,c1_0,jac=jac_fun)
有没有办法避免必须计算 A2 两次?(这只是一个非常简单的例子)。
解决方案
最小化的文档说:
jac{callable, ‘2-point’, ‘3-point’, ‘cs’, bool}, optional
如果 jac 是布尔值并且为 True,则假定 fun 将梯度与目标函数一起返回。
所以只需使用:
sol = minimize(obj_jac, c1_0, jac=True)
推荐阅读
- python-3.x - 为什么python从pdf中提取符号而不是文本
- gerrit - 减少 Gerrit 发送的电子邮件通知数量
- python - 将 collections.Counter() 与具有负整数的 Django 查询集一起使用
- odoo - 如何在 Odoo11 的 POS 屏幕上添加按钮?
- dafny - Dafny 中的琐碎断言违规
- php - 我可以使用传递值吗
我试图将两个值传递到第二页其中一个值是名称(例如 John Doe),并且当我在另一页上输入 $_Request 并回显它时只有 John 显示
来自第一页的继承人
<td> "."<a rel=facebox href=add.php?id=".$id."&acname=".$ro
- r - 更改tmap map R中数据类别的绘制顺序
- java - 404 - 请求的资源不可用
- javascript - 用户刷新页面后删除旧的谷歌地图标记
- yaml - Gitlab-Ci:我如何在作业之间共享数据