aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend130
1 files changed, 77 insertions, 53 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend
index 9fc6853c..27208cf4 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend
@@ -1,99 +1,123 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse 1package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse
2 2
3import com.google.common.collect.ImmutableList
4import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
5import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration
6import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.IThreeValuedObjective
3import java.util.Comparator 7import java.util.Comparator
4import java.util.List 8import java.util.List
5import org.eclipse.viatra.dse.base.ThreadContext 9import org.eclipse.viatra.dse.base.ThreadContext
6import org.eclipse.viatra.dse.objectives.Comparators 10import org.eclipse.viatra.dse.objectives.Comparators
7import org.eclipse.viatra.dse.objectives.IObjective 11import org.eclipse.viatra.dse.objectives.IObjective
8import org.eclipse.viatra.dse.objectives.impl.BaseObjective 12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement
9 13
10//class ViatraReasonerNumbers { 14class ModelGenerationCompositeObjective implements IThreeValuedObjective {
11// public static val scopePriority = 2 15 val IObjective scopeObjective
12// public static val unfinishedMultiplicityPriority = 2
13// public static val unifinshedWFPriority = 2
14// //public static val complexityPriority = 4
15//
16// public static val scopeWeigth = 1.0
17// public static val unfinishedMultiplicityWeigth = 1.5
18// public static val unfinishedWFWeigth = 1.5
19// //public static val complexityWeigth = 0.1
20//
21// public static val useCompositeObjective = true
22// public static val compositePriority = 2
23//}
24
25class ModelGenerationCompositeObjective implements IObjective{
26 val ScopeObjective scopeObjective
27 val List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives 16 val List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives
28 val UnfinishedWFObjective unfinishedWFObjective 17 val UnfinishedWFObjective unfinishedWFObjective
29 var boolean isWFOptional = false; 18 var PartialInterpretation model = null
19 val int scopeWeight
20 val int conaintmentWeight
21 val int nonContainmentWeight
22 val int unfinishedWFWeight
30 23
31 public new( 24 new(
32 ScopeObjective scopeObjective, 25 IObjective scopeObjective,
26 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives,
27 UnfinishedWFObjective unfinishedWFObjective,
28 ViatraReasonerConfiguration configuration)
29 {
30 this(
31 scopeObjective, unfinishedMultiplicityObjectives, unfinishedWFObjective,
32 configuration.scopeWeight, configuration.conaintmentWeight, configuration.nonContainmentWeight,
33 configuration.unfinishedWFWeight
34 )
35 }
36
37 new(
38 IObjective scopeObjective,
33 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives, 39 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives,
34 UnfinishedWFObjective unfinishedWFObjective, 40 UnfinishedWFObjective unfinishedWFObjective,
35 boolean isWFOptional) 41 int scopeWeight, int conaintmentWeight, int nonContainmentWeight, int unfinishedWFWeight)
36 { 42 {
37 this.scopeObjective = scopeObjective 43 this.scopeObjective = scopeObjective
38 this.unfinishedMultiplicityObjectives = unfinishedMultiplicityObjectives 44 this.unfinishedMultiplicityObjectives = unfinishedMultiplicityObjectives
39 this.unfinishedWFObjective = unfinishedWFObjective 45 this.unfinishedWFObjective = unfinishedWFObjective
40 this.isWFOptional = isWFOptional; 46
41 } 47 this.scopeWeight = scopeWeight
42 48 this.conaintmentWeight = conaintmentWeight
43 def getIsWFOptional(){ 49 this.nonContainmentWeight = nonContainmentWeight
44 return this.isWFOptional; 50 this.unfinishedWFWeight = unfinishedWFWeight
45 } 51 }
46 52
47 override init(ThreadContext context) { 53 override init(ThreadContext context) {
54 model = context.model as PartialInterpretation
48 this.scopeObjective.init(context) 55 this.scopeObjective.init(context)
49 this.unfinishedMultiplicityObjectives.forEach[it.init(context)] 56 this.unfinishedMultiplicityObjectives.forEach[it.init(context)]
50 this.unfinishedWFObjective.init(context) 57 this.unfinishedWFObjective.init(context)
51 } 58 }
52 59
53 override createNew() { 60 override createNew() {
54 return new ModelGenerationCompositeObjective( 61 return new ModelGenerationCompositeObjective(
55 this.scopeObjective, this.unfinishedMultiplicityObjectives, this.unfinishedWFObjective, this.isWFOptional) 62 scopeObjective.createNew,
63 ImmutableList.copyOf(unfinishedMultiplicityObjectives.map[createNew as UnfinishedMultiplicityObjective]),
64 unfinishedWFObjective.createNew as UnfinishedWFObjective,
65 scopeWeight, conaintmentWeight, nonContainmentWeight, unfinishedWFWeight
66 )
56 } 67 }
57 68
58 override getComparator() { Comparators.LOWER_IS_BETTER } 69 override getComparator() { Comparators.LOWER_IS_BETTER }
70
59 override getFitness(ThreadContext context) { 71 override getFitness(ThreadContext context) {
60 var sum = 0.0 72
61 val scopeFitnes = scopeObjective.getFitness(context) 73 val scopeFitnes = scopeObjective.getFitness(context)
62 //val unfinishedMultiplicitiesFitneses = unfinishedMultiplicityObjectives.map[x|x.getFitness(context)] 74 val unfinishedWFsFitness = unfinishedWFObjective.getFitness(context)
63 75
64 sum+=scopeFitnes 76 var containmentMultiplicity = 0.0
65 var multiplicity = 0.0 77 var nonContainmentMultiplicity = 0.0
66 for(multiplicityObjective : unfinishedMultiplicityObjectives) { 78 for(multiplicityObjective : unfinishedMultiplicityObjectives) {
67 multiplicity+=multiplicityObjective.getFitness(context)//*0.5 79 val multiplicity = multiplicityObjective.getFitness(context)
80// println(multiplicityObjective.name + "=" + multiplicity)
81 if(multiplicityObjective.containment) {
82 containmentMultiplicity+=multiplicity
83 } else {
84 nonContainmentMultiplicity+=multiplicity
85 }
86
68 } 87 }
69 sum+=multiplicity
70 88
71 // the WF can be optional when generating realistic models 89 var sum = 0.0
72 if(!isWFOptional){ 90 sum += scopeFitnes*scopeWeight
73 val unfinishedWFsFitness = unfinishedWFObjective.getFitness(context) 91 sum += containmentMultiplicity*conaintmentWeight
74 sum += unfinishedWFsFitness//*0.5 92 sum += nonContainmentMultiplicity*nonContainmentWeight
75 } 93 sum += unfinishedWFsFitness*unfinishedWFWeight
76 94
77 //println('''Sum=«sum»|Scope=«scopeFitnes»|Multiplicity=«multiplicity»|WFs=«unfinishedWFsFitness»''') 95// println('''scope=«scopeFitnes», containment=«containmentMultiplicity», nonContainment=«nonContainmentMultiplicity», wf=«unfinishedWFsFitness», sum=«sum»''')
78 96
79 return sum 97 return sum
80 } 98 }
81 99
82 override getLevel() { 2 } 100 override getWorstPossibleFitness(ThreadContext threadContext) {
83 override getName() { "CompositeUnfinishednessObjective"} 101 Double.POSITIVE_INFINITY
84 def getObjective(){
85 return this.unfinishedMultiplicityObjectives;
86 } 102 }
87 103
104 override getBestPossibleFitness(ThreadContext threadContext) {
105 0.0
106 }
107
108 override getLevel() { 2 }
109
110 override getName() { "CompositeUnfinishednessObjective" }
111
88 override isHardObjective() { true } 112 override isHardObjective() { true }
89 override satisifiesHardObjective(Double fitness) { fitness <= 0.001 } 113
90 114 override satisifiesHardObjective(Double fitness) { fitness < 0.01 }
91 115
92 override setComparator(Comparator<Double> comparator) { 116 override setComparator(Comparator<Double> comparator) {
93 throw new UnsupportedOperationException("TODO: auto-generated method stub") 117 throw new UnsupportedOperationException("Model generation objective comparator cannot be set.")
94 } 118 }
119
95 override setLevel(int level) { 120 override setLevel(int level) {
96 throw new UnsupportedOperationException("TODO: auto-generated method stub") 121 throw new UnsupportedOperationException("Model generation objective level cannot be set.")
97 } 122 }
98 123}
99} \ No newline at end of file