Example usage for org.apache.commons.math3.fraction BigFraction add

List of usage examples for org.apache.commons.math3.fraction BigFraction add

Introduction

In this page you can find the example usage for org.apache.commons.math3.fraction BigFraction add.

Prototype

public BigFraction add(final BigFraction fraction) 

Source Link

Document

Adds the value of this fraction to another, returning the result in reduced form.

Usage

From source file:controller.VisLP.java

/**
 * Dictionary form assumes all x-values >= 0. For a geometric
 * representation we need these constraints explicitly stated
 * in order to draw the feasible region.
 * /*w ww. j a v  a2s  .co m*/
 * This method adds the constraints x >= 0 (-x <= 0) 
 * and y >= 0 (-y <= 0) unless more bounding constraints
 * on the x and y-values already exists.
 * 
 * It also always adds a line with a negative slope with
 * a <<high enough>> positive x- and y-intercept needed
 * to color unbounded feasible regions.
 * 
 * @param  cons
 *         A constraints-matrix
 * @return
 *         A constraints matrix guaranteed to have lower bounds.
 */
static FieldMatrix<BigFraction> checkForBounds(FieldMatrix<BigFraction> cons) {
    boolean lowerx = false;
    boolean lowery = false;

    BigFraction valsum = BigFraction.ZERO;

    /* Does lower bounds already exist? */
    for (int i = 0; i < cons.getRowDimension(); i++) {
        BigFraction x = cons.getEntry(i, 0);
        BigFraction y = cons.getEntry(i, 1);
        if (x.compareTo(BigFraction.ZERO) < 0 && y.equals(BigFraction.ZERO)) {
            lowerx = true;
        } else if (x.equals(BigFraction.ZERO) && y.compareTo(BigFraction.ZERO) < 0) {
            lowery = true;
        }

        valsum = valsum.add(cons.getEntry(i, 2).abs());
    }

    FieldMatrix<BigFraction> ncons = cons.copy();

    BigFraction[] cxdata = new BigFraction[] { BigFraction.MINUS_ONE, BigFraction.ZERO, BigFraction.ZERO };
    BigFraction[] cydata = new BigFraction[] { BigFraction.ZERO, BigFraction.MINUS_ONE, BigFraction.ZERO };
    /* Add lower bounds if they do not exist */
    if (!lowerx) {
        FieldMatrix<BigFraction> c = new Array2DRowFieldMatrix<BigFraction>(cxdata).transpose();
        ncons = LP.addBlock(ncons, c, LP.UNDER);
    }
    if (!lowery) {
        FieldMatrix<BigFraction> c = new Array2DRowFieldMatrix<BigFraction>(cydata).transpose();
        ncons = LP.addBlock(ncons, c, LP.UNDER);
    }

    valsum = valsum.add(BigFraction.TWO).multiply(valsum);
    BigFraction[] uc = new BigFraction[] { BigFraction.ONE, BigFraction.ONE, valsum };

    FieldMatrix<BigFraction> c = new Array2DRowFieldMatrix<BigFraction>(uc).transpose();
    ncons = LP.addBlock(ncons, c, LP.UNDER);

    return ncons;
}

From source file:cc.redberry.core.number.Rational.java

@Override
public Rational add(BigFraction fraction) {
    NumberUtils.checkNotNull(fraction);
    return new Rational(fraction.add(fraction));
}

From source file:model.LP.java

/**
 * Return the objective value of the current dictionary.
 *
 * @return/*w ww. j ava  2  s  . c o  m*/
 *         the objective value.
 */
public BigFraction objVal() {
    BigFraction sum = BigFraction.ZERO;
    for (int i = 0; i < Bi.length; i++) {
        int j = Bi[i];
        if (j < c.getDimension()) {
            sum = sum.add(c.getEntry(j).multiply(b_.getEntry(i)));
        }
    }
    return sum;
}

From source file:sadl.models.PDFA.java

protected boolean fixProbability(int state) {
    List<Transition> outgoingTransitions = getOutTransitions(state, true);
    final double sum = outgoingTransitions.stream().mapToDouble(t -> t.getProbability()).sum();
    // divide every probability by the sum of probabilities s.t. they sum up to 1
    if (!Precision.equals(sum, 1)) {
        logger.debug("Sum of transition probabilities for state {} is {}", state, sum);
        outgoingTransitions = getOutTransitions(state, true);
        outgoingTransitions.forEach(t -> changeTransitionProbability(t, t.getProbability() / sum));
        outgoingTransitions = getOutTransitions(state, true);
        final double newSum = outgoingTransitions.stream().mapToDouble(t -> t.getProbability()).sum();
        logger.debug("Corrected sum of transition probabilities is {}", newSum);
        if (!Precision.equals(newSum, 1.0)) {
            logger.debug("Probabilities do not sum up to one, so doing it again with the Fraction class");
            final List<BigFraction> probabilities = new ArrayList<>(outgoingTransitions.size());
            for (int i = 0; i < outgoingTransitions.size(); i++) {
                probabilities.add(i, new BigFraction(outgoingTransitions.get(i).getProbability()));
            }/*w w  w  .  ja v a  2s. c om*/
            BigFraction fracSum = BigFraction.ZERO;
            for (final BigFraction f : probabilities) {
                try {
                    fracSum = fracSum.add(f);
                } catch (final MathArithmeticException e) {
                    logger.error("Arithmetic Exception for fracSum={}, FractionToAdd={}", fracSum, f, e);
                    throw e;
                }
            }
            for (int i = 0; i < outgoingTransitions.size(); i++) {
                changeTransitionProbability(outgoingTransitions.get(i),
                        probabilities.get(i).divide(fracSum).doubleValue());
                // outgoingTransitions.get(i).setProbability(probabilities.get(i).divide(fracSum).doubleValue());
            }
            final double tempSum = getOutTransitions(state, true).stream().mapToDouble(t -> t.getProbability())
                    .sum();
            if (!Precision.equals(tempSum, 1.0)) {
                BigFraction preciseSum = BigFraction.ZERO;
                for (final BigFraction f : probabilities) {
                    preciseSum = preciseSum.add(f.divide(fracSum));
                }
                if (!preciseSum.equals(BigFraction.ONE)) {
                    throw new IllegalStateException(
                            "Probabilities do not sum up to one, but instead to " + tempSum);
                } else {
                    logger.warn(
                            "Probabilities do not sum up to one, but instead to {}. This is due to double underflows, but they sum up to one if using BigFraction. This small error will be ignored.",
                            tempSum);
                }
            }
        }
    }
    return true;
}

From source file:sadl.models.PDTTAold.java

boolean fixProbability(int state) {
    List<Transition> outgoingTransitions = getTransitions(state, true);
    final double sum = outgoingTransitions.stream().mapToDouble(t -> t.getProbability()).sum();
    // divide every probability by the sum of probabilities s.t. they sum up to 1
    if (!Precision.equals(sum, 1)) {
        logger.debug("Sum of transition probabilities for state {} is {}", state, sum);
        outgoingTransitions = getTransitions(state, true);
        outgoingTransitions.forEach(t -> changeTransitionProbability(t, t.getProbability() / sum));
        outgoingTransitions = getTransitions(state, true);
        final double newSum = outgoingTransitions.stream().mapToDouble(t -> t.getProbability()).sum();
        logger.debug("Corrected sum of transition probabilities is {}", newSum);
        if (!Precision.equals(newSum, 1.0)) {
            logger.debug("Probabilities do not sum up to one, so doing it again with the Fraction class");
            final List<BigFraction> probabilities = new ArrayList<>(outgoingTransitions.size());
            for (int i = 0; i < outgoingTransitions.size(); i++) {
                probabilities.add(i, new BigFraction(outgoingTransitions.get(i).getProbability()));
            }/*www . ja v a2  s  .c  o m*/
            BigFraction fracSum = BigFraction.ZERO;
            for (final BigFraction f : probabilities) {
                try {
                    fracSum = fracSum.add(f);
                } catch (final MathArithmeticException e) {
                    logger.error("Arithmetic Exception for fracSum={}, FractionToAdd={}", fracSum, f, e);
                    throw e;
                }
            }
            for (int i = 0; i < outgoingTransitions.size(); i++) {
                changeTransitionProbability(outgoingTransitions.get(i),
                        probabilities.get(i).divide(fracSum).doubleValue());
                // outgoingTransitions.get(i).setProbability(probabilities.get(i).divide(fracSum).doubleValue());
            }
            final double tempSum = getTransitions(state, true).stream().mapToDouble(t -> t.getProbability())
                    .sum();
            if (!Precision.equals(tempSum, 1.0)) {
                throw new IllegalStateException(
                        "Probabilities do not sum up to one, but instead to " + tempSum);
            }
        }
    }
    return true;
}