栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Twiddle算法的简单Demo

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Twiddle算法的简单Demo

1.简单说明

Twiddle算法可以为一个计算误差的算法A去找到一个好的参数P。比如在PID调参中,一次调整一个参数,最终生成最优参数集,实现最优参数的搜索。

相较于梯度下降之类的算法的话,最大的优点就应该是简单了吧,不用去计算高维函数的梯度。

Talk is cheap, show me the code!

2.代码说明

下面写一段伪Python代码来说明一下,在这里的话以PID为例。

# 我们为PID算法选取初始化参数构成参数向量p,顺序依次为拍P->I->D
# 因为这也符合PID整定的一般规则,先比例,后积分,再微分。
p = [0, 0, 0]
# 在这里我们定义初始的变化量
dp = [1, 1, 1]
# 这里的A(p)是计算误差的算法
best_err = A(p)

# 我们将误差的阈值设置为0.1,
threshold = 0.1

#如果dp的变化量和比我们设置的阈值大的话,执行循环操作
while sum(dp) > threshold:
    for i in range(len(p)):
        p[i] += dp[i]
        err = A(p)

        if err < best_err:  # 误差比目前最好的误差更小则更新最好误差值
            best_err = err
            dp[i] *= 1.1
        else:  # 不然的话我们就将目前的参数朝另一个方向进行计算(这里减去2倍是因为刚才加了1次)
            p[i] -= 2 * dp[i]  
            err = A(p)

            if err < best_err:  # 误差变优的话则更新
                best_err = err
                dp[i] *= 1.05
            else:  # 不然的话就说明目前的变化值设计的太大,既不能There was no improvement
                p[i] += dp[i] # 这一步是为了让p[i]返回到这次循环前的值,即不加不减
                dp[i] *= 0.95 # 减小变化值继续反复更新参数
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/918080.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号