热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Twiddle算法的简单Demo

1.简单说明Twiddle算法可以为一个计算误差的算法A去找到一个好的参数P。比如在PID调参中,一次调整一个参数,最终生成最优参数集,

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] &#43;&#61; dp[i]err &#61; A(p)if err < best_err: # 误差比目前最好的误差更小则更新最好误差值best_err &#61; errdp[i] *&#61; 1.1else: # 不然的话我们就将目前的参数朝另一个方向进行计算&#xff08;这里减去2倍是因为刚才加了1次&#xff09;p[i] -&#61; 2 * dp[i] err &#61; A(p)if err < best_err: # 误差变优的话则更新best_err &#61; errdp[i] *&#61; 1.05else: # 不然的话就说明目前的变化值设计的太大&#xff0c;既不能There was no improvementp[i] &#43;&#61; dp[i] # 这一步是为了让p[i]返回到这次循环前的值&#xff0c;即不加不减dp[i] *&#61; 0.95 # 减小变化值继续反复更新参数

推荐阅读
author-avatar
推球了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有