distB_Time0.getMultinomial(0).setProbabilities(new double[]{0.4, 0.1, 0.5}); distB_Time0.getMultinomial(1).setProbabilities(new double[]{0.2, 0.5, 0.3}); distC_Time0.getMultinomial(0).setProbabilities(new double[]{0.4, 0.6}); distC_Time0.getMultinomial(1).setProbabilities(new double[]{0.2, 0.8}); distD_Time0.getMultinomial(0).setProbabilities(new double[]{0.7, 0.3}); distD_Time0.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); distE_Time0.getMultinomial(0).setProbabilities(new double[]{0.8, 0.2}); distE_Time0.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); distG_Time0.getMultinomial(0).setProbabilities(new double[]{0.6, 0.4}); distG_Time0.getMultinomial(1).setProbabilities(new double[]{0.7, 0.3}); distA_TimeT.getMultinomial(0).setProbabilities(new double[]{0.15, 0.85}); distA_TimeT.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); distB_TimeT.getMultinomial(0).setProbabilities(new double[]{0.1, 0.2, 0.7}); distB_TimeT.getMultinomial(1).setProbabilities(new double[]{0.6, 0.1, 0.3}); distB_TimeT.getMultinomial(2).setProbabilities(new double[]{0.3, 0.4, 0.3}); distB_TimeT.getMultinomial(3).setProbabilities(new double[]{0.2, 0.1, 0.7}); distB_TimeT.getMultinomial(4).setProbabilities(new double[]{0.5, 0.1, 0.4}); distB_TimeT.getMultinomial(5).setProbabilities(new double[]{0.1, 0.1, 0.8}); distC_TimeT.getMultinomial(0).setProbabilities(new double[]{0.4, 0.6}); distC_TimeT.getMultinomial(1).setProbabilities(new double[]{0.2, 0.8}); distD_TimeT.getMultinomial(0).setProbabilities(new double[]{0.7, 0.3});
if (staticVariable.isMultinomial()) { distributionType = 0; staticVarConDist = new Multinomial_MultinomialParents(staticVariable, parentList); Multinomial multinomial1 = (Multinomial) multinomial_multinomialParents.getMultinomial(dynamicParentsConfiguration); ((Multinomial_MultinomialParents)staticVarConDist).setMultinomial(m, multinomial1);
Variable amidstVar = amidstDBN.getDynamicVariables().getVariableByName(huginNode.getName()); if (amidstDBN.getConditionalDistributionTimeT(amidstVar) instanceof Multinomial){ dist = new Multinomial_MultinomialParents(amidstVar,new ArrayList()); dist.setMultinomial(0,amidstDBN.getConditionalDistributionTimeT(amidstVar)); }else { dist = amidstDBN.getConditionalDistributionTimeT(amidstVar); Variable amidstVar = amidstDBN.getDynamicVariables().getVariableByName(huginNode.getTemporalMaster().getName()); if (amidstDBN.getConditionalDistributionTime0(amidstVar) instanceof Multinomial){ dist = new Multinomial_MultinomialParents(amidstVar,new ArrayList()); dist.setMultinomial(0,amidstDBN.getConditionalDistributionTime0(amidstVar)); }else { dist = amidstDBN.getConditionalDistributionTime0(amidstVar); List<Multinomial> probabilities = dist.getMultinomialDistributions(); List<Variable> conditioningVariables = dist.getConditioningVariables(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(conditioningVariables);
/** * Sets the distribution of a multinomial variable with multinomial parents in the Hugin model from the * corresponding distribution in the AMIDST model. * * @param dist the AMIDST distribution to be converted. * @throws ExceptionHugin */ private void setMultinomial_MultinomialParents(Multinomial_MultinomialParents dist) throws ExceptionHugin { Variable amidstVar = dist.getVariable(); Node huginVar = this.huginBN.getNodeByName(amidstVar.getName()); List<Multinomial> probabilities = dist.getMultinomialDistributions(); List<Variable> conditioningVariables = dist.getConditioningVariables(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(conditioningVariables); int nStates = amidstVar.getNumberOfStates(); int sizeArray = numParentAssignments * nStates; double[] finalArray = new double[sizeArray]; for(int i=0;i<numParentAssignments;i++){ double[] sourceArray = probabilities.get(i).getProbabilities(); System.arraycopy(sourceArray, 0, finalArray, i*nStates, nStates); } huginVar.getTable().setData(finalArray); }
Multinomial_MultinomialParents multinomial_multinomialParents = new Multinomial_MultinomialParents(staticVar, parents); Assignment assignment1; Multinomial multinomial; multinomial_multinomialParents.setMultinomial(s, multinomial);
generalConditionalDistTimeT = new Multinomial_MultinomialParents(staticVar, bn.getDAG().getParentSet(staticVar).getParents());
smokeProb.getMultinomial(1).setProbabilities(new double[]{0.001, 0.999}); fireprobTimeT.getMultinomial(0).setProbabilities(new double[]{0.999, 0.001}); fireprobTimeT.getMultinomial(1).setProbabilities(new double[]{0.01, 0.99}); smokeProbTimeT.getMultinomial(1).setProbabilities(new double[]{0.001, 0.999}); smokeProbTimeT.getMultinomial(3).setProbabilities(new double[]{0.001, 0.999});
/** * Sets the distribution of a multinomial variable with multinomial parents in the AMIDST model * from the corresponding distribution in the Hugin model. * @param huginVar the Hugin variable with the distribution to be converted. * @throws ExceptionHugin */ private void setMultinomial_MultinomialParents(Node huginVar) throws ExceptionHugin { int indexNode = this.huginBN.getNodes().indexOf(huginVar); Variable amidstVar = this.amidstBN.getVariables().getVariableById(indexNode); int numStates = amidstVar.getNumberOfStates(); double[] huginProbabilities = huginVar.getTable().getData(); List<Variable> parents = this.amidstBN.getDAG().getParentSet(amidstVar).getParents(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(parents); for (int i = 0; i < numParentAssignments; i++) { double[] amidstProbabilities = new double[numStates]; for (int k = 0; k < numStates; k++) { amidstProbabilities[k] = huginProbabilities[i * numStates + k]; } Multinomial_MultinomialParents dist = this.amidstBN.getConditionalDistribution(amidstVar); dist.getMultinomial(i).setProbabilities(amidstProbabilities); } }
amidstProbabilities[k] = huginProbabilitiesTimeT[i * numStates + k]; dist_TimeT.getMultinomial(i).setProbabilities(amidstProbabilities); amidstProbabilities[k] = huginProbabilitiesTime0[i * numStates + k]; dist_Time0.getMultinomial(i).setProbabilities(amidstProbabilities);
public static void main(String[] args) throws Exception { //Load the learnt model BayesianNetwork fireDetector = BayesianNetworkLoader.loadFromFile("./models/LearntFireDetectorModel.bn"); //Access the variable of interest. Variable fire = fireDetector.getVariables().getVariableByName("Fire"); Variable temperature = fireDetector.getVariables().getVariableByName("Temperature"); Variable smoke = fireDetector.getVariables().getVariableByName("Smoke"); //Modify the parameters of the model according to our prior knowledge. Multinomial fireprob = fireDetector.getConditionalDistribution(fire); fireprob.setProbabilities(new double[]{0.999, 0.001}); Normal_MultinomialParents tempprob = fireDetector.getConditionalDistribution(temperature); tempprob.getNormal(1).setMean(tempprob.getNormal(0).getMean()+10); tempprob.getNormal(1).setVariance(tempprob.getNormal(0).getVariance()); Multinomial_MultinomialParents smokeProb = fireDetector.getConditionalDistribution(smoke); smokeProb.getMultinomial(1).setProbabilities(new double[]{0.001, 0.999}); //Print the model System.out.println(fireDetector); //Save to disk the new model BayesianNetworkWriter.save(fireDetector,"./models/FireDetectorModel.bn"); } }
smokeProb.getMultinomial(0).setProbabilities(new double[]{0.9, 0.1}); fireprobTimeT.getMultinomial(0).setProbabilities(new double[]{1.0, 0.0}); smokeProbTimeT.getMultinomial(0).setProbabilities(new double[]{0.9, 0.1}); smokeProbTimeT.getMultinomial(1).setProbabilities(new double[]{0.9, 0.1}); smokeProbTimeT.getMultinomial(2).setProbabilities(new double[]{0.1, 0.9}); smokeProbTimeT.getMultinomial(3).setProbabilities(new double[]{0.9, 0.1});
smokeProb.getMultinomial(0).setProbabilities(new double[]{0.9, 0.1});
smokeProb.getMultinomial(0).setProbabilities(new double[]{0.9, 0.1});
smokeProb.getMultinomial(0).setProbabilities(new double[]{0.9, 0.1});