package de.thmundt.particleklo; import java.text.DecimalFormat; import java.util.Date; import java.util.List; import java.util.Random; public class Main { final static int numOfParticles = 250000; final static double mu = 1.3; final static double sigma = 2.1; private static PathCreator creator = new PathCreator(); private static List paths = creator.createPaths(); private static List> eventchain = creator.getEventChains(); private static List allevents = creator.getEvents(); /** * @param args */ public static void main(String[] args) { Particle[] particles = new Particle[numOfParticles]; Random rand = new Random(); for (int i = 1; i < numOfParticles; i++) { Particle particle = new Particle(); double speed = 0; double gaussian; while (!(speed > 0.3 && speed < 3)) { gaussian = rand.nextGaussian(); speed = mu + sigma * gaussian; } particle.setSpeed(speed); particle.setPath(getDest(rand.nextDouble())); particles[i] = particle; } System.err.println("START"); Date starttime = new Date(); Date endtime; for (Event event : allevents) { if (event.getSensor().getName().equals("3.6.6") || event.getSensor().getName().equals("3.6.5")) { starttime = event.getAbsoluteTime(); } if (event.getSensor().getName().equals("3.6.11") || event.getSensor().getName().equals("3.6.54")) { endtime = event.getAbsoluteTime(); long difference = (endtime.getTime() - starttime.getTime()) / 1000; if (difference <= 120 && difference > 0) System.err.println(difference); } } System.err.println("ENDE"); List events = eventchain.get(286); double overallweight = 0; for (Event event : events) { long time = event.getTime(); int sumofweights = 0; int numberofparts = 0; for (int i = 1; i < numOfParticles; i++) { Particle particle = particles[i]; List sensors = particle.getPath().getSensors(); for (Sensor sensor : sensors) { if (event.getSensor() == sensor && particle.getDistance() >= sensor .getDistanceFrom() && particle.getDistance() <= sensor.getDistanceTo()) { particle.setTempWeight(particle.getTempWeight() + event.getSensor().getWeight()); sumofweights = sumofweights + event.getSensor().getWeight(); numberofparts++; } } particle.setDistance(particle.getDistance() + particle.getSpeed() * time); } System.err.println("Sum " + sumofweights + " " + numberofparts + " " + event.getSensor().getName()); double weightperparticle = 0; if (sumofweights > 0) { weightperparticle = 1 / (double) sumofweights; } System.err.println("WpP " + weightperparticle); for (int i = 1; i < numOfParticles; i++) { Particle particle = particles[i]; if (particle.getTempWeight() > 0) { particle.setWeight(particle.getWeight() + weightperparticle); overallweight = overallweight + weightperparticle; } particle.setTempWeight(0); } } for (int i = 1; i < numOfParticles; i++) { Particle particle = particles[i]; particle.setNormalizedweight(particle.getWeight() / overallweight); particles[i].getPath().setWeight( particles[i].getPath().getWeight() + particles[i].getWeight()); } System.err.println("---"); double overallpathweight = 0; for (Path path : paths) { double pathweight = path.getWeight() / path.getLikelihood(); path.setWeight(pathweight); overallpathweight = overallpathweight + pathweight; } for (Path path : paths) { path.setNormalizedweight(path.getWeight() / overallpathweight); DecimalFormat df = new DecimalFormat("0.000"); String zahl = df. format(path.getNormalizedweight() * 100); System.err.println(path.getName() + "\t" + zahl + "%"); path.setWeight(0); } System.err.println("Done"); } private static Path getDest(double random) { double distr = 0; for (Path path : paths) { distr = distr + path.getLikelihood(); if (random <= distr) return path; } System.err.println("Schiete"); System.err.println(random); return null; } }