blob: 7ec0f84d77850afa1d8c53475458e467dc77189d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
}
}
}
|