Sử dụng callback
Bạn muốn tìm hai điểm cực đại cao nhất của một hàm lợi nhuận và đã quyết định dùng callback để thu thập các nghiệm tối ưu tìm được rồi chọn ra hai giá trị lớn nhất.
Đầu tiên, bạn sẽ hoàn thiện hàm callback. Bạn sẽ kiểm tra xem giá trị mục tiêu mà basinhopping đang xét có được chấp nhận là điểm tối ưu hay không; nếu có, bạn sẽ thêm nó vào danh sách opt_values. Sau đó, bạn sẽ chạy basinhopping với hàm callback vừa định nghĩa.
basinhopping đã được import sẵn cho bạn.
Giá trị khởi tạo x0, kwargs, và hàm profit đã được định nghĩa sẵn.
Bài tập này là một phần của khóa học
Nhập môn Tối ưu hóa với Python
Hướng dẫn bài tập
- Điền vào hàm
callbackđể kiểm tra xem ứng viênxđang được xét ở vòng lặp hiện tại có thực sự được xem là điểm tối ưu hay không. - Thêm giá trị của hàm mục tiêu đã được tối thiểu hóa vào danh sách
opt_values. - Chạy
basinhoppingvới hàm callback phù hợp và tìm hai điểm cực đại cao nhất.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
opt_values = []
def callback(x, f, accept):
# Check if the candidate is an optimum
if ____:
# Append the value of the minimized objective to list opt_values
opt_values.append(____)
# Run basinhopping to find top two maxima
result = basinhopping(lambda q: -profit(q), x0, callback=____, minimizer_kwargs=kwargs, niter=5, seed=3)
top2 = sorted(list(set([round(f, 2) for f in opt_values])), reverse=True)[:2]
top2 = [-f for f in top2]
print(f"{result.message}\nThe highest two values are {top2}")