From 29522e6a2965e09b7de63cc767f417da04767000 Mon Sep 17 00:00:00 2001
From: Eilert Tunheim <emtunhei@stud.ntnu.no>
Date: Wed, 4 May 2022 13:25:33 +0200
Subject: [PATCH] went back to logistic non linear regression, fits better now

---
 .../java/com/application/DB/Constants.java    |   2 +-
 .../GUI/LineChartFunctionality.java           |  41 ++++++++++++++----
 src/main/java/com/application/Main.java       |  17 ++++++++
 .../com.application/CSS/styleSheet.css        |  18 ++++++++
 .../com/application/DB/Constants.class        | Bin 6414 -> 6414 bytes
 .../GUI/LineChartFunctionality.class          | Bin 15003 -> 15040 bytes
 .../com/application/Main$1WorkerThread.class  | Bin 2845 -> 2845 bytes
 target/classes/com/application/Main.class     | Bin 8603 -> 8968 bytes
 8 files changed, 69 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java
index 69d3c17..4b3e3dc 100644
--- a/src/main/java/com/application/DB/Constants.java
+++ b/src/main/java/com/application/DB/Constants.java
@@ -33,7 +33,7 @@ public final class Constants {
     public static final double CONFIDENCE_INTERVAL = 0.95;
 
     // Non linear regression
-    public static final double ADJUST_REGRESSION = 2.5;
+    public static final double ADJUST_REGRESSION = 5.0;
 
     // Current sawmill settings;
     public static final String PROJECT_ID = "sf-drying-optimization";
diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java
index e68a03d..3a802df 100644
--- a/src/main/java/com/application/GUI/LineChartFunctionality.java
+++ b/src/main/java/com/application/GUI/LineChartFunctionality.java
@@ -16,6 +16,7 @@ import org.jblas.Solve;
 
 import java.util.*;
 
+import static com.application.DB.Constants.ADJUST_REGRESSION;
 import static com.application.DB.Constants.CONFIDENCE_INTERVAL;
 
 public class LineChartFunctionality {
@@ -61,7 +62,7 @@ public class LineChartFunctionality {
         for (Map.Entry<Integer, ArrayList<Double>> entry : multiMap.entrySet()) {
             //System.out.printf("\nIndex: \t%s\t\t\tkWh: \t%s\n", entry.getKey(), entry.getValue());
 
-            System.out.println("entry: "+entry);
+            //System.out.println("entry: "+entry);
             //if(entry.getValue().size()>1){
                 SummaryStatistics stats = new SummaryStatistics();
                 for (double val : entry.getValue()) {
@@ -75,7 +76,7 @@ public class LineChartFunctionality {
                 //System.out.println(String.format("Mean: %f", stats.getMean()));
                 double lower = stats.getMean() - ci;
                 double upper = stats.getMean() + ci;
-                System.out.println(String.format("Confidence Interval "+CONFIDENCE_INTERVAL*100+"%%: %f, %f", lower, upper));
+                //System.out.println(String.format("Confidence Interval "+CONFIDENCE_INTERVAL*100+"%%: %f, %f", lower, upper));
 
                 // Deletes entries if they are out of bounds with the confidence interval
                 entry.getValue().removeIf(value -> Double.compare(value, lower) < 0 || Double.compare(value, upper) > 0);
@@ -172,9 +173,13 @@ public class LineChartFunctionality {
         Map<Integer, ArrayList<Double>> endOfGraphPointsConfidenceXAxis = statistics(endOfGraphPointsXAxis);
         Map<Integer, ArrayList<Double>> endOfGraphPointsConfidenceYaxis = statistics(endOfGraphPointsYAxis);
 
-        System.out.println(endOfGraphPointsConfidenceXAxis);
+        System.out.println("X-axis:"+ endOfGraphPointsConfidenceXAxis);
+        System.out.println("X-axis size: "+ endOfGraphPointsConfidenceXAxis.size());
+        System.out.println("------------");
+        System.out.println("Y-axis:"+ endOfGraphPointsConfidenceYaxis);
+        System.out.println("Y-axis size: "+ endOfGraphPointsConfidenceYaxis.size());
+        System.out.println("------------");
 
-        System.out.println("Size of list: "+ endOfGraphPointsConfidenceXAxis.size());
 
         dataPointsXAxis = 0;
         for (Map.Entry<Integer, ArrayList<Double>> entry : endOfGraphPointsConfidenceXAxis.entrySet()) {
@@ -274,10 +279,22 @@ public class LineChartFunctionality {
                             )));
 
              */
+            /*
             regressionSeries.getData().add(new XYChart.Data<String, Number>(
                     String.valueOf(i),
                     getCubicNonLinearRegression(confidenceIntervalData,i)
             ));
+
+             */
+            regressionSeries.getData().add(new XYChart.Data<String, Number>(
+                    String.valueOf(i),
+                    getNonLinearRegression(
+                            confidenceIntervalData,
+                            Math.sqrt(Math.pow(simpleRegression.getIntercept(),2)),
+                            simpleRegression.getSlope(),
+                            i,
+                            getDataPointsXAxis()
+                    )));
         }
         updateLineChart(regressionSeries);
         //lineChart.setOpacity(1);
@@ -358,10 +375,10 @@ public class LineChartFunctionality {
     }
 
 
-    public static double getNonLinearRegression(Map<Integer, ArrayList<Double>> confidenceIntervalData, double y0, double alpha, double beta, double j, double n) {
+    public static double getNonLinearRegression(Map<Integer, ArrayList<Double>> confidenceIntervalData, double y0, double alpha, double j, double n) {
         //return Math.exp(intercept+slope*i)/(1+Math.exp(intercept+slope*i));
 
-        /*
+
         double beta = 0.0;
         //double n = confidenceIntervalData.size();
         for (Map.Entry<Integer, ArrayList<Double>> entry : confidenceIntervalData.entrySet()) {
@@ -372,20 +389,28 @@ public class LineChartFunctionality {
             }
         }
 
-         */
+        beta = getDataPointsYAxis()+y0;
+        //System.out.println("Beta: " +beta);
+        //System.out.println("y0: "+y0);
+
+
         //System.out.println("maxYValue: " + maxYValue);
         //System.out.println("j*n: "+j/n);
 
         //double p_t = (((beta * y0))/(y0 +((beta- y0)*Math.exp(-alpha*j/n/(ADJUST_REGRESSION)))))-y0;      //Beste til nå
-        double p_t = (((beta * y0))/(y0 +((beta- y0)*Math.exp(-alpha*(j-n)))))-y0;      //Beste til nå
+        double p_t = (((beta * y0))/(y0 +((beta- y0)*Math.exp(-alpha*j/n/((alpha/10))))))-y0;      //Beste til nå
+        //double p_t = (((beta * y0))/(y0 +((beta- y0)*Math.exp(-alpha*(j-n)))))-y0;      //Beste til nå
 
 
+        /*
         System.out.println("---------------------------");
         System.out.println("y0: " + y0);
         System.out.println("Alpha: " + alpha);
         System.out.println("Beta: " + beta);
         //System.out.println(p_t);
 
+         */
+
 
 
         return p_t;
diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java
index 6ab4831..12ab769 100644
--- a/src/main/java/com/application/Main.java
+++ b/src/main/java/com/application/Main.java
@@ -8,6 +8,7 @@ import com.application.GUI.LineChartFunctionality;
 
 import javafx.application.Application;
 import javafx.application.Platform;
+import javafx.geometry.Pos;
 import javafx.scene.chart.LineChart;
 import javafx.scene.control.*;
 import javafx.scene.image.Image;
@@ -42,6 +43,7 @@ public class Main extends Application {
     private HBox logoBar;
     private VBox sideBar;
     private MenuBar menuBar;
+    private HBox bottomBar;
 
     private static TextField treeSpeciesText;
     private static TextField dimensionsText;
@@ -74,6 +76,7 @@ public class Main extends Application {
         this.logoBar = new HBox();
         this.sideBar = new VBox();
         this.menuBar = new MenuBar();
+        this.bottomBar = new HBox();
     }
 
     /**
@@ -90,6 +93,7 @@ public class Main extends Application {
         this.menuBar = createMenuBar();
         this.sideBar = createSideBar();
         this.logoBar = createLogoBar();
+        this.bottomBar = createBottomBar();
 
         LineChart<String, Number> lineChart = LineChartFunctionality.getLineChart();
 
@@ -98,6 +102,7 @@ public class Main extends Application {
         this.logoBar.setId("logoBar");
         this.menuBar.setId("menuBar");
         this.sideBar.setId("sideBar");
+        this.bottomBar.setId("bottomBar");
         lineChart.setId("lineChart");
 
 
@@ -112,6 +117,7 @@ public class Main extends Application {
         root.setTop(this.topBar);
         root.setLeft(this.sideBar);
         root.setCenter(lineChart);
+        root.setBottom(this.bottomBar);
 
         VBox.setVgrow(this.logoBar, Priority.ALWAYS);
 
@@ -306,6 +312,17 @@ public class Main extends Application {
         return new HBox(imageViewM, region1, imageViewTitle, region2);
     }
 
+    private HBox createBottomBar(){
+        HBox hBox = new HBox();
+        hBox.setId("bottomBar");
+        Button button = new Button("Test");
+        button.setId("bottomBarButtons");
+        //button.setAlignment(Pos.CENTER_RIGHT);
+        hBox.getChildren().addAll(button);
+        hBox.getStylesheets().add(getClass().getResource("/com.application/CSS/styleSheet.css").toExternalForm());
+        return hBox;
+    }
+
 
 
 
diff --git a/src/main/resources/com.application/CSS/styleSheet.css b/src/main/resources/com.application/CSS/styleSheet.css
index 70d9445..7480586 100644
--- a/src/main/resources/com.application/CSS/styleSheet.css
+++ b/src/main/resources/com.application/CSS/styleSheet.css
@@ -23,6 +23,7 @@
  */
 #sideBar {
     -fx-pref-width: 250;
+    -fx-pref-height: infinity;
 }
 
 #sideBarLabel {
@@ -74,6 +75,23 @@
     -fx-text-fill: white;
 }
 
+/*
+    BottomBar styling
+ */
+#bottomBar {
+    -fx-pref-width: infinity;
+    -fx-pref-height: 50;
+}
+
+#bottomBarButtons {
+    -fx-alignment: center-right;
+    -fx-tile-alignment: center-right;
+    -fx-text-fill: rgba(12, 76, 81, 1);
+    -fx-background-color: red;
+    -fx-pref-width: 50;
+    -fx-pref-height: 25;
+}
+
 /*
     Input popup window
  */
diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class
index 3b053db686018b72a73f6e868c762198503a508d..dafe01bf2607e10a09113e86a08ad59fcac4307c 100644
GIT binary patch
delta 14
VcmeA(>NDD~l95ql^D4#^aR4Wa1jzsZ

delta 14
VcmeA(>NDD~l97>R^D4#^aR4VP1i1hJ

diff --git a/target/classes/com/application/GUI/LineChartFunctionality.class b/target/classes/com/application/GUI/LineChartFunctionality.class
index 7fed56545a4d3c4f04d50dafc1845a293cbaba83..b5ae7ee8bdacb878f62fafbaa3bc24911ff09375 100644
GIT binary patch
delta 8436
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

delta 8269
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

diff --git a/target/classes/com/application/Main$1WorkerThread.class b/target/classes/com/application/Main$1WorkerThread.class
index 4384032845900a265d6cb708dec38d4859ef4179..bbd12e82197545541306e3ec5c8db9559fde98b6 100644
GIT binary patch
delta 106
zcmbO$HdkzeEhq1520n(D48ja=7$g|pPWIxw<oJ<+jo}LeFT+;`35FjG(hT1iWEj3P
zC@}nDP-FPRpu@<(pwIA^!GPf(g9*cb1~*1V27g9Yh9pLIhHOR-hCD`|$+28nY>Z3{
M+>FeV&vFF-01D$7i~s-t

delta 106
zcmbO$HdkzeEhq0&20n(z48jc07$g{;Pxj)x<oKF_jo}>wFT;BV35HJ$(hMIMWEeg&
zC@_3sP-FPUpu_NsL7(9}g8{=21`~##3~mg+8T=XkGbAxGGGsF{G2}6_O^)TtVq^Hj
Mz|HV?@>#9`0BBGh{Qv*}

diff --git a/target/classes/com/application/Main.class b/target/classes/com/application/Main.class
index 96ea17c1cd09d33cda6b1ce803c8c62b301f044a..e329d02c168a11cda60cf107ae80c2494383cbeb 100644
GIT binary patch
delta 4468
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
WnbDnrnbCvMlhF&x@`tm67`*^iNxC@z

delta 4114
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
UFfcP(GFmZOLs<@RmNTO@0GDi99smFU

-- 
GitLab