通过使用 scipy 更改参数来最小化函数
Minimizing function by changing parameters using scipy
我想通过改变参数 B0、B1、B2、B3、T1、T2 来最小化下一个方程。变量 y 只是计算 objective 函数的另一个变量。
我只需要帮助通过更改参数来最小化该函数(用作 objective 函数),但我无法获得结果。我尝试使用 scipy 但我没有更改参数。
通过 运行 函数,我得到了我想要的结果:
funcion_opt(B0, B1, B2, B3, T1, T2)
output: 64.30571361326217
但是当我进行最小化时,我得到了下一个结果:
res = optimize.minimize(funcion_opt, parameters, args=(beta0, beta1, beta2,
beta3, tau1, tau2))
output: funcion_opt() takes 6 positional arguments but 7 were given
我知道错误的地方是参数的引入方式,还有需要帮助的地方。说的不够清楚请见谅
我的问题的小例子:
y = np.array([98.494500, 97.828500, 97.610000, 97.314000, 97.014500,
92.959000, 96.696222])
def objective(b0, b1, b2, b3, t1, t2):
return (y * b0 + b1) - ( y * b2 + b3) + t1 + t2
x0 = np.array([0.03, -0.03, 0, 0, 1, 1]) #Initial values of b0, b1...
result = minimize(objective, x0, args=(b0, b1, b2, b3, t1, t2))
我知道函数中的输入是错误的,常量变量是y,我想改变参数b0、b1、b2、b3、t1、t2的值。所以我需要的最小化函数是采用函数的 return 并通过调整参数来最小化错误的函数。所以也许错误是在设置 objective 函数时。
这是一个伪函数,原来的是误差平方和。
之后,我需要通过更改 return b0、b1、b2、b3、t1、t2 中的参数值来最小化 tat 函数,因为在函数中这些参数设置为。折扣因子无关紧要我只需要如何将参数更改为最小化 objective 函数的参数:
当我尝试最小化时得到错误相同且参数未更改的输出。
对此的任何帮助将不胜感激。提前致谢。
您的问题是将 (b0, b1, b2, b3, t1, t2)
作为参数传递 - 这应该是
优化向量,所以它应该只以初始 x0
的形式传递
(你做了)。由于您从 objective
函数中删除了 y
,因此没有
需要 args
(用于传递优化的常量参数
功能)。
这是我认为修复后使用 objective
函数 的样子(我通过导入和所有内容使它完整,因此您可以 运行 它无需修改):
import numpy as np
from scipy.optimize import minimize
y = 10.0
def objective(b0, b1, b2, b3, t1, t2):
return (y * b0 + b1) - ( y * b2 + b3) + t1 + t2
def objective_proxy(x):
return objective(*x)
x0 = np.array([0.03, -0.03, 0, 0, 1, 1])
result = minimize(objective_proxy, x0)
当您尝试使用原始函数(最后一个参数为 y
)时,
您现在可以在 args
中传递 y
,因为它是常量并且结果会
看起来像这样:
y_value = np.array([98.494500, 97.828500, 97.610000, 97.314000, 97.014500,
92.959000, 96.696222])
def function_opt(b0, b1, b2, b3, t1, t2, y):
...
...
return ...
def function_opt_proxy(x, y):
args = list(x) + [y]
return function_opt(*args)
x0 = np.array([0.03, -0.03, 0, 0, 1, 1]) #Initial values of b0, b1...
result = minimize(function_opt_proxy, x0, args=(y_value,)
请注意,我将 y
更改为 y_value
以避免混淆 function_opt
参数.
固定:
我添加了代理函数,负责将参数从可迭代参数扩展到单个参数。
我想通过改变参数 B0、B1、B2、B3、T1、T2 来最小化下一个方程。变量 y 只是计算 objective 函数的另一个变量。 我只需要帮助通过更改参数来最小化该函数(用作 objective 函数),但我无法获得结果。我尝试使用 scipy 但我没有更改参数。 通过 运行 函数,我得到了我想要的结果:
funcion_opt(B0, B1, B2, B3, T1, T2)
output: 64.30571361326217
但是当我进行最小化时,我得到了下一个结果:
res = optimize.minimize(funcion_opt, parameters, args=(beta0, beta1, beta2,
beta3, tau1, tau2))
output: funcion_opt() takes 6 positional arguments but 7 were given
我知道错误的地方是参数的引入方式,还有需要帮助的地方。说的不够清楚请见谅
我的问题的小例子:
y = np.array([98.494500, 97.828500, 97.610000, 97.314000, 97.014500,
92.959000, 96.696222])
def objective(b0, b1, b2, b3, t1, t2):
return (y * b0 + b1) - ( y * b2 + b3) + t1 + t2
x0 = np.array([0.03, -0.03, 0, 0, 1, 1]) #Initial values of b0, b1...
result = minimize(objective, x0, args=(b0, b1, b2, b3, t1, t2))
我知道函数中的输入是错误的,常量变量是y,我想改变参数b0、b1、b2、b3、t1、t2的值。所以我需要的最小化函数是采用函数的 return 并通过调整参数来最小化错误的函数。所以也许错误是在设置 objective 函数时。
这是一个伪函数,原来的是误差平方和。 之后,我需要通过更改 return b0、b1、b2、b3、t1、t2 中的参数值来最小化 tat 函数,因为在函数中这些参数设置为。折扣因子无关紧要我只需要如何将参数更改为最小化 objective 函数的参数:
当我尝试最小化时得到错误相同且参数未更改的输出。 对此的任何帮助将不胜感激。提前致谢。
您的问题是将 (b0, b1, b2, b3, t1, t2)
作为参数传递 - 这应该是
优化向量,所以它应该只以初始 x0
的形式传递
(你做了)。由于您从 objective
函数中删除了 y
,因此没有
需要 args
(用于传递优化的常量参数
功能)。
这是我认为修复后使用 objective
函数 的样子(我通过导入和所有内容使它完整,因此您可以 运行 它无需修改):
import numpy as np
from scipy.optimize import minimize
y = 10.0
def objective(b0, b1, b2, b3, t1, t2):
return (y * b0 + b1) - ( y * b2 + b3) + t1 + t2
def objective_proxy(x):
return objective(*x)
x0 = np.array([0.03, -0.03, 0, 0, 1, 1])
result = minimize(objective_proxy, x0)
当您尝试使用原始函数(最后一个参数为 y
)时,
您现在可以在 args
中传递 y
,因为它是常量并且结果会
看起来像这样:
y_value = np.array([98.494500, 97.828500, 97.610000, 97.314000, 97.014500,
92.959000, 96.696222])
def function_opt(b0, b1, b2, b3, t1, t2, y):
...
...
return ...
def function_opt_proxy(x, y):
args = list(x) + [y]
return function_opt(*args)
x0 = np.array([0.03, -0.03, 0, 0, 1, 1]) #Initial values of b0, b1...
result = minimize(function_opt_proxy, x0, args=(y_value,)
请注意,我将 y
更改为 y_value
以避免混淆 function_opt
参数.
固定:
我添加了代理函数,负责将参数从可迭代参数扩展到单个参数。