最速下降法和Armijo

问题遇到的现象和发生背景

用python写了一个求极小值的算法,但是不尽人意,我也不知道问题出在哪?
函数为=> 100(x1^2 - x2)^2 + (x1 - 1)^2
x应该的极小值=> x^* = (1,1)
函数的极小值=> f_min = 0

到那时程序算出的不一样
请大家帮我看看!

import numpy as np
import math

# min 100(x1 - x2)^2 + (x1 - 1)^2
# x^* = (1,1)
# f_min = 0

# 函数
def f(x):
    return 100 * (x[0, 0] ** 2 - x[1, 0]) ** 2 + (x[0, 0] - 1) ** 2

# 梯度
def gf(x):
    return np.matrix([
        [400 * x[0, 0] * (x[0, 0] ** 2 - x[1, 0]) + 2 * (x[0, 0] - 1)],
        [-200 * (x[0, 0] ** 2 - x[1, 0])]
    ], dtype="int64")

# 2范数
def g2(x):
    gx = gf(x)
    # print(gx[0,0],gx[1,0])
    return math.sqrt(gx[0, 0] ** 2 + gx[1, 0] ** 2)


x = np.matrix([
    [0],
    [1]
], dtype="int64")

ro = 0.25
alpha = 1
Omeiga = 0.99

while g2(x) > 0.00005:
    # 算出梯度
    g = gf(x)
    # 算出下降方向
    d = -g
    # 找出最优步长
    while True:
        # print("---------",x + alpha * d)
        temp_x = f(x + alpha * d)
        condition = f(x) + ro * alpha * np.dot(g.T,d)[0,0]
        if temp_x > condition:
            alpha = Omeiga * alpha
            # print(alpha)
        else:
            x = x + alpha * d
            # print("x:",x)
            alpha = 1
            break

print("最终x的结果:", x)
print("f(x) = ",f(x))