Skip to content
Snippets Groups Projects
Commit 6940db5c authored by Philipp Spohr's avatar Philipp Spohr
Browse files

Basic support for killing cplex

various stuff
UTF-8 fix for whining maven
Enabled time-limit by default
parent c368836a
No related branches found
No related tags found
No related merge requests found
......@@ -26,7 +26,7 @@
<bundle.symbolicName>de.hhu.ba.yoshikoWrapper</bundle.symbolicName>
<bundle.namespace>de.hhu.ba.yoshikoWrapper</bundle.namespace>
<cytoscape.api.version>3.0.1</cytoscape.api.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven-bundle-plugin.version>2.3.4</maven-bundle-plugin.version>
<osgi.api.version>4.2.0</osgi.api.version>
</properties>
......
......@@ -40,6 +40,7 @@ import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution;
import de.hhu.ba.yoshikoWrapper.gui.ResultPanel;
import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
import de.hhu.ba.yoshikoWrapper.swig.ClusterEditingSolutions;
import de.hhu.ba.yoshikoWrapper.swig.CoreAlgorithm;
import de.hhu.ba.yoshikoWrapper.swig.IntVector;
import de.hhu.ba.yoshikoWrapper.swig.LibraryInput;
import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface;
......@@ -66,10 +67,13 @@ public class AlgorithmTask extends AbstractTask {
private boolean useHeuristic;
private int numberOfSolutions;
//temps, need to be freed in C++
//Temps, need to be freed in C++
private LibraryInput input;
private ClusterEditingSolutions result;
private CoreAlgorithm ca;
private CallbackHandler ch;
public AlgorithmTask(
CyNetwork net,
int timeLimit,
......@@ -135,8 +139,7 @@ public class AlgorithmTask extends AbstractTask {
input.setDefaultInsertionCost(insertionCostDefault);
//Call Yoshiko <<< Algorithm is performed here
result = LibraryInterface.processLibraryInput(
input,
ca = LibraryInterface.getRun(input,
numberOfSolutions,
bitMaskRules,
multiplicativeFactor,
......@@ -144,7 +147,7 @@ public class AlgorithmTask extends AbstractTask {
separateTriangles,
useHeuristic
);
result = ca.run();
taskMonitor.setProgress(0.9);
......@@ -199,6 +202,7 @@ public class AlgorithmTask extends AbstractTask {
}
//At this point the C++ objects can be freed, in case that the algorithm terminates beforehand they need to be cleaned-up elsewhere
ca.delete();
input.delete();
result.delete();
......@@ -218,6 +222,11 @@ public class AlgorithmTask extends AbstractTask {
@Override
public void cancel() {
//Free C++ resources
if (ca != null) {
System.out.println("Deleting CoreAlgorithm instance!");
ca.cancel();
ca.delete();
}
if (input != null) {
input.delete();
}
......
package de.hhu.ba.yoshikoWrapper.core;
import de.hhu.ba.yoshikoWrapper.swig.JavaInformer;
import de.hhu.ba.yoshikoWrapper.swig.CplexInformer;
public class CallbackHandler extends JavaInformer {
public CallbackHandler() {
}
@Override
public void callback() {
}
public abstract class CallbackHandler extends CplexInformer {
public abstract void callback();
}
......@@ -40,8 +40,7 @@ public class TimeLimitSetter extends JPanel{
this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
checkBox = new JCheckBox(LocalizationManager.get("timeLimitILP"));
numberField = new IntegerInputField();
numberField.setText("60");
numberField.setEnabled(false); //By default time limit is turned off
numberField.setText("30");
checkBox.addActionListener(
new ActionListener() {
......@@ -52,6 +51,8 @@ public class TimeLimitSetter extends JPanel{
}
);
this.checkBox.setSelected(true);
setEnabled(true);
//REGISTER COMPONENTS
SwingUtil.addAll(this,checkBox,numberField);
}
......
/* ----------------------------------------------------------------------------
* 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 CoreAlgorithm {
private transient long swigCPtr;
protected transient boolean swigCMemOwn;
protected CoreAlgorithm(long cPtr, boolean cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
protected static long getCPtr(CoreAlgorithm obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
protected void finalize() {
delete();
}
public synchronized void delete() {
if (swigCPtr != 0) {
if (swigCMemOwn) {
swigCMemOwn = false;
LibraryInterfaceJNI.delete_CoreAlgorithm(swigCPtr);
}
swigCPtr = 0;
}
}
public ClusterEditingSolutions run() {
long cPtr = LibraryInterfaceJNI.CoreAlgorithm_run(swigCPtr, this);
return (cPtr == 0) ? null : new ClusterEditingSolutions(cPtr, false);
}
public void cancel() {
LibraryInterfaceJNI.CoreAlgorithm_cancel(swigCPtr, this);
}
public void registerCplexInformer(CplexInformer informer) {
LibraryInterfaceJNI.CoreAlgorithm_registerCplexInformer(swigCPtr, this, CplexInformer.getCPtr(informer), informer);
}
}
......@@ -8,16 +8,16 @@
package de.hhu.ba.yoshikoWrapper.swig;
public class JavaInformer {
public class CplexInformer {
private transient long swigCPtr;
protected transient boolean swigCMemOwn;
protected JavaInformer(long cPtr, boolean cMemoryOwn) {
protected CplexInformer(long cPtr, boolean cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
protected static long getCPtr(JavaInformer obj) {
protected static long getCPtr(CplexInformer obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
......@@ -29,7 +29,7 @@ public class JavaInformer {
if (swigCPtr != 0) {
if (swigCMemOwn) {
swigCMemOwn = false;
LibraryInterfaceJNI.delete_JavaInformer(swigCPtr);
LibraryInterfaceJNI.delete_CplexInformer(swigCPtr);
}
swigCPtr = 0;
}
......@@ -42,21 +42,21 @@ public class JavaInformer {
public void swigReleaseOwnership() {
swigCMemOwn = false;
LibraryInterfaceJNI.JavaInformer_change_ownership(this, swigCPtr, false);
LibraryInterfaceJNI.CplexInformer_change_ownership(this, swigCPtr, false);
}
public void swigTakeOwnership() {
swigCMemOwn = true;
LibraryInterfaceJNI.JavaInformer_change_ownership(this, swigCPtr, true);
LibraryInterfaceJNI.CplexInformer_change_ownership(this, swigCPtr, true);
}
public void callback() {
if (getClass() == JavaInformer.class) LibraryInterfaceJNI.JavaInformer_callback(swigCPtr, this); else LibraryInterfaceJNI.JavaInformer_callbackSwigExplicitJavaInformer(swigCPtr, this);
public void callback(double gap) {
if (getClass() == CplexInformer.class) LibraryInterfaceJNI.CplexInformer_callback(swigCPtr, this, gap); else LibraryInterfaceJNI.CplexInformer_callbackSwigExplicitCplexInformer(swigCPtr, this, gap);
}
public JavaInformer() {
this(LibraryInterfaceJNI.new_JavaInformer(), true);
LibraryInterfaceJNI.JavaInformer_director_connect(this, swigCPtr, swigCMemOwn, true);
public CplexInformer() {
this(LibraryInterfaceJNI.new_CplexInformer(), true);
LibraryInterfaceJNI.CplexInformer_director_connect(this, swigCPtr, swigCMemOwn, true);
}
}
......@@ -13,11 +13,6 @@ public class LibraryInterface {
return LibraryInterfaceJNI.getVersionString();
}
public static ClusterEditingSolutions processLibraryInput(LibraryInput libIn, int nrOptimalSolutions, String rulesBitMask, double multiplicativeFactor, boolean separatePartitionCuts, boolean separateTriangles, boolean useHeuristic) {
long cPtr = LibraryInterfaceJNI.processLibraryInput(LibraryInput.getCPtr(libIn), libIn, nrOptimalSolutions, rulesBitMask, multiplicativeFactor, separatePartitionCuts, separateTriangles, useHeuristic);
return (cPtr == 0) ? null : new ClusterEditingSolutions(cPtr, false);
}
public static void setTimeLimit(int limit) {
LibraryInterfaceJNI.setTimeLimit(limit);
}
......@@ -26,4 +21,9 @@ public class LibraryInterface {
LibraryInterfaceJNI.setVerbosity(level);
}
public static CoreAlgorithm getRun(LibraryInput input, int nrOptimalSolutions, String rulesBitMask, double multiplicativeFactor, boolean useHeuristic, boolean separatePartitionCuts, boolean separateTriangles) {
long cPtr = LibraryInterfaceJNI.getRun(LibraryInput.getCPtr(input), input, nrOptimalSolutions, rulesBitMask, multiplicativeFactor, useHeuristic, separatePartitionCuts, separateTriangles);
return (cPtr == 0) ? null : new CoreAlgorithm(cPtr, false);
}
}
......@@ -34,19 +34,23 @@ public class LibraryInterfaceJNI {
public final static native void LibraryInput_addEdge__SWIG_1(long jarg1, LibraryInput jarg1_, long jarg2, long jarg3, double jarg4, boolean jarg5, boolean jarg6);
public final static native void LibraryInput_setSize(long jarg1, LibraryInput jarg1_, long jarg2);
public final static native void LibraryInput_setDefaultInsertionCost(long jarg1, LibraryInput jarg1_, double jarg2);
public final static native void JavaInformer_callback(long jarg1, JavaInformer jarg1_);
public final static native void JavaInformer_callbackSwigExplicitJavaInformer(long jarg1, JavaInformer jarg1_);
public final static native void delete_JavaInformer(long jarg1);
public final static native long new_JavaInformer();
public final static native void JavaInformer_director_connect(JavaInformer obj, long cptr, boolean mem_own, boolean weak_global);
public final static native void JavaInformer_change_ownership(JavaInformer obj, long cptr, boolean take_or_release);
public final static native void CplexInformer_callback(long jarg1, CplexInformer jarg1_, double jarg2);
public final static native void CplexInformer_callbackSwigExplicitCplexInformer(long jarg1, CplexInformer jarg1_, double jarg2);
public final static native void delete_CplexInformer(long jarg1);
public final static native long new_CplexInformer();
public final static native void CplexInformer_director_connect(CplexInformer obj, long cptr, boolean mem_own, boolean weak_global);
public final static native void CplexInformer_change_ownership(CplexInformer obj, long cptr, boolean take_or_release);
public final static native long CoreAlgorithm_run(long jarg1, CoreAlgorithm jarg1_);
public final static native void CoreAlgorithm_cancel(long jarg1, CoreAlgorithm jarg1_);
public final static native void CoreAlgorithm_registerCplexInformer(long jarg1, CoreAlgorithm jarg1_, long jarg2, CplexInformer jarg2_);
public final static native void delete_CoreAlgorithm(long jarg1);
public final static native String getVersionString();
public final static native long processLibraryInput(long jarg1, LibraryInput jarg1_, int jarg2, String jarg3, double jarg4, boolean jarg5, boolean jarg6, boolean jarg7);
public final static native void setTimeLimit(int jarg1);
public final static native void setVerbosity(int jarg1);
public final static native long getRun(long jarg1, LibraryInput jarg1_, int jarg2, String jarg3, double jarg4, boolean jarg5, boolean jarg6, boolean jarg7);
public static void SwigDirector_JavaInformer_callback(JavaInformer jself) {
jself.callback();
public static void SwigDirector_CplexInformer_callback(CplexInformer jself, double gap) {
jself.callback(gap);
}
private final static native void swig_module_init();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment