From d6c3563bd036fbf7341400a55a03ca4bdf106a26 Mon Sep 17 00:00:00 2001
From: "Bernhard J. Berger" <bernhard.berger@uni-bremen.de>
Date: Fri, 10 Feb 2023 18:05:25 +0100
Subject: [PATCH] Adapted density.

---
 .../density/ea/fitness/DensityBasedFitness.java            | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/core/de.evoal.approximative.density/src/main/java/de/evoal/approximative/density/ea/fitness/DensityBasedFitness.java b/src/core/de.evoal.approximative.density/src/main/java/de/evoal/approximative/density/ea/fitness/DensityBasedFitness.java
index 8f321592..abaed5ee 100644
--- a/src/core/de.evoal.approximative.density/src/main/java/de/evoal/approximative/density/ea/fitness/DensityBasedFitness.java
+++ b/src/core/de.evoal.approximative.density/src/main/java/de/evoal/approximative/density/ea/fitness/DensityBasedFitness.java
@@ -114,8 +114,7 @@ public abstract class DensityBasedFitness extends FitnessDecorator {
             final double predictedValue = current[i];
             final double probability = probabilityCalculator.apply(sourceData, targetData, candidate, predictedValue);
 
-            // DO WE HAVE TO FIX THIS?
-            fitness[i] = current[i] * Math.pow(probability, rootExponent) + (1 - probability) * 1 / Math.pow(probability, exponent);
+            fitness[i] = current[i] * Math.pow(probability, rootExponent) + (1 - probability) * 1.0 / Math.pow(probability, exponent);
         }
 
         return fitness;
@@ -129,7 +128,7 @@ public abstract class DensityBasedFitness extends FitnessDecorator {
     }
 
     /**
-     * "This is fine."
+     * "Now, it's really fine."
      */
     private double sourceBasedProbabilityCalculator(final DensityData [] sourceData, final DensityData targetData, final Properties candidate, final double predicted) {
         double result = 1.0;
@@ -137,7 +136,7 @@ public abstract class DensityBasedFitness extends FitnessDecorator {
             final double probability = sourceData[i].probability(((Number)candidate.get(i)).doubleValue());
             final double offset = 1 / ((Number)ranges.get(surrogate.getInputSpecification().get(i))).doubleValue();
 
-            result *= Math.min(1.0, probability + offset);
+            result *= Math.pow(Math.min(1.0, probability + offset), 1.0 / candidate.size());
         }
 
         return result;
-- 
GitLab