Source code for param_study.create

import os
from pathlib import Path
import yaml

from sklearn.model_selection import ParameterSampler
from scipy.stats.distributions import truncnorm, loguniform

import database


[docs]def create_test_case_config(base_config: dict, params: dict, index: int, parameter_study_name: str) -> dict: test_case_config = base_config.copy() test_case_config['test_case'] = str(index) test_case_config['parameter_study_name'] = str(parameter_study_name) test_case_config['ukf']['sigma_alpha'] = float(params['sigma_alpha']) test_case_config['ukf']['P'][0] = float(params['P_initial_pos']) test_case_config['ukf']['P'][1] = float(params['P_initial_pos']) test_case_config['ukf']['P'][2] = float(params['P_initial_v_x']) test_case_config['ukf']['P'][3] = float(params['P_initial_psi']) test_case_config['ukf']['template_Q'][0] = float(params['Q_pos']) test_case_config['ukf']['template_Q'][1] = float(params['Q_pos']) test_case_config['ukf']['template_Q'][2] = float(params['Q_v_x']) test_case_config['ukf']['template_Q'][3] = float(params['Q_psi']) test_case_config['ukf']['minimal_cone_covariance_area'] = float(params['minimal_cone_covariance_area']) test_case_config['local_mapping']['data_association']['chi2_quantile'] = float(params['chi2_quantile']) test_case_config['local_mapping']['fov_gate']['min_distance'] = float(params['fov_min_distance']) test_case_config['local_mapping']['fov_gate']['max_distance'] = float(params['fov_max_distance']) test_case_config['local_mapping']['fov_gate']['angle'] = float(params['fov_angle']) test_case_config['local_mapping']['R_azimuth'] = float(params['R_azimuth']) test_case_config['local_mapping']['R_distance_factor'] = float(params['R_distance_factor']) test_case_config['local_mapping']['R_distance_offset'] = float(params['R_distance_offset']) test_case_config['novatel_position']['R_scaling'] = float(params['gps_heading_R_scaling']) test_case_config['novatel_heading']['R_scaling'] = float(params['gps_position_R_scaling']) test_case_config['wheelspeed']['R'] = float(params['wheelspeed_R']) return test_case_config
[docs]def create_test_case_configs(base_config: dict, param_sampler: ParameterSampler, parameter_study_name: str): Path(f'{os.path.abspath(os.path.dirname(__file__))}/../../param_study' f'/{parameter_study_name}/configs').mkdir(parents=True, exist_ok=True) session = database.Session() for test_case_i, params in enumerate(list(param_sampler)): Path(f'{os.path.abspath(os.path.dirname(__file__))}/../../' f'param_study/{parameter_study_name}/{test_case_i}').mkdir(parents=True, exist_ok=True) with open(f'{os.path.abspath(os.path.dirname(__file__))}/../../param_study/' f'{parameter_study_name}/configs/test_case_{test_case_i}.yaml', 'w') as stream: yaml.dump(create_test_case_config(base_config=base_config, params=params, index=test_case_i, parameter_study_name=parameter_study_name), stream) session.add(database.TestCase.create(parameter_study_name, test_case_i)) session.commit()
[docs]def fuck_you_scipy(a: float, b: float, loc: float, scale: float): return truncnorm(a=((a - loc) / scale), b=(b - loc) / scale, loc=loc, scale=scale)
if __name__ == '__main__': parameter_study_name = 'test' with open(f'{os.path.abspath(os.path.dirname(__file__))}/../../config/slam.yaml', 'r') as stream: base_config = yaml.safe_load(stream) param_distributions = [ { 'sigma_alpha': loguniform(0.001, 0.3), 'P_initial_pos': fuck_you_scipy(0.01, 4, 0.1, 0.3), 'P_initial_v_x': fuck_you_scipy(0.01, 4, 0.2, 0.3), 'P_initial_psi': fuck_you_scipy(1, 100, 50, 40), 'Q_pos': fuck_you_scipy(0.1, 4, 1, 1), 'Q_v_x': fuck_you_scipy(0.1, 15, 5, 4), 'Q_psi': fuck_you_scipy(1, 50, 15, 10), 'minimal_cone_covariance_area': fuck_you_scipy(0.1, 1.5, 0.3, 0.5), 'chi2_quantile': fuck_you_scipy(0.5, 0.95, 0.7, 0.2), 'fov_min_distance': fuck_you_scipy(0.5, 1.5, 1, 0.3), 'fov_max_distance': fuck_you_scipy(9, 15, 12, 2), 'fov_angle': fuck_you_scipy(80, 120, 100, 15), 'R_azimuth': fuck_you_scipy(3, 20, 10, 5), 'R_distance_factor': fuck_you_scipy(0.1, 0.5, 0.15, 0.2), 'R_distance_offset': fuck_you_scipy(0.1, 0.5, 0.15, 0.2), 'gps_heading_R_scaling': fuck_you_scipy(0.7, 2, 1, 0.3), 'gps_position_R_scaling': fuck_you_scipy(0.7, 2, 1, 0.3), 'wheelspeed_R': fuck_you_scipy(5, 100, 50, 30) } ] param_sampler = ParameterSampler(param_distributions, n_iter=2000, random_state=42) create_test_case_configs(base_config=base_config, param_sampler=param_sampler, parameter_study_name=parameter_study_name)