Guest User

Untitled

a guest
Jun 21st, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. def twiddle(tol=0.2):
  2. """Twiddle algorithm implementation according to Lesson 15, quiz 20 of "Artificial Intelligence for Robotics" course"""
  3.  
  4. def get_err(p, i=None, p_i=None):
  5. if i is not None:
  6. p = deepcopy(p)
  7. p[i] = p_i
  8. robot = make_robot() # robot-class doesn't presented here
  9. _, _, err = run(robot, p)
  10. return err
  11.  
  12. p = [0.0, 0.0, 0.0] # PID components
  13. dp = [1.0, 1.0, 1.0]
  14. best_err = get_err(p)
  15.  
  16. while sum(dp) > tol:
  17. for i in range(len(p)):
  18. for change_direction in (1, -1):
  19. new_p_i = p[i] + change_direction * dp[i]
  20. err = get_err(p, i, new_p_i)
  21. if err < best_err:
  22. best_err = err
  23. p[i] = new_p_i
  24. dp[i] *= 1.1
  25. break
  26. else:
  27. dp[i] *= 0.9
  28.  
  29. # p and error values for lesson example
  30. # p = [2.9331227688652457, 10.326589894591526, 0.49316041639454505]
  31. # error = 6.48624850687e-16
  32.  
  33. return p, best_err
Add Comment
Please, Sign In to add comment