blob: ca39cadaff00c400dfc617cbe976eb90f3e95419 (
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse
import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.AbstractNodeDescriptor
import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.NeighbourhoodWithTraces
import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.PartialInterpretation2ImmutableTypeLattice
import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DiversityDescriptor
import java.util.LinkedList
import java.util.List
import java.util.Map
import org.eclipse.viatra.dse.base.ThreadContext
class SolutionStoreWithDiversityDescriptor {
val DiversityDescriptor descriptor
val PartialInterpretation2ImmutableTypeLattice solutionCoder = new PartialInterpretation2ImmutableTypeLattice
val List<NeighbourhoodWithTraces<Map<? extends AbstractNodeDescriptor, Integer>, AbstractNodeDescriptor>> solutionCodeList = new LinkedList
var long runtime
var int allCheck
var int successfulCheck
public new(DiversityDescriptor descriptor) {
this.descriptor = descriptor
}
def public isActive() {
descriptor!==null
}
def getSumRuntime() {
return runtime
}
def getSuccessRate() {
return successfulCheck as double / allCheck
}
def isDifferent(ThreadContext context) {
if(active) {
val start = System.nanoTime
val model = context.model as PartialInterpretation
val code = solutionCoder.createRepresentation(model,
descriptor.range,
descriptor.parallels,
descriptor.maxNumber,
descriptor.relevantTypes,
descriptor.relevantRelations)
val isDifferent = solutionCodeList.forall[previous | ! code.equals(previous)]
runtime += System.nanoTime - start
allCheck++
if(isDifferent) { successfulCheck++ }
return isDifferent
} else {
allCheck++
successfulCheck++
return true
}
}
def canBeDifferent(ThreadContext context) {
return true
}
def newSolution(ThreadContext context) {
if(active) {
val start = System.nanoTime
val model = context.model as PartialInterpretation
val code = solutionCoder.createRepresentation(model,
descriptor.range,
descriptor.parallels,
descriptor.maxNumber,
descriptor.relevantTypes,
descriptor.relevantRelations)
solutionCodeList += code
runtime += System.nanoTime - start
}
}
}
|