C2MV commited on
Commit
3f4fc4a
1 Parent(s): e91dc2c

Update interface.py

Browse files
Files changed (1) hide show
  1. interface.py +42 -27
interface.py CHANGED
@@ -131,7 +131,7 @@ class BioprocessModel:
131
  for param in params:
132
  if param not in used_params:
133
  raise ValueError(f"El parámetro '{param}' no se usa en la ecuación '{equation}'.")
134
-
135
  if model_type == 'biomass':
136
  # Biomasa como función de tiempo y parámetros
137
  func_expr = expr
@@ -177,7 +177,10 @@ class BioprocessModel:
177
  # Definir la función de ajuste (asegurarse de que toma los parámetros correctamente)
178
  def fit_func(t, *args):
179
  try:
180
- return func(t, *args)
 
 
 
181
  except Exception as e:
182
  print(f"Error in fit_func: {e}")
183
  raise
@@ -185,12 +188,16 @@ class BioprocessModel:
185
  # Depuración: Verificar el número de parámetros que se espera ajustar
186
  print(f"Number of parameters to fit: {len(params)}")
187
 
 
 
 
 
188
  try:
189
  # Verifica que curve_fit puede recibir la función correctamente
190
- print(f"Calling curve_fit with time: {time}, data: {data}, bounds: {bounds}")
191
 
192
- # Intentar ajustar el modelo usando curve_fit
193
- popt, _ = curve_fit(fit_func, time, data, bounds=bounds, maxfev=10000)
194
  print(f"Optimal parameters found: {popt}")
195
 
196
  # Guardar los parámetros ajustados en el modelo
@@ -212,28 +219,36 @@ class BioprocessModel:
212
  line_style='-', marker_style='o'):
213
  sns.set_style(style)
214
 
215
- fig, ax1 = plt.subplots(figsize=(10, 7))
216
- ax1.set_xlabel('Tiempo')
217
- ax1.set_ylabel('Biomasa', color=line_color)
218
-
219
- ax1.plot(time, biomass, marker=marker_style, linestyle='', color=point_color, label='Biomasa (Datos)')
220
- ax1.plot(time, y_pred_biomass, linestyle=line_style, color=line_color, label='Biomasa (Modelo)')
221
- ax1.tick_params(axis='y', labelcolor=line_color)
222
-
223
- ax2 = ax1.twinx()
224
- ax2.set_ylabel('Sustrato', color='green')
225
- ax2.plot(time, substrate, marker=marker_style, linestyle='', color='green', label='Sustrato (Datos)')
226
- ax2.plot(time, y_pred_substrate, linestyle=line_style, color='green', label='Sustrato (Modelo)')
227
- ax2.tick_params(axis='y', labelcolor='green')
228
-
229
- ax3 = ax1.twinx()
230
- ax3.spines["right"].set_position(("axes", 1.1))
231
- ax3.set_ylabel('Producto', color='red')
232
- ax3.plot(time, product, marker=marker_style, linestyle='', color='red', label='Producto (Datos)')
233
- ax3.plot(time, y_pred_product, linestyle=line_style, color='red', label='Producto (Modelo)')
234
- ax3.tick_params(axis='y', labelcolor='red')
235
-
236
- fig.tight_layout()
 
 
 
 
 
 
 
 
237
  return fig
238
 
239
  ###############################
 
131
  for param in params:
132
  if param not in used_params:
133
  raise ValueError(f"El parámetro '{param}' no se usa en la ecuación '{equation}'.")
134
+
135
  if model_type == 'biomass':
136
  # Biomasa como función de tiempo y parámetros
137
  func_expr = expr
 
177
  # Definir la función de ajuste (asegurarse de que toma los parámetros correctamente)
178
  def fit_func(t, *args):
179
  try:
180
+ y = func(t, *args)
181
+ print(f"fit_func called with args: {args}")
182
+ print(f"y_pred: {y}")
183
+ return y
184
  except Exception as e:
185
  print(f"Error in fit_func: {e}")
186
  raise
 
188
  # Depuración: Verificar el número de parámetros que se espera ajustar
189
  print(f"Number of parameters to fit: {len(params)}")
190
 
191
+ # Definir una estimación inicial para los parámetros
192
+ p0 = [1.0] * len(params) # Puedes ajustar estos valores según sea necesario
193
+ print(f"Initial parameter guesses (p0): {p0}")
194
+
195
  try:
196
  # Verifica que curve_fit puede recibir la función correctamente
197
+ print(f"Calling curve_fit with time: {time}, data: {data}, bounds: {bounds}, p0: {p0}")
198
 
199
+ # Intentar ajustar el modelo usando curve_fit con p0
200
+ popt, _ = curve_fit(fit_func, time, data, p0=p0, bounds=bounds, maxfev=10000)
201
  print(f"Optimal parameters found: {popt}")
202
 
203
  # Guardar los parámetros ajustados en el modelo
 
219
  line_style='-', marker_style='o'):
220
  sns.set_style(style)
221
 
222
+ fig, axs = plt.subplots(3, 1, figsize=(10, 15))
223
+
224
+ # Gráfica de Biomasa
225
+ axs[0].plot(time, biomass, 'o', label='Datos de Biomasa')
226
+ for i, result in enumerate(biomass_results):
227
+ axs[0].plot(time, result['y_pred'], '-', label=f'Modelo de Biomasa {i+1}')
228
+ axs[0].set_xlabel('Tiempo')
229
+ axs[0].set_ylabel('Biomasa')
230
+ if show_legend:
231
+ axs[0].legend(loc=legend_position)
232
+
233
+ # Gráfica de Sustrato
234
+ axs[1].plot(time, substrate, 'o', label='Datos de Sustrato')
235
+ for i, result in enumerate(substrate_results):
236
+ axs[1].plot(time, result['y_pred'], '-', label=f'Modelo de Sustrato {i+1}')
237
+ axs[1].set_xlabel('Tiempo')
238
+ axs[1].set_ylabel('Sustrato')
239
+ if show_legend:
240
+ axs[1].legend(loc=legend_position)
241
+
242
+ # Gráfica de Producto
243
+ axs[2].plot(time, product, 'o', label='Datos de Producto')
244
+ for i, result in enumerate(product_results):
245
+ axs[2].plot(time, result['y_pred'], '-', label=f'Modelo de Producto {i+1}')
246
+ axs[2].set_xlabel('Tiempo')
247
+ axs[2].set_ylabel('Producto')
248
+ if show_legend:
249
+ axs[2].legend(loc=legend_position)
250
+
251
+ plt.tight_layout()
252
  return fig
253
 
254
  ###############################