List of usage examples for org.apache.commons.math.util MathUtils distance
public static double distance(int[] p1, int[] p2)
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; }