시작하기무료로 시작하기

콜백 사용하기

이익 함수를 최대화할 때 가장 큰 극댓값 두 개를 찾으려고 하며, 발견한 최적해들을 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}")
코드 편집 및 실행