Hallo Leute,
ich schreibe derzeit eine Anwendung, die mehrere Simulationen ausführt und Ergebnisse anschließend in der Datenbank ablegt. Ein wichtiges Datum ist die Fitness von simulierten Individuen. Dieser Wert scheint jedoch niemals größer als 10 zu werden. Um eine mögliche Fehlerquelle zu ermitteln, habe ich versucht das Programm schrittweise nachzuvollziehen.
Wenn ich mehrmals an "breakpoint 1" anhalte, wird die Fitness wie gewünscht (zB. bis zu 40 oder 60, wegen mehrmaligen Treffern durch den Agressor) erhöht. Anschließend kann ich an "breakpoint 2" eine korrekt sortierte Liste mit Fitness-Werten über 10 feststellen.
Wenn ich "breakpoint 1" nicht verwende und nach Programmstart zum ersten Mal an "breakpoint 2" anhalte, enthält die Liste keine Werte über 10. Ich kann mir dieses Problem nicht erklären, noch weis ich wo ich suchen soll. Dieses Verhalten scheint jeglicher Logik zu widersprechen.
Hinweis: "hitWithMissile" wird während der Simulation häufiger ausgeführt, "naturalSelection" anschließend nur einmal.
Hat jemand Erfahrungen damit? Ich hoffe ihr könnt mir weiterhelfen.
liebe Grüße,
Athena
ich schreibe derzeit eine Anwendung, die mehrere Simulationen ausführt und Ergebnisse anschließend in der Datenbank ablegt. Ein wichtiges Datum ist die Fitness von simulierten Individuen. Dieser Wert scheint jedoch niemals größer als 10 zu werden. Um eine mögliche Fehlerquelle zu ermitteln, habe ich versucht das Programm schrittweise nachzuvollziehen.
Wenn ich mehrmals an "breakpoint 1" anhalte, wird die Fitness wie gewünscht (zB. bis zu 40 oder 60, wegen mehrmaligen Treffern durch den Agressor) erhöht. Anschließend kann ich an "breakpoint 2" eine korrekt sortierte Liste mit Fitness-Werten über 10 feststellen.
Wenn ich "breakpoint 1" nicht verwende und nach Programmstart zum ersten Mal an "breakpoint 2" anhalte, enthält die Liste keine Werte über 10. Ich kann mir dieses Problem nicht erklären, noch weis ich wo ich suchen soll. Dieses Verhalten scheint jeglicher Logik zu widersprechen.
Java:
@Override
public void hitWithMissile(Agent aggressor, Agent victim, float e) {
float f = aggressor.getTeam() == victim.getTeam() ? -15f : 5f;
aggressor.setFitness(aggressor.getFitness() + f); // breakpoint 1
}
@Override
public List<Agent> naturalSelection(List<Agent> agents,
float selectionPressure, int populationSize) {
int newSize = Math.max(
Math.min((int) (selectionPressure * populationSize),
agents.size()), 1);
Collections.sort(agents);
Collections.reverse(agents);
List<Agent> result = new ArrayList<Agent>(); // breakpoint 2
for (int k = 0; k < newSize; k++) {
result.add(agents.get(k));
}
return result;
}
Hinweis: "hitWithMissile" wird während der Simulation häufiger ausgeführt, "naturalSelection" anschließend nur einmal.
Hat jemand Erfahrungen damit? Ich hoffe ihr könnt mir weiterhelfen.
liebe Grüße,
Athena
Zuletzt bearbeitet: