Ejemplo n.º 1
0
    def setup(self, network, inference_engine, query_options):
        distributions = []
        variables = []
        for variable_name in [self._variable_a_name, self._variable_b_name]:
            variable = bayesianpy.network.get_variable(network, variable_name)

            if not bayesianpy.network.get_variable(network, variable_name):
                raise ValueError(
                    "Variable {} does not exist in the network".format(
                        variable_name))

            if bayesianpy.network.is_variable_continuous(variable_name):
                distributions.append(bayesServer().CLGaussian(variable))
            else:
                distributions.append(bayesServer().Table(variable))

            variables.append(variable)

        for query in distributions:
            inference_engine.getQueryDistributions().add(
                bayesServerInference().QueryDistribution(query))

        query_options.setQueryEvidenceMode(
            bayesServerInference().QueryEvidenceMode.RETRACT_QUERY_EVIDENCE)

        self._distributions = distributions
        self._variables = variables
Ejemplo n.º 2
0
    def setup(self, network, inference_engine, query_options):
        contexts = []
        for h in self._head_variables + self._tail_variables:
            v = bayesianpy.network.get_variable(network, h)

            if bayesianpy.network.is_variable_discrete(v):
                if h in self._head_variables:
                    #raise ValueError("Bayespy only supports discrete tail variables (BayesServer is fine with it though!)")
                    self._is_discrete_head = True

                self._discrete_variables.append(v.getName())
            else:
                if h in self._tail_variables:
                    raise ValueError(
                        "Bayespy only supports continuous head variables (BayesServer is fine with it though!)"
                    )

            contexts.append(bayesServer().VariableContext(
                v,
                bayesServer().HeadTail.HEAD
                if h in self._head_variables else bayesServer().HeadTail.TAIL))

        self._network = network
        if self._is_discrete_head:
            self._distribution = bayesServer().Table(contexts)
        else:
            self._distribution = bayesServer().CLGaussian(contexts)

        self._query_distribution = bayesServerInference().QueryDistribution(
            self._distribution)
        inference_engine.getQueryDistributions().add(self._query_distribution)
Ejemplo n.º 3
0
 def __init__(self, network, inference_engine, logger):
     self._factory = bayesServerInference().RelevanceTreeInferenceFactory()
     self._query_options = self._factory.createQueryOptions()
     self._query_output = self._factory.createQueryOutput()
     self._inference_engine = inference_engine
     self._network = network
     self._logger = logger
Ejemplo n.º 4
0
    def setup(self, network, inference_engine, query_options):
        distribution = None

        self._variable = bayesianpy.network.get_variable(
            network, self._target_variable_name)

        if bayesianpy.network.is_variable_discrete(self._variable):
            distribution = bayesServer().Table(self._variable)

        if distribution is None:
            raise ValueError(
                "{} needs to be discrete in QueryMostLikelyState".format(
                    self._target_variable_name))

        query_options.setQueryEvidenceMode(
            bayesServerInference().QueryEvidenceMode.RETRACT_QUERY_EVIDENCE)
        qd = bayesServerInference().QueryDistribution(distribution)

        self._distribution = distribution
        inference_engine.getQueryDistributions().add(qd)
Ejemplo n.º 5
0
    def setup(self, network, inference_engine, query_options):
        self._variable = bayesianpy.network.get_variable(
            network, self._variable_name)

        if not bayesianpy.network.get_variable(network, self._variable_name):
            raise ValueError(
                "Variable {} does not exist in the network".format(
                    self._variable_name))

        if not bayesianpy.network.is_variable_continuous(self._variable):
            raise ValueError("{} needs to be continuous.".format(
                self._variable_name))

        self._query = bayesServer().CLGaussian(self._variable)

        if self._retract_evidence:
            query_options.setQueryEvidenceMode(bayesServerInference(
            ).QueryEvidenceMode.RETRACT_QUERY_EVIDENCE)

        inference_engine.getQueryDistributions().add(
            bayesServerInference().QueryDistribution(self._query))
Ejemplo n.º 6
0
    def setup(self, network, inference_engine, query_options):
        variables = [
            bayesianpy.network.get_variable(network, n)
            for n in self._variable_names
        ]

        if len(variables) == 0:
            raise ValueError(
                "QueryLogLikelihood: Requires a non-empty list for creating a distribution"
            )

        if len(variables) == 1:
            self._distribution = bayesServer().CLGaussian(variables[0])
        else:
            self._distribution = bayesServer().CLGaussian(variables)

        query_options.setQueryEvidenceMode(
            bayesServerInference().QueryEvidenceMode.RETRACT_QUERY_EVIDENCE)
        qd = bayesServerInference().QueryDistribution(self._distribution)
        qd.setQueryLogLikelihood(True)
        self._query_distribution = qd
        inference_engine.getQueryDistributions().add(qd)
Ejemplo n.º 7
0
    def create(self, loglikelihood=False, conflict=False, retract=False):
        query_options = self.get_inference_factory().createQueryOptions()
        query_output = self.get_inference_factory().createQueryOutput()
        inference_engine = self.get_inference_factory().createInferenceEngine(
            self._network)

        query_options.setLogLikelihood(loglikelihood)
        query_options.setConflict(conflict)

        if retract:
            query_options.setQueryEvidenceMode(bayesServerInference(
            ).QueryEvidenceMode.RETRACT_QUERY_EVIDENCE)

        return inference_engine, query_options, query_output
Ejemplo n.º 8
0
 def get_inference_factory():
     if InferenceEngine._inference_factory is None:
         InferenceEngine._inference_factory = bayesServerInference(
         ).RelevanceTreeInferenceFactory()
     return InferenceEngine._inference_factory