/** * Sets the distribution of a normal variable with multinomial and normal 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 setNormal_MultinomialNormalParents(Normal_MultinomialNormalParents dist) throws ExceptionHugin { List<Variable> multinomialParents = dist.getMultinomialParents(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(multinomialParents); for(int i=0;i<numParentAssignments;i++) { this.setNormal_NormalParents(dist.getNormal_NormalParentsDistribution(i),i); } }
Assignment staticParentsConfiguration = MultinomialIndex.getVariableAssignmentFromIndex(multinomialParents, m); Assignment dynamicParentsConfiguration = new HashMapAssignment(multinomialParents.size());
/** * Sets the distribution of a normal 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 setNormal_MultinomialParents(Normal_MultinomialParents dist) throws ExceptionHugin { List<Variable> conditioningVariables = dist.getConditioningVariables(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(conditioningVariables); for(int i=0;i<numParentAssignments;i++) { Normal normal = dist.getNormal(i); this.setNormal(normal, i); } }
/** * 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); }
/** * Sets the distribution of a normal variable with multinomial parents in the AMIDST model from the corresponding * distribution in the Hugin model. * For each assignment of the multinomial parents, a univariate normal is set. * @param huginVar the Hugin variable with the distribution to be converted. * @throws ExceptionHugin */ private void setNormal_MultinomialParents(Node huginVar) throws ExceptionHugin { int indexNode = this.huginBN.getNodes().indexOf(huginVar); Variable amidstVar = this.amidstBN.getVariables().getVariableById(indexNode); List<Variable> conditioningVariables = this.amidstBN.getDAG().getParentSet(amidstVar).getParents(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(conditioningVariables); Normal_MultinomialParents dist = this.amidstBN.getConditionalDistribution(amidstVar); for (int i = 0; i < numParentAssignments; i++) { Normal normal = dist.getNormal(i); this.setNormal(huginVar, normal, i); } }
/** * Sets the distribution of a normal variable with normal and multinomial parents in the AMIDST model from the * corresponding distribution in the Hugin model. * For each assignment of the multinomial parents, a CLG distribution is set. * @param huginVar the Hugin variable with the distribution to be converted. * @throws ExceptionHugin */ private void setNormal_MultinomialNormalParents(Node huginVar) throws ExceptionHugin { int indexNode = this.huginBN.getNodes().indexOf(huginVar); Variable amidstVar = this.amidstBN.getVariables().getVariableById(indexNode); Normal_MultinomialNormalParents dist = this.amidstBN.getConditionalDistribution(amidstVar); List<Variable> multinomialParents = dist.getMultinomialParents(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(multinomialParents); for(int i=0;i<numParentAssignments;i++) { ConditionalLinearGaussian normalNormal = dist.getNormal_NormalParentsDistribution(i); double huginIntercept = ((ContinuousChanceNode)huginVar).getAlpha(i); normalNormal.setIntercept(huginIntercept); List<Variable> normalParents = dist.getNormalParents(); int numParents = normalParents.size(); double[] coefficients = new double[numParents]; for(int j=0;j<numParents;j++){ String nameAmidstNormalParent = normalParents.get(j).getName(); ContinuousChanceNode huginParent = (ContinuousChanceNode)this.huginBN.getNodeByName(nameAmidstNormalParent); coefficients[j]= ((ContinuousChanceNode)huginVar).getBeta(huginParent,i); } normalNormal.setCoeffParents(coefficients); double huginVariance = ((ContinuousChanceNode)huginVar).getGamma(i); normalNormal.setVariance(huginVariance); } }
int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(conditioningVariables);
/** * 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); } }
}else { Multinomial_MultinomialParents dist_TimeT = amidstDBN.getConditionalDistributionTimeT(amidstVar); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(parentsTimeT); int numStates = amidstVar.getNumberOfStates(); for (int i = 0; i < numParentAssignments; i++) { } else { Multinomial_MultinomialParents dist_Time0 = amidstDBN.getConditionalDistributionTime0(amidstVar); int numParentAssignmentsTime0 = MultinomialIndex.getNumberOfPossibleAssignments(parentsTime0); int numStates = amidstVar.getNumberOfStates(); for (int i = 0; i < numParentAssignmentsTime0; i++) {