@Override
public void runDuringSimulation(
final EnvironmentEA env,
final Wink simZyk,
final ParCollection params) {
EnvironmentEA umg = env;
// Umschalten Evolution ==> Simulation?
if (simZyk.getLastTick() <= params.getParValueDouble("TimeToTermination") - 25000) {
RobEA[] nachbarschaft;
LinkedList<RobEA> nahe;
boolean versetzen = false;
double grenze = ((Double) params.getParValue(this.selRadPar))
* params.getParValueDouble(eas.statistics.ConstantsStatistics.VERZERR_ATTR);
ArrayList<RobEA> akteure = new ArrayList<RobEA>(umg.getRobAgents()
.size());
while (akteure.size() != umg.getRobAgents().size()) {
int i = this.random.nextInt(umg.getRobAgents().size());
if (!akteure.contains(umg.getRobAgents().get(i))) {
akteure.add(umg.getRobAgents().get(i));
}
}
if (this.singlePars == null) {
this.singlePars = new LinkedList<String>();
}
for (RobEA r1 : akteure) {
r1.setVersetzt(false);
nachbarschaft = umg.holeNahe(r1.getPosition().x, r1
.getPosition().y, umg.getRobAgents().size());
nahe = new LinkedList<RobEA>();
for (RobEA r2 : nachbarschaft) {
if (r1.getPosition().distance(r2.getPosition()) < grenze) {
nahe.add(r2);
} else {
break;
}
}
if (nahe.size() > 1) {
versetzen = true;
} else {
versetzen = false;
}
if (versetzen) {
this.versetzte++;
for (RobEA r : nahe) {
LinkedList<Integer>[] listeV = new LinkedList[1];
LinkedList<Integer>[] listeVStd = new LinkedList[1];
listeV[0] = new LinkedList<Integer>(
r1.getVerhCodes()[0]);
listeVStd[0] = new LinkedList<Integer>(r1
.erzeugeSequenz(0));
r.erzeugeAusSequenz(0, new EndlicherAutomat()
.bereinige(StaticMethods
.stringAusListSeq(listeVStd[0])), null,
false);
r.setVerhCodes(listeV);
r.setTransCode(0, StaticMethods
.listSeqAusString(new EndlicherAutomat()
.bereinige(ConstantsTranslator.STD_TRANS_STR)));
}
umg.setzeRobotRand(r1);
r1.setVersetzt(true);
String gs = "g"
+ this.anzahlGute(umg, params)
+ " / s"
+ (umg.getRobAgents().size() - this.anzahlGute(umg,
params));
this.singlePars.add(this.versetzte + " - " + gs);
}
}
String gs = "g" + this.anzahlGute(umg, params) + " / s"
+ (umg.getRobAgents().size() - this.anzahlGute(umg, params));
//
// this.singlePars.add(this.versetzte + " - " + gs);
BufferedImage img = new BufferedImage(100, 40,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = img.createGraphics();
g.setBackground(Color.black);
g.setColor(Color.yellow);
g.drawString("" + this.versetzte, 10, 20);
g.drawString(gs, 15, 30);
AllroundVideoPlugin video = (AllroundVideoPlugin) umg
.getPluginObject(new AllroundVideoPlugin().id());
if (video != null) {
video.setDarBild(img);
}
if (this.anzahlGute(umg, params) == 0
|| this.anzahlGute(umg, params) == umg.getRobAgents().size()) {
this.anz++;
}
if (this.anz > 100) {
String zus = "";
if (this.anzahlGute(umg, params) == 0) {
zus = "_alleschlecht";
}
if (this.anzahlGute(umg, params) == umg.getRobAgents().size()) {
zus = "_allegut";
}
StaticMethods.speichereTextAusArray(params.getStdDirectory(), params
.getParValue("avifile")
+ zus + ".txt", this.singlePars, params);
this.gespeichert = true;
umg.beendeSimulation();
}
if (simZyk.isTick() && simZyk.getLastTick() % 100 == 0) {
StaticMethods.log(StaticMethods.LOG_INFO, this.id() + " - " + gs,
params);