Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def twiddle(tol=0.2):
- """Twiddle algorithm implementation according to Lesson 15, quiz 20 of "Artificial Intelligence for Robotics" course"""
- def get_err(p, i=None, p_i=None):
- if i is not None:
- p = deepcopy(p)
- p[i] = p_i
- robot = make_robot() # robot-class doesn't presented here
- _, _, err = run(robot, p)
- return err
- p = [0.0, 0.0, 0.0] # PID components
- dp = [1.0, 1.0, 1.0]
- best_err = get_err(p)
- while sum(dp) > tol:
- for i in range(len(p)):
- for change_direction in (1, -1):
- new_p_i = p[i] + change_direction * dp[i]
- err = get_err(p, i, new_p_i)
- if err < best_err:
- best_err = err
- p[i] = new_p_i
- dp[i] *= 1.1
- break
- else:
- dp[i] *= 0.9
- # p and error values for lesson example
- # p = [2.9331227688652457, 10.326589894591526, 0.49316041639454505]
- # error = 6.48624850687e-16
- return p, best_err
Add Comment
Please, Sign In to add comment