aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/WF2ObjectiveConverter.xtend
blob: 5a528a9e1ff48e38cee47375bf26764d441a750d (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
package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse

import java.util.ArrayList
import java.util.Collection
import org.eclipse.viatra.dse.objectives.Comparators
import org.eclipse.viatra.dse.objectives.IGlobalConstraint
import org.eclipse.viatra.dse.objectives.impl.ConstraintsObjective
import org.eclipse.viatra.dse.objectives.impl.ConstraintsObjective.QueryConstraint
import org.eclipse.viatra.dse.objectives.impl.ModelQueriesGlobalConstraint
import org.eclipse.viatra.query.runtime.api.IPatternMatch
import org.eclipse.viatra.query.runtime.api.IQuerySpecification
import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher

class WF2ObjectiveConverter {
	
	def createCompletenessObjective(
		Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> unfinishedWF)
	{
		val res = new ConstraintsObjective('''unfinishedWFs''',
			unfinishedWF.map[
				new QueryConstraint(it.fullyQualifiedName,it,2.0)
			].toList
		)
		res.withComparator(Comparators.LOWER_IS_BETTER)
		res.level = 2
		return res
	}
	
	def IGlobalConstraint createInvalidationObjective(
		Collection<? extends IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>>> invalidatedByWF)
	{
		return new ModelQueriesGlobalConstraint('''invalidatedWFs''',
			new ArrayList(invalidatedByWF)
		)
	}
}