在循环坐标搜索中,我们寻找每个坐标轴的最佳内联。我已将变量 x_new 定义为起点的更新变量。在循环内部,目标函数首先在 x1 方向最小化,然后在 x2 方向最小化。
我在实际更新 x_new 时遇到了麻烦。它不会按照当前编码更新,打印时输出为 [0, 0]。
import scipy.optimize as opt
import numpy as np
# Objective Function
# f(x1,x2) = (x2-x1**2)**4 + (3-x1)**2
# x = [0, 0]
# Initialize
x0 = np.array([0, 0])
iter = 0
epsilon = 0.0001
x_new = x0
for i in range(len(x0)):
if i == 0:
def obj_func(x):
return (x_new[1] - x ** 2) ** 4 + (3 - x) ** 2
x_new[0] = opt.minimize_scalar(obj_func).x
else:
def obj_func(x):
return (x - x_new[0]**2) ** 4 + (3 - x_new[0]) ** 2
x_new[1] = opt.minimize_scalar(obj_func).x
iter += 1
print(x_new)
print(iter)
这是这段代码的输出
我怎样才能让 x_new 更新或者我正在接近这一切都错了?