import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
from basal_bolus_ctrller import BBController
import pandas as pd
import numpy as np
from collections import namedtuple
# Create a namedtuple to mimic the observation structure
Observation = namedtuple('Observation', ['CGM'])
def generate_bb_data(num_samples=1000, patient_names=None):
if patient_names is None:
patient_names = ['adult#001', 'adolescent#001', 'child#001']
controller = BBController()
data = []
for _ in range(num_samples):
for patient in patient_names:
# Generate random glucose level (mg/dL)
glucose = np.random.randint(40, 400)
# Generate random meal amount (g/min)
meal = np.random.choice([0, np.random.uniform(0, 5)], p=[0.8, 0.2])
# Create observation
obs = Observation(CGM=glucose)
# Get action from controller
action = controller.policy(obs, reward=0, done=False,
sample_time=5,
patient_name=patient,
meal=meal)
# Store data
data.append({
'patient': patient,
'glucose': glucose,
'meal': meal,
'basal': action.basal,
'bolus': action.bolus
})
return pd.DataFrame(data)
# Generate data
df = generate_bb_data(num_samples=1000)
# Save to CSV
df.to_csv('bb_controller_data.csv', index=False)
print("Data generation complete. Check 'bb_controller_data.csv'.")