Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.52 KB | None | 0 0
  1. import numpy as np
  2. import os
  3. import sys
  4.  
  5. # hours_per_time_step should be greater than 1
  6. hours_per_step = 2
  7.  
  8. class PainModel():
  9. def __init__(self, seed):
  10. # pain -1 is bad
  11. # pain 1 is good
  12. self.pain = 0
  13. # initial start point for date -
  14. # TODO - make this random according to what weather data that you have
  15. self.datetime = 0
  16. # use random state so that it is repeatable
  17. self.random_state = np.random.RandomState(seed)
  18.  
  19. self.precipitation_options = ['rain', 'sunny', 'snow', 'fog']
  20. self.activity_options = ['sleep', 'exercise', 'work', 'stressful', 'leisure']
  21. self.last_activities = []
  22.  
  23. def step(activity):
  24. # activity is string matching one of 'activity_options'
  25. assert activity in self.activity_options
  26. recent_activities = self.activity_options[:max(self.hist_len, 24/hours_per_step)]
  27. hist_len = len(self.last_activities)
  28. if activity == 'sleep':
  29. self.pain-=.01
  30. if activity == 'exercise':
  31. self.pain-=.1
  32. # if you exercise too often, you may get hurt
  33. if 'exercise' in recent_activities:
  34. self.pain+=0.5
  35. if activity == 'work':
  36. self.pain+=.01
  37. if activity == 'stressful':
  38. self.pain+=0.5
  39. if activity == 'leisure':
  40. self.pain-=.01
  41. sleep_instances = [x if x=='sleep' for x in recent_activities]
  42. # reward getting 8 hours of sleep per night
  43. if 7/float(hours_per_step) < len(sleep_instances) < 12/float(hours_per_step):
  44. self.pain+=0.1
  45.  
  46. # determine what the state was when this was experienced
  47. self.pain = np.clip(self.pain, -1, 1)
  48. self.state = [self.pain, self.datetime, self.get_precipitation()]
  49. # todo - turn datetime into day of week, workdayornot
  50. # state = [self.datetim, self.get_precipitation(), self.get_temperature(), day_of_week, day_of_year, workday_or_holiday]
  51.  
  52. # update datetime to prepare for next step
  53. self.datetime += hours_per_step
  54. self.last_activities.append(activity)
  55. # prevent pain from going outside bounds
  56.  
  57. return self.state
  58.  
  59.  
  60. def get_day_of_week(self):
  61. # todo - find according to datetime in python
  62. return 0
  63.  
  64. def get_precipitation(self):
  65. # todo - find according to datetime
  66. return self.random_state.randint(0,len(self.precipitation_options))
  67.  
  68.  
  69. def generate_perfect_person():
  70. pain_model = PainModel(seed=103)
  71. stressful_random_state = np.random.RandomState(3949)
  72. sleep_random_state = np.random.RandomState(949)
  73. states = []
  74. for workday in [0, 1, 1, 1, 1, 1, 0]:
  75. if workday:
  76. # is time step is 2 and day restarts at midnight
  77. # 0-2
  78. if sleep_random_state.rand() < 0.95:
  79. states.append(pain_model('sleep'))
  80. else:
  81. states.append(pain_model('leisure'))
  82. # 2-4
  83. if sleep_random_state.rand() < 0.98:
  84. states.append(pain_model('sleep'))
  85. else:
  86. states.append(pain_model('stressful'))
  87. # 4-6
  88. if sleep_random_state.rand() < 0.98:
  89. states.append(pain_model('sleep'))
  90. else:
  91. states.append(pain_model('stressful'))
  92. # 6-8
  93. if sleep_random_state.rand() < 0.85:
  94. states.append(pain_model('sleep'))
  95. else:
  96. states.append(pain_model('exercise'))
  97. # 8-4
  98. for i in range(4):
  99. if stressful_random_state.rand()<0.95:
  100. states.append(pain_model('work'))
  101. else:
  102. states.append(pain_model('stressful'))
  103. # 4-12
  104. for i in range(4):
  105. afw = stressful_random_state.rand()
  106. if afw < 0.1:
  107. states.append(pain_model('stressful'))
  108. if afw < 0.2:
  109. states.append(pain_model('exercise'))
  110. elif < 0.95:
  111. states.append(pain_model('leisure'))
  112. else:
  113. states.append(pain_model('sleep'))
  114. else:
  115. # yay it is the weekend
  116. # is time step is 2 and day restarts at midnight
  117. for i in range(4):
  118. # sleep in on the weekend
  119. states.append(pain_model('sleep'))
  120. for i in range(7):
  121. states.append(pain_model('leisure'))
  122. states.append(pain_model('sleep'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement