การใช้ callback
เป้าหมายคือหาค่าสูงสุดสองอันดับแรกของฟังก์ชันกำไร โดยใช้ callback เพื่อเก็บรวบรวมค่าที่เหมาะสมที่สุดที่พบ แล้วเลือกสองค่าที่สูงที่สุด
ขั้นแรก ให้เติมฟังก์ชัน callback ให้สมบูรณ์ โดยตรวจสอบว่าค่าของ objective ที่ basinhopping กำลังพิจารณาอยู่นั้นได้รับการยอมรับว่าเป็นค่าที่เหมาะสมที่สุดหรือไม่ และหากใช่ ให้เพิ่มค่านั้นลงในลิสต์ opt_values จากนั้นให้รัน basinhopping พร้อมกับฟังก์ชัน callback ที่กำหนดไว้
ได้นำเข้า basinhopping ให้แล้ว
ค่าเริ่มต้น x0, kwargs และฟังก์ชัน profit ได้กำหนดไว้ให้แล้วเช่นกัน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น
คำแนะนำการฝึกหัด
- เติมฟังก์ชัน
callbackเพื่อตรวจสอบว่าตัวเลือกxที่พิจารณาในรอบปัจจุบันได้รับการยืนยันว่าเป็นค่าที่เหมาะสมที่สุดจริงหรือไม่ - เพิ่มค่าของ objective ที่ถูก minimize ลงในลิสต์
opt_values - รัน
basinhoppingพร้อมกับฟังก์ชัน callback ที่เหมาะสม แล้วหาค่าสูงสุดสองอันดับแรก
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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}")