/*
Threads the find best k shapelets method
*/
package weka.filters.timeseries.shapelet_transforms;
import java.util.*;
import weka.core.Instances;
import weka.core.shapelet.Shapelet;
/**
*
* @author ajb
*/
public class ThreadedShapeletTransform extends ShapeletTransform implements Runnable{
public static int numThreads=16;
public int startInst,endInst;
public static Instances sharedInstances;
public static int numS;
public static int minL;
public static int maxL;
ArrayList<Shapelet> candidates;
ThreadedShapeletTransform(int s, int e){
startInst=s;
endInst=e;
}
@Override
public void run() {
//Performs find k best shapelets
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
/**
* protected method for extracting k shapelets.
*
* @param numShapelets the target number of shapelets to generate
* @param data the data that the shapelets will be taken from
* @param minShapeletLength the minimum length of possible shapelets
* @param maxShapeletLength the maximum length of possible shapelets
* Creates a new shapelet transform
*
*/
@Override
public ArrayList<Shapelet> findBestKShapeletsCache(int numShapelets, Instances data, int minShapeletLength, int maxShapeletLength)throws Exception{
//
sharedInstances =data;
numS=numShapelets;
minL=minShapeletLength;
maxL=maxShapeletLength;
ThreadedShapeletTransform[] splits = new ThreadedShapeletTransform[numThreads];
//Set the start and end instances for each thread.
int interval=sharedInstances.numInstances()/numThreads;
int s=0;
for(int i=0;i<numThreads-1;i++){
splits[i]=new ThreadedShapeletTransform(s,s+interval);
s+=interval;
}
splits[numThreads-1]=new ThreadedShapeletTransform(s,sharedInstances.numInstances());
Thread[] threads= new Thread[numThreads];
//Generate the candidate shapelets for each thread
try{
for(int i=0;i<numThreads;i++){
threads[i]=new Thread(threads[i]);
threads[i].start();
}
for(int i=0;i<numThreads;i++)
threads[i].join();
}catch(InterruptedException e){
System.out.println(" Fatal Error, thread interrupted, exit "+e);
}
//Wait for finish, then merge them back together.
ArrayList<Shapelet> all = mergeShapelets(splits);
return null;
}
public static ArrayList<Shapelet> mergeShapelets(ThreadedShapeletTransform[] s){
//Get all shapelets
TreeSet<Shapelet> all = new TreeSet<>();
for(ThreadedShapeletTransform sh:s)
all.addAll(sh.candidates);
//Extract out the top k
return null;
}
}