Exemple #1
0
def write_comparison_csv(file_name: str,
                         data,
                         model: Model,
                         parameters: Union[list, dict],
                         model_dt: float,
                         headers: Optional[List[str]] = None):
    if isinstance(parameters, dict):
        parameters = [parameters]
    x0, y0 = find_t0_data_point(data)
    t_max = find_max_t_data_point(data)[0]
    x_data = [[t, xt] for t, xt, yt in data]
    y_data = [[t, yt] for t, xt, yt in data]
    x_datas = []
    y_datas = []
    for parameters0 in parameters:
        model_data = model.get_data(parameters0, x0, y0, 0, t_max,
                                    math.ceil(t_max / model_dt + 1))
        x_datas.append([[t, xt] for t, xt, yt in model_data])
        y_datas.append([[t, yt] for t, xt, yt in model_data])
    final_data = x_data
    for model_x_data in x_datas:
        final_data = unite_data(final_data, model_x_data)
    final_data = unite_data(final_data, y_data)
    for model_y_data in y_datas:
        final_data = unite_data(final_data, model_y_data)
    new_headers = None if headers is None else [""] + [
        "x " + h for h in headers
    ] + ["y " + h for h in headers]
    export_array_array_to_csv(final_data, file_name, headers=new_headers)
    # write some files that are used to create graphs to visually compare the model
    x0, y0 = find_t0_data_point(datas[i])
    t_max = find_max_t_data_point(datas[i])[0]
    model_data1 = model.get_data(new_parameters1, x0, y0, 0, t_max, math.ceil(t_max/model_graph_dt+1))
    model_data2 = model.get_data(new_parameters2, x0, y0, 0, t_max, math.ceil(t_max/model_graph_dt+1))
    model_prey_data1 = [data_point[:2] for data_point in model_data1]
    model_prey_data2 = [data_point[:2] for data_point in model_data2]
    model_predator_data1 = [[data_point[0], data_point[2]] for data_point in model_data1]
    model_predator_data2 = [[data_point[0], data_point[2]] for data_point in model_data2]

    # write prey graph
    prey_graph_data = [data_point[:2] for data_point in datas[i]]
    prey_graph_data = unite_data(prey_graph_data, model_prey_data1)
    prey_graph_data = unite_data(prey_graph_data, model_prey_data2)
    export_array_array_to_csv(prey_graph_data, output_folder + "/" + single_data_set_prey_graph_format.format(i+1))

    # write predator graph
    predator_graph_data = [[data_point[0], data_point[2]] for data_point in datas[i]]
    predator_graph_data = unite_data(predator_graph_data, model_predator_data1)
    predator_graph_data = unite_data(predator_graph_data, model_predator_data2)
    export_array_array_to_csv(predator_graph_data,
                              output_folder + "/" + single_data_set_predator_graph_format.format(i+1))

# write the error graph file
single_data_errors_data = [[i] + [single_data_errors[j][i] for j in range(2*len(data_file_names))]
                           for i in range(single_data_set_num_steps+1)]
export_array_array_to_csv(single_data_errors_data, output_folder + "/" + single_data_set_errors_out)

# run both the normal and modified gradient descent algorithms on all datasets together
new_parameters1 = find_minimal_parameters(datas, model, initial_parameters, epsilon1, step_size1,