Esempio n. 1
0
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()
Esempio n. 2
0
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]
Esempio n. 3
0
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)
Esempio n. 4
0
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()
Esempio n. 5
0
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]
Esempio n. 6
0
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)
Esempio n. 7
0
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)