Skip to content
Snippets Groups Projects
Commit 8f6190fe authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Moved LloydMax to different folder.

parent 5314f8e8
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />
\ No newline at end of file
<module version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_9">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
</component>
</module>
\ No newline at end of file
import org.apache.commons.math3.distribution.CauchyDistribution;
import quantization.LloydMaxU16ScalarQuantization;
import quantization.Utils;
import quantization.de.DeException;
import quantization.de.DeHistory;
import quantization.de.jade.JadeSolver;
import quantization.utilities.Stopwatch;
import quantization.lloyd_max.LloydMaxIteration;
import quantization.lloyd_max.LloydMaxU16ScalarQuantization;
import quantization.utilities.Utils;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
class RunnableTest implements Runnable {
......@@ -31,15 +24,48 @@ class RunnableTest implements Runnable {
public class DataCompressor {
public static void main(String[] args) throws IOException {
final String sourceFile = "D:\\tmp\\server-dump\\small.bin";
final int NumberOfBits = 4;
final String sourceFile = "D:\\tmp\\server-dump\\initial_load.bin";
final int NumberOfBits = 5;
final int Dimension = (int) Math.pow(2, NumberOfBits);
int[] values = Utils.convertU16BytesToInt(Utils.readFileBytes(sourceFile));
// LloydMaxU16ScalarQuantization quantization = new LloydMaxU16ScalarQuantization(values, NumberOfBits);
// quantization.train();
//benchmarkLloydMax(values);
//lloydMax(NumberOfBits, values);
jade(Dimension, values);
}
private static void benchmarkLloydMax(final int[] values) {
for (int bitCount = 2; bitCount < 3; bitCount++) {
LloydMaxIteration[] solutionHistory = lloydMax(bitCount, values);
String fileName = String.format("lloyd_max_%dbits.csv", bitCount);
saveLloydMaxSolutionHistory(solutionHistory, fileName);
}
}
private static LloydMaxIteration[] lloydMax(final int noOfBits, final int[] values) {
LloydMaxU16ScalarQuantization quantization = new LloydMaxU16ScalarQuantization(values, noOfBits);
return quantization.train(true);
}
private static void saveLloydMaxSolutionHistory(final LloydMaxIteration[] solutionHistory, String filename) {
try {
FileOutputStream os = new FileOutputStream(filename);
OutputStreamWriter writer = new OutputStreamWriter(os);
writer.write("Iteration;Mse\n");
for (final LloydMaxIteration lmi : solutionHistory) {
writer.write(String.format("%d;%.5f\n", lmi.getIteration(), lmi.getMse()));
}
writer.flush();
writer.close();
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
JadeSolver jadeSolver = new JadeSolver(Dimension, 10 * Dimension, 250, 0.05, 0.1);
private static void jade(final int dimension, final int[] values) throws IOException {
JadeSolver jadeSolver = new JadeSolver(dimension, 5 * dimension, 250, 0.05, 0.1);
jadeSolver.setTrainingData(values);
DeHistory[] solutionHistory = null;
......
......@@ -8,7 +8,7 @@ import org.apache.commons.math3.random.MersenneTwister;
import org.apache.commons.math3.random.RandomGenerator;
import quantization.Quantizer;
import quantization.U16;
import quantization.Utils;
import quantization.utilities.Utils;
import quantization.de.DeHistory;
import quantization.de.IDESolver;
import quantization.de.IIndividual;
......@@ -48,7 +48,7 @@ public class JadeSolver implements IDESolver {
public JadeSolver() {
//rg = new MersenneTwister();
m_workerCount = Runtime.getRuntime().availableProcessors() - 1;
m_workerCount = Runtime.getRuntime().availableProcessors() - 4;
assert (m_workerCount > 0);
}
......@@ -434,7 +434,7 @@ public class JadeSolver implements IDESolver {
stopwatch.stop();
generationLog.append("Current best: ").append(m_currentPopulationSorted[0].getInfo());
generationLog.append(String.format("Average fitness(cost): %.6f\nIteration finished in: %d ms\n", avgFitness, stopwatch.totalElapsedMilliseconds()));
generationLog.append(String.format("\nAverage fitness(cost): %.6f\nIteration finished in: %d ms\n", avgFitness, stopwatch.totalElapsedMilliseconds()));
// System.out.println(String.format("Generation %d average fitness(COST): %.5f", (generation + 1), avgFitness));
System.out.println(generationLog.toString());
......
package quantization.lloyd_max;
import java.util.Arrays;
public class LloydMaxIteration {
private int m_interation;
private double m_mse;
private int[] m_centroids;
public LloydMaxIteration(final int iter, final double mse, final int[] centroids) {
m_interation = iter;
m_mse = mse;
m_centroids = Arrays.copyOf(centroids, centroids.length);
}
public int getIteration() {
return m_interation;
}
public double getMse() {
return m_mse;
}
public int[] getCentroids() {
return m_centroids;
}
}
package quantization;
package quantization.lloyd_max;
import quantization.U16;
import quantization.utilities.Utils;
import java.io.FileNotFoundException;
import java.util.ArrayList;
public class LloydMaxU16ScalarQuantization {
......@@ -129,35 +133,44 @@ public class LloydMaxU16ScalarQuantization {
return mse;
}
public void train() {
public LloydMaxIteration[] train(boolean verbose) {
initialize();
initializeProbabilityDensityFunction();
double prevMse = 1.0;
double currentMse = 1.0;
ArrayList<LloydMaxIteration> solutionHistory = new ArrayList<LloydMaxIteration>();
recalculateBoundaryPoints();
recalculateCentroids();
printCurrentConfigration();
if (verbose) {
printCurrentConfigration();
}
currentMse = getCurrentMse();
System.out.println(String.format("Current MSE: %f", currentMse));
int iter = 0;
solutionHistory.add(new LloydMaxIteration(iter++, currentMse, centroids));
double dist = 1;
do {
recalculateBoundaryPoints();
recalculateCentroids();
printCurrentConfigration();
if (verbose) {
printCurrentConfigration();
}
prevMse = currentMse;
currentMse = getCurrentMse();
solutionHistory.add(new LloydMaxIteration(iter++, currentMse, centroids));
dist = (prevMse - currentMse) / currentMse;
System.out.println(String.format("Current MSE: %f", currentMse));
} while (dist > 0.001);
LloydMaxIteration[] result = solutionHistory.toArray(new LloydMaxIteration[0]);
return result;
//recalculateCentroids2();
}
......
package quantization;
package quantization.utilities;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment