public class ClusterTester implements Runnable {
  ClusterWeightedStatePredictor cwsp;

  public static void main(String arg[]){
    (new Thread(new ClusterTester())).start();
  }
  
  ClusterTester()
  {}

  public void run() {
    FeatureVector f;
    ClusterViewer2D cv2d;
    State s1, s2, s3, s4;
    int ct;

    cwsp = new ClusterWeightedStatePredictor(5);

    s1 = new State("State1");
    s2 = new State("State2");
    s3 = new State("State3");
    s4 = new State("State4");

    f = new FeatureVector(2);
    f.vec[0] = f.vec[1] = 1.1;
    cwsp.train(f, s1);
    f = new FeatureVector(2);
    f.vec[0] = f.vec[1] = 1.2;
    cwsp.train(f, s1);
    f = new FeatureVector(2);
    f.vec[0] = f.vec[1] = 0.9;
    cwsp.train(f, s1);
    f = new FeatureVector(2);
    f.vec[0] = f.vec[1] = 1.3;
    cwsp.train(f, s1);

    f = new FeatureVector(2);
    f.vec[0] = f.vec[1] = 2.0;
    cwsp.train(f, s2);
    f = new FeatureVector(2);
    f.vec[0] = 1.9;
    f.vec[1] = 2.2;
    cwsp.train(f, s2);
    f = new FeatureVector(2);
    f.vec[0] = 1.8;
    f.vec[1] = 1.9;
    cwsp.train(f, s2);
    f = new FeatureVector(2);
    f.vec[0] = 2.3;
    f.vec[1] = 2.0;
    cwsp.train(f, s2);
    f = new FeatureVector(2);
    f.vec[0] = 1.4;
    f.vec[1] = 2.1;
    cwsp.train(f, s2);
    f = new FeatureVector(2);
    f.vec[0] = 0.7;
    f.vec[1] = 1.9;
    cwsp.train(f, s2);


    f = new FeatureVector(2);
    f.vec[0] = f.vec[1] = 3.0;
    cwsp.train(f, s3);
    f = new FeatureVector(2);
    f.vec[0] = 3.0;
    f.vec[1] = 4.3;
    cwsp.train(f, s3);
    f = new FeatureVector(2);
    f.vec[0] = 3.1;
    f.vec[1] = 4.2;
    cwsp.train(f, s3);
    f = new FeatureVector(2);
    f.vec[0] = 2.9;
    f.vec[1] = 3.5;
    cwsp.train(f, s3);
    f = new FeatureVector(2);
    f.vec[0] = 2.9;
    f.vec[1] = 1.4;
    cwsp.train(f, s3);
    f = new FeatureVector(2);
    f.vec[0] = 3.0;
    f.vec[1] = 2.0;
    cwsp.train(f, s3);
    f = new FeatureVector(2);
    f.vec[0] = 3.1;
    f.vec[1] = 2.6;
    cwsp.train(f, s3);
    f = new FeatureVector(2);
    f.vec[0] = 0.2;
    f.vec[1] = 0.4;
    cwsp.train(f, s3);
    f = new FeatureVector(2);
    f.vec[0] = 0.7;
    f.vec[1] = 3.4;
    cwsp.train(f, s3);
    f = new FeatureVector(2);
    f.vec[0] = 0.5;
    f.vec[1] = 2.9;
    cwsp.train(f, s3);

    /*    f = new FeatureVector(2);
    f.vec[0] = f.vec[1] = 1.0;
    cwsp.train(f, s1);
    f = new FeatureVector(2);
    f.vec[0] = 3.0;
    f.vec[1] = 2.0;
    cwsp.train(f, s2);
    f = new FeatureVector(2);
    f.vec[0] = 2.0;
    f.vec[1] = 3.0;
    cwsp.train(f, s3);*/



    cwsp.doneTraining();

    cv2d = new ClusterViewer2D(cwsp);
    cv2d.setBounds(0,0,500,500);
    cv2d.show();
    cv2d.repaint();
    for(ct=0;ct<100;ct++){
      cwsp.showClusters();
      cv2d.repaint();
//	System.in.readln();
      try { Thread.sleep(100); } catch (Exception e) {}
      System.out.println("--------------------------------------------");
      System.out.println("Updating clusters");
      cwsp.updateClusters();
      System.out.println("--------------------------------------------");
    }

  }
}


