def saampling_umda_worlds(literal, yes_prob_vector, no_prob_vector, quantity, bn): global uniquePrograms, uniquesWorlds print("Generating words...") generated_worlds = generate_population(yes_prob_vector, no_prob_vector, quantity) print("OK\n") bar = IncrementalBar("Analyzing generated worlds...", max=len(generated_worlds)) for world in generated_worlds: worldAsTuple = tuple(world) if (not worldAsTuple in uniquesWorlds): uniquesWorlds.add(worldAsTuple) evidence = {i: world[i] for i in range(0, len(world))} # Dict prWorld = bn.get_sampling_prob(evidence) # Build the PreDeLP Program for a world delpProgram = map_world_to_program(af, em_atoms, world) status = queryToProgram(delpProgram, literal, uniquePrograms) if status[1] == 'yes': results['yes']['total'] += 1 results['yes']['prob'] = results['yes']['prob'] + prWorld elif status[1] == 'no': results['no']['total'] += 1 results['no']['prob'] = results['no']['prob'] + prWorld elif status[1] == 'undecided': results['und']['total'] += 1 results['und']['prob'] = results['und']['prob'] + prWorld elif status[1] == 'unknown': results['unk']['total'] += 1 results['unk']['prob'] = results['unk']['prob'] + prWorld bar.next() bar.finish()
def get_interest_worlds(worlds, literal, bn): global uniquesWorlds, uniquePrograms yes_worlds = [] no_worlds = [] for world in worlds: worldAsTuple = tuple(world) if (not worldAsTuple in uniquesWorlds): uniquesWorlds.add(worldAsTuple) evidence = {i: world[i] for i in range(0, len(world))} # Dict prWorld = bn.get_sampling_prob(evidence) # Build the PreDeLP Program for a world delpProgram = map_world_to_program(af, em_atoms, world) status = queryToProgram(delpProgram, literal, uniquePrograms) if status[1] == 'yes': yes_worlds.append(world) results['yes']['total'] += 1 results['yes']['prob'] = results['yes']['prob'] + prWorld elif status[1] == 'no': no_worlds.append(world) results['no']['total'] += 1 results['no']['prob'] = results['no']['prob'] + prWorld elif status[1] == 'undecided': results['und']['total'] += 1 results['und']['prob'] = results['und']['prob'] + prWorld elif status[1] == 'unknown': results['unk']['total'] += 1 results['unk']['prob'] = results['unk']['prob'] + prWorld return [yes_worlds, no_worlds]
def umda_brute_force_worlds(literal, bn): global uniquePrograms all_possible_worlds = pow(2, dimension) bar = IncrementalBar('Analyzing worlds...', max=all_possible_worlds) initial_time = time.time() for int_value in range(all_possible_worlds): worldData = int_to_bin_with_format( int_value, dimension) # Return [program, evidence] REVISAR world = worldData[0] evidence = worldData[1] prWorld = bn.get_sampling_prob(evidence) # Build the delp program for a world delpProgram = map_world_to_program(af, em_atoms, world) # Compute the literal status status = queryToProgram(delpProgram, literal, uniquePrograms) if status[1] == 'yes': results['yes']['total'] += 1 results['yes']['prob'] = results['yes']['prob'] + prWorld elif status[1] == 'no': results['no']['total'] += 1 results['no']['prob'] = results['no']['prob'] + prWorld elif status[1] == 'undecided': results['und']['total'] += 1 results['und']['prob'] = results['und']['prob'] + prWorld elif status[1] == 'unknown': results['unk']['total'] += 1 results['unk']['prob'] = results['unk']['prob'] + prWorld bar.next() bar.finish() results['worldsAnalyzed'] = all_possible_worlds time_execution = time.time() - initial_time results['yes']['perc'] = "{:.2f}".format( (results['yes']['total'] * 100) / all_possible_worlds) results['no']['perc'] = "{:.2f}".format( (results['no']['total'] * 100) / all_possible_worlds) results['und']['perc'] = "{:.2f}".format( (results['und']['total'] * 100) / all_possible_worlds) results['unk']['perc'] = "{:.2f}".format( (results['unk']['total'] * 100) / all_possible_worlds) results['l'] = results['yes']['prob'] results['u'] = results['u'] - results['no']['prob'] results['time_execution'] = time_execution # Save file with results with open('/home/mario/results/umda/UMDAForceBruteWorlds.json', 'w') as outfile: json.dump(results, outfile, indent=4)
def sampling_umda_programs(literal, yes_prob_vector, no_prob_vector, quantity, bn): global uniquePrograms, inconsistent_program, repeated_program, uniqueOnlyPrograms print("Generating programs...") generated_programs = generate_population(yes_prob_vector, no_prob_vector, quantity) print("OK\n") bar = IncrementalBar('Analyzing generate programs...', max=quantity * 2) for program in generated_programs: if not tuple(program) in uniqueOnlyPrograms: uniqueOnlyPrograms.add(tuple(program)) delp = build_delp_from_binaries(program) status = queryToProgram([delp, program], literal, uniquePrograms) evidence = get_evidence(program) if evidence != 'incorrect_program': tuple_evidence = tuple(evidence.items()) if tuple_evidence not in uniqueEvidences: uniqueEvidences.add(tuple_evidence) prWorld = bn.get_sampling_prob(evidence) if status[1] == 'yes': results['yes']['total'] += 1 results['yes'][ 'prob'] = results['yes']['prob'] + prWorld elif status[1] == 'no': results['no']['total'] += 1 results['no']['prob'] = results['no']['prob'] + prWorld elif status[1] == 'undecided': results['und']['total'] += 1 results['und'][ 'prob'] = results['und']['prob'] + prWorld elif status[1] == 'unknown': results['unk']['total'] += 1 results['unk'][ 'prob'] = results['unk']['prob'] + prWorld else: repeated_evidence += 1 else: inconsistent_program += 1 else: repeated_program += 1 bar.next() bar.finish()
def get_interest_programs(programs, literal, bn): global inconsistent_program, repeated_program, uniquePrograms, uniqueOnlyPrograms, uniqueEvidences, repeated_evidence yes_programs = [] no_programs = [] for program in programs: tuple_program = tuple(program) if tuple_program not in uniqueOnlyPrograms: uniqueOnlyPrograms.add(tuple_program) delp = build_delp_from_binaries(program) evidence = get_evidence(program) if evidence != 'incorrect_program': tuple_evidence = tuple(evidence.items()) if tuple_evidence not in uniqueEvidences: uniqueEvidences.add(tuple_evidence) status = queryToProgram([delp, program], literal, uniquePrograms) prWorld = bn.get_sampling_prob(evidence) if status[1] == 'yes': yes_programs.append(program) results['yes']['total'] += 1 results['yes'][ 'prob'] = results['yes']['prob'] + prWorld elif status[1] == 'no': no_programs.append(program) results['no']['total'] += 1 results['no']['prob'] = results['no']['prob'] + prWorld elif status[1] == 'undecided': results['und']['total'] += 1 results['und'][ 'prob'] = results['und']['prob'] + prWorld elif status[1] == 'unknown': results['unk']['total'] += 1 results['unk'][ 'prob'] = results['unk']['prob'] + prWorld else: repeated_evidence += 1 else: inconsistent_program += 1 else: repeated_program += 1 return [yes_programs, no_programs]
def random_sampling_program(literal, bn, samples): global inconsistent_program, repeated_program, uniquePrograms, uniqueOnlyPrograms, uniqueEvidences, repeated_evidence all_possible_programs = pow(2, dimension) bar = IncrementalBar("Random sampling programs...", max=samples) initial_time = time.time() for i in range(samples): int_program = np.random.choice(all_possible_programs + 1, 1) program = int_to_bin_with_format(int_program, dimension)[0] tuple_program = tuple(program) if tuple_program not in uniqueOnlyPrograms: uniqueOnlyPrograms.add(tuple_program) delp = build_delp_from_binaries(program) evidence = get_evidence(program) if evidence != 'incorrect_program': tuple_evidence = tuple(evidence.items()) if tuple_evidence not in uniqueEvidences: uniqueEvidences.add(tuple_evidence) status = queryToProgram([delp, program], literal, uniquePrograms) prWorld = bn.get_sampling_prob(evidence) if status[1] == 'yes': results['yes']['total'] += 1 results['yes'][ 'prob'] = results['yes']['prob'] + prWorld elif status[1] == 'no': results['no']['total'] += 1 results['no']['prob'] = results['no']['prob'] + prWorld elif status[1] == 'undecided': results['und']['total'] += 1 results['und'][ 'prob'] = results['und']['prob'] + prWorld elif status[1] == 'unknown': results['unk']['total'] += 1 results['unk'][ 'prob'] = results['unk']['prob'] + prWorld else: repeated_evidence += 1 else: inconsistent_program += 1 else: repeated_program += 1 bar.next() bar.finish() time_execution = time.time() - initial_time results['execution_time'] = time_execution results['unique_programs'] = len(uniqueOnlyPrograms) results['inconsistent']['total'] = inconsistent_program results['inconsistent']['perc'] = "{:.2f}".format( (results['inconsistent']['total'] * 100) / samples) results['repeated']['total'] = repeated_program results['repeated']['perc'] = "{:.2f}".format( (results['repeated']['total'] * 100) / samples) results['domain'] = 'programs' results['yes']['perc'] = "{:.2f}".format( (results['yes']['total'] * 100) / samples) results['no']['perc'] = "{:.2f}".format( (results['no']['total'] * 100) / samples) results['und']['perc'] = "{:.2f}".format( (results['und']['total'] * 100) / samples) results['unk']['perc'] = "{:.2f}".format( (results['unk']['total'] * 100) / samples) results['l'] = results['yes']['prob'] results['u'] = results['u'] - results['no']['prob'] results['total_sampling'] = samples print("Unique programs: ", end='') print_ok_ops("%s" % len(uniqueOnlyPrograms)) print("Unique evidence: ", end='') print_ok_ops("%s" % len(uniqueEvidences)) print("Inconsistent programs: ", end='') print_ok_ops("%s" % inconsistent_program) print("repeated evidence: ", repeated_evidence) with open('/home/mario/results/umda/UMDARandomPrograms.json', 'w') as outfile: json.dump(results, outfile, indent=4)
def umda_brute_force_programs(literal, bn): global uniqueEvidence, uniquePrograms, repeated_evidence, inconsistent_program all_possible_programs = pow(2, dimension) bar = IncrementalBar("Analyzing programs...", max=all_possible_programs) initial_time = time.time() for int_value in range(all_possible_programs): program = int_to_bin_with_format( int_value, dimension)[0] # Return [program, evidence] REVISAR evidence = get_evidence(program) if evidence != 'incorrect_program': tuple_evidence = tuple(evidence.items()) if tuple_evidence not in uniqueEvidences: uniqueEvidences.add(tuple_evidence) delp = build_delp_from_binaries(program) status = queryToProgram([delp, program], literal, uniquePrograms) prWorld = bn.get_sampling_prob(evidence) if status[1] == 'yes': results['yes']['total'] += 1 results['yes']['prob'] = results['yes']['prob'] + prWorld elif status[1] == 'no': results['no']['total'] += 1 results['no']['prob'] = results['no']['prob'] + prWorld elif status[1] == 'undecided': results['und']['total'] += 1 results['und']['prob'] = results['und']['prob'] + prWorld elif status[1] == 'unknown': results['unk']['total'] += 1 results['unk']['prob'] = results['unk']['prob'] + prWorld else: repeated_evidence += 1 else: inconsistent_program += 1 bar.next() bar.finish() time_execution = time.time() - initial_time results['execution_time'] = time_execution results['yes']['perc'] = "{:.2f}".format( (results['yes']['total'] * 100) / all_possible_programs) results['no']['perc'] = "{:.2f}".format( (results['no']['total'] * 100) / all_possible_programs) results['und']['perc'] = "{:.2f}".format( (results['und']['total'] * 100) / all_possible_programs) results['unk']['perc'] = "{:.2f}".format( (results['unk']['total'] * 100) / all_possible_programs) results['inconsistent']['total'] = inconsistent_program results['inconsistent']['perc'] = "{:.2f}".format( (results['inconsistent']['total'] * 100) / all_possible_programs) results['programsAnalyzed'] = all_possible_programs results['l'] = results['yes']['prob'] results['u'] = results['u'] - results['no']['prob'] print("Unique programs: ", end='') print_ok_ops("%s" % (int_value + 1)) print("Unique evidence: ", end='') print_ok_ops("%s" % len(uniqueEvidences)) print("Inconsistent programs: ", end='') print_ok_ops("%s" % inconsistent_program) with open('/home/mario/results/umda/UMDAForceBrutePrograms.json', 'w') as outfile: json.dump(results, outfile, indent=4)