From 27675cf8545b42b4b1bddd25d94dcdd6c23d73bf Mon Sep 17 00:00:00 2001
From: LukasEttel <lukas.ettie@yahoo.de>
Date: Wed, 11 Mar 2020 09:13:32 +0100
Subject: [PATCH] Fixed the calculation of the clustering-costs and display it

---
 .../graphModel/YoshikoSolution.java           |  9 +++-
 .../swing/components/SolutionTab.java         |  9 +++-
 .../yoshikoAlgorithm/ClusteringAlgorithm.java | 46 ++++++++++++++-----
 .../yoshikoAlgorithm/GraphTranslator.java     |  5 +-
 .../YoshikoAlgoritmController.java            |  2 +-
 .../yoshikoAlgorithm/YoshikoEdge.java         |  2 +
 6 files changed, 57 insertions(+), 16 deletions(-)

diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java
index d54fbe5..9abd63c 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java
@@ -60,11 +60,14 @@ public class YoshikoSolution {
 
 	private Logger logger = YoshikoLogger.getInstance().getLogger();
 
+	private final double clusteringCost;
 
-	public YoshikoSolution(YoshikoResult yoshikoResult, long id) {
+
+	public YoshikoSolution(YoshikoResult yoshikoResult, long id, double clusteringCost) {
 		clusters = new HashMap<Long,YoshikoCluster>();
 		this.result = yoshikoResult;
 		this.id = id;
+		this.clusteringCost = clusteringCost;
 	}
 
 	public void delete() {
@@ -121,5 +124,9 @@ public class YoshikoSolution {
 		clusters.put(cluster.getID(), cluster);
 	}
 
+	public double getClusteringCost(){
+		return clusteringCost;
+	}
+
 
 }
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java
index e6fd5b2..fab143b 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java
@@ -62,6 +62,7 @@ import de.hhu.ba.yoshikoWrapper.tasks.CreateMetaGraphTask;
 public class SolutionTab extends JPanel {
 
 	//SWING COMPONENTS
+	private final JLabel clusteringCosts;
 	private final JLabel clusterCount;
 	private final JCheckBox hideSingles;
 	private final JScrollPane scrollPane;
@@ -127,6 +128,8 @@ public class SolutionTab extends JPanel {
 
 		scrollPane = new JScrollPane(clusterViewList);
 
+		clusteringCosts = new JLabel("Clustering-Cost: "+s.getClusteringCost());
+
 		clusterCount = new JLabel(LocalizationManager.get("clusterFound")+" "+s.getClusters().size());
 
 		createClusterView = new JButton(LocalizationManager.get("createClusterView"));
@@ -176,7 +179,7 @@ public class SolutionTab extends JPanel {
 
 		//Add configured Swing Components to self
 
-		SwingUtil.addAll(this,clusterCount,scrollPane,createClusterView,createMetaGraph);
+		SwingUtil.addAll(this, clusteringCosts, clusterCount,scrollPane,createClusterView,createMetaGraph);
 
 		//Layout
 
@@ -206,6 +209,8 @@ public class SolutionTab extends JPanel {
 				.addComponent(createClusterView,DEFAULT_SIZE,DEFAULT_SIZE,PREFERRED_SIZE)
 				.addComponent(createMetaGraph,DEFAULT_SIZE,DEFAULT_SIZE,PREFERRED_SIZE)
 				.addGap(8)
+				.addComponent(clusteringCosts,DEFAULT_SIZE,DEFAULT_SIZE,Short.MAX_VALUE)
+				.addGap(8)
 				.addComponent(clusterCount,DEFAULT_SIZE,DEFAULT_SIZE,Short.MAX_VALUE)
 				.addComponent(hideSingles,DEFAULT_SIZE,DEFAULT_SIZE,Short.MAX_VALUE)
 				.addGap(8)
@@ -216,6 +221,8 @@ public class SolutionTab extends JPanel {
 				.addComponent(createClusterView,DEFAULT_SIZE,DEFAULT_SIZE,DEFAULT_SIZE)
 				.addComponent(createMetaGraph,DEFAULT_SIZE,DEFAULT_SIZE,DEFAULT_SIZE)
 				.addGap(8)
+				.addComponent(clusteringCosts,DEFAULT_SIZE,DEFAULT_SIZE,DEFAULT_SIZE)
+				.addGap(8)
 				.addComponent(clusterCount,DEFAULT_SIZE,DEFAULT_SIZE,DEFAULT_SIZE)
 				.addComponent(hideSingles,DEFAULT_SIZE,DEFAULT_SIZE,DEFAULT_SIZE)
 				.addGap(4)
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/ClusteringAlgorithm.java b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/ClusteringAlgorithm.java
index cdd357d..8078e78 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/ClusteringAlgorithm.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/ClusteringAlgorithm.java
@@ -25,7 +25,6 @@ public class ClusteringAlgorithm {
         numberOfNodes = edgeArray.length;
         clusters = new ArrayList<>();
         this.taskMonitor = taskMonitor;
-        clusteringCost = 0;
     }
 
     public List<List<Integer>> runClusteringAlgorithm() throws NetworkParsingException{
@@ -47,11 +46,10 @@ public class ClusteringAlgorithm {
                 workHeap();
             }
         }
-
-
         addSingleNodesToClusters();
 
-        System.out.println("Clustering costs:" +clusteringCost);
+        this.calculateClusteringCost();
+
         return clusters;
     }
 
@@ -168,10 +166,6 @@ public class ClusteringAlgorithm {
     }
 
     private void makeEdgePermanent(YoshikoEdge e){
-        if(e.weight < 0){
-            clusteringCost -= e.weight;
-        }
-
         substactInfluenceOfVerticesOnIcfIcp(e);
 
         mergeVertexes(e);
@@ -323,9 +317,6 @@ public class ClusteringAlgorithm {
 
 
     private void makeEdgeForbidden(YoshikoEdge e) {
-        if(e.weight > 0){
-            clusteringCost +=e.weight;
-        }
         editInfluenzeOfForbiddenEdge(e);
 
         e.weight=Double.NEGATIVE_INFINITY;
@@ -435,4 +426,37 @@ public class ClusteringAlgorithm {
         newCluster.add(i);
         clusters.add(newCluster);
     }
+
+    private void calculateClusteringCost(){
+        clusteringCost = 0;
+
+        for (List<Integer> cluster : clusters){
+            for (int i : cluster){
+                for (int j : cluster){
+                    if (i > j){
+                        if (edgeArray[i][j].startingWeight < 0){
+                            clusteringCost -= edgeArray[i][j].startingWeight;
+                            System.out.println("Insert edge:("+i+","+ j+") with cost "+edgeArray[i][j].startingWeight);
+
+                        }
+                        edgeArray[i][j].startingWeight = 0;
+                    }
+                }
+            }
+        }
+
+        for (int i = 1; i < edgeArray.length; i++){
+            for (int j = 0; j < i; j++){
+                if (edgeArray[i][j].startingWeight > 0){
+                    clusteringCost += edgeArray[i][j].startingWeight;
+                    System.out.println("Delete edge:("+i+","+ j+") with cost "+(-edgeArray[i][j].startingWeight));
+                }
+            }
+        }
+    }
+
+    public double getClusteringCost() {
+        return clusteringCost;
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/GraphTranslator.java b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/GraphTranslator.java
index 59cc50b..73fd93e 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/GraphTranslator.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/GraphTranslator.java
@@ -53,11 +53,12 @@ public final class GraphTranslator {
         this.edgeArray = new YoshikoEdge[size][size];
 
         Map<CyNode, Integer> reverseNodeMap = new HashMap();
-        int i = 0;
+        int i = nodeList.size()-1;
         for (CyNode n : nodeList){
+            System.out.println(i+":"+network.getRow(n).get(CyNetwork.NAME, String.class));
             nodeMap.put(i, n);
             reverseNodeMap.put(n,i);
-            i++;
+            i--;
         }
 
         for (CyEdge e : edgeList){
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoAlgoritmController.java b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoAlgoritmController.java
index 2a36177..e08a1de 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoAlgoritmController.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoAlgoritmController.java
@@ -39,7 +39,7 @@ public class YoshikoAlgoritmController {
         taskMonitor.setStatusMessage("Clustering the Graph");
         clusters = clusteringAlgorithm.runClusteringAlgorithm();
 
-        YoshikoSolution solution = new YoshikoSolution(result, 0);
+        YoshikoSolution solution = new YoshikoSolution(result, 0, clusteringAlgorithm.getClusteringCost());
         result.addSolution(solution);
 
         taskMonitor.setStatusMessage("Processing Clusters");
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoEdge.java b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoEdge.java
index e2e7d66..57a1bab 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoEdge.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoEdge.java
@@ -7,6 +7,7 @@ public class YoshikoEdge {
     int source;
     int target;
 
+    double startingWeight;
     double weight;
     double icf;
     double icp;
@@ -23,6 +24,7 @@ public class YoshikoEdge {
     public YoshikoEdge(long suid, double weight, int u, int v){
         this.suid = suid;
         this.weight = weight;
+        this.startingWeight = weight;
         this.edgeId = this.makeEdgeId(u, v);
     }
 
-- 
GitLab