From 1322c5aa3e1be8c0647676d7c89fbbe9d58fbf34 Mon Sep 17 00:00:00 2001 From: Philipp Spohr <spohr.philipp@web.de> Date: Wed, 6 Sep 2017 18:23:53 +0200 Subject: [PATCH] Basic passing of solution quality Crashfix for loops --- .../ba/yoshikoWrapper/core/AlgorithmTask.java | 2 +- .../ba/yoshikoWrapper/core/NetworkParser.java | 5 +- .../ba/yoshikoWrapper/gui/ColumnMapper.java | 27 ++++--- .../ba/yoshikoWrapper/gui/EditCostPanel.java | 35 +++++---- .../hhu/ba/yoshikoWrapper/gui/MainPanel.java | 16 ++-- .../ba/yoshikoWrapper/gui/ResultPanel.java | 8 +- .../yoshikoWrapper/gui/YoshikoHelpDialog.java | 35 --------- .../yoshikoWrapper/gui/YoshikoHelpModel.java | 78 ------------------- .../ba/yoshikoWrapper/swig/DoubleVector.java | 78 +++++++++++++++++++ .../swig/LibraryInterfaceJNI.java | 15 +++- .../ba/yoshikoWrapper/swig/SolutionFlags.java | 9 ++- src/main/resources/YoshikoStrings.properties | 5 +- 12 files changed, 153 insertions(+), 160 deletions(-) delete mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpDialog.java delete mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpModel.java create mode 100644 src/main/java/de/hhu/ba/yoshikoWrapper/swig/DoubleVector.java diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java index b6a9f90..e810450 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java @@ -152,7 +152,7 @@ public class AlgorithmTask extends AbstractTask { @Override public void updateGap(double gap) { - taskMonitor.setStatusMessage(LocalizationManager.get("currentGap")+": "+gap); + taskMonitor.setStatusMessage(LocalizationManager.get("currentGap")+": "+gap*100+"%"); } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java index 5513941..dabb092 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java @@ -71,7 +71,7 @@ public class NetworkParser { //It is possible, that there are missing entries if (edgeEntry.get(weightColumn.getName(), weightColumn.getType()) != null){ if (weightColumn.getType() == Integer.class) { - weight = edgeEntry.get(weightColumn.getName(), Integer.class); + weight = 1.0*edgeEntry.get(weightColumn.getName(), Integer.class); } else if (weightColumn.getType() == Double.class) { weight = edgeEntry.get(weightColumn.getName(), Double.class); @@ -82,6 +82,7 @@ public class NetworkParser { //Parse Forbidden/Permanent markers boolean forbidden = false; boolean permanent = false; + if (permanentColumn != null) { //Additional check as it is not required to have a value in every row if (edgeEntry.get(permanentColumn.getName(), Boolean.class) != null) { @@ -103,7 +104,7 @@ public class NetworkParser { weight, permanent, forbidden - ); + ); } } diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java index f3b3492..84b9f9b 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java @@ -80,22 +80,21 @@ public class ColumnMapper extends JPanel{ //Layout GroupLayout layout = new GroupLayout(this); - layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING,true) - .addGroup(layout.createSequentialGroup() - .addComponent(useMappingCost) - .addComponent(editingCostMapper) - ) - .addGroup(layout.createSequentialGroup() - .addComponent(useMappingPerm) - .addComponent(permanentMapper) - ) - .addGroup(layout.createSequentialGroup() - .addComponent(useMappingForb) - .addComponent(forbiddenMapper) - ) + layout.setHorizontalGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addComponent(useMappingCost) + .addComponent(useMappingPerm) + .addComponent(useMappingForb) + ) + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addComponent(editingCostMapper) + .addComponent(permanentMapper) + .addComponent(forbiddenMapper) + ) + ); - layout.setVerticalGroup(layout.createSequentialGroup() + layout.setVerticalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup() .addComponent(useMappingCost) .addComponent(editingCostMapper) diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java index 5430338..660df5c 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/EditCostPanel.java @@ -43,9 +43,6 @@ public class EditCostPanel extends JPanel { private final JLabel icLabel; private final JLabel dcLabel; - private final JPanel groupIC; - private final JPanel groupDC; - public EditCostPanel() { //Initialize components @@ -61,28 +58,40 @@ public class EditCostPanel extends JPanel { icLabel = new JLabel(LocalizationManager.get("defaultInsertion")); dcLabel = new JLabel(LocalizationManager.get("defaultDeletion")); //Group the labels with their text fields - groupIC = new JPanel(); - groupDC = new JPanel(); - SwingUtil.addAll(groupIC,icLabel,icField); - SwingUtil.addAll(groupDC,dcLabel,dcField); + SwingUtil.addAll(this,icLabel,icField); + SwingUtil.addAll(this,dcLabel,dcField); - SwingUtil.addAll(this,columnMapper,groupIC,groupDC); + SwingUtil.addAll(this,columnMapper); //Layout GroupLayout layout = new GroupLayout(this); - layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING,true) + layout.setHorizontalGroup(layout.createParallelGroup() .addComponent(columnMapper) - .addComponent(groupIC) - .addComponent(groupDC) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addComponent(icLabel) + .addComponent(dcLabel) + ) + .addGroup(layout.createParallelGroup(Alignment.LEADING) + .addComponent(icField) + .addComponent(dcField) + ) + ) ); layout.setVerticalGroup(layout.createSequentialGroup() .addComponent(columnMapper) - .addComponent(groupIC) - .addComponent(groupDC) + .addGroup(layout.createParallelGroup() + .addComponent(icLabel) + .addComponent(icField) + ) + .addGroup(layout.createParallelGroup() + .addComponent(dcLabel) + .addComponent(dcField) + ) ); this.setLayout(layout); diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java index 6b8f7f4..350150c 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java @@ -148,14 +148,14 @@ public class MainPanel extends JPanel implements CytoPanelComponent { layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING,true) - .addComponent(header,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(showAdvancedOptions,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(langPanel,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(libraryPanel,PREFERRED_SIZE, PREFERRED_SIZE, Short.MAX_VALUE) - .addComponent(ecPanelWrapper,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(reductionWrapper,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(opWrapper,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(runButton,DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(header,DEFAULT_SIZE, PREFERRED_SIZE,PREFERRED_SIZE) + .addComponent(showAdvancedOptions,DEFAULT_SIZE, PREFERRED_SIZE,PREFERRED_SIZE) + .addComponent(langPanel,DEFAULT_SIZE, PREFERRED_SIZE,PREFERRED_SIZE) + .addComponent(libraryPanel,DEFAULT_SIZE, PREFERRED_SIZE,PREFERRED_SIZE) + .addComponent(ecPanelWrapper,DEFAULT_SIZE, PREFERRED_SIZE,PREFERRED_SIZE) + .addComponent(reductionWrapper,DEFAULT_SIZE, PREFERRED_SIZE,PREFERRED_SIZE) + .addComponent(opWrapper,DEFAULT_SIZE, PREFERRED_SIZE,PREFERRED_SIZE) + .addComponent(runButton,DEFAULT_SIZE, PREFERRED_SIZE,PREFERRED_SIZE) ); layout.setVerticalGroup(layout.createSequentialGroup() diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java index 64ade8d..2148dde 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ResultPanel.java @@ -84,7 +84,13 @@ public class ResultPanel extends JPanel implements CytoPanelComponent{ optimalLabel = new JLabel(LocalizationManager.get("notOptimal")); optimalLabel.setForeground(Color.RED); marker.add(optimalLabel); - marker.add(new JLabel(LocalizationManager.get("gap")+" "+(int)(100*result.flags.getGapSize())+"%")); + for (int i = 0; i < result.flags.getInstances().size();i++) { + marker.add(new JLabel( + LocalizationManager.get("instance")+" "+i+" "+ + LocalizationManager.get("gap")+": "+ + (100*result.flags.getInstances().get(i))+"%") + ); + } } JLabel costLabel = new JLabel(LocalizationManager.get("cost")+" "+result.flags.getTotalCost()); marker.add(costLabel); diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpDialog.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpDialog.java deleted file mode 100644 index 71ae6ea..0000000 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpDialog.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2017 Philipp Spohr - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - ******************************************************************************/ -package de.hhu.ba.yoshikoWrapper.gui; - -import javax.swing.JDialog; -import javax.swing.JTree; - -@SuppressWarnings("serial") -public class YoshikoHelpDialog extends JDialog { - private JTree navigationTree; - - public YoshikoHelpDialog() { - navigationTree = new JTree(); - this.add(navigationTree); - } -} diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpModel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpModel.java deleted file mode 100644 index 907a23e..0000000 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/YoshikoHelpModel.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2017 Philipp Spohr - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - ******************************************************************************/ -package de.hhu.ba.yoshikoWrapper.gui; - -import javax.swing.event.TreeModelListener; -import javax.swing.tree.TreeModel; -import javax.swing.tree.TreePath; - -public class YoshikoHelpModel implements TreeModel { - - @Override - public Object getRoot() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Object getChild(Object parent, int index) { - // TODO Auto-generated method stub - return null; - } - - @Override - public int getChildCount(Object parent) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public boolean isLeaf(Object node) { - // TODO Auto-generated method stub - return false; - } - - @Override - public void valueForPathChanged(TreePath path, Object newValue) { - // TODO Auto-generated method stub - - } - - @Override - public int getIndexOfChild(Object parent, Object child) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void addTreeModelListener(TreeModelListener l) { - // TODO Auto-generated method stub - - } - - @Override - public void removeTreeModelListener(TreeModelListener l) { - // TODO Auto-generated method stub - - } - -} diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/DoubleVector.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/DoubleVector.java new file mode 100644 index 0000000..3cc3bde --- /dev/null +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/DoubleVector.java @@ -0,0 +1,78 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 3.0.8 + * + * Do not make changes to this file unless you know what you are doing--modify + * the SWIG interface file instead. + * ----------------------------------------------------------------------------- */ + +package de.hhu.ba.yoshikoWrapper.swig; + +public class DoubleVector { + private transient long swigCPtr; + protected transient boolean swigCMemOwn; + + protected DoubleVector(long cPtr, boolean cMemoryOwn) { + swigCMemOwn = cMemoryOwn; + swigCPtr = cPtr; + } + + protected static long getCPtr(DoubleVector obj) { + return (obj == null) ? 0 : obj.swigCPtr; + } + + protected void finalize() { + delete(); + } + + public synchronized void delete() { + if (swigCPtr != 0) { + if (swigCMemOwn) { + swigCMemOwn = false; + LibraryInterfaceJNI.delete_DoubleVector(swigCPtr); + } + swigCPtr = 0; + } + } + + public DoubleVector() { + this(LibraryInterfaceJNI.new_DoubleVector__SWIG_0(), true); + } + + public DoubleVector(long n) { + this(LibraryInterfaceJNI.new_DoubleVector__SWIG_1(n), true); + } + + public long size() { + return LibraryInterfaceJNI.DoubleVector_size(swigCPtr, this); + } + + public long capacity() { + return LibraryInterfaceJNI.DoubleVector_capacity(swigCPtr, this); + } + + public void reserve(long n) { + LibraryInterfaceJNI.DoubleVector_reserve(swigCPtr, this, n); + } + + public boolean isEmpty() { + return LibraryInterfaceJNI.DoubleVector_isEmpty(swigCPtr, this); + } + + public void clear() { + LibraryInterfaceJNI.DoubleVector_clear(swigCPtr, this); + } + + public void add(double x) { + LibraryInterfaceJNI.DoubleVector_add(swigCPtr, this, x); + } + + public double get(int i) { + return LibraryInterfaceJNI.DoubleVector_get(swigCPtr, this, i); + } + + public void set(int i, double val) { + LibraryInterfaceJNI.DoubleVector_set(swigCPtr, this, i, val); + } + +} diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java index dcaa7e5..48f3c25 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java @@ -18,8 +18,8 @@ public class LibraryInterfaceJNI { public final static native boolean SolutionFlags_ilpGenerated_get(long jarg1, SolutionFlags jarg1_); public final static native void SolutionFlags_optimal_set(long jarg1, SolutionFlags jarg1_, boolean jarg2); public final static native boolean SolutionFlags_optimal_get(long jarg1, SolutionFlags jarg1_); - public final static native void SolutionFlags_gapSize_set(long jarg1, SolutionFlags jarg1_, double jarg2); - public final static native double SolutionFlags_gapSize_get(long jarg1, SolutionFlags jarg1_); + public final static native void SolutionFlags_instances_set(long jarg1, SolutionFlags jarg1_, long jarg2, DoubleVector jarg2_); + public final static native long SolutionFlags_instances_get(long jarg1, SolutionFlags jarg1_); public final static native void delete_SolutionFlags(long jarg1); public final static native long new_IntVector__SWIG_0(); public final static native long new_IntVector__SWIG_1(long jarg1); @@ -32,6 +32,17 @@ public class LibraryInterfaceJNI { public final static native int IntVector_get(long jarg1, IntVector jarg1_, int jarg2); public final static native void IntVector_set(long jarg1, IntVector jarg1_, int jarg2, int jarg3); public final static native void delete_IntVector(long jarg1); + public final static native long new_DoubleVector__SWIG_0(); + public final static native long new_DoubleVector__SWIG_1(long jarg1); + public final static native long DoubleVector_size(long jarg1, DoubleVector jarg1_); + public final static native long DoubleVector_capacity(long jarg1, DoubleVector jarg1_); + public final static native void DoubleVector_reserve(long jarg1, DoubleVector jarg1_, long jarg2); + public final static native boolean DoubleVector_isEmpty(long jarg1, DoubleVector jarg1_); + public final static native void DoubleVector_clear(long jarg1, DoubleVector jarg1_); + public final static native void DoubleVector_add(long jarg1, DoubleVector jarg1_, double jarg2); + public final static native double DoubleVector_get(long jarg1, DoubleVector jarg1_, int jarg2); + public final static native void DoubleVector_set(long jarg1, DoubleVector jarg1_, int jarg2, double jarg3); + public final static native void delete_DoubleVector(long jarg1); public final static native long ClusterEditingSolutions_getNumberOfClusters(long jarg1, ClusterEditingSolutions jarg1_, long jarg2); public final static native long ClusterEditingSolutions_getCluster(long jarg1, ClusterEditingSolutions jarg1_, long jarg2, long jarg3); public final static native long ClusterEditingSolutions_getSolution(long jarg1, ClusterEditingSolutions jarg1_, long jarg2); diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SolutionFlags.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SolutionFlags.java index 18e7ca6..d363c1e 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SolutionFlags.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SolutionFlags.java @@ -71,12 +71,13 @@ public class SolutionFlags { return LibraryInterfaceJNI.SolutionFlags_optimal_get(swigCPtr, this); } - public void setGapSize(double value) { - LibraryInterfaceJNI.SolutionFlags_gapSize_set(swigCPtr, this, value); + public void setInstances(DoubleVector value) { + LibraryInterfaceJNI.SolutionFlags_instances_set(swigCPtr, this, DoubleVector.getCPtr(value), value); } - public double getGapSize() { - return LibraryInterfaceJNI.SolutionFlags_gapSize_get(swigCPtr, this); + public DoubleVector getInstances() { + long cPtr = LibraryInterfaceJNI.SolutionFlags_instances_get(swigCPtr, this); + return (cPtr == 0) ? null : new DoubleVector(cPtr, false); } } diff --git a/src/main/resources/YoshikoStrings.properties b/src/main/resources/YoshikoStrings.properties index 16b9988..8c05e37 100644 --- a/src/main/resources/YoshikoStrings.properties +++ b/src/main/resources/YoshikoStrings.properties @@ -49,7 +49,7 @@ libraryPanel = Library defaultInsertion = Default insertion cost: defaultDeletion = Default deletion cost: switchLanguage = Plugin language -icTooltip = This value is used to determine what the algorithm pays when inserting an edge. Existing mappings overwrite this value. A higher value means that the algorithm is less likely to insert edges in order to generate a cluster. +icTooltip = This value is used to determine what the algorithm pays when inserting an edge.\nExisting mappings overwrite this value.\nA higher value means that the algorithm is less likely to insert edges in order to generate a cluster. operationMode = Operation Mode run = Perform Algorithm nodes = Nodes @@ -60,8 +60,9 @@ optimal = Optimal Solution notOptimal = Not Optimal Solution ilpMarker = ILP Properties timeoutMarker = Timed Out +instance = Instance gap = Gap -currentGap = [ILP] Current Instance Gap: +currentGap = [ILP] Current Instance Gap disableMultiThreading = Disable Multithreading yoshikoHint = Yoshiko Hint getYoshiko = Get Yoshiko Library -- GitLab