Aktualisieren
FeatureConstruction hat einen logischen Fehler beim Klassifizieren. Sie gehen davon aus, dass der Parameter "Training" nicht mehr als 2 Elemente enthält.
public double classify(Dataset training, Dataset testing) {
// initial the threshold and two classes
Object[] clzz = new Object[training.classes().size()]; // <--- Init the array to the size of training
int index = 0;
for (Object o : training.classes()) {
clzz[index] = o; //<-- Now everything in training has a place to be.
index++;
}
Vom stacktrace Sie das Problem ist die Bereitstellung initialisiert auf Linie 87 der Klasse; Die Ausnahme wird jedoch aus Zeile 192 der Klasse FeatureConstruction innerhalb desselben Pakets ausgelöst. Es scheint, als gäbe es eine implizite Abhängigkeit zwischen Particle.getPosition() und Problem.fitness (Position), die nicht erfüllt ist.
Ich würde vermuten, dass ProblemFeatureConstruction erstreckt, und dass die Frage der staatlichen Verwaltung und Erwartungen zwischen dem Problem Implementierung und der übergeordneten Klasse in Beziehung steht.
Ich würde empfehlen, die Variablen in der Aufrufliste bis FeatureConstruction.classify() zu überprüfen. Bestimmen Sie, wie der Status des Problems ist, wie es zu diesem bestimmten Aufruf gehört, und erstellen Sie einen JUnit-Test, um die Bedingung zu replizieren. Dies kann dazu beitragen, das Problem zu isolieren und die Durchführung von Teständerungen zu beschleunigen.
Der Junit-Test hilft beim Verständnis des Zustands der Klassen und ermöglicht möglicherweise, dass Prüfungen durchgeführt werden, um diesen Zustand zu verhindern. Am Ende des Tages erwarte ich, dass mindestens eines von drei Dingen der Übeltäter sein wird:
- FeatureConstruction hat ein logisches Problem in der Klassifizierungsfunktion.
- Problem (angenommene Erweiterung von FeatureConstruction) berücksichtigt nicht den Status der übergeordneten Klasse und es fehlt eine Art von Initialisierungs- oder Aktualisierungsaufruf, um das übergeordnete Datenmodell synchron zu halten.
- Der Prozess, der die Abhängigkeit zwischen dem Problem und dem Partikel steuert, weist in einem Fall einen logischen Fehler auf und das Setup konfiguriert die Datenzuordnung falsch.
Hoffe, dass hilft.
Wie sieht dein 'Problem' aus? Wenn Sie 'p_i.getPosition()' und 'getProblem(). Fitness (was auch immer)' aufteilen, macht es außerdem deutlich, von welcher Anweisung Ihre Exception kommt. Wie folgt: 'double temp = p_i.getPosition(); getProblem(). fitness (temp); ' – MikaelF
danke @MikaelF für Ihre Antwort. Das Problem ist nur eine Klasse, die bestimmte Methoden verwendet. für Ihren Vorschlag habe ich sie verschüttet und bekomme immer noch den gleichen Fehler (Liste temp = p_i.getPosition(); double new_fitness = getProblem().Fitness (temp);) –
anas
Ja, aber welche Linie wirft die Ausnahme? (Statt Zeile 84) – MikaelF