Example #1
0
 /**
  * Setter for initialProbability
  *
  * @param initialProbability Initial probability Vector over the states. Each entry must be
  *     nonnegative and the Vector must sum to 1.
  */
 public void setInitialProbability(Vector initialProbability) {
   final int k = initialProbability.getDimensionality();
   double sum = 0.0;
   for (int i = 0; i < k; i++) {
     double value = initialProbability.getElement(i);
     if (value < 0.0) {
       throw new IllegalArgumentException("Initial Probabilities must be >= 0.0");
     }
     sum += value;
   }
   if (sum != 1.0) {
     initialProbability.scaleEquals(1.0 / sum);
   }
   this.initialProbability = initialProbability;
 }
Example #2
0
  /**
   * Returns the steady-state distribution of the state distribution. This is also the largest
   * eigenvector of the transition-probability matrix, which has an eigenvalue of 1.
   *
   * @return Steady-state probability distribution of state distribution.
   */
  public Vector getSteadyStateDistribution() {
    final double tolerance = 1e-5;
    final int maxIterations = 100;
    Vector p =
        EigenvectorPowerIteration.estimateEigenvector(
            this.initialProbability, this.transitionProbability, tolerance, maxIterations);

    // We do the manual sum (instead of norm1) in case the EVD found
    // the negative of the eigenvector.
    double sum = 0.0;
    for (int i = 0; i < p.getDimensionality(); i++) {
      sum += p.getElement(i);
    }
    p.scaleEquals(1.0 / sum);
    return p;
  }