Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import numpy as np
  3. from scipy.stats import entropy
  4. from math import log10
  5.  
  6. def sense(world, p, z, pHit, pMiss):
  7. q = np.array(p)
  8. world = np.array(world)
  9.  
  10. q[world==z] *= pHit
  11. q[world!=z] *= pMiss
  12.  
  13. q = normalize(q)
  14.  
  15. return q
  16.  
  17. def normalize(p):
  18. q = np.array(p)
  19. q /= np.sum(q)
  20. return q
  21.  
  22. def move(p, U, pUndershoot, pExact, pOvershoot):
  23. n = []
  24.  
  25. U = U % len(p)
  26. # Shift array
  27. q = np.append(p[-U:], p[:-U])
  28.  
  29. for i, item in enumerate(q):
  30. s = item * pExact
  31. s += q[i-1] * pOvershoot
  32. s += q[(i+1)%len(q)] * pUndershoot
  33. n.append(s)
  34. return np.array(n)
  35.  
  36. def entropys(p):
  37. s = 0
  38. for x in p:
  39. s += x*log10(x)
  40. return -s
  41.  
  42. p = np.array([0.2] * 5)
  43. world = ['green', 'red', 'red', 'green', 'green']
  44. measurements = ['red', 'red']
  45. motions = [1, 1]
  46.  
  47. # Sense parameters
  48. pHit = 0.6
  49. pMiss = 0.2
  50. # Inexact motion parameters
  51. pExact = 0.8
  52. pOvershoot = 0.1
  53. pUndershoot = 0.1
  54.  
  55. # Sense multiple data
  56. for z in measurements:
  57. p = sense(world, p, z, pHit, pMiss)
  58.  
  59. # Move
  60.  
  61. p = [0, 1, 0, 0, 0]
  62. p = move(p,1, pUndershoot, pExact, pOvershoot)
  63. p = move(p,1, pUndershoot, pExact, pOvershoot)
  64. print(p)
  65.  
  66. # Limit distribution
  67. for _ in range(1000):
  68. p = move(p,1, pUndershoot, pExact, pOvershoot)
  69. print(p)
  70.  
  71. # Sense and move
  72. p = np.array([0.2] * 5)
  73.  
  74. print("Entropy: {}".format(entropys(p)))
  75.  
  76. p = [0, 1., 0, 0, 0]
  77.  
  78. for u, z in zip(motions, measurements):
  79. p = sense(world, p, z, pHit, pMiss)
  80. p = move(p, u, pUndershoot, pExact, pOvershoot)
  81.  
  82. print(p)
  83. print("Entropy: {}".format(entropys(p)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement