diff --git a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPExternalSolver.java b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPExternalSolver.java index d7e59953a521fa32653f17f0690b9236dcf486d9..f1625f4425a9f0158e64559f6e85d62f33c655ad 100644 --- a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPExternalSolver.java +++ b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/ILPExternalSolver.java @@ -71,6 +71,9 @@ public abstract class ILPExternalSolver extends AbstractILPSolver { } protected double solve0(Root model, StopWatch watch, List<IlpVariable> variablesSetToOne) throws SolvingException { + + long startOfWriteOutInMillis = watch.time(TimeUnit.MILLISECONDS); + // Create temporary files try { lp = Files.createTempFile("ilp", ".lp"); @@ -81,12 +84,8 @@ public abstract class ILPExternalSolver extends AbstractILPSolver { logger.info("Writing ILP to {}, solving now", lp.toAbsolutePath()); } - - long startOfWriteOutInMillis = watch.time(TimeUnit.MILLISECONDS); - // write out lp file IlpString output = model.getILP().printIlp(); - try (BufferedWriter writer = Files.newBufferedWriter( lp, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { writer.write(output.toString()); @@ -96,7 +95,7 @@ public abstract class ILPExternalSolver extends AbstractILPSolver { this.lastGeneration = watch.time(TimeUnit.MILLISECONDS); long millisecondsNeededToWriteOut = watch.time(TimeUnit.MILLISECONDS) - startOfWriteOutInMillis; long remainingTimeInMillis = this.timeoutUnit.toMillis(this.timeoutValue) - lastGeneration; - long remainingTimeForSolvingInMillis = Math.max(0, remainingTimeInMillis - millisecondsNeededToWriteOut); + long remainingTimeForSolvingInMillis = Math.max(0, remainingTimeInMillis - 2*millisecondsNeededToWriteOut); // take twice the time to have buffer to write out solution afterwards diff --git a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/SCIPSolver.java b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/SCIPSolver.java index 19fd228ea9c4cd75eedb0425951c61ec87b15868..4d8cb9f52ffe9474fe296424b4d47c9b827b6152 100644 --- a/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/SCIPSolver.java +++ b/jastadd-mquat-solver-ilp/src/main/java/de/tudresden/inf/st/mquat/solving/ilp/SCIPSolver.java @@ -3,13 +3,10 @@ package de.tudresden.inf.st.mquat.solving.ilp; import de.tudresden.inf.st.mquat.jastadd.model.ILP; import de.tudresden.inf.st.mquat.jastadd.model.IlpVariable; import de.tudresden.inf.st.mquat.solving.SolvingException; -import org.apache.logging.log4j.LogManager; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -20,9 +17,10 @@ public class SCIPSolver extends ILPExternalSolver { * Create a new GLPK solver with default settings. * Default is: * <ul> - * <li>1 minute timeout</li> - * <li>delete temporary files on exit.</li> + * <li>1 minute timeout</li> + * <li>delete temporary files on exit.</li> * </ul> + * * @see SCIPSolver#setDeleteFilesOnExit(boolean) */ public SCIPSolver() { @@ -31,13 +29,13 @@ public class SCIPSolver extends ILPExternalSolver { @Override protected String[] getCommand(Path lp, Path solution, long remainingTimeForSolvingInMillis) { - String[] command = {"scip", "-c", "read " + lp.toAbsolutePath() + " set timing reading true set timing clocktype 2 set limit time " + remainingTimeForSolvingInMillis/1000 + " optimize write solution " + solution.toAbsolutePath() + " quit"}; + String[] command = {"scip", "-c", "read " + lp.toAbsolutePath() + " set timing reading true set timing clocktype 2 set limit time " + remainingTimeForSolvingInMillis / 1000 + " optimize write solution " + solution.toAbsolutePath() + " quit"}; return command; } @Override protected void readFromPlainTextSolution(ILP ilp, Path solution, ILPSolution result, - List<IlpVariable> variablesSetToOne) throws SolvingException { + List<IlpVariable> variablesSetToOne) throws SolvingException { try (Stream<String> lines = Files.lines(solution)) { for (String line : lines.collect(Collectors.toList())) { if (line.startsWith("objective value:")) { @@ -53,7 +51,7 @@ public class SCIPSolver extends ILPExternalSolver { if (tokens.length == 3) { // tokens: name, value, objective - if (Math.round(Double.parseDouble(tokens[1])*1000000000)==1000000000) { + if (Math.round(Double.parseDouble(tokens[1]) * 1000000000) == 1000000000) { logger.debug("found new variable {} with value {}", tokens[0], tokens[1]); IlpVariable variable = ilp.resolve(tokens[0]); if (variable == null) {