/*
* Datei: SemStatistik.java
* Autor(en): Lukas K�nig
* Java-Version: 1.4
* Erstellt (vor): 09.01.2008
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/
package fmg.fmg8.statistik;
import fmg.fmg8.endlAutomat.ZInfo;
import fmg.fmg8.graphVis.graph.Knoten;
import fmg.fmg8.sonstiges.DateiFilter;
import fmg.fmg8.umgebung2D.Roboter;
import fmg.fmg8.umgebung2D.VisMantel;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
/**
* Klasse f�r statistische Operationen semantischer Natur auf Roboterautomaten.
*
* @author Lukas K�nig
*/
public final class SemStatistik {
/**
* Konstruktor.
*/
private SemStatistik() {
}
/**
* Gibt die Anzahl der Automaten in der Liste graphen zur�ck, die
* mindestens einen Zustand mit dem �bergebenen Befehl haben.
*
* @param bef Der zu suchende Befehl.
* @param positiv Ob in den Positiven gesucht werden soll (sonst
* negativ).
* @param erreichbar Ob nur vom Startzustand aus erreichbare Zust�nde
* ber�cksichtigt werden sollen.
* @param verzeichnis Das Verzeichnis, in dem die Graphen gespeichert sind.
*/
private void anzahlBef(final int bef,
final boolean positiv,
final boolean erreichbar,
final String verzeichnis) {
File verz = new File(verzeichnis);
String endung = fmg.fmg8.graphVis.Konstanten.GRAPH_ENDUNG;
String[] gespGr = verz.list(new DateiFilter(endung));
ArrayList<Integer> a;
Iterator<Integer> it2;
int anzahl = 0;
Roboter aktRob;
Knoten l;
int gesAnz = 0;
String[] verzPar = {"verz", verzeichnis};
Parametersatz params = new Parametersatz(verzPar);
params.ergaenze();
if (positiv) {
System.out.println("Positive Automaten:");
} else {
System.out.println("Negative Automaten:");
}
for (int i = 0; i < gespGr.length; i++) {
System.gc();
if ((!positiv
&& (gespGr[i].contains("-")
|| gespGr[i].contains("_0")))
|| positiv
&& !(gespGr[i].contains("-")
|| gespGr[i].contains("_0"))) {
gesAnz++;
aktRob = new VisMantel(
gespGr[i].substring(0, gespGr[i].length() - 4),
null,
null,
null,
null,
-1,
params,
false,
null).getRob();
a = aktRob.vAuts()[0].getKnList();
it2 = a.iterator();
while (it2.hasNext()) {
l = aktRob.vAuts()[0].holeKnoten(it2.next());
if (((ZInfo) ((Knoten) l).getInfo()).getAktion()
== bef) {
if (!erreichbar
|| aktRob.vAuts()[0].erreichbar(null,
l.holeName())) {
anzahl++;
System.out.println(anzahl
+ "/"
+ gesAnz
+ " "
+ gespGr[i]);
break;
}
}
}
}
}
}
/**
* Hauptmethode.
*
* @param args Argumentenliste (0: Verzeichnisname f�r Statistikgraphen).
*/
public static void main(final String[] args) {
SemStatistik stats = new SemStatistik();
stats.anzahlBef(3, true, true, args[0]);
stats.anzahlBef(3, false, true, args[0]);
}
}