콜백 사용하기
이익 함수를 최대화할 때 가장 큰 극댓값 두 개를 찾으려고 하며, 발견한 최적해들을 callback으로 수집한 뒤 상위 두 값을 고르려고 합니다.
먼저 callback 함수를 완성해 보세요. basinhopping이 현재 검사 중인 목적 함수 값이 최적해로 받아들여지는지 확인하고, 그렇다면 리스트 opt_values에 추가합니다. 그다음 방금 정의한 콜백 함수를 사용해 basinhopping을 실행합니다.
basinhopping은 이미 임포트되어 있습니다.
초기 추정값 x0, kwargs, 그리고 profit 함수는 이미 정의되어 있습니다.
이 연습은 강의의 일부입니다
Python으로 배우는 Optimization 입문
연습 안내
- 현재 반복에서 검사 중인 후보
x가 실제로 최적해로 판단되는지 확인하도록callback함수를 작성하세요. - 최소화된 목적 함수 값을 리스트
opt_values에 추가하세요. - 적절한 콜백 함수를 사용해
basinhopping을 실행하고 최댓값 상위 두 개를 찾으세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
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}")