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(制御変動グリッド分析)、ゾーン統計、リスク指数要約を自動的にプロット可能。
  • コマンドライン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では、animateparallel を同時に True にできない(Matplotlibのスレッドセーフ性の問題)。
  • Windowsサポートは未検証。
  • 本パッケージは研究目的のみ。医療機器ではない。

コミュニティ

GitHubのイシュー追跡システムを通じて、イシューとプルリクエストを歓迎します。貢献ガイドラインはscikit-learnモデルに準拠(フォーク → ブランチ → PR)。


結論simglucose は、標準的なRLツールチェーンに直接接続可能な現実的でオープンソースのT1-Dシミュレーション環境を提供し、グルコース制御アルゴリズムの迅速な開発とベンチマークを可能にします。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト