开始使用免费开始使用

使用 callback

您希望找到一个利润函数的两个最高极大值,您决定使用 callback 来收集已找到的最优解,然后选出前两个值。

首先,您将完善 callback 函数。您需要检查 basinhopping 当前评估的目标值是否被接受为最优;如果是,则将其添加到列表 opt_values。之后,使用您刚定义的回调函数运行 basinhopping

basinhopping 已为您导入。 初始猜测 x0kwargsprofit 函数也已为您定义。

本练习是课程的一部分

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}")
编辑并运行代码