aboutsummaryrefslogtreecommitdiffstats
path: root/Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.xtend')
-rw-r--r--Domains/hu.bme.mit.inf.dslreasoner.domains.cps/src/hu/bme/mit/inf/dslreasoner/domains/cps/cplex/CbcCpsMain.xtend67
1 files changed, 67 insertions, 0 deletions
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..1a07e26e
--- /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,67 @@
1package hu.bme.mit.inf.dslreasoner.domains.cps.cplex
2
3import hu.bme.mit.inf.dslreasoner.domains.cps.CpsPackage
4import hu.bme.mit.inf.dslreasoner.domains.cps.generator.CpsGenerator
5import java.io.BufferedReader
6import java.io.BufferedWriter
7import java.io.FileReader
8import java.io.FileWriter
9import java.util.concurrent.TimeUnit
10import java.util.regex.Pattern
11import org.eclipse.emf.ecore.EPackage
12import org.eclipse.emf.ecore.resource.Resource
13import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
14
15class CbcCpsMain {
16 static val PROBLEM_FILE = "problem.lp"
17 static val SOLUTION_FILE = "solution.txt"
18 static val VALUE_REGEX = Pattern.compile("Optimal - objective value\\s*([0-9]+(\\.[0-9]+)?)")
19
20 private new() {
21 new IllegalStateException("This is a static utility class and should not be instantiated directly.")
22 }
23
24 public static def void main(String[] args) {
25 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION,
26 new XMIResourceFactoryImpl)
27 EPackage.Registry.INSTANCE.put(CpsPackage.eNS_URI, CpsPackage.eINSTANCE)
28 val generator = new CpsGenerator(1, 4, 1)
29 val problem = generator.generateCpsProblem
30 val toLp = new CpsToLpTranslator(problem, 10, true)
31 val lp = toLp.lpProblem
32 val writer = new BufferedWriter(new FileWriter(PROBLEM_FILE))
33 try {
34 writer.append(lp)
35 } finally {
36 writer.close
37 }
38 val process = new ProcessBuilder().inheritIO.command("cbc", PROBLEM_FILE, "solve", "solu", SOLUTION_FILE).start
39 if (!process.waitFor(120, TimeUnit.SECONDS)) {
40 System.err.println("Timeout reached")
41 process.destroyForcibly
42 System.exit(-1)
43 }
44 if (process.exitValue != 0) {
45 System.err.println("Unexpected exit value " + process.exitValue)
46 System.exit(-1)
47 }
48 val reader = new BufferedReader(new FileReader(SOLUTION_FILE))
49 var double value = Double.NaN
50 try {
51 var String line
52 while ((line = reader.readLine) !== null) {
53 println(line)
54 val matcher = VALUE_REGEX.matcher(line)
55 if (matcher.matches) {
56 value = Double.parseDouble(matcher.group(1))
57 }
58 }
59 } finally {
60 reader.close
61 }
62 val applicationCost = problem.requests.flatMap[requirements.map[count]].reduce[p1, p2|p1 + p2] * 5
63 val cost = applicationCost + value
64 println
65 println("Cost: " + cost)
66 }
67}