def get_best_param(min_val, max_val, fun, epsilon=1e-6):
"""
使用二分法在区间 [min_val, max_val] 内找到使目标函数 fun 最大的参数值。
参数:
min_val: 搜索区间的下限
max_val: 搜索区间的上限
fun: 目标函数,输入一个参数值,返回一个数值
epsilon: 精度阈值,用于控制搜索的终止条件
返回:
best_v: 使目标函数 fun 最大的参数值
"""
while max_val - min_val > epsilon:
# 计算中点
mid1 = min_val + (max_val - min_val) / 3
mid2 = min_val + 2 * (max_val - min_val) / 3
# 计算中点处的目标函数值
rtn1 = fun(mid1)
rtn2 = fun(mid2)
# 根据目标函数值调整搜索区间
if rtn1 < rtn2:
min_val = mid1
else:
max_val = mid2
# 返回最优参数值
best_v = (min_val + max_val) / 2
return best_v