使用 callback
您希望找到一个利润函数的两个最高极大值,您决定使用 callback 来收集已找到的最优解,然后选出前两个值。
首先,您将完善 callback 函数。您需要检查 basinhopping 当前评估的目标值是否被接受为最优;如果是,则将其添加到列表 opt_values。之后,使用您刚定义的回调函数运行 basinhopping。
basinhopping 已为您导入。
初始猜测 x0、kwargs 和 profit 函数也已为您定义。
本练习是课程的一部分
Python 优化入门
练习说明
- 补全
callback函数,以检查当前迭代中被评估的候选解x是否被视为最优。 - 将最小化目标的数值追加到列表
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}")