Search in sources :

Example 1 with PRAiSE

use of com.sri.ai.praise.sgsolver.cli.PRAiSE in project aic-praise by aic-sri-international.

the class SGSolverEvaluator method prCallSGSolverCLI.

//
// PRIVATE
private SGSolverCallResult prCallSGSolverCLI(String model, String evidenceQuery) throws Exception {
    String tempPagedModelContainer = PagedModelContainer.toInternalContainerRepresentation(ModelLanguage.HOGMv1, Arrays.asList(new Pair<String, List<String>>(model, Arrays.asList(evidenceQuery))));
    File tempInput = File.createTempFile("sgsolver", PagedModelContainer.DEFAULT_CONTAINER_FILE_EXTENSION, getConfiguration().getWorkingDirectory());
    Files.write(tempInput.toPath(), tempPagedModelContainer.getBytes());
    //
    File tempSTDERR = File.createTempFile("sgsolver", ".stderr", getConfiguration().getWorkingDirectory());
    File tempSTDOUT = File.createTempFile("sgsolver", ".stdout", getConfiguration().getWorkingDirectory());
    ProcessBuilder processBuilder = new ProcessBuilder();
    processBuilder.directory(getConfiguration().getWorkingDirectory());
    // TODO - add option to PRAiSE to indicate a timeout.
    processBuilder.command("java", "-classpath", System.getProperty("java.class.path"), "-Xms" + getConfiguration().getTotalMemoryLimitInMegabytesPerSolveAttempt() + "M", "-Xmx" + getConfiguration().getTotalMemoryLimitInMegabytesPerSolveAttempt() + "M", PRAiSE.class.getName(), tempInput.getAbsolutePath());
    processBuilder.redirectError(ProcessBuilder.Redirect.to(tempSTDERR));
    processBuilder.redirectOutput(ProcessBuilder.Redirect.to(tempSTDOUT));
    long sgSolverStart = System.currentTimeMillis();
    Process sgSolverProcess = processBuilder.start();
    if (!sgSolverProcess.waitFor(getConfiguration().getTotalCPURuntimeLimitSecondsPerSolveAttempt() + 5, TimeUnit.SECONDS)) {
        // waiting time elapsed
        sgSolverProcess.destroyForcibly();
    }
    long sgSolverEnd = System.currentTimeMillis();
    List<String> sgsolverOutputs = Files.readAllLines(tempSTDOUT.toPath(), StandardCharsets.UTF_8);
    tempInput.delete();
    //
    tempSTDOUT.delete();
    tempSTDERR.delete();
    SGSolverCallResult result = new SGSolverCallResult();
    result.sgSolverProcessTookMS = sgSolverEnd - sgSolverStart;
    result.resultExpression = sgsolverOutputs.stream().filter(line -> line.startsWith(PRAiSE.RESULT_PREFIX)).findFirst().orElse(null);
    if (result.resultExpression != null) {
        result.resultExpression = result.resultExpression.substring(PRAiSE.RESULT_PREFIX.length());
    } else {
        throw new Error("Error launching java process for SGSolver:\n" + sgsolverOutputs);
    }
    return result;
}
Also used : Arrays(java.util.Arrays) Files(java.nio.file.Files) SolverEvaluatorProbabilityEvidenceResult(com.sri.ai.praise.evaluate.solver.SolverEvaluatorProbabilityEvidenceResult) Expressions(com.sri.ai.expresso.helper.Expressions) Expression(com.sri.ai.expresso.api.Expression) IfThenElse(com.sri.ai.grinder.sgdpllt.library.controlflow.IfThenElse) File(java.io.File) StandardCharsets(java.nio.charset.StandardCharsets) PagedModelContainer(com.sri.ai.praise.model.common.io.PagedModelContainer) TimeUnit(java.util.concurrent.TimeUnit) List(java.util.List) Not(com.sri.ai.grinder.sgdpllt.library.boole.Not) AbstractSolverEvaluator(com.sri.ai.praise.evaluate.solver.impl.AbstractSolverEvaluator) ModelLanguage(com.sri.ai.praise.lang.ModelLanguage) PRAiSE(com.sri.ai.praise.sgsolver.cli.PRAiSE) Pair(com.sri.ai.util.base.Pair) PRAiSE(com.sri.ai.praise.sgsolver.cli.PRAiSE) File(java.io.File) Pair(com.sri.ai.util.base.Pair)

Aggregations

Expression (com.sri.ai.expresso.api.Expression)1 Expressions (com.sri.ai.expresso.helper.Expressions)1 Not (com.sri.ai.grinder.sgdpllt.library.boole.Not)1 IfThenElse (com.sri.ai.grinder.sgdpllt.library.controlflow.IfThenElse)1 SolverEvaluatorProbabilityEvidenceResult (com.sri.ai.praise.evaluate.solver.SolverEvaluatorProbabilityEvidenceResult)1 AbstractSolverEvaluator (com.sri.ai.praise.evaluate.solver.impl.AbstractSolverEvaluator)1 ModelLanguage (com.sri.ai.praise.lang.ModelLanguage)1 PagedModelContainer (com.sri.ai.praise.model.common.io.PagedModelContainer)1 PRAiSE (com.sri.ai.praise.sgsolver.cli.PRAiSE)1 Pair (com.sri.ai.util.base.Pair)1 File (java.io.File)1 StandardCharsets (java.nio.charset.StandardCharsets)1 Files (java.nio.file.Files)1 Arrays (java.util.Arrays)1 List (java.util.List)1 TimeUnit (java.util.concurrent.TimeUnit)1