Examples of MixedRadixNumber


Examples of aima.core.util.math.MixedRadixNumber

    System.arraycopy(vals, 0, values, 0, vals.length);

    radices = createRadixs(randomVarInfo);

    if (radices.length > 0) {
      queryMRN = new MixedRadixNumber(0, radices);
    }
  }
View Full Code Here

Examples of aima.core.util.math.MixedRadixNumber

   * @param pti
   *            the ProbabilityTable Iterator to iterate.
   */
  public void iterateOverTable(Iterator pti) {
    Map<RandomVariable, Object> possibleWorld = new LinkedHashMap<RandomVariable, Object>();
    MixedRadixNumber mrn = new MixedRadixNumber(0, radices);
    do {
      for (RVInfo rvInfo : randomVarInfo.values()) {
        possibleWorld.put(rvInfo.getVariable(), rvInfo
            .getDomainValueAt(mrn.getCurrentNumeralValue(rvInfo
                .getRadixIdx())));
      }
      pti.iterate(possibleWorld, values[mrn.intValue()]);

    } while (mrn.increment());
  }
View Full Code Here

Examples of aima.core.util.math.MixedRadixNumber

   *            this Probability Table.
   */
  public void iterateOverTable(Iterator pti,
      AssignmentProposition... fixedValues) {
    Map<RandomVariable, Object> possibleWorld = new LinkedHashMap<RandomVariable, Object>();
    MixedRadixNumber tableMRN = new MixedRadixNumber(0, radices);
    int[] tableRadixValues = new int[radices.length];

    // Assert that the Random Variables for the fixed values
    // are part of this probability table and assign
    // all the fixed values to the possible world.
    for (AssignmentProposition ap : fixedValues) {
      if (!randomVarInfo.containsKey(ap.getTermVariable())) {
        throw new IllegalArgumentException("Assignment proposition ["
            + ap + "] does not belong to this probability table.");
      }
      possibleWorld.put(ap.getTermVariable(), ap.getValue());
      RVInfo fixedRVI = randomVarInfo.get(ap.getTermVariable());
      tableRadixValues[fixedRVI.getRadixIdx()] = fixedRVI
          .getIdxForDomain(ap.getValue());
    }
    // If have assignments for all the random variables
    // in this probability table
    if (fixedValues.length == randomVarInfo.size()) {
      // Then only 1 iteration call is required.
      pti.iterate(possibleWorld, getValue(fixedValues));
    } else {
      // Else iterate over the non-fixed values
      Set<RandomVariable> freeVariables = SetOps.difference(
          this.randomVarInfo.keySet(), possibleWorld.keySet());
      Map<RandomVariable, RVInfo> freeVarInfo = new LinkedHashMap<RandomVariable, RVInfo>();
      // Remove the fixed Variables
      for (RandomVariable fv : freeVariables) {
        freeVarInfo.put(fv, new RVInfo(fv));
      }
      int[] freeRadixValues = createRadixs(freeVarInfo);
      MixedRadixNumber freeMRN = new MixedRadixNumber(0, freeRadixValues);
      Object fval = null;
      // Iterate through all combinations of the free variables
      do {
        // Put the current assignments for the free variables
        // into the possible world and update
        // the current index in the table MRN
        for (RVInfo freeRVI : freeVarInfo.values()) {
          fval = freeRVI.getDomainValueAt(freeMRN
              .getCurrentNumeralValue(freeRVI.getRadixIdx()));
          possibleWorld.put(freeRVI.getVariable(), fval);

          tableRadixValues[randomVarInfo.get(freeRVI.getVariable())
              .getRadixIdx()] = freeRVI.getIdxForDomain(fval);
        }
        pti.iterate(possibleWorld, values[(int) tableMRN
            .getCurrentValueFor(tableRadixValues)]);

      } while (freeMRN.increment());
    }
  }
View Full Code Here

Examples of aima.core.util.math.MixedRadixNumber

    } else {
      Set<RandomVariable> dividendDivisorDiff = SetOps
          .difference(this.randomVarInfo.keySet(),
              divisor.randomVarInfo.keySet());
      Map<RandomVariable, RVInfo> tdiff = null;
      MixedRadixNumber tdMRN = null;
      if (dividendDivisorDiff.size() > 0) {
        tdiff = new LinkedHashMap<RandomVariable, RVInfo>();
        for (RandomVariable rv : dividendDivisorDiff) {
          tdiff.put(rv, new RVInfo(rv));
        }
        tdMRN = new MixedRadixNumber(0, createRadixs(tdiff));
      }
      final Map<RandomVariable, RVInfo> diff = tdiff;
      final MixedRadixNumber dMRN = tdMRN;
      final int[] qRVs = new int[quotient.radices.length];
      final MixedRadixNumber qMRN = new MixedRadixNumber(0,
          quotient.radices);
      ProbabilityTable.Iterator divisorIterator = new ProbabilityTable.Iterator() {
        public void iterate(Map<RandomVariable, Object> possibleWorld,
            double probability) {
          for (RandomVariable rv : possibleWorld.keySet()) {
            RVInfo rvInfo = quotient.randomVarInfo.get(rv);
            qRVs[rvInfo.getRadixIdx()] = rvInfo
                .getIdxForDomain(possibleWorld.get(rv));
          }
          if (null != diff) {
            // Start from 0 off the diff
            dMRN.setCurrentValueFor(new int[diff.size()]);
            do {
              for (RandomVariable rv : diff.keySet()) {
                RVInfo drvInfo = diff.get(rv);
                RVInfo qrvInfo = quotient.randomVarInfo.get(rv);
                qRVs[qrvInfo.getRadixIdx()] = dMRN
                    .getCurrentNumeralValue(drvInfo
                        .getRadixIdx());
              }
              updateQuotient(probability);
            } while (dMRN.increment());
          } else {
            updateQuotient(probability);
          }
        }

        //
        //
        private void updateQuotient(double probability) {
          int offset = (int) qMRN.getCurrentValueFor(qRVs);
          if (0 == probability) {
            quotient.getValues()[offset] = 0;
          } else {
            quotient.getValues()[offset] += getValues()[offset]
                / probability;
View Full Code Here

Examples of aima.core.util.math.MixedRadixNumber

    System.arraycopy(vals, 0, values, 0, vals.length);

    radices = createRadixs(randomVarInfo);

    if (radices.length > 0) {
      queryMRN = new MixedRadixNumber(0, radices);
    }
  }
View Full Code Here

Examples of aima.core.util.math.MixedRadixNumber

   * @param pti
   *            the ProbabilityTable Iterator to iterate.
   */
  public void iterateOverTable(Iterator pti) {
    Map<RandomVariable, Object> possibleWorld = new LinkedHashMap<RandomVariable, Object>();
    MixedRadixNumber mrn = new MixedRadixNumber(0, radices);
    do {
      for (RVInfo rvInfo : randomVarInfo.values()) {
        possibleWorld.put(rvInfo.getVariable(), rvInfo
            .getDomainValueAt(mrn.getCurrentNumeralValue(rvInfo
                .getRadixIdx())));
      }
      pti.iterate(possibleWorld, values[mrn.intValue()]);

    } while (mrn.increment());
  }
View Full Code Here

Examples of aima.core.util.math.MixedRadixNumber

   *            this Probability Table.
   */
  public void iterateOverTable(Iterator pti,
      AssignmentProposition... fixedValues) {
    Map<RandomVariable, Object> possibleWorld = new LinkedHashMap<RandomVariable, Object>();
    MixedRadixNumber tableMRN = new MixedRadixNumber(0, radices);
    int[] tableRadixValues = new int[radices.length];

    // Assert that the Random Variables for the fixed values
    // are part of this probability table and assign
    // all the fixed values to the possible world.
    for (AssignmentProposition ap : fixedValues) {
      if (!randomVarInfo.containsKey(ap.getTermVariable())) {
        throw new IllegalArgumentException("Assignment proposition ["
            + ap + "] does not belong to this probability table.");
      }
      possibleWorld.put(ap.getTermVariable(), ap.getValue());
      RVInfo fixedRVI = randomVarInfo.get(ap.getTermVariable());
      tableRadixValues[fixedRVI.getRadixIdx()] = fixedRVI
          .getIdxForDomain(ap.getValue());
    }
    // If have assignments for all the random variables
    // in this probability table
    if (fixedValues.length == randomVarInfo.size()) {
      // Then only 1 iteration call is required.
      pti.iterate(possibleWorld, getValue(fixedValues));
    } else {
      // Else iterate over the non-fixed values
      Set<RandomVariable> freeVariables = SetOps.difference(
          this.randomVarInfo.keySet(), possibleWorld.keySet());
      Map<RandomVariable, RVInfo> freeVarInfo = new LinkedHashMap<RandomVariable, RVInfo>();
      // Remove the fixed Variables
      for (RandomVariable fv : freeVariables) {
        freeVarInfo.put(fv, new RVInfo(fv));
      }
      int[] freeRadixValues = createRadixs(freeVarInfo);
      MixedRadixNumber freeMRN = new MixedRadixNumber(0, freeRadixValues);
      Object fval = null;
      // Iterate through all combinations of the free variables
      do {
        // Put the current assignments for the free variables
        // into the possible world and update
        // the current index in the table MRN
        for (RVInfo freeRVI : freeVarInfo.values()) {
          fval = freeRVI.getDomainValueAt(freeMRN
              .getCurrentNumeralValue(freeRVI.getRadixIdx()));
          possibleWorld.put(freeRVI.getVariable(), fval);

          tableRadixValues[randomVarInfo.get(freeRVI.getVariable())
              .getRadixIdx()] = freeRVI.getIdxForDomain(fval);
        }
        pti.iterate(possibleWorld, values[(int) tableMRN
            .getCurrentValueFor(tableRadixValues)]);

      } while (freeMRN.increment());
    }
  }
View Full Code Here

Examples of aima.core.util.math.MixedRadixNumber

    } else {
      Set<RandomVariable> dividendDivisorDiff = SetOps
          .difference(this.randomVarInfo.keySet(),
              divisor.randomVarInfo.keySet());
      Map<RandomVariable, RVInfo> tdiff = null;
      MixedRadixNumber tdMRN = null;
      if (dividendDivisorDiff.size() > 0) {
        tdiff = new LinkedHashMap<RandomVariable, RVInfo>();
        for (RandomVariable rv : dividendDivisorDiff) {
          tdiff.put(rv, new RVInfo(rv));
        }
        tdMRN = new MixedRadixNumber(0, createRadixs(tdiff));
      }
      final Map<RandomVariable, RVInfo> diff = tdiff;
      final MixedRadixNumber dMRN = tdMRN;
      final int[] qRVs = new int[quotient.radices.length];
      final MixedRadixNumber qMRN = new MixedRadixNumber(0,
          quotient.radices);
      ProbabilityTable.Iterator divisorIterator = new ProbabilityTable.Iterator() {
        public void iterate(Map<RandomVariable, Object> possibleWorld,
            double probability) {
          for (RandomVariable rv : possibleWorld.keySet()) {
            RVInfo rvInfo = quotient.randomVarInfo.get(rv);
            qRVs[rvInfo.getRadixIdx()] = rvInfo
                .getIdxForDomain(possibleWorld.get(rv));
          }
          if (null != diff) {
            // Start from 0 off the diff
            dMRN.setCurrentValueFor(new int[diff.size()]);
            do {
              for (RandomVariable rv : diff.keySet()) {
                RVInfo drvInfo = diff.get(rv);
                RVInfo qrvInfo = quotient.randomVarInfo.get(rv);
                qRVs[qrvInfo.getRadixIdx()] = dMRN
                    .getCurrentNumeralValue(drvInfo
                        .getRadixIdx());
              }
              updateQuotient(probability);
            } while (dMRN.increment());
          } else {
            updateQuotient(probability);
          }
        }

        public Object getPostIterateValue() {
          return null; // N/A
        }

        //
        //
        private void updateQuotient(double probability) {
          int offset = (int) qMRN.getCurrentValueFor(qRVs);
          if (0 == probability) {
            quotient.getValues()[offset] = 0;
          } else {
            quotient.getValues()[offset] += getValues()[offset]
                / probability;
View Full Code Here

Examples of aima.core.util.math.MixedRadixNumber

      radixValues[j] = fd.getOffset(x.get(X[i]));
      radices[j] = fd.size();
      j--;
    }

    return new MixedRadixNumber(radixValues, radices).intValue();
  }
View Full Code Here

Examples of aima.core.util.math.MixedRadixNumber

*/
public class MixedRadixNumberTest {

  @Test(expected = IllegalArgumentException.class)
  public void testInvalidRadices() {
    new MixedRadixNumber(100, new int[] { 1, 0, -1 });
  }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.