Example usage for org.apache.commons.math.util MathUtils distance

List of usage examples for org.apache.commons.math.util MathUtils distance

Introduction

In this page you can find the example usage for org.apache.commons.math.util MathUtils distance.

Prototype

public static double distance(int[] p1, int[] p2) 

Source Link

Document

Calculates the L2 (Euclidean) distance between two points.

Usage

From source file:br.upe.ecomp.doss.algorithm.apso.APSO.java

private double calculateMeanDistanceToOtherPaticles(int index) {
    double euclideanDistance = 0;
    for (int i = 0; i < getParticles().length; i++) {
        if (index != i) {
            euclideanDistance += MathUtils.distance(getParticles()[index].getCurrentPosition(),
                    getParticles()[i].getCurrentPosition());
        }//from  w  w  w  . j  ava 2 s .  c o  m
    }
    return euclideanDistance / (getParticles().length - 1);
}

From source file:acromusashi.stream.ml.clustering.kmeans.KmeansCalculator.java

/**
 * ???????/*w  w  w .  j a va 2s.  c  om*/
 * 
 * @param basePoints ??
 * @param newPoints ?
 * @param convergenceThres ??
 * @return ?????true?????????false
 */
public static boolean isConvergenced(List<KmeansPoint> basePoints, List<KmeansPoint> newPoints,
        double convergenceThres) {
    boolean result = true;

    for (int pointIndex = 0; pointIndex < basePoints.size(); pointIndex++) {
        double distance = MathUtils.distance(basePoints.get(pointIndex).getDataPoint(),
                newPoints.get(pointIndex).getDataPoint());
        if (distance > convergenceThres) {
            result = false;
            break;
        }
    }

    return result;
}

From source file:br.upe.ecomp.doss.algorithm.volitivepso.VolitivePSO.java

private void performCollectiveVolitiveMovement() {

    RandomData random = new RandomDataImpl();
    double[] barycenter = calculateBarycenter();

    double actualSwarmWeight = getSwarmWeigth();

    double euclidianDistance;
    double[] position;
    double currentPosition;

    WeightedPSOParticle[] particles = (WeightedPSOParticle[]) getParticles();
    for (WeightedPSOParticle particle : particles) {

        euclidianDistance = MathUtils.distance(particle.getCurrentPosition(), barycenter);
        position = new double[getDimensions()];

        for (int i = 0; i < getDimensions(); i++) {
            currentPosition = particle.getCurrentPosition()[i];

            if (actualSwarmWeight > previousSwarmWeight) {

                position[i] = currentPosition - stepVol[i] * random.nextUniform(0.0, 1.0)
                        * ((currentPosition - barycenter[i]) / euclidianDistance);
            } else {
                position[i] = currentPosition + stepVol[i] * random.nextUniform(0.0, 1.0)
                        * ((currentPosition - barycenter[i]) / euclidianDistance);
            }//from  w  ww.  ja v  a 2s  .  co m
            if (position[i] > getProblem().getUpperBound(i) || position[i] < getProblem().getLowerBound(i)) {
                position[i] = currentPosition;
            }
        }

        // if (getProblem().compareFitness(fish.getCurrentFitness(),
        // getProblem().getFitness(position))) {
        particle.updateCurrentPosition(position, getProblem().getFitness(position));

        if (getProblem().isFitnessBetterThan(particle.getBestFitness(), particle.getCurrentFitness())) {
            particle.updateBestPosition(particle.getCurrentPosition(), particle.getCurrentFitness());
        }
        // }
    }

    previousSwarmWeight = actualSwarmWeight;
}

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

private void performCollectiveVolitiveMovement() {
    RandomData random = new RandomDataImpl();
    double[] barycenter = calculateBarycenter();

    double actualSwarmWeight = getSwarmWeigth();

    double euclidianDistance;
    double[] position;
    double currentPosition;

    WeightedAPSOParticle[] particles = (WeightedAPSOParticle[]) getParticles();
    for (WeightedAPSOParticle particle : particles) {

        euclidianDistance = MathUtils.distance(particle.getCurrentPosition(), barycenter);
        position = new double[getDimensions()];

        for (int i = 0; i < getDimensions(); i++) {
            currentPosition = particle.getCurrentPosition()[i];

            if (actualSwarmWeight > previousSwarmWeight) {

                position[i] = currentPosition - stepVol[i] * random.nextUniform(0.0, 1.0)
                        * ((currentPosition - barycenter[i]) / euclidianDistance);
            } else {
                position[i] = currentPosition + stepVol[i] * random.nextUniform(0.0, 1.0)
                        * ((currentPosition - barycenter[i]) / euclidianDistance);
            }//from  w  w w . j a  v a2s  .  c  o m
            if (position[i] > getProblem().getUpperBound(i) || position[i] < getProblem().getLowerBound(i)) {
                position[i] = currentPosition;
            }
        }

        // if (getProblem().compareFitness(fish.getCurrentFitness(),
        // getProblem().getFitness(position))) {
        particle.updateCurrentPosition(position, getProblem().getFitness(position));

        if (getProblem().isFitnessBetterThan(particle.getBestFitness(), particle.getCurrentFitness())) {
            particle.updateBestPosition(particle.getCurrentPosition(), particle.getCurrentFitness());
        }
        // }
    }

    previousSwarmWeight = actualSwarmWeight;
}

From source file:acromusashi.stream.ml.clustering.kmeans.KmeansCalculator.java

/**
 * ????????????/*from   w w  w . jav a  2s .c  o  m*/
 * 
 * @param targetPoint ?
 * @param centroids ?
 * @return Kmeans?
 */
public static KmeansResult nearestCentroid(double[] targetPoint, double[][] centroids) {
    int nearestCentroidIndex = 0;
    Double minDistance = Double.MAX_VALUE;
    double[] currentCentroid = null;
    Double currentDistance;
    for (int index = 0; index < centroids.length; index++) {
        currentCentroid = centroids[index];
        if (currentCentroid != null) {
            currentDistance = MathUtils.distance(targetPoint, currentCentroid);
            if (currentDistance < minDistance) {
                minDistance = currentDistance;
                nearestCentroidIndex = index;
            }
        }
    }

    currentCentroid = centroids[nearestCentroidIndex];

    KmeansResult result = new KmeansResult();
    result.setDataPoint(targetPoint);
    result.setCentroidIndex(nearestCentroidIndex);
    result.setCentroid(currentCentroid);
    result.setDistance(minDistance);

    return result;
}

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

private void performCollectiveVolitiveMovement() {
    RandomData random = new RandomDataImpl();
    double[] barycenter = calculateBarycenter();

    double actualFishSchoolWeight = getFishSchoolWeigth();

    double euclidianDistance;
    double[] position;
    double currentPosition;
    for (Fish fish : fishSchool) {

        euclidianDistance = MathUtils.distance(fish.getCurrentPosition(), barycenter);
        position = new double[dimensions];

        for (int i = 0; i < dimensions; i++) {
            currentPosition = fish.getCurrentPosition()[i];

            if (actualFishSchoolWeight > previousFishSchoolWeight) {

                position[i] = currentPosition - stepVol[i] * random.nextUniform(0.0, 1.0)
                        * ((currentPosition - barycenter[i]) / euclidianDistance);
                // * ((currentPosition - barycenter[i]) / euclidianDistance);
            } else {
                position[i] = currentPosition + stepVol[i] * random.nextUniform(0.0, 1.0)
                        * ((currentPosition - barycenter[i]) / euclidianDistance);
                // * ((currentPosition - barycenter[i]) / euclidianDistance);
            }/*  w  w w .  j  a  v  a 2  s.  c om*/
            // * ((currentPosition - barycenter[i]) / euclidianDistance);
            if (position[i] > getProblem().getUpperBound(i) || position[i] < getProblem().getLowerBound(i)) {
                position[i] = currentPosition;
            }
        }

        // if (getProblem().compareFitness(fish.getCurrentFitness(),
        // getProblem().getFitness(position))) {
        fish.updateCurrentPosition(position, getProblem().getFitness(position));

        if (getProblem().isFitnessBetterThan(fish.getBestFitness(), fish.getCurrentFitness())) {
            fish.updateBestPosition(fish.getCurrentPosition(), fish.getCurrentFitness());
        }
        // }
    }

    previousFishSchoolWeight = actualFishSchoolWeight;
}

From source file:acromusashi.stream.ml.clustering.kmeans.KmeansCalculator.java

/**
 * ????????????/*w  w w  . j a v  a 2s .  c  om*/
 * 
 * @param targetPoint ?
 * @param centroids 
 * @return Kmeans?
 */
public static KmeansResult nearestCentroid(KmeansPoint targetPoint, List<KmeansPoint> centroids) {
    int nearestCentroidIndex = 0;
    Double minDistance = Double.MAX_VALUE;
    KmeansPoint currentCentroid = null;
    Double currentDistance;
    for (int index = 0; index < centroids.size(); index++) {
        currentCentroid = centroids.get(index);
        if (currentCentroid != null && currentCentroid.getDataPoint() != null) {
            currentDistance = MathUtils.distance(targetPoint.getDataPoint(), currentCentroid.getDataPoint());
            if (currentDistance < minDistance) {
                minDistance = currentDistance;
                nearestCentroidIndex = index;
            }
        }
    }

    currentCentroid = centroids.get(nearestCentroidIndex);

    KmeansResult result = new KmeansResult();
    result.setDataPoint(targetPoint.getDataPoint());
    result.setCentroidIndex(nearestCentroidIndex);
    result.setCentroid(currentCentroid.getDataPoint());
    result.setDistance(minDistance);

    return result;
}

From source file:acromusashi.stream.ml.clustering.kmeans.KmeansCalculator.java

/**
 * ??????????/*from w  w w.  j a  v a2  s  .co  m*/
 * 
 * @param targetPoint ?
 * @param dataSet 
 * @return ??????
 */
public static KmeansResult classify(KmeansPoint targetPoint, KmeansDataSet dataSet) {
    // KMean?
    int nearestCentroidIndex = 0;
    Double minDistance = Double.MAX_VALUE;
    double[] currentCentroid = null;
    Double currentDistance;
    for (int index = 0; index < dataSet.getCentroids().length; index++) {
        currentCentroid = dataSet.getCentroids()[index];
        if (currentCentroid != null) {
            currentDistance = MathUtils.distance(targetPoint.getDataPoint(), currentCentroid);
            if (currentDistance < minDistance) {
                minDistance = currentDistance;
                nearestCentroidIndex = index;
            }
        }
    }

    currentCentroid = dataSet.getCentroids()[nearestCentroidIndex];

    KmeansResult result = new KmeansResult();
    result.setDataPoint(targetPoint.getDataPoint());
    result.setCentroidIndex(nearestCentroidIndex);
    result.setCentroid(currentCentroid);
    result.setDistance(minDistance);

    return result;
}

From source file:acromusashi.stream.ml.anomaly.lof.LofCalculator.java

/**
 * ?????DataId???<br>/*from w  w  w.jav  a 2s .c o m*/
 * ????????????????
 * <ol>
 * <li>??K????</li>
 * <li>????K????</li>
 * </ol>
 * 
 * @param addedPoint 
 * @param dataSet 
 * @param deleteId ?Id
 * @return ?????DataId?
 */
protected static Set<String> generateUpdateTargets(LofPoint addedPoint, LofDataSet dataSet, String deleteId) {
    Set<String> updateTargets = new HashSet<>();
    // ??????????????K??K??????????
    // ????????????????????
    // 1.??K????
    // 2.??????K????
    updateTargets.add(addedPoint.getDataId());
    Collection<LofPoint> pointList = dataSet.getDataMap().values();
    for (LofPoint targetPoint : pointList) {
        boolean isDeteted = false;
        boolean kDistUpdate = false;

        // ???
        if (StringUtils.equals(addedPoint.getDataId(), targetPoint.getDataId()) == true) {
            continue;
        }

        // 1.??K?????
        // K?2030?????????List??contains?????????
        if (deleteId != null && targetPoint.getkDistanceNeighbor().contains(deleteId) == true) {
            isDeteted = true;
        }

        // 2.??????K?????
        if (MathUtils.distance(addedPoint.getDataPoint(), targetPoint.getDataPoint()) < targetPoint
                .getkDistance()) {
            kDistUpdate = true;
        }

        if (isDeteted || kDistUpdate) {
            updateTargets.add(targetPoint.getDataId());
        }
    }

    return updateTargets;
}

From source file:acromusashi.stream.ml.clustering.kmeans.KmeansCalculator.java

/**
 * ????????//  www.j ava2  s .  c  om
 * 
 * @param basePoints ??
 * @param centroids ??
 * @return ?????
 */
public static double[] computeDxs(List<KmeansPoint> basePoints, List<KmeansPoint> centroids) {
    double[] dxs = new double[basePoints.size()];

    double sum = 0.0d;
    double[] nearestCentroid;
    for (int pointIndex = 0; pointIndex < basePoints.size(); pointIndex++) {
        // ??????(dx)????????
        KmeansPoint targetPoint = basePoints.get(pointIndex);
        KmeansResult kmeanResult = KmeansCalculator.nearestCentroid(targetPoint, centroids);
        nearestCentroid = kmeanResult.getCentroid();
        double dx = MathUtils.distance(targetPoint.getDataPoint(), nearestCentroid);
        double probabilityDist = Math.pow(dx, 2);
        sum += probabilityDist;
        dxs[pointIndex] = sum;
    }

    return dxs;
}