package net.seninp.tinker;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.seninp.gi.GIAlgorithm;
import net.seninp.gi.rulepruner.ReductionSorter;
import net.seninp.gi.rulepruner.RulePruner;
import net.seninp.gi.rulepruner.SampledPoint;
import net.seninp.jmotif.sax.NumerosityReductionStrategy;
import net.seninp.jmotif.sax.TSProcessor;
public class PaperWindowSampler {
private static final String IN_DATA = "RCode/TKDD/sine_and_5anomalies.txt";
private static final int SAMPLE_START = 745;
private static final int SAMPLE_END = 1070;
private static final int SAMPLE_STEP = 5;
private static final TSProcessor tp = new TSProcessor();
private static final Logger LOGGER = LoggerFactory.getLogger(PaperWindowSampler.class);
public static void main(String[] args) throws Exception {
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("RCode/TKDD/sine_and_5anomalies_out.txt")));
// HashMap<String, SampledPoint> res_global = new HashMap<String, SampledPoint>();
double[] ts = TSProcessor.readFileColumn(IN_DATA, 0, 0);
LOGGER.info("read " + ts.length + " points from " + IN_DATA);
for (int upperLimit = 10; upperLimit <= (SAMPLE_END
- SAMPLE_START); upperLimit += SAMPLE_STEP) {
ArrayList<SampledPoint> res = new ArrayList<SampledPoint>();
LOGGER.info("sampling interval " + SAMPLE_START + " - " + (SAMPLE_START + upperLimit));
double[] sampledTS = tp.subseriesByCopy(ts, SAMPLE_START, (SAMPLE_START + upperLimit));
RulePruner rp = new RulePruner(sampledTS);
for (int ws = 10; ws <= upperLimit; ws = ws + 1) {
for (int ps = 2; ps < 12; ps = ps + 1) {
// check for invalid cases
if (ps > ws) {
continue;
}
for (int as = 2; as < 12; as = as + 1) {
SampledPoint p = null;
p = rp.sample(ws, ps, as, GIAlgorithm.REPAIR, NumerosityReductionStrategy.NONE, 0.001);
if (null != p) {
res.add(p);
}
}
}
}
Collections.sort(res, new ReductionSorter());
SampledPoint best_point = res.get(0);
String str = SAMPLE_START + "," + (SAMPLE_START + upperLimit) + ","
+ best_point.toLogString();
System.out.println("*** " + str);
bw.write(str + "\n");
}
bw.close();
}
}