ehf*_*fzv 6 python numpy scipy
我有一个目标函数,比如obj(x, arg_1, arg_2)
inside f(),我variable_3 = f(x, arg_1, arg_2)
obj()会返回abs(x-variable_3)
我需要尽量减少的返回值obj()使用scipy.optimize.minimize
我想我需要这样做:
def obj(x, arg_1, arg_2)
v_3 = f(x, arg_1, arg_2)
return abs(x-v_3)
x0 = 1
result = minimize(obj, x0, args = (arg_1, arg_2))
Run Code Online (Sandbox Code Playgroud)
这样对吗?为什么我总是出错?
或者,实际上我可以这样做:
def obj(x, v_3)
return abs(x-v_3)
def myfun(arg_1, arg_2)
x0 = 1
v_3 = f(x0, arg_1, arg_2)
result = minimize(obj, x0, args = v_3)
return result
Run Code Online (Sandbox Code Playgroud)
但显然,这就是我想要的。那么有人可以告诉我如何进行这种最小化吗?谢谢
对于 scipy.optimize.minimize,应将多个参数打包成一个元组,然后在数值优化期间由目标函数解包。
它应该是这样的:
def obj(arguments)
"""objective function, to be solved."""
x, arg_1, arg_2 = arguments[0], arguments[1], arguments[2]
v_3 = f(x, arg_1, arg_2)
return abs(x-v_3)
x0 = 1
initial_guess = [1,1,1] # initial guess can be anything
result = minimize(obj, initial_guess)
print result.x
Run Code Online (Sandbox Code Playgroud)
希望它不会导致一些IP问题,在这里引用答案的基本部分:来自@lmjohns3,位于Scipy最小化函数的输入结构 “默认情况下,scipy.optimize.minimize采用一个接受一个参数的函数fun(x) x(可能是数组等)并返回标量。scipy.optimize.minimize 然后找到一个参数值 xp,使得对于 x 的其他值,fun(xp) 小于 fun(x)。优化器负责用于创建 x 的值并将它们传递给 fun 进行评估。
但是,如果您碰巧有一个函数 fun(x, y),它有一些需要单独传入的附加参数 y(但出于优化目的被视为常量),该怎么办?这就是 args 元组的用途。该文档试图解释如何有效地使用 args 元组,scipy.optimize.minimize 将使用星号参数符号将 args 中的任何内容作为参数的其余部分传递给 fun:然后将该函数调用为 fun(x, * args)在优化期间。x 部分由优化器传入,args 元组作为剩余参数给出。”
| 归档时间: |
|
| 查看次数: |
21583 次 |
| 最近记录: |