def build_pwa_model(AA, abs_obj, sp, tol, include_err, model_type): """build_pwa_model Builds both dft and rel models Parameters ---------- AA : AA abs_obj : Either abs_states (for dft models) or relations [tuple(abs_state_src, abs_state_target)] for rel model sp : system params tol : modeling error tolerance include_err : include error in determining next state x' = x +- errror """ dt = AA.plant_abs.delta_t step_sim = simsys.get_step_simulator(sp.controller_sim, sp.plant_sim, dt) #abs_state_models = {} modelers = { 'dft': (pwa.PWA, abs_state_affine_models), 'rel': (rel.PWARelational, abs_rel_affine_models), } M, model = modelers[model_type] pwa_model = M() for a in abs_obj: print('modeling: {}'.format(a)) for sub_model in model(a, AA, step_sim, tol, sp, include_err): if sub_model is not None: pwa_model.add(sub_model) #abs_state_models[abs_state] = sub_model return pwa_model
def build_pwa_dt_model(AA, abs_states, sp, sys_sim): """build_pwa_dt_model Parameters ---------- AA : AA is abs_states : abs_states is sp : sp is sys_sim : sys_sim is Returns ------- Notes ------ Builds a model with time as a discrete variable. i.e., models the behaviors resulting from several chosen time steps and not only the one specified in .tst as delta_t. """ dt_steps = [0.01, 0.1, AA.plant_abs.delta_t] err.warn('using time steps: {}'.format(dt_steps)) step_sims = [simsys.get_step_simulator(sp.controller_sim, sp.plant_sim, dt) for dt in dt_steps] pwa_models = {} for dt, step_sim in zip(dt_steps, step_sims): pwa_model = pwa.PWA() for abs_state in abs_states: sub_model = affine_model(abs_state, AA, sp, step_sim) pwa_model.add(sub_model) pwa_models[dt] = pwa_model return pwa_models