def update_param(paramset, x, y0): search_idx = search_parameter_index() if os.path.isfile('./out/%d/generation.npy' % (paramset)): best_generation = np.load('./out/%d/generation.npy' % (paramset)) best_indiv = np.load('./out/%d/fit_param%d.npy' % (paramset, int(best_generation))) for i, j in enumerate(search_idx[0]): x[j] = best_indiv[i] for i, j in enumerate(search_idx[1]): y0[j] = best_indiv[i + len(search_idx[0])] return x, y0
def optimize(nth_paramset): np.random.seed(time.time_ns() * nth_paramset % 2**32) search_idx = search_parameter_index() search_region = get_search_region() max_generation = 10000 n_population = int(5 * search_region.shape[1]) n_children = 50 n_gene = search_region.shape[1] allowable_error = 0.35 (best_indiv, best_fitness) = ga_v2(nth_paramset, max_generation, n_population, n_children, n_gene, allowable_error, search_idx, search_region)
def optimize_continue(nth_paramset): np.random.seed(time.time_ns() * nth_paramset % 2**32) search_idx = search_parameter_index() search_region = get_search_region() max_generation = 10000 n_population = int(5 * search_region.shape[1]) n_children = 50 n_gene = search_region.shape[1] allowable_error = 0.35 p0_bounds = [0.1, 10.0] # [lower_bounds, upper bounds] (best_indiv, best_fitness) = ga_v2_continue(nth_paramset, max_generation, n_population, n_children, n_gene, allowable_error, search_idx, search_region, p0_bounds)
def save_param_range(n_file, x, y0, portrait): search_idx = search_parameter_index() search_param_matrix = np.empty( (len(n_file), len(search_idx[0]) + len(search_idx[1]))) for k, nth_paramset in enumerate(n_file): if os.path.isfile('./out/%d/generation.npy' % (nth_paramset)): best_generation = np.load('./out/%d/generation.npy' % (nth_paramset)) best_indiv = np.load('./out/%d/fit_param%d.npy' % (nth_paramset, int(best_generation))) else: best_indiv = np.empty(len(search_idx[0]) + len(search_idx[1])) for i, j in enumerate(search_idx[0]): best_indiv[i] = x[j] for i, j in enumerate(search_idx[1]): best_indiv[i + len(search_idx[0])] = y0[j] search_param_matrix[k, :] = best_indiv plot_func.param_range(search_idx, search_param_matrix, portrait)
def analyze_sensitivity(metric, nonzero_idx): """Compute sensitivity coefficients Parameters ---------- metric: str - 'amplitude': The maximum value. - 'duration': The time it takes to decline below 10% of its maximum. - 'integral': The integral of concentration over the observation time. nonzero_idx: list for i in nonzero_idx: y0[i] != 0.0 Returns ------- sensitivity_coefficients: numpy array """ sim = NumericalSimulation() rate = 1.01 # 1% change epsilon = 1e-9 # If |M - M*| < epsilon, sensitivity_coefficient = 0 x = f_params() y0 = initial_values() nonzero_idx = [] for i, val in enumerate(y0): if val != 0.0: nonzero_idx.append(i) n_file = [] fitparam_files = os.listdir('./out') for file in fitparam_files: if re.match(r'\d', file): n_file.append(int(file)) signaling_metric = np.full((len(n_file), len(nonzero_idx) + 1, len(observables), len(sim.conditions)), np.nan) search_idx = search_parameter_index() for i, nth_paramset in enumerate(n_file): if os.path.isfile('./out/%d/generation.npy' % (nth_paramset)): best_generation = np.load('./out/%d/generation.npy' % (nth_paramset)) best_indiv = np.load('./out/%d/fit_param%d.npy' % (nth_paramset, int(best_generation))) for m, n in enumerate(search_idx[0]): x[n] = best_indiv[m] for m, n in enumerate(search_idx[1]): y0[n] = best_indiv[m + len(search_idx[0])] copy_y0 = y0[:] for j, idx in enumerate(nonzero_idx): y0 = copy_y0[:] y0[idx] = copy_y0[idx] * rate if sim.simulate(x, y0) is None: for k, _ in enumerate(observables): for l, _ in enumerate(sim.conditions): if metric == 'amplitude': signaling_metric[i, j, k, l] = np.max( sim.simulations[k, :, l]) elif metric == 'duration': signaling_metric[i, j, k, l] = get_duration( sim.simulations[k, :, l]) elif metric == 'integral': signaling_metric[i, j, k, l] = simps( sim.simulations[k, :, l]) else: raise ValueError( "metric ∈ {'amplitude', 'duration', 'integral'}" ) sys.stdout.write('\r%d / %d' % (i * len(nonzero_idx) + j + 1, len(n_file) * len(nonzero_idx))) y0 = copy_y0[:] if sim.simulate(x, y0) is None: for k, _ in enumerate(observables): for l, _ in enumerate(sim.conditions): if metric == 'amplitude': signaling_metric[i, -1, k, l] = np.max(sim.simulations[k, :, l]) elif metric == 'duration': signaling_metric[i, -1, k, l] = get_duration( sim.simulations[k, :, l]) elif metric == 'integral': signaling_metric[i, -1, k, l] = simps(sim.simulations[k, :, l]) else: sys.exit() sensitivity_coefficients = np.empty( (len(n_file), len(nonzero_idx), len(observables), len(sim.conditions))) for i, _ in enumerate(n_file): for j, _ in enumerate(nonzero_idx): for k, _ in enumerate(observables): for l, _ in enumerate(sim.conditions): if np.isnan(signaling_metric[i, j, k, l]): sensitivity_coefficients[i, j, k, l] = np.nan elif fabs(signaling_metric[i, j, k, l] - signaling_metric[i, -1, k, l]) < epsilon or ( signaling_metric[i, j, k, l] / signaling_metric[i, -1, k, l]) < 0: sensitivity_coefficients[i, j, k, l] = 0.0 else: sensitivity_coefficients[i, j, k, l] = ( log(signaling_metric[i, j, k, l] / signaling_metric[i, -1, k, l]) / log(rate)) return sensitivity_coefficients