HugoHE commited on
Commit
1690882
·
1 Parent(s): cc2c486

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -13
app.py CHANGED
@@ -18,7 +18,7 @@ def gen_pulsive_noise(count, min_val, max_val):
18
  pulse = random.randint(min_val, max_val)
19
 
20
  return pulse
21
- def simulation(input_noise, output_noise, min, max, std, mean, min_pul, max_pul, kp, ki, kd, show_original):
22
  vrs = {}
23
  fmu = 'Pharmacokinetics_4_comportmental_model_PI_ref_FMU_base4_OAAS_lnx.fmu'
24
  model_description = read_model_description(fmu)
@@ -60,6 +60,11 @@ def simulation(input_noise, output_noise, min, max, std, mean, min_pul, max_pul,
60
  i = 0
61
  target = 30
62
  last_error = 0
 
 
 
 
 
63
  # simulation loop
64
  while time < stop_time:
65
 
@@ -75,6 +80,9 @@ def simulation(input_noise, output_noise, min, max, std, mean, min_pul, max_pul,
75
  bis = fmu.getReal([int(vr_output)])[0] if time > step_size else 95.6
76
  if input_noise:
77
  bis += add_noise(min, max, std, mean)
 
 
 
78
  p = bis - target
79
  i = i + p
80
  d = p - last_error
@@ -100,9 +108,7 @@ def simulation(input_noise, output_noise, min, max, std, mean, min_pul, max_pul,
100
  fmu.freeInstance()
101
  shutil.rmtree(unzipdir, ignore_errors=True)
102
  result = np.array(rows, dtype=np.dtype([('time', np.float64), ('BIS', np.float64), ('Infusion', np.float64)]))
103
- result_baseline = np.load("result.npy")
104
  df = pd.DataFrame(result)
105
- df_original = pd.DataFrame(result_baseline)
106
  trace1 = go.Scatter(x=df.index, y=df['BIS'], mode='lines', name='BIS')
107
  fig1 = go.Figure(data=trace1)
108
  fig1.update_layout(height=400, width=1200, title_text="BIS evolution")
@@ -111,8 +117,12 @@ def simulation(input_noise, output_noise, min, max, std, mean, min_pul, max_pul,
111
  trace2 = go.Scatter(x=df.index, y=df['Infusion'], mode='lines', name='Infusion')
112
  fig2 = go.Figure(data=trace2)
113
  fig2.update_layout(height=400, width=1200, title_text="Infusion evolution")
114
-
115
  if show_original:
 
 
 
 
 
116
  fig1.add_trace(go.Scatter(x=df_original.index, y=df_original['BIS'], mode='lines', name='BIS original', line=dict(color="red"), opacity=0.5))
117
  fig2.add_trace(go.Scatter(x=df_original.index, y=df_original['Infusion'], mode='lines', name='Infusion original', line=dict(color="red"), opacity=0.5))
118
 
@@ -123,7 +133,7 @@ with gr.Blocks() as demo:
123
  with gr.Column(scale=1):
124
  gr.Markdown("**BIS noise**")
125
  input_noise = gr.inputs.Checkbox(label="Add Gaussian noise")
126
- with gr.Accordion("noise range"):
127
  min_gaussian = gr.inputs.Slider(minimum=0, maximum=20, step=1, default=5, label="noise min")
128
  max_gaussian = gr.inputs.Slider(minimum=0, maximum=20, step=1, default=10, label="noise max")
129
  std_gaussian = gr.inputs.Slider(minimum=0, maximum=10, step=1, default=2, label="noise standard deviation")
@@ -131,18 +141,22 @@ with gr.Blocks() as demo:
131
  gr.Markdown("**Infusion noise**")
132
  with gr.Blocks():
133
  output_noise = gr.inputs.Checkbox(label="Add Pulsive noise")
134
- with gr.Accordion("noise range"):
135
  min_pul = gr.inputs.Slider(minimum=0, maximum=50, step=1, default=50, label="noise min")
136
  max_pul = gr.inputs.Slider(minimum=0, maximum=150, step=1, default=150, label="noise max")
137
- gr.Markdown("**PID controller paramters**")
138
- with gr.Blocks():
139
- kp_slider = gr.inputs.Slider(minimum=0, maximum=20, default=4, label="kp")
140
- ki_slider = gr.inputs.Slider(minimum=0, maximum=1, default=0.01, label="ki")
141
- kd_slider = gr.inputs.Slider(minimum=0, maximum=200, default=120, label="kd")
142
- show_original = gr.inputs.Checkbox(label="Show original")
 
 
 
143
  button = gr.Button("Simulate")
 
144
  with gr.Column(scale=5):
145
  plot1 = gr.Plot(label="BIS evolution")
146
  plot2 = gr.Plot(label="Infusion evolution")
147
- button.click(simulation, inputs=[input_noise, output_noise, min_gaussian, max_gaussian, std_gaussian, mean_gaussian, min_pul, max_pul, kp_slider, ki_slider, kd_slider, show_original], outputs=[plot1, plot2])
148
  demo.launch()
 
18
  pulse = random.randint(min_val, max_val)
19
 
20
  return pulse
21
+ def simulation(input_noise, output_noise, min, max, std, mean, min_pul, max_pul, kd, show_original, derivative_control, moving_average, window_size):
22
  vrs = {}
23
  fmu = 'Pharmacokinetics_4_comportmental_model_PI_ref_FMU_base4_OAAS_lnx.fmu'
24
  model_description = read_model_description(fmu)
 
60
  i = 0
61
  target = 30
62
  last_error = 0
63
+ last_bis = 0
64
+ bis_history = []
65
+ kp = 4
66
+ ki = 0.01
67
+ kd = kd if derivative_control else 0
68
  # simulation loop
69
  while time < stop_time:
70
 
 
80
  bis = fmu.getReal([int(vr_output)])[0] if time > step_size else 95.6
81
  if input_noise:
82
  bis += add_noise(min, max, std, mean)
83
+ if moving_average:
84
+ bis_history.append(bis)
85
+ bis = bis if time <= window_size else np.mean(bis_history[-window_size:])
86
  p = bis - target
87
  i = i + p
88
  d = p - last_error
 
108
  fmu.freeInstance()
109
  shutil.rmtree(unzipdir, ignore_errors=True)
110
  result = np.array(rows, dtype=np.dtype([('time', np.float64), ('BIS', np.float64), ('Infusion', np.float64)]))
 
111
  df = pd.DataFrame(result)
 
112
  trace1 = go.Scatter(x=df.index, y=df['BIS'], mode='lines', name='BIS')
113
  fig1 = go.Figure(data=trace1)
114
  fig1.update_layout(height=400, width=1200, title_text="BIS evolution")
 
117
  trace2 = go.Scatter(x=df.index, y=df['Infusion'], mode='lines', name='Infusion')
118
  fig2 = go.Figure(data=trace2)
119
  fig2.update_layout(height=400, width=1200, title_text="Infusion evolution")
 
120
  if show_original:
121
+ if input_noise:
122
+ result_baseline = np.load("result_gaussian.npy")
123
+ elif output_noise:
124
+ result_baseline = np.load("result_pulse.npy")
125
+ df_original = pd.DataFrame(result_baseline)
126
  fig1.add_trace(go.Scatter(x=df_original.index, y=df_original['BIS'], mode='lines', name='BIS original', line=dict(color="red"), opacity=0.5))
127
  fig2.add_trace(go.Scatter(x=df_original.index, y=df_original['Infusion'], mode='lines', name='Infusion original', line=dict(color="red"), opacity=0.5))
128
 
 
133
  with gr.Column(scale=1):
134
  gr.Markdown("**BIS noise**")
135
  input_noise = gr.inputs.Checkbox(label="Add Gaussian noise")
136
+ with gr.Accordion("noise range", default_open=False):
137
  min_gaussian = gr.inputs.Slider(minimum=0, maximum=20, step=1, default=5, label="noise min")
138
  max_gaussian = gr.inputs.Slider(minimum=0, maximum=20, step=1, default=10, label="noise max")
139
  std_gaussian = gr.inputs.Slider(minimum=0, maximum=10, step=1, default=2, label="noise standard deviation")
 
141
  gr.Markdown("**Infusion noise**")
142
  with gr.Blocks():
143
  output_noise = gr.inputs.Checkbox(label="Add Pulsive noise")
144
+ with gr.Accordion("noise range", default_open=False):
145
  min_pul = gr.inputs.Slider(minimum=0, maximum=50, step=1, default=50, label="noise min")
146
  max_pul = gr.inputs.Slider(minimum=0, maximum=150, step=1, default=150, label="noise max")
147
+ gr.Markdown("**Advanced control**")
148
+ with gr.Tab("Smoothing algorithm"):
149
+ with gr.Row():
150
+ moving_average = gr.inputs.Checkbox(label="Moving average filter")
151
+ window_size = gr.inputs.Slider(minimum=0, maximum=200, default=0, label="Window size")
152
+ with gr.Tab("Derivative control"):
153
+ with gr.Row():
154
+ derivative_control = gr.inputs.Checkbox(label="Adding derivative term to PI controller")
155
+ kd_slider = gr.inputs.Slider(minimum=0, maximum=200, default=0, label="kd")
156
  button = gr.Button("Simulate")
157
+ show_original = gr.inputs.Checkbox(label="Show original")
158
  with gr.Column(scale=5):
159
  plot1 = gr.Plot(label="BIS evolution")
160
  plot2 = gr.Plot(label="Infusion evolution")
161
+ button.click(simulation, inputs=[input_noise, output_noise, min_gaussian, max_gaussian, std_gaussian, mean_gaussian, min_pul, max_pul, kd_slider, show_original, derivative_control, moving_average, window_size], outputs=[plot1, plot2])
162
  demo.launch()