我让这段代码可以很好地优化多个变量。
def f(params):
a, b, c = params
return a**2 + b**2 + c**2
initial_guess = [1, 1, 1]
result = optimize.minimize(f, initial_guess)
if result.success:
fitted_params = result.x
print(fitted_params)
else:
raise ValueError(result.message)
是否可以修改代码,使参数个数可以动态传递给f?例如,我想要这样的东西。
def f(params, paramsNumber):
if paramsNumber == 3:
a, b, c = params
return a**2 + b**2 + c**2
elif paramsNumber == 2:
a, b = params
return a**2 + b**2
if paramsNumber == 3:
initial_guess = [1, 1, 1]
elif paramsNumber == 2:
initial_guess = [1, 1]
result = optimize.minimize(f, initial_guess)
if result.success:
fitted_params = result.x
print(fitted_params)
else:
raise ValueError(result.message)
非常感谢!
回答1
您可以迭代目标函数中的参数,并且可以使用一些通用初始化,例如,我只是使用了 numpy 的,它创建了一个具有给定数量的数组。
import numpy as np
from scipy import optimize
def f(params):
return sum(a**2 for a in params)
def find_sol(paramsNumber):
initial_guess = np.ones(paramsNumber)
result = optimize.minimize(f, initial_guess)
if result.success:
return result.x
raise ValueError(result.message)
find_sol(4)
array([-3.15727582e-08, -3.15727581e-08, -2.06550776e-09, -2.06550765e-09])