diff --git a/pom.xml b/pom.xml index 71c05781f198c407585f3a9e96fe46560df21923..4bec365791a69cda675347ff6ad86540f4b2a943 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ </dependencies> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <maven.compiler.source>1.7</maven.compiler.source> - <maven.compiler.target>1.7</maven.compiler.target> + <maven.compiler.source>1.8</maven.compiler.source> + <maven.compiler.target>1.8</maven.compiler.target> </properties> </project> \ No newline at end of file diff --git a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java index c88cfc39e0e913e1276f51126d73be459058e272..419536bbbc6ce4e37a5c25971186e645e7145993 100644 --- a/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java +++ b/src/main/java/no/bioforsk/vips/model/roughagenutritionmodel/RoughageNutritionModelImpl.java @@ -260,7 +260,9 @@ public class RoughageNutritionModelImpl implements CostFunction { boolean first = true; Date forrigeDato = null; - for (Iterator<WeatherObservation> tempI = this.luftTemperaturVerdier.iterator(); tempI.hasNext();) { + // Avoiding concurrentmodificationexception + List<WeatherObservation> tempCopy = new ArrayList<>(this.luftTemperaturVerdier); + for (Iterator<WeatherObservation> tempI = tempCopy.iterator(); tempI.hasNext();) { temperatur = tempI.next(); // Beregner TS1 @@ -1612,9 +1614,7 @@ public class RoughageNutritionModelImpl implements CostFunction { NelderMead nelderMead = new NelderMead(); Collections.sort(this.observasjoner); // For å sikre oss mhp. en del datoavhengige rutiner - // Rekkefølge: - // 1. Optimerer parametre for utvikling - this.optimeringsMaal = RoughageNutritionModelImpl.OPTIMERING_UTVIKLING; + /** * Denne metoden forteller NelderMead-klassen om vi er "nær nok" til at @@ -1645,22 +1645,35 @@ public class RoughageNutritionModelImpl implements CostFunction { } }; + + // Optimize only if we've got optimization observations + boolean foundMSC = this.observasjoner.stream().filter( + (obs) -> obs.getMSC() != null + ).count() > 0; + + // Rekkefølge: + // 1. Optimerer parametre for utvikling + if(this.observasjoner.stream().filter( (obs) -> obs.getMSC() != null ).count() > 0) + { + + this.optimeringsMaal = RoughageNutritionModelImpl.OPTIMERING_UTVIKLING; - // Rekkefølge for elementene: {alfa} - // Max og min-verdier for de ulike elementene: - // alfa {0.002-0.004} - double[][] verticesUtvikling = {{0.0025}, {0.0035}}; + // Rekkefølge for elementene: {alfa} + // Max og min-verdier for de ulike elementene: + // alfa {0.002-0.004} + double[][] verticesUtvikling = {{0.0025}, {0.0035}}; - PointCostPair optimumUtvikling = nelderMead.minimize(this, 1000, cChecker, verticesUtvikling); - if (DEBUG) { - System.out.println("[GrovforModell/optimerParametre] DEBUG: alfa=" + optimumUtvikling.getPoint()[0]); - } - this.alfa = ((Double) optimumUtvikling.getPoint()[0]); - //this.AIbeta = ((Double) optimumUtvikling.getPoint()[1]).doubleValue(); - // Nullstiller AI-matrisen, slik at øvrige beregninger går som planlagt - this.AIBakgrunnsdataMatrise = null; + PointCostPair optimumUtvikling = nelderMead.minimize(this, 1000, cChecker, verticesUtvikling); + if (DEBUG) { + System.out.println("[GrovforModell/optimerParametre] DEBUG: alfa=" + optimumUtvikling.getPoint()[0]); + } + this.alfa = ((Double) optimumUtvikling.getPoint()[0]); + //this.AIbeta = ((Double) optimumUtvikling.getPoint()[1]).doubleValue(); + // Nullstiller AI-matrisen, slik at øvrige beregninger går som planlagt + this.AIBakgrunnsdataMatrise = null; + } // 2. Optimering av parametre for avling // Sjekker først om vi har observasjoner av avling i peroden før førsteslått og mellom førsteslått og andreslått. boolean avlingMaaltFoerFoersteslaatt = false; @@ -1938,6 +1951,7 @@ public class RoughageNutritionModelImpl implements CostFunction { } differanse += Math.pow(maaltUtviklingstrinn - beregnetUtviklingstrinn, 2); } + System.out.println("Differanse=" + differanse); return differanse; }