def run_cegar_naive(nnet_reader_object, which_acas_output): """ naive algorithm abstracts all the way and only then starts to refine back """ network = Network(nnet_reader_object, which_acas_output) network.fully_activate_the_entire_network() # merge all arnodes while True: try: layer_number, table_number, list_of_keys_of_arnodes_to_merge = network.decide_best_arnodes_to_merge( ) network.merge_list_of_arnodes(layer_number, table_number, list_of_keys_of_arnodes_to_merge) except: break while True: result = network.check_if_network_is_sat_or_unsat() if result == network.CODE_FOR_SAT: print('SAT') break elif result == network.CODE_FOR_UNSAT: print('UNSAT') break # we have a spurious counter example layer_number, table_number, key_in_table, partition_of_arnode_inner_nodes = network.decide_best_arnodes_to_merge( ) network.split_arnode(layer_number, table_number, key_in_table, partition_of_arnode_inner_nodes)
def run_cegar_guy_way(nnet_reader_object, which_acas_output, number_of_layers_to_transfer_into_cegar_layer): # merge all arnodes in all the layers the user wishes to apply cegar too network = Network(nnet_reader_object, which_acas_output) network.preprocess_more_layers( number_of_layers_to_transfer_into_cegar_layer + 1) network.forward_activate_more_layers( number_of_layers_to_transfer_into_cegar_layer + 1) network.fully_activate_more_layers( number_of_layers_to_transfer_into_cegar_layer) while True: try: layer_number, table_number, list_of_keys_of_arnodes_to_merge = network.decide_best_arnodes_to_merge( ) network.merge_list_of_arnodes(layer_number, table_number, list_of_keys_of_arnodes_to_merge) except: break while True: result = network.check_if_network_is_sat_or_unsat() if result == network.CODE_FOR_SAT: print('SAT') break elif result == network.CODE_FOR_UNSAT: print('UNSAT') break # we have a spurious counter example layer_number, table_number, key_in_table, partition_of_arnode_inner_nodes = network.decide_best_arnodes_to_merge( ) network.split_arnode(layer_number, table_number, key_in_table, partition_of_arnode_inner_nodes)