Example usage for org.apache.commons.math.random MersenneTwister nextDouble

List of usage examples for org.apache.commons.math.random MersenneTwister nextDouble

Introduction

In this page you can find the example usage for org.apache.commons.math.random MersenneTwister nextDouble.

Prototype

public double nextDouble() 

Source Link

Usage

From source file:br.upe.ecomp.doss.algorithm.bso.BSO.java

private void initializationPosition(int bee) {
    double[] position = new double[dimensions];
    MersenneTwister random = new MersenneTwister(System.nanoTime());
    double fitness;

    for (int i = 0; i < dimensions; i++) {
        double value = random.nextDouble();
        position[i] = (getProblem().getUpperBound(i) - getProblem().getLowerBound(i)) * value
                + getProblem().getLowerBound(i);

        if (position[i] > getProblem().getUpperBound(i)) {
            position[i] = getProblem().getUpperBound(i);
        } else if (position[i] < getProblem().getLowerBound(i)) {
            position[i] = getProblem().getLowerBound(i);
        }//from  ww  w .  j ava 2  s  .  c o  m
    }
    fitness = getProblem().getFitness(position);
    System.out.println("Current fitness in position: " + fitness);
    Bee beeAux = new Bee(dimensions);
    bees.add(bee, beeAux);
    bees.get(bee).updateCurrentPosition(position, fitness);
    bees.get(bee).updateBestPosition(position, fitness);

}

From source file:br.upe.ecomp.doss.algorithm.fss.FSS.java

private double[] getInitialPosition() {
    double[] position = new double[this.dimensions];
    // Random random = new Random(System.nanoTime());
    MersenneTwister random = new MersenneTwister(System.nanoTime());

    for (int i = 0; i < this.dimensions; i++) {
        double value = random.nextDouble();

        position[i] = (getProblem().getUpperBound(i) - getProblem().getLowerBound(i)) * value
                + getProblem().getLowerBound(i);

        if (position[i] > getProblem().getUpperBound(i)) {
            position[i] = getProblem().getUpperBound(i);
        } else if (position[i] < getProblem().getLowerBound(i)) {
            position[i] = getProblem().getLowerBound(i);
        }/*from w  w  w .  ja v  a  2  s .c o m*/
    }
    return position;
}

From source file:br.upe.ecomp.doss.algorithm.abc.ABC.java

private void sendEmployedBees() {

    MersenneTwister random = new MersenneTwister(System.nanoTime());
    double[] tempFood;
    double tempFitness;

    for (int i = 0; i < foodCount; i++) {
        double rand = random.nextDouble() * 32767 / ((double) (32767) + (double) (1));
        int param2change = (int) (rand * dimensions);

        rand = random.nextDouble() * 32767 / ((double) (32767) + (double) (1));
        int neighbour = (int) (rand * foodCount);

        tempFood = new double[dimensions];
        for (int j = 0; j < dimensions; j++) {
            tempFood[j] = foodSources[i].getCurrentPosition()[j];
        }//from   w  w w.j a  v  a  2  s  . co m

        rand = random.nextDouble() * 32767 / ((double) (32767) + (double) (1));
        tempFood[param2change] = foodSources[i].getCurrentPosition()[param2change]
                + (foodSources[i].getCurrentPosition()[param2change]
                        - foodSources[neighbour].getCurrentPosition()[param2change]) * (rand - 0.5) * 2;

        if (tempFood[param2change] < getProblem().getLowerBound(dimensions))
            tempFood[param2change] = getProblem().getLowerBound(dimensions);
        if (tempFood[param2change] > getProblem().getUpperBound(dimensions))
            tempFood[param2change] = getProblem().getUpperBound(dimensions);

        tempFitness = getProblem().getFitness(tempFood);

        if (getProblem().isFitnessBetterThan(foodSources[i].getCurrentFitness(), tempFitness)) {
            foodSources[i].updateCurrentPosition(tempFood, tempFitness);
            foodSources[i].updateBestPosition(tempFood, tempFitness);
            foodSources[i].setCountStagnation(0);

            double bestSolutionFitness = getProblem().getFitness(solution);
            if (getProblem().isFitnessBetterThan(bestSolutionFitness, tempFitness)) {
                solution = tempFood;
            }
        } else {
            foodSources[i].setCountStagnation(foodSources[i].getCountStagnation() + 1);
        }
    }
}

From source file:br.upe.ecomp.doss.algorithm.abc.ABC.java

/**
 * Each food source are initialized./*w w w .j a v  a2  s  .c  o  m*/
 */
private void initializeFoodSource(int index) {

    MersenneTwister mt = new MersenneTwister(System.nanoTime());
    double randNumber;
    double fitness;
    double[] position = new double[dimensions];

    for (int i = 0; i < dimensions; i++) {
        randNumber = mt.nextDouble() * 32767 / ((double) 32767 + (double) 1);
        position[i] = randNumber
                * (getProblem().getUpperBound(dimensions) - getProblem().getLowerBound(dimensions))
                + getProblem().getLowerBound(dimensions);
    }

    fitness = getProblem().getFitness(position);
    foodSources[index] = new FoodSource(dimensions);
    foodSources[index].updateCurrentPosition(position, fitness);
    foodSources[index].updateBestPosition(position, fitness);
    foodSources[index].setCountStagnation(0);
}

From source file:br.upe.ecomp.doss.algorithm.abc.ABC.java

private void sendOnlookerBees() {

    MersenneTwister random = new MersenneTwister(System.nanoTime());
    double[] tempFood;
    double tempFitness;

    int count = 0;
    int i = 0;/* www  . j a v  a2s . c  om*/

    while (count < foodCount) {

        double rand = random.nextDouble() * 32767 / ((double) (32767) + (double) (1));

        if (rand < foodSources[i].getProbabilitySelection()) {
            count++;

            rand = random.nextDouble() * 32767 / ((double) (32767) + (double) (1));
            int param2change = (int) (rand * dimensions);

            rand = random.nextDouble() * 32767 / ((double) (32767) + (double) (1));
            int neighbour = (int) (rand * foodCount);

            while (neighbour == i) {
                rand = random.nextDouble() * 32767 / ((double) (32767) + (double) (1));
                neighbour = (int) (rand * foodCount);
            }

            tempFood = new double[dimensions];
            for (int j = 0; j < dimensions; j++) {
                tempFood[j] = foodSources[i].getCurrentPosition()[j];
            }

            rand = random.nextDouble() * 32767 / ((double) (32767) + (double) (1));
            tempFood[param2change] = foodSources[i].getCurrentPosition()[param2change]
                    + (foodSources[i].getCurrentPosition()[param2change]
                            - foodSources[neighbour].getCurrentPosition()[param2change]) * (rand - 0.5) * 2;

            if (tempFood[param2change] < getProblem().getLowerBound(dimensions))
                tempFood[param2change] = getProblem().getLowerBound(dimensions);
            if (tempFood[param2change] > getProblem().getUpperBound(dimensions))
                tempFood[param2change] = getProblem().getUpperBound(dimensions);

            tempFitness = getProblem().getFitness(tempFood);

            if (getProblem().isFitnessBetterThan(foodSources[i].getCurrentFitness(), tempFitness)) {
                foodSources[i].updateCurrentPosition(tempFood, tempFitness);
                foodSources[i].updateBestPosition(tempFood, tempFitness);
                foodSources[i].setCountStagnation(0);

                double bestSolutionFitness = getProblem().getFitness(solution);
                if (getProblem().isFitnessBetterThan(bestSolutionFitness, tempFitness)) {
                    solution = tempFood;
                }
            } else {
                foodSources[i].setCountStagnation(foodSources[i].getCountStagnation() + 1);
            }
        }
        i++;
        if (i == foodCount)
            i = 0;
    }
}

From source file:br.upe.ecomp.doss.algorithm.pso.PSO.java

protected double[] getInitialPosition() {
    MersenneTwister random = new MersenneTwister(System.nanoTime());
    double[] position = new double[this.dimensions];

    for (int i = 0; i < this.dimensions; i++) {
        double value = random.nextDouble();

        position[i] = (getProblem().getUpperBound(i) - getProblem().getLowerBound(i)) * value
                + getProblem().getLowerBound(i);

        if (position[i] > getProblem().getUpperBound(i)) {
            position[i] = getProblem().getUpperBound(i);
        } else if (position[i] < getProblem().getLowerBound(i)) {
            position[i] = getProblem().getLowerBound(i);
        }// w  w  w . ja  v a 2 s . co m
    }
    return position;
}

From source file:br.upe.ecomp.doss.problem.movingpeaks.MovingPeaks.java

private double[] getMovingVector() {
    MersenneTwister random = new MersenneTwister(System.nanoTime());
    double[] vector = new double[dimensions];
    double movingLengthFraction = movingLength / dimensions;
    List<Integer> indexes = new ArrayList<Integer>();
    for (int i = 0; i < dimensions; i++) {
        indexes.add(i);/*  ww  w  . j a va  2s. c  om*/
    }

    int index;
    while (indexes.size() > 1) {
        index = indexes.remove(random.nextInt(indexes.size() - 1));
        vector[index] = movingLengthFraction * random.nextDouble();
    }
    vector[indexes.remove(0)] = movingLength - getLength(vector);

    return vector;
}

From source file:br.upe.ecomp.doss.algorithm.pso.PSOParticle.java

/**
 * Updates the current position of the particle.
 * /*w w w  .j  a v  a2s.  co  m*/
 * @param problem The problem that we are trying to solve.
 */
public void updateCurrentPosition(Problem problem) {
    MersenneTwister random = new MersenneTwister(System.nanoTime());
    double[] position = getCurrentPosition().clone();
    double nextPosition;
    double positionLimiter = 0.5;
    for (int i = 0; i < getDimensions(); i++) {
        nextPosition = position[i] + velocity[i];

        // if a particle exceeds the search space limit, so inverts the particle velocity on
        // that dimension which the search space limit was exceeded
        if (nextPosition >= problem.getUpperBound(i)) {
            position[i] = problem.getUpperBound(i) - velocity[i] * random.nextDouble() * positionLimiter;
        } else if (nextPosition <= problem.getLowerBound(i)) {
            position[i] = problem.getLowerBound(i) - velocity[i] * random.nextDouble() * positionLimiter;
        } else {
            position[i] = nextPosition;
        }
    }
    updateCurrentPosition(position, problem.getFitness(position));
}

From source file:br.upe.ecomp.doss.algorithm.volitiveapso.WeightedAPSOParticle.java

/**
 * Updates the current position of the particle and the fitness variation.
 * /*  w w w  . j  a v a 2 s . c o m*/
 * @param problem The problem that we are trying to solve.
 */
public void updateCurrentPosition(Problem problem) {
    MersenneTwister random = new MersenneTwister(System.nanoTime());
    double[] position = getCurrentPosition();
    double[] nextPosition = new double[getDimensions()];
    double newPosition;
    for (int i = 0; i < getDimensions(); i++) {
        newPosition = position[i] + getVelocity()[i];

        // if a particle exceeds the search space limit, so inverts the particle velocity on
        // that dimension which the search space limit was exceeded
        if (newPosition >= problem.getUpperBound(i)) {
            position[i] = problem.getUpperBound(i) - getVelocity()[i] * random.nextDouble();
        } else if (newPosition <= problem.getLowerBound(i)) {
            position[i] = problem.getLowerBound(i) - getVelocity()[i] * random.nextDouble();
        } else {
            position[i] = newPosition;
        }
        nextPosition[i] = position[i];

    }

    deltaFitness = problem.getFitness(nextPosition) - getCurrentFitness();
    if (problem.isFitnessBetterThan(getCurrentFitness(), problem.getFitness(nextPosition))
            && deltaFitness < 0) {
        deltaFitness *= -1;
    }

    // The particle never reduces its weight
    if (!problem.isFitnessBetterThan(getCurrentFitness(), problem.getFitness(nextPosition))) {
        deltaFitness = 0;
    }

    previousPosition = getCurrentPosition().clone();
    updateCurrentPosition(nextPosition, problem.getFitness(nextPosition));

    if (problem.isFitnessBetterThan(getBestFitness(), getCurrentFitness())) {
        updateBestPosition(getCurrentPosition(), getCurrentFitness());
    }

}

From source file:edu.cornell.med.icb.goby.modes.ReadQualityStatsMode.java

/**
 * Display the alignments as text files.
 *
 * @throws java.io.IOException error reading / writing
 *///  w ww. ja v a  2 s  .  c  o m
@Override
public void execute() throws IOException {
    PrintStream writer = null;
    try {
        numberOfSkippedReads = 0;
        numberOfObservedReads = 0;
        writer = outputFile == null ? System.out : new PrintStream(new FileOutputStream(outputFile));
        final Int2ObjectMap<ReadQualityStats> qualityStats = new Int2ObjectOpenHashMap<ReadQualityStats>();
        final ProgressLogger progress = new ProgressLogger(LOG);
        progress.start();
        final MersenneTwister random = new MersenneTwister(37);
        final boolean doSample = sampleFraction < 1.0d;
        writer.println("basename\treadIndex\t25%-percentile\tmedian\taverageQuality\t75%-percentile");
        for (final File filename : inputFiles) {
            final ReadsReader reader = new ReadsReader(filename);
            final String basename = ReadsReader.getBasename(filename.toString());
            for (final Reads.ReadEntry entry : reader) {
                if (!doSample || random.nextDouble() < sampleFraction) {
                    final ByteString qualityScores = entry.getQualityScores();
                    final int size = qualityScores.size();
                    for (int readIndex = 0; readIndex < size; readIndex++) {
                        final byte code = qualityScores.byteAt(readIndex);
                        ReadQualityStats stats = qualityStats.get(readIndex);
                        if (stats == null) {
                            stats = new ReadQualityStats(1.0d);
                            qualityStats.put(readIndex, stats);
                            stats.readIndex = readIndex;
                        }
                        stats.observe(code);
                    }
                    numberOfObservedReads++;
                } else {
                    numberOfSkippedReads++;
                }
                progress.lightUpdate();
            }

            for (final ReadQualityStats stat : qualityStats.values()) {
                if (!stat.sampleIsEmpty()) {
                    stat.evaluatePercentiles();
                    writer.printf("%s\t%d\t%d\t%d\t%f\t%d%n", basename, stat.readIndex, stat.percentile(25),
                            stat.percentile(50), stat.averageQuality / stat.observedCount, stat.percentile(75));
                }
            }
        }
        progress.updateAndDisplay();
        progress.stop();

    } finally {
        if (writer != System.out) {
            IOUtils.closeQuietly(writer);
        }
    }
}