@Override
	public void process(final JCommander jCommander) {
		Randomizer.setSeed(this.seed);

		final Environnement env = new Environnement(this.largeur, this.hauteur);
		final SMA sma = new SMA(env);
		boolean ok = false;

		// Ajout des agents poissons
		for (int i = 0; i < nbPoissons; i++) {
			ok = false;
			while (!ok) {
				try {
					final int posX = Randomizer.randomGenerator.nextInt((env
							.getLargeur() - AgentPhysique.getTaille())
							/ AgentPhysique.getTaille());
					final int posY = Randomizer.randomGenerator.nextInt((env
							.getHauteur() - AgentPhysique.getTaille())
							/ AgentPhysique.getTaille());
					sma.addAgent(new Animal(env, sma, posX, posY, Race.POISSON));
					ok = true;
				} catch (final IllegalArgumentException ignore) {
				}
			}
		}
		// Ajout des agents requins
		for (int i = 0; i < nbRequins; i++) {
			ok = false;
			while (!ok) {
				try {
					final int posX = Randomizer.randomGenerator.nextInt((env
							.getLargeur() - AgentPhysique.getTaille())
							/ AgentPhysique.getTaille());
					final int posY = Randomizer.randomGenerator.nextInt((env
							.getHauteur() - AgentPhysique.getTaille())
							/ AgentPhysique.getTaille());
					sma.addAgent(new Animal(env, sma, posX, posY, Race.REQUIN));
					ok = true;
				} catch (final IllegalArgumentException ignore) {
				}
			}
		}

		Race.REQUIN.getProies().add(Race.POISSON);
		Race.REQUIN.setAgeReproduction(ageReproductionRequins);
		Race.REQUIN.setNbJoursSubsistance(nbJoursSubsistanceRequins);
		Race.POISSON.setAgeReproduction(ageReproductionPoissons);
		final Vue vue = new Vue(sma);
		sma.addObserver(vue);
		vue.setSize(env.getLargeur(), (int) (env.getHauteur() * 1.05));
		// padding pour la taille de la fenetre
		vue.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		vue.setVisible(true);
		final long start = Calendar.getInstance().getTimeInMillis();
		final long stop = this.tempsArret * 1000;
		int nbTours = 0;
		double tempsTotalRun = 0;
		while (stop == 0
				|| Calendar.getInstance().getTimeInMillis() - start < stop) {
			final long startTour = Calendar.getInstance().getTimeInMillis();
			sma.run();
			// on enlève les agents morts et on ajoute les nouveaux
			synchronized (sma) {
				sma.update();
			}
			tempsTotalRun += Calendar.getInstance().getTimeInMillis()
					- startTour;
			nbTours++;
			 Analyseur analyseur = new AnalyseurWator();
			 analyseur.updateInfos(sma.getAgents());
			try {
				Thread.sleep(this.tempsAttente);
			} catch (final InterruptedException ignore) {
			}
		}
		System.out.println(nbTours + " tours d'une moyenne de " + tempsTotalRun
				/ nbTours + " millisecondes chacun");
		System.exit(0);

	}