Beispiel #1
0
def __generate_expected_behavior():
    ''' Generate the state transition for the POMDP Model'''
    for old_state_id in POMDPSettings.state_transition_with_adversary:
        old_state = POMDPSettings.state_space[old_state_id]
        #################################### New States ###################################
        for new_state_id in POMDPSettings.state_transition_with_adversary[
                old_state_id]:
            new_state = POMDPSettings.state_space[new_state_id]
            #################################### Defense Action ###################################
            for defense_action_id in POMDPSettings.state_transition_with_adversary[
                    old_state_id][new_state_id]:
                ################################ Initialize such condition if does not exist #################
                if defense_action_id not in POMDPSettings.state_transition_pomdp:
                    POMDPSettings.state_transition_pomdp[
                        defense_action_id] = {}
                if old_state_id not in POMDPSettings.state_transition_pomdp[
                        defense_action_id]:
                    POMDPSettings.state_transition_pomdp[defense_action_id][
                        old_state_id] = {}
                if new_state_id not in POMDPSettings.state_transition_pomdp[
                        defense_action_id][old_state_id]:
                    POMDPSettings.state_transition_pomdp[defense_action_id][
                        old_state_id][new_state_id] = 0.0

                ################################ Adversary Actions #####################################
                for adversary_action_id in POMDPSettings.state_transition_with_adversary[
                        old_state_id][new_state_id][defense_action_id]:
                    adversary = POMDPSettings.adversary_action_objects[
                        adversary_action_id]
                    ######## Expected State Transition #################
                    POMDPSettings.state_transition_pomdp[defense_action_id][old_state_id][new_state_id] += \
                        POMDPSettings.state_transition_with_adversary[old_state_id][new_state_id][defense_action_id][adversary_action_id]\
                        *adversary.attack_probability
    DataStructureFunctions.normalize_probability_by_keys(
        POMDPSettings.state_transition_pomdp)
Beispiel #2
0
def generate_observation_matrix():
    initialize_observation_space_data_structure()
    ''' Give the observation Matrix'''
    if POMDPSettings.OBSERVATION_ACTION_IRRESPECTIVE:
        POMDPSettings.observation_probability[
            POMDPSettings.WILDCARD_SYMBOL] = {}
        for old_state in POMDPSettings.state_space:
            if old_state.primary_key not in POMDPSettings.observation_probability[
                    POMDPSettings.WILDCARD_SYMBOL]:
                POMDPSettings.observation_probability[
                    POMDPSettings.WILDCARD_SYMBOL][old_state.primary_key] = {}
            for new_state in POMDPSettings.state_space:
                if new_state.primary_key == old_state.primary_key:
                    POMDPSettings.observation_probability[POMDPSettings.WILDCARD_SYMBOL][old_state.primary_key][new_state.primary_key] \
                        = new_state.get_observation_probability()[0]
                else:
                    POMDPSettings.observation_probability[POMDPSettings.WILDCARD_SYMBOL][old_state.primary_key][
                        new_state.primary_key] \
                        = new_state.get_observation_probability()[1]
                    difference = set(old_state.adversary_positions) & set(
                        new_state.adversary_positions)
                    for node in difference:
                        if node < 0:
                            POMDPSettings.observation_probability[
                                POMDPSettings.
                                WILDCARD_SYMBOL][old_state.primary_key][
                                    new_state.
                                    primary_key] /= POMDPSettings.MIRROR_NODE_FALSE_POSITIVE
                            POMDPSettings.observation_probability[
                                POMDPSettings.
                                WILDCARD_SYMBOL][old_state.primary_key][
                                    new_state.
                                    primary_key] *= POMDPSettings.MIRROR_NODE_TRUE_POSITIVE
                        else:
                            POMDPSettings.observation_probability[
                                POMDPSettings.
                                WILDCARD_SYMBOL][old_state.primary_key][
                                    new_state.
                                    primary_key] /= POMDPSettings.IDS_FALSE_POSITIVE
                            POMDPSettings.observation_probability[
                                POMDPSettings.
                                WILDCARD_SYMBOL][old_state.primary_key][
                                    new_state.
                                    primary_key] *= POMDPSettings.IDS_TRUE_POSITIVE_RATE
    else:
        for defense_type in POMDPSettings.action_space_objects:
            for defense in defense_type:
                if defense.primary_key not in POMDPSettings.observation_probability:
                    POMDPSettings.observation_probability[
                        defense.primary_key] = {}
                for old_state in POMDPSettings.state_space:
                    if old_state.primary_key not in POMDPSettings.observation_probability[
                            defense.primary_key]:
                        POMDPSettings.observation_probability[
                            defense.primary_key][old_state.primary_key] = {}
                    for new_state in POMDPSettings.state_space:  ###### This is actually for observation ################
                        if new_state.primary_key == old_state.primary_key:
                            POMDPSettings.observation_probability[defense.primary_key][old_state.primary_key][new_state.primary_key] \
                                = new_state.get_observation_probability()[0]
                        else:
                            POMDPSettings.observation_probability[defense.primary_key][old_state.primary_key][
                                new_state.primary_key] \
                                = new_state.get_observation_probability()[1]
                            difference = set(
                                old_state.adversary_positions) & set(
                                    new_state.adversary_positions)
                            for node in difference:
                                if node < 0:
                                    POMDPSettings.observation_probability[
                                        POMDPSettings.
                                        WILDCARD_SYMBOL][old_state.primary_key][
                                            new_state.
                                            primary_key] /= POMDPSettings.MIRROR_NODE_FALSE_POSITIVE
                                    POMDPSettings.observation_probability[
                                        POMDPSettings.
                                        WILDCARD_SYMBOL][old_state.primary_key][
                                            new_state.
                                            primary_key] *= POMDPSettings.MIRROR_NODE_TRUE_POSITIVE
                                else:
                                    POMDPSettings.observation_probability[
                                        POMDPSettings.
                                        WILDCARD_SYMBOL][old_state.primary_key][
                                            new_state.
                                            primary_key] /= POMDPSettings.IDS_FALSE_POSITIVE
                                    POMDPSettings.observation_probability[
                                        POMDPSettings.
                                        WILDCARD_SYMBOL][old_state.primary_key][
                                            new_state.
                                            primary_key] *= POMDPSettings.IDS_TRUE_POSITIVE_RATE
    DataStructureFunctions.normalize_probability_by_keys(
        POMDPSettings.observation_probability)