Skip to content

Commit

Permalink
Merge pull request #11 from jxx123/fix-seed
Browse files Browse the repository at this point in the history
Fix seed issue (/issues/10)
  • Loading branch information
jxx123 authored Dec 18, 2020
2 parents 44e7f35 + b1a02b1 commit 124ca19
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 8 deletions.
21 changes: 13 additions & 8 deletions simglucose/envs/simglucose_gym_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,21 @@ class T1DSimEnv(gym.Env):
'''
metadata = {'render.modes': ['human']}

SENSOR_HARDWARE = 'Dexcom'
INSULIN_PUMP_HARDWARE = 'Insulet'

def __init__(self, patient_name=None, reward_fun=None):
'''
patient_name must be 'adolescent#001' to 'adolescent#010',
or 'adult#001' to 'adult#010', or 'child#001' to 'child#010'
'''
seeds = self._seed()
# have to hard code the patient_name, gym has some interesting
# error when choosing the patient
if patient_name is None:
patient_name = 'adolescent#001'
patient = T1DPatient.withName(patient_name)
sensor = CGMSensor.withName('Dexcom', seed=seeds[1])
hour = self.np_random.randint(low=0.0, high=24.0)
start_time = datetime(2018, 1, 1, hour, 0, 0)
scenario = RandomScenario(start_time=start_time, seed=seeds[2])
pump = InsulinPump.withName('Insulet')
self.env = _T1DSimEnv(patient, sensor, pump, scenario)
self.patient_name = patient_name
self.reward_fun = reward_fun
self.seed()

def _step(self, action):
# This gym only controls basal insulin
Expand All @@ -59,6 +56,14 @@ def _seed(self, seed=None):
# 2**31.
seed2 = seeding.hash_seed(seed1 + 1) % 2**31
seed3 = seeding.hash_seed(seed2 + 1) % 2**31

hour = self.np_random.randint(low=0.0, high=24.0)
start_time = datetime(2018, 1, 1, hour, 0, 0)
patient = T1DPatient.withName(self.patient_name)
sensor = CGMSensor.withName(self.SENSOR_HARDWARE, seed=seed2)
scenario = RandomScenario(start_time=start_time, seed=seed3)
pump = InsulinPump.withName(self.INSULIN_PUMP_HARDWARE)
self.env = _T1DSimEnv(patient, sensor, pump, scenario)
return [seed1, seed2, seed3]

def _render(self, mode='human', close=False):
Expand Down
30 changes: 30 additions & 0 deletions tests/test_seed.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import gym
import unittest
from simglucose.controller.basal_bolus_ctrller import BBController
from datetime import datetime


class TestSeed(unittest.TestCase):
def test_changing_seed_generates_different_results(self):
from gym.envs.registration import register
register(
id='simglucose-adolescent2-v0',
entry_point='simglucose.envs:T1DSimEnv',
kwargs={'patient_name': 'adolescent#002'}
)

env = gym.make('simglucose-adolescent2-v0')

env.seed(0)
observation_seed0 = env.reset()
self.assertEqual(env.env.scenario.start_time, datetime(2018, 1, 1, 16, 0, 0))

env.seed(1000)
observation_seed1 = env.reset()
self.assertEqual(env.env.scenario.start_time, datetime(2018, 1, 1, 10, 0, 0))

self.assertNotEqual(observation_seed0, observation_seed1)


if __name__ == '__main__':
unittest.main()

0 comments on commit 124ca19

Please sign in to comment.