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.xtend107
1 files changed, 49 insertions, 58 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 a10530c7..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,67 +1,49 @@
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
9import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
10import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration
11 13
12//class ViatraReasonerNumbers { 14class ModelGenerationCompositeObjective implements IThreeValuedObjective {
13// public static val scopePriority = 2 15 val IObjective scopeObjective
14// public static val unfinishedMultiplicityPriority = 2
15// public static val unifinshedWFPriority = 2
16// //public static val complexityPriority = 4
17//
18// public static val scopeWeigth = 1.0
19// public static val unfinishedMultiplicityWeigth = 1.5
20// public static val unfinishedWFWeigth = 1.5
21// //public static val complexityWeigth = 0.1
22//
23// public static val useCompositeObjective = true
24// public static val compositePriority = 2
25//}
26
27class ModelGenerationCompositeObjective implements IObjective{
28 val ScopeObjective scopeObjective
29 val List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives 16 val List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives
30 val UnfinishedWFObjective unfinishedWFObjective 17 val UnfinishedWFObjective unfinishedWFObjective
31 var PartialInterpretation model=null; 18 var PartialInterpretation model = null
32 val boolean punishSize
33 val int scopeWeight 19 val int scopeWeight
34 val int conaintmentWeight 20 val int conaintmentWeight
35 val int nonContainmentWeight 21 val int nonContainmentWeight
36 val int unfinishedWFWeight 22 val int unfinishedWFWeight
37 23
38 new( 24 new(
39 ScopeObjective scopeObjective, 25 IObjective scopeObjective,
40 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives, 26 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives,
41 UnfinishedWFObjective unfinishedWFObjective, 27 UnfinishedWFObjective unfinishedWFObjective,
42 ViatraReasonerConfiguration configuration) 28 ViatraReasonerConfiguration configuration)
43 { 29 {
44 this.scopeObjective = scopeObjective 30 this(
45 this.unfinishedMultiplicityObjectives = unfinishedMultiplicityObjectives 31 scopeObjective, unfinishedMultiplicityObjectives, unfinishedWFObjective,
46 this.unfinishedWFObjective = unfinishedWFObjective 32 configuration.scopeWeight, configuration.conaintmentWeight, configuration.nonContainmentWeight,
47 33 configuration.unfinishedWFWeight
48 this.punishSize = configuration.punishSize 34 )
49 this.scopeWeight = configuration.scopeWeight
50 this.conaintmentWeight = configuration.conaintmentWeight
51 this.nonContainmentWeight = configuration.nonContainmentWeight
52 this.unfinishedWFWeight = configuration.unfinishedWFWeight
53 } 35 }
36
54 new( 37 new(
55 ScopeObjective scopeObjective, 38 IObjective scopeObjective,
56 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives, 39 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives,
57 UnfinishedWFObjective unfinishedWFObjective, 40 UnfinishedWFObjective unfinishedWFObjective,
58 boolean punishSize, int scopeWeight, int conaintmentWeight, int nonContainmentWeight, int unfinishedWFWeight) 41 int scopeWeight, int conaintmentWeight, int nonContainmentWeight, int unfinishedWFWeight)
59 { 42 {
60 this.scopeObjective = scopeObjective 43 this.scopeObjective = scopeObjective
61 this.unfinishedMultiplicityObjectives = unfinishedMultiplicityObjectives 44 this.unfinishedMultiplicityObjectives = unfinishedMultiplicityObjectives
62 this.unfinishedWFObjective = unfinishedWFObjective 45 this.unfinishedWFObjective = unfinishedWFObjective
63 46
64 this.punishSize = punishSize
65 this.scopeWeight = scopeWeight 47 this.scopeWeight = scopeWeight
66 this.conaintmentWeight = conaintmentWeight 48 this.conaintmentWeight = conaintmentWeight
67 this.nonContainmentWeight = nonContainmentWeight 49 this.nonContainmentWeight = nonContainmentWeight
@@ -74,33 +56,34 @@ class ModelGenerationCompositeObjective implements IObjective{
74 this.unfinishedMultiplicityObjectives.forEach[it.init(context)] 56 this.unfinishedMultiplicityObjectives.forEach[it.init(context)]
75 this.unfinishedWFObjective.init(context) 57 this.unfinishedWFObjective.init(context)
76 } 58 }
77 59
78 override createNew() { 60 override createNew() {
79 return new ModelGenerationCompositeObjective( 61 return new ModelGenerationCompositeObjective(
80 this.scopeObjective, this.unfinishedMultiplicityObjectives, this.unfinishedWFObjective, 62 scopeObjective.createNew,
81 this.punishSize, this.scopeWeight, this.conaintmentWeight, this.nonContainmentWeight, this.unfinishedWFWeight) 63 ImmutableList.copyOf(unfinishedMultiplicityObjectives.map[createNew as UnfinishedMultiplicityObjective]),
64 unfinishedWFObjective.createNew as UnfinishedWFObjective,
65 scopeWeight, conaintmentWeight, nonContainmentWeight, unfinishedWFWeight
66 )
82 } 67 }
83 68
84 override getComparator() { Comparators.LOWER_IS_BETTER } 69 override getComparator() { Comparators.LOWER_IS_BETTER }
70
85 override getFitness(ThreadContext context) { 71 override getFitness(ThreadContext context) {
86 72
87 val scopeFitnes = scopeObjective.getFitness(context) 73 val scopeFitnes = scopeObjective.getFitness(context)
88 //val unfinishedMultiplicitiesFitneses = unfinishedMultiplicityObjectives.map[x|x.getFitness(context)]
89 val unfinishedWFsFitness = unfinishedWFObjective.getFitness(context) 74 val unfinishedWFsFitness = unfinishedWFObjective.getFitness(context)
90 75
91 var containmentMultiplicity = 0.0 76 var containmentMultiplicity = 0.0
92 var nonContainmentMultiplicity = 0.0 77 var nonContainmentMultiplicity = 0.0
93 for(multiplicityObjective : unfinishedMultiplicityObjectives) { 78 for(multiplicityObjective : unfinishedMultiplicityObjectives) {
79 val multiplicity = multiplicityObjective.getFitness(context)
80// println(multiplicityObjective.name + "=" + multiplicity)
94 if(multiplicityObjective.containment) { 81 if(multiplicityObjective.containment) {
95 containmentMultiplicity+=multiplicityObjective.getFitness(context) 82 containmentMultiplicity+=multiplicity
96 } else { 83 } else {
97 nonContainmentMultiplicity+=multiplicityObjective.getFitness(context) 84 nonContainmentMultiplicity+=multiplicity
98 } 85 }
99 } 86
100 val size = if(punishSize) {
101 0.9/model.newElements.size
102 } else {
103 0
104 } 87 }
105 88
106 var sum = 0.0 89 var sum = 0.0
@@ -108,25 +91,33 @@ class ModelGenerationCompositeObjective implements IObjective{
108 sum += containmentMultiplicity*conaintmentWeight 91 sum += containmentMultiplicity*conaintmentWeight
109 sum += nonContainmentMultiplicity*nonContainmentWeight 92 sum += nonContainmentMultiplicity*nonContainmentWeight
110 sum += unfinishedWFsFitness*unfinishedWFWeight 93 sum += unfinishedWFsFitness*unfinishedWFWeight
111 sum+=size
112 94
113 //println('''Sum=«sum»|Scope=«scopeFitnes»|ContainmentMultiplicity=«containmentMultiplicity»|NonContainmentMultiplicity=«nonContainmentMultiplicity»|WFs=«unfinishedWFsFitness»''') 95// println('''scope=«scopeFitnes», containment=«containmentMultiplicity», nonContainment=«nonContainmentMultiplicity», wf=«unfinishedWFsFitness», sum=«sum»''')
114 96
115 return sum 97 return sum
116 } 98 }
117 99
118 override getLevel() { 2 } 100 override getWorstPossibleFitness(ThreadContext threadContext) {
119 override getName() { "CompositeUnfinishednessObjective"} 101 Double.POSITIVE_INFINITY
102 }
120 103
104 override getBestPossibleFitness(ThreadContext threadContext) {
105 0.0
106 }
107
108 override getLevel() { 2 }
109
110 override getName() { "CompositeUnfinishednessObjective" }
111
121 override isHardObjective() { true } 112 override isHardObjective() { true }
122 override satisifiesHardObjective(Double fitness) { fitness < 0.95 } 113
123 114 override satisifiesHardObjective(Double fitness) { fitness < 0.01 }
124 115
125 override setComparator(Comparator<Double> comparator) { 116 override setComparator(Comparator<Double> comparator) {
126 throw new UnsupportedOperationException("TODO: auto-generated method stub") 117 throw new UnsupportedOperationException("Model generation objective comparator cannot be set.")
127 } 118 }
119
128 override setLevel(int level) { 120 override setLevel(int level) {
129 throw new UnsupportedOperationException("TODO: auto-generated method stub") 121 throw new UnsupportedOperationException("Model generation objective level cannot be set.")
130 } 122 }
131 123}
132} \ No newline at end of file