コード例 #1
0
ファイル: dynamics.py プロジェクト: kntrinoue/biomass
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
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
ファイル: dynamics.py プロジェクト: kntrinoue/biomass
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)
コード例 #5
0
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