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 e9da97e19bac49ec928f7603805f10f27b1ed2f0..44e785f82a3c6175ab060cce4754186711f5f3eb 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java @@ -32,6 +32,10 @@ public class AlgorithmTask extends AbstractTask { private int timeLimit; private CyNetwork net; private String bitMaskRules; + private double multiplicativeFactor; + private boolean separatePartitionCuts; + private boolean separateTriangles; + private boolean useHeuristic; private SolutionsPanel solutionsPanel; public AlgorithmTask( @@ -60,7 +64,7 @@ public class AlgorithmTask extends AbstractTask { this.bitMaskRules = bitMaskRules; this.multiplicativeFactor = multiplicativeFactor; this.separatePartitionCuts = separatePartitionCuts; - this.separateTriangles =separateTriangle; + this.separateTriangles = separateTriangles; this.useHeuristic = useHeuristic; this.solutionsPanel = solutionsPanel; } 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 5c9a6e80aed7c3f1e2c0a983c4862ab966667e49..b77de0dcc2c0396f6fbd5be0409afeac2b072f5c 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java @@ -44,6 +44,7 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent { private final ReductionRulesChooser reductionRulesChooser; + private final JCheckBox useTriangleCutsBox; private final JCheckBox usePartitionCutsBox; @@ -75,6 +76,14 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent { heuristicGroup.add(useHeuristic); + reductionRulesChooser = new ReductionRulesChooser(); + + timeLimitSetter = new TimeLimitSetter(); + + useTriangleCutsBox = new JCheckBox("Use Triangle Cuts"); + usePartitionCutsBox = new JCheckBox("Use Partition Cuts"); + + JButton runButton = new JButton("RUN"); runButton.addActionListener(new ActionListener() { @@ -83,16 +92,20 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent { public void actionPerformed(ActionEvent e) { if (YoshikoLoader.isLibraryLoaded()){ AbstractTask yoshiko = new AlgorithmTask( - CyCore.cy.getCurrentNetwork(), - timeLimitSetter.getTimeLimit(), - ecPanel.getWeightColumn(), - ecPanel.getPermanentColumn(), - ecPanel.getForbiddenColumn(), - ecPanel.getDefaultInsertionCost(), - ecPanel.getDefaultDeletionCost(), - ReductionRulesChooser.getBitMask(), - name, alignmentX, autoscrolls, autoscrolls, autoscrolls, solutionsPanel - ); + CyCore.cy.getCurrentNetwork(), + timeLimitSetter.getTimeLimit(), + ecPanel.getWeightColumn(), + ecPanel.getPermanentColumn(), + ecPanel.getForbiddenColumn(), + ecPanel.getDefaultInsertionCost(), + ecPanel.getDefaultDeletionCost(), + reductionRulesChooser.getBitMask(), + reductionRulesChooser.getMultFactor(), + useTriangleCutsBox.isSelected(), + usePartitionCutsBox.isSelected(), + useHeuristic.isSelected(), + solutionsPanel + ); CyCore.dialogTaskManager.execute(new TaskIterator(1,yoshiko)); solutionsPanel.setVisible(true); } @@ -108,13 +121,6 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent { }); - reductionRulesChooser = new ReductionRulesChooser(); - - timeLimitSetter = new TimeLimitSetter(); - - useTriangleCutsBox = new JCheckBox("Use Triangle Cuts"); - usePartitionCutsBox = new JCheckBox("Use Partition Cuts"); - this.addAll( langSwitcher, diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java index 6fd2b9706b5a4903f36877c8d953cff5f9d6e8fb..df7e33b90f858a57abc35eb450422492a7c6dcc7 100644 --- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java +++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ReductionRulesChooser.java @@ -1,6 +1,8 @@ package de.hhu.ba.yoshikoWrapper.gui; import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JCheckBox; @@ -8,12 +10,17 @@ import javax.swing.JCheckBox; @SuppressWarnings("serial") public class ReductionRulesChooser extends ComfortPanel{ - private JCheckBox useCRule; - private JCheckBox useCCRule; - private JCheckBox useACRule; - private JCheckBox useHERule; - private JCheckBox usePDRRule; - private JCheckBox useSNRule; + private final JCheckBox useCRule; + private final JCheckBox useCCRule; + private final JCheckBox useACRule; + private final JCheckBox useHERule; + private final JCheckBox usePDRRule; + private final JCheckBox useSNRule; + + private final DoubleInputField multFactor; + + private final ComfortPanel SNPanel; + public ReductionRulesChooser() { this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); @@ -24,6 +31,25 @@ public class ReductionRulesChooser extends ComfortPanel{ useHERule = new JCheckBox("Use Heavy-Edge 3 in 1 Rule"); usePDRRule = new JCheckBox("Use Parameter Dependent Reduction Rule"); useSNRule = new JCheckBox("Use Similar Neighborhood Rule"); + multFactor = new DoubleInputField(1, Double.POSITIVE_INFINITY); + multFactor.setText("1.0"); + SNPanel = new ComfortPanel(); + + SNPanel.addAll(useSNRule,multFactor); + useSNRule.setSelected(true); + + useSNRule.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (useSNRule.isSelected()) { + multFactor.setEnabled(true); + } + else { + multFactor.setEnabled(false); + } + } + }); + this.addAll( useCRule, @@ -31,11 +57,13 @@ public class ReductionRulesChooser extends ComfortPanel{ useACRule, useHERule, usePDRRule, - useSNRule + SNPanel ); //By default all reduction rules should be applied for (Component c :this.getComponents()) { - ((JCheckBox)c).setSelected(true); + if (c instanceof JCheckBox) { + ((JCheckBox)c).setSelected(true); + } } } @@ -53,4 +81,11 @@ public class ReductionRulesChooser extends ComfortPanel{ ret += (useSNRule.isSelected() ? "1" : "0"); return ret; } + + public double getMultFactor() { + if (useSNRule.isSelected()) { + return multFactor.getValueAsDouble(); + } + return 1.0d; + } }