Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách tìm giá trị nhỏ nhất của hàm vô hướng trong SciPy sử dụng Python

Tìm giá trị nhỏ nhất của một hàm vô hướng là một bài toán tối ưu hóa. Các bài toán tối ưu hóa giúp cải thiện chất lượng giải pháp, từ đó mang lại kết quả tốt hơn với hiệu suất cao hơn. Bài toán tối ưu hóa cũng dùng cho khớp đường cong (curve fitting), tìm nghiệm (root fitting), v.v.

Hãy xem ví dụ:

Ví dụ

import matplotlib.pyplot as plt
from scipy import optimize
import numpy as np

print("Hàm đang được định nghĩa")

def my_func(a):
    return a*2 + 20 * np.sin(a)

# Tạo dữ liệu cho đồ thị
x_vals = np.linspace(-10, 10, 400)
y_vals = my_func(x_vals)

plt.plot(x_vals, y_vals)
print("Đang vẽ đồ thị")
plt.show()

# Tìm cực tiểu
result = optimize.fmin_bfgs(my_func, 0)
print("Kết quả tối ưu hóa:")
print(result)

Đầu ra

Optimization terminated successfully.
    Current function value: -23.241676
    Iterations: 4
    Function evaluations: 18
    Gradient evaluations: 6
[-1.67096375]

Giải thích

  • Nhập các gói thư viện cần thiết.
  • Định nghĩa hàm tạo dữ liệu.
  • Dữ liệu này được vẽ đồ thị bằng thư viện matplotlib.
  • Tiếp theo, hàm fmin_bfgs được dùng bằng cách truyền hàm làm tham số.
  • Dữ liệu này được hiển thị trên console.

Giải thích: BFGS (Broyden-Fletcher-Goldfarb-Shanno) là thuật toán tối ưu hóa quasi-Newton sử dụng gradient. Hàm fmin_bfgs tìm cực tiểu cục bộ. Đầu ra [-1.67096375] là giá trị x tại cực tiểu, giá trị hàm là -23.24.

Lưu ý: fmin_bfgs đã deprecated trong SciPy mới. Nên dùng minimize(..., method='BFGS') thay thế.