def refine_init( current_abs, init_cons_list, final_cons, initial_discrete_state, initial_controller_state, plant_sim, controller_sim, ci, pi, sampler, #plot, init_cons, original_plant_cons_list, MAX_ITER, sample_ci, pi_ref, ci_ref, opts): i = 1 while i <= MAX_ITER: print('iteration:', i) # TODO: temp function ss.init() (initial_state_set, final_state_set, is_final) = \ SS.init(current_abs, init_cons_list, final_cons, initial_discrete_state, initial_controller_state) system_params = SystemParams( initial_state_set, final_state_set, is_final, plant_sim, controller_sim, ci, pi, sampler, init_cons, final_cons, pi_ref, ci_ref ) SS.discover(current_abs, system_params) opts.plotting.show() if not system_params.final_state_set: print('did not find any abstract counter example!', file=SYS.stderr) return False print('analyzing graph...') pi_ref.cleanup() if ci_ref is not None: ci_ref.cleanup() # creates a new pi_ref, ci_ref (promising_initial_states, ci_seq_list, pi_seq_list) = current_abs.get_initial_states_from_error_paths(initial_state_set, final_state_set, pi_ref, ci_ref, pi, ci, opts.max_paths) # ##!!##logger.debug('promising initial states: {}'.format(promising_initial_states)) print('begin random testing!') #POFF # if plot: # f2 = plt.figure() # f2.suptitle('random testing') print(len(promising_initial_states), len(ci_seq_list), len(pi_seq_list)) #U.pause() # TODO: ugly...should it be another function? # Read the TODO above the function definition for more details (valid_promising_initial_state_list, pi_seq_list, ci_seq_list) = SS.filter_invalid_abs_states( promising_initial_states, pi_seq_list, ci_seq_list, current_abs, init_cons) print(len(valid_promising_initial_state_list), len(ci_seq_list), len(pi_seq_list)) #U.pause() if valid_promising_initial_state_list == []: print('no valid sample found during random testing. STOP', file=SYS.stderr) return False res = RT.random_test( current_abs, system_params, valid_promising_initial_state_list, ci_seq_list, pi_seq_list, init_cons, initial_discrete_state, initial_controller_state, sample_ci ) opts.plotting.show() if res: print('Concretized', file=SYS.stderr) fp.append_data(opts.op_fname, '{0} Concrete Traces({2}) for: {1} {0}\n'. format('='*20, opts.sys_path, len(res))) fp.append_data(opts.op_fname, '{}\n'.format(res)) return True (current_abs, init_cons_list) = SS.refine_init_based( current_abs, promising_initial_states, # should it not be valid_promising_initial_state_list? original_plant_cons_list)#, pi_ref, ci_ref) pi_ref.refine() if ci_ref is not None: ci_ref.refine() i += 1 print('Failed: MAX iterations {} exceeded'.format(MAX_ITER), file=SYS.stderr)
def refine_init( current_abs, init_cons_list, final_cons, initial_discrete_state, initial_controller_state, plant_sim, controller_sim, ci, pi, sampler, #plot, init_cons, original_plant_cons_list, MAX_ITER, sample_ci, pi_ref, ci_ref, ): i = 1 while i <= MAX_ITER: print('iteration:', i) # TODO: temp function ss.init() (initial_state_set, is_final) = \ SS.init(current_abs, init_cons_list, final_cons, initial_discrete_state, initial_controller_state) logger.debug('initial state set:\n{}'.format('\n'.join([ str(current_abs.plant_abs.get_ival_cons_abs_state(s0.ps)) for s0 in initial_state_set ]))) system_params = SystemParams( #initial_state_set, #final_state_set, is_final, plant_sim, controller_sim, ci, pi, sampler, init_cons, final_cons, pi_ref, ci_ref) final_state_set = SS.discover(current_abs, system_params, initial_state_set) globalopts.opts.plotting.show() if not final_state_set: print('did not find any abstract counter example!', file=SYS.stderr) return False print('analyzing graph...') pi_ref.cleanup() if ci_ref is not None: ci_ref.cleanup() # creates a new pi_ref, ci_ref (promising_initial_states, ci_seq_list, pi_seq_list) = current_abs.get_initial_states_from_error_paths( initial_state_set, final_state_set, pi_ref, ci_ref, pi, ci, globalopts.opts.max_paths) # ##!!##logger.debug('promising initial states: {}'.format(promising_initial_states)) print('begin random testing!') #POFF # if plot: # f2 = plt.figure() # f2.suptitle('random testing') print(len(promising_initial_states), len(ci_seq_list), len(pi_seq_list)) #U.pause() # TODO: ugly...should it be another function? # Read the TODO above the function definition for more details (valid_promising_initial_state_list, pi_seq_list, ci_seq_list) = SS.filter_invalid_abs_states(promising_initial_states, pi_seq_list, ci_seq_list, current_abs, init_cons) print(len(valid_promising_initial_state_list), len(ci_seq_list), len(pi_seq_list)) #U.pause() if valid_promising_initial_state_list == []: print('no valid sample found during random testing. STOP', file=SYS.stderr) return False res = RT.random_test(current_abs, system_params, valid_promising_initial_state_list, ci_seq_list, pi_seq_list, initial_discrete_state, initial_controller_state, sample_ci, return_vio_only=True) globalopts.opts.plotting.show() if res: op_fname = globalopts.opts.construct_path('violations.log') print('Concretized', file=SYS.stderr) #fp.append_data(globalopts.opts.op_fname, fp.append_data( op_fname, '{0} Concrete Traces({2}) for: {1} {0}\n'.format( '=' * 20, globalopts.opts.sys_path, len(res))) traces_string = '\n'.join(str(trace) for trace in res) fp.append_data(op_fname, traces_string) return True (current_abs, init_cons_list) = SS.refine_init_based( current_abs, promising_initial_states, # should it not be valid_promising_initial_state_list? original_plant_cons_list) #, pi_ref, ci_ref) pi_ref.refine() if ci_ref is not None: ci_ref.refine() i += 1 print('Failed: MAX iterations {} exceeded'.format(MAX_ITER), file=SYS.stderr)
def falsify_using_model( current_abs, init_cons_list, final_cons, initial_discrete_state, initial_controller_state, plant_sim, controller_sim, ci, pi, sampler, #plot, init_cons, original_plant_cons_list, MAX_ITER, sample_ci, pi_ref, ci_ref, opts, sys_sim, sys, prop): # TODO: temp function ss.init() (initial_state_set, final_state_set, is_final) = \ SS.init(current_abs, init_cons_list, final_cons, initial_discrete_state, initial_controller_state) system_params = SystemParams( initial_state_set, final_state_set, is_final, plant_sim, controller_sim, ci, pi, sampler, init_cons, final_cons, pi_ref, ci_ref ) SS.discover(current_abs, system_params) opts.plotting.show() if not system_params.final_state_set: print('did not find any abstract counter example!', file=SYS.stderr) return False print('analyzing graph...') # creates a new pi_ref, ci_ref (error_paths, ci_seq_list, pi_seq_list) = current_abs.get_error_paths(initial_state_set, final_state_set, pi_ref, ci_ref, pi, ci, opts.max_paths) print('Refining...') if opts.refine == 'model-dft': import modelrefine as MR MR.refine_dft_model_based(current_abs, error_paths, pi_seq_list, system_params, sys_sim, opts, sys, prop) elif opts.refine == 'model-dmt': import modelrefine as MR MR.refine_dmt_model_based(current_abs, error_paths, pi_seq_list, system_params, sys_sim, opts, sys, prop) elif opts.refine == 'model-dct': import modelrefine as MR raise NotImplementedError elif opts.refine == 'model-rel': import modelrefine as MR MR.refine_rel_model_based(current_abs, error_paths, pi_seq_list, system_params, sys_sim, opts, sys, prop) else: assert(False) exit() print('begin random testing!') print(len(promising_initial_states), len(ci_seq_list), len(pi_seq_list)) (valid_promising_initial_state_list, pi_seq_list, ci_seq_list) = SS.filter_invalid_abs_states(promising_initial_states, pi_seq_list, ci_seq_list, current_abs, init_cons) print(len(valid_promising_initial_state_list), len(ci_seq_list), len(pi_seq_list)) if valid_promising_initial_state_list == []: print('no valid sample found for random testing. STOP', file=SYS.stderr) return False res = RT.random_test( current_abs, system_params, valid_promising_initial_state_list, ci_seq_list, pi_seq_list, init_cons, initial_discrete_state, initial_controller_state, sample_ci ) if res: print('Concretized', file=SYS.stderr) fp.append_data(opts.op_fname, '{0} Concrete Traces({2}) for: {1} {0}\n'. format('='*20, opts.sys_path, len(res))) fp.append_data(opts.op_fname, '{}\n'.format(res)) return True