jxx123/simglucose
A Type-1 Diabetes simulator implemented in Python for Reinforcement Learning purpose
simglucose – 강화학습 연구용 1형 당뇨병 시뮬레이터
무엇인가요 – simglucose는 FDA 승인된 UVa/Padova T1-D 당뇨병 시뮬레이터(2008년 버전)를 재현하는 Python 패키지입니다. 어떤 제어 알고리즘(고전적 PID, 모델 예측 제어, 또는 학습 에이전트 등)으로도 구동할 수 있는 가상 환경을 제공하며, OpenAI Gym(및 Gymnasium) API와 호환되도록 패키징되어 있어 "강화학습 준비 완료" 상태입니다.
왜 중요한가요 – 포도당 조절을 위한 RL 에이전트를 훈련하거나 평가하는 것은 일반적으로 비용이 많이 들고 위험할 수 있습니다. simglucose는 현실적인 생리학적 파라미터를 가진 30명의 사전 정의된 가상 환자(청소년 10명, 성인 10명, 아동 10명)를 제공하므로, 연구자들은 인슐린 투여 정책에 대해 빠르고 재현 가능한 실험을 수행할 수 있습니다.
주요 기능 (README에 설명됨)
- Gym 호환 환경 – 표준
observation, reward, done, info스텝 시그니처를 구현.gym과 최신gymnasium라이브러리 모두에서 작동. - 사용자 정의 보상 – 기본 보상은 임상 위험 지수 감소; 사용자는 지난 1시간의 혈당 값에 기반한 임의의 함수를 제공 가능.
- 병렬 시뮬레이션 –
pathos멀티프로세싱 라이브러리를 통해 여러 환자를 동시에 시뮬레이션 가능(옵션, 비활성화 가능). - 시나리오 생성 – 내장된 랜덤 시나리오 생성기와 사용자 정의 식사 시간/크기 시퀀스용
CustomScenario클래스 제공. - 컨트롤러 틀 – 최소한의 베이스-볼러스 컨트롤러와 사용자가 자신의 알고리즘(PID, MPC, RL 등)을 확장할 수 있는 단순한 기본 클래스(
Controller) 제공. - 시각화 – 실행 후 자동으로 포도당 추세, CVGA(Control Variability Grid Analysis), 영역 통계, 위험 지수 요약을 플롯 가능.
- 명령줄 UI – 코드를 작성하지 않고도 시나리오 설정을 안내하는 인터랙티브 CLI(
simulate()) 제공. - rllab 지원 – DDPG와 같은 고급 알고리즘용으로
rllab강화학습 라이브러리와의 옵션 통합 제공.
설치
# 권장 – PyPI에서 설치
pip install simglucose
# 최신 코드를 얻거나 로컬에서 개발할 경우
git clone https://github.com/jxx123/simglucose.git
cd simglucose
pip install -e . # 편집 가능한 설치
Python ≥ 3.9 필요 (3.7/3.8는 더 이상 지원되지 않음)
빠른 시작 예제 (Gym)
import gym
from gym.envs.registration import register
from simglucose.simulation.scenario import CustomScenario
from datetime import datetime
# 간단한 식사 시나리오 정의
scenario = CustomScenario(start_time=datetime(2018,1,1), scenario=[(1,20)])
register(
id='simglucose-adolescent2-v0',
entry_point='simglucose.envs:T1DSimEnv',
kwargs={'patient_name': 'adolescent#002', 'custom_scenario': scenario}
)
env = gym.make('simglucose-adolescent2-v0')
obs = env.reset()
for t in range(100):
env.render(mode='human')
action = env.action_space.sample() # 랜덤 기초 인슐린
obs, reward, done, info = env.step(action)
if done:
break
동일한 환경은 Gym 인터페이스를 기대하는 어떤 RL 라이브러리에서도 사용 가능합니다.
사용자 정의 컨트롤러 사용
from simglucose.simulation.user_interface import simulate
from simglucose.controller.base import Controller, Action
class MyController(Controller):
def __init__(self, init_state):
self.state = init_state
def policy(self, observation, reward, done, **info):
# 매우 단순한 정책 – 인슐린 투여 없음
return Action(basal=0, bolus=0)
def reset(self):
self.state = 0
simulate(controller=MyController(0))
MyController를 학습된 정책, PID 등으로 교체하면 시뮬레이터가 관측값을 공급하고 보상을 수집합니다.
고급 배치 시뮬레이션
README에는 SimObj 객체를 생성하고, sim()으로 개별 실행하거나, batch_sim(parallel=True)로 병렬로 여러 개 실행하는 방법이 설명되어 있습니다. 이는 하이퍼파라미터 스위프트 또는 전체 환자 코호트에서 여러 컨트롤러를 비교하는 데 유용합니다.
문서 및 자료
- 환자 파라미터 시트 –
definitions_of_vpatient_parameters.md는 각 가상 환자의 생리학적 상수 목록을 포함합니다. - 위험 지수 – 기본 보상은 Diabetes Technology & Therapeutics (2008)에 기재된 임상 위험 지표를 사용합니다.
- 예제 – 리포지토리에는 Gym, Gymnasium, PID 제어, 오프라인 분석용으로 바로 실행 가능한 스크립트가
examples/디렉토리에 포함되어 있습니다. - 인용 – 결과를 발표할 경우 다음을 인용하세요: Jinyu Xie. Simglucose v0.2.1 (2018). https://github.com/jxx123/simglucose.
누가 사용할 수 있나요
- 강화학습 연구자 – 인슐린 투여 에이전트 개발.
- 생체의공학자 – 임상 시험 전에 제어 알고리즘 프로토타이핑.
- 교육자 – 교실에서 폐쇄 루프 포도당 조절을 시연.
언급된 제한 사항
- macOS에서는
animate와parallel를 동시에True로 설정할 수 없습니다 (Matplotlib의 스레드 안전성 문제). - Windows 지원은 테스트되지 않았습니다.
- 이 패키지는 연구용이며, 의료 기기로 사용할 수 없습니다.
커뮤니티
GitHub 이슈 트래커를 통해 이슈와 풀 리퀘스트를 환영합니다. 기여 가이드라인은 scikit-learn 모델을 따릅니다 (포크 → 브랜치 → PR).
결론 – simglucose는 표준 RL 툴체인에 직접 연결 가능한 현실적이고 오픈소스의 T1-D 시뮬레이션 환경을 제공하여, 포도당 조절 알고리즘의 빠른 개발과 벤치마킹을 가능하게 합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트