Spaces:
Runtime error
Runtime error
Update app.py
Browse files
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,
|
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("**
|
138 |
-
with gr.
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
|
|
|
|
|
|
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,
|
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()
|