From fd3684b5440dacca0c4bf4be15930555a79e2100 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Tue, 21 May 2019 17:00:01 -0400 Subject: VIATRA DSE and COIN-OR CBC implementations of CPS case study --- .../dslreasoner/domains/cps/cplex/CbcCpsMain.xtend | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.xtend (limited to 'Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.xtend') diff --git a/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.xtend b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.xtend new file mode 100644 index 00000000..7ec0f84d --- /dev/null +++ b/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.xtend @@ -0,0 +1,53 @@ +package hu.bme.mit.inf.dslreasoner.domains.cps.cplex + +import hu.bme.mit.inf.dslreasoner.domains.cps.CpsPackage +import hu.bme.mit.inf.dslreasoner.domains.cps.generator.CpsGenerator +import java.io.BufferedReader +import java.io.BufferedWriter +import java.io.FileReader +import java.io.FileWriter +import org.eclipse.emf.ecore.EPackage +import org.eclipse.emf.ecore.resource.Resource +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl +import java.util.concurrent.TimeUnit + +class CbcCpsMain { + static val PROBLEM_FILE = "problem.lp" + static val SOLUTION_FILE = "solution.txt" + + private new() { + new IllegalStateException("This is a static utility class and should not be instantiated directly.") + } + + static def void main(String[] args) { + Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, + new XMIResourceFactoryImpl) + EPackage.Registry.INSTANCE.put(CpsPackage.eNS_URI, CpsPackage.eINSTANCE) + val generator = new CpsGenerator(1, 4, 1) + val problem = generator.generateCpsProblem + val toLp = new CpsToLpTranslator(problem, 10, true) + val lp = toLp.lpProblem + val writer = new BufferedWriter(new FileWriter(PROBLEM_FILE)) + try { + writer.append(lp) + } finally { + writer.close + } + val process = new ProcessBuilder().inheritIO.command("cbc", PROBLEM_FILE, "solve", "solu", SOLUTION_FILE).start + if (!process.waitFor(120, TimeUnit.SECONDS)) { + System.err.println("Timeout reached") + process.destroyForcibly + System.exit(-1) + } + if (process.exitValue != 0) { + System.err.println("Unexpected exit value " + process.exitValue) + System.exit(-1) + } + val reader = new BufferedReader(new FileReader(SOLUTION_FILE)) + try { + reader.lines.forEach[println(it)] + } finally { + reader.close + } + } +} -- cgit v1.2.3-54-g00ecf