max_I = np.max(states['I']['result']) final_R = states['R']['result'][-1] final_S = states['S']['result'][-1] print("max_I", max_I) print("final_R", final_R) print("final_S", final_S) mI_actual = 0.25920385864652234 fR_actual = 0.96616595 fS_actual = 0.03365363 tol = 1e-2 assert (abs(max_I - mI_actual) / mI_actual) < tol assert (abs(final_R - fR_actual) / fR_actual) < tol assert (abs(final_S - fS_actual) / fS_actual) < tol return states, params if __name__ == '__main__': import matplotlib.pyplot as plt test_model_partials() states, params = test_baseline_run() fig = make_plots(states, params) fig.suptitle('Baseline SEIR') plt.show()
t_initial_bounds, t_duration_bounds, fix_initial=True, fix_duration=True) p.driver = om.pyOptSparseDriver() p.driver.options['optimizer'] = 'IPOPT' p.driver.options['print_results'] = False p.driver.opt_settings['hessian_approximation'] = 'limited-memory' # p.driver.opt_settings['mu_init'] = 1.0E-2 p.driver.opt_settings['nlp_scaling_method'] = 'gradient-based' p.driver.opt_settings['print_level'] = 5 p.driver.opt_settings['linear_solver'] = 'mumps' p.driver.opt_settings['max_iter'] = 500 phase0.add_boundary_constraint('I', loc='final', upper=0.01, scaler=1.0) #phase0.add_control('sigma', targets=['sigma'], lower=0.0, upper=beta, ref=beta) #phase0.add_objective('max_I', scaler=1e5) phase0.add_objective('time', loc='final', scaler=1.0) phase0.add_timeseries_output('theta') setup_and_run_phase(states, p, phase0, traj, 200.0) print(states['I']['result'][-1]) make_plots(states, params) plt.show()