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.xtend97
1 files changed, 66 insertions, 31 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 2976bebe..d2faaa65 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,36 +1,58 @@
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 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
4import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.IThreeValuedObjective 6import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.IThreeValuedObjective
5import java.util.Comparator 7import java.util.Comparator
6import java.util.List 8import java.util.List
7import org.eclipse.viatra.dse.base.ThreadContext 9import org.eclipse.viatra.dse.base.ThreadContext
8import org.eclipse.viatra.dse.objectives.Comparators 10import org.eclipse.viatra.dse.objectives.Comparators
9import org.eclipse.viatra.dse.objectives.IObjective 11import org.eclipse.viatra.dse.objectives.IObjective
10import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
11 12
12//class ViatraReasonerNumbers {
13// public static val scopePriority = 2
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
27@FinalFieldsConstructor
28class ModelGenerationCompositeObjective implements IThreeValuedObjective { 13class ModelGenerationCompositeObjective implements IThreeValuedObjective {
29 val IObjective scopeObjective 14 val IObjective scopeObjective
30 val List<IObjective> unfinishedMultiplicityObjectives 15 val List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives
31 val IObjective unfinishedWFObjective 16 val UnfinishedWFObjective unfinishedWFObjective
17 var PartialInterpretation model = null
18 val boolean punishSize
19 val int scopeWeight
20 val int conaintmentWeight
21 val int nonContainmentWeight
22 val int unfinishedWFWeight
23
24 new(
25 IObjective scopeObjective,
26 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives,
27 UnfinishedWFObjective unfinishedWFObjective,
28 ViatraReasonerConfiguration configuration)
29 {
30 this(
31 scopeObjective, unfinishedMultiplicityObjectives, unfinishedWFObjective, configuration.punishSize,
32 configuration.scopeWeight, configuration.conaintmentWeight, configuration.nonContainmentWeight,
33 configuration.unfinishedWFWeight
34 )
35 }
32 36
37 new(
38 IObjective scopeObjective,
39 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives,
40 UnfinishedWFObjective unfinishedWFObjective,
41 boolean punishSize, int scopeWeight, int conaintmentWeight, int nonContainmentWeight, int unfinishedWFWeight)
42 {
43 this.scopeObjective = scopeObjective
44 this.unfinishedMultiplicityObjectives = unfinishedMultiplicityObjectives
45 this.unfinishedWFObjective = unfinishedWFObjective
46
47 this.punishSize = punishSize
48 this.scopeWeight = scopeWeight
49 this.conaintmentWeight = conaintmentWeight
50 this.nonContainmentWeight = nonContainmentWeight
51 this.unfinishedWFWeight = unfinishedWFWeight
52 }
53
33 override init(ThreadContext context) { 54 override init(ThreadContext context) {
55 model = context.model as PartialInterpretation
34 this.scopeObjective.init(context) 56 this.scopeObjective.init(context)
35 this.unfinishedMultiplicityObjectives.forEach[it.init(context)] 57 this.unfinishedMultiplicityObjectives.forEach[it.init(context)]
36 this.unfinishedWFObjective.init(context) 58 this.unfinishedWFObjective.init(context)
@@ -39,27 +61,40 @@ class ModelGenerationCompositeObjective implements IThreeValuedObjective {
39 override createNew() { 61 override createNew() {
40 return new ModelGenerationCompositeObjective( 62 return new ModelGenerationCompositeObjective(
41 scopeObjective.createNew, 63 scopeObjective.createNew,
42 ImmutableList.copyOf(unfinishedMultiplicityObjectives.map[createNew]), 64 ImmutableList.copyOf(unfinishedMultiplicityObjectives.map[createNew as UnfinishedMultiplicityObjective]),
43 unfinishedWFObjective.createNew 65 unfinishedWFObjective.createNew as UnfinishedWFObjective,
66 punishSize, scopeWeight, conaintmentWeight, nonContainmentWeight, unfinishedWFWeight
44 ) 67 )
45 } 68 }
46 69
47 override getComparator() { Comparators.LOWER_IS_BETTER } 70 override getComparator() { Comparators.LOWER_IS_BETTER }
48 71
49 override getFitness(ThreadContext context) { 72 override getFitness(ThreadContext context) {
50 var sum = 0.0 73
51 val scopeFitnes = scopeObjective.getFitness(context) 74 val scopeFitnes = scopeObjective.getFitness(context)
52 // val unfinishedMultiplicitiesFitneses = unfinishedMultiplicityObjectives.map[x|x.getFitness(context)]
53 val unfinishedWFsFitness = unfinishedWFObjective.getFitness(context) 75 val unfinishedWFsFitness = unfinishedWFObjective.getFitness(context)
54 76
55 sum += scopeFitnes 77 var containmentMultiplicity = 0.0
56 var multiplicity = 0.0 78 var nonContainmentMultiplicity = 0.0
57 for (multiplicityObjective : unfinishedMultiplicityObjectives) { 79 for(multiplicityObjective : unfinishedMultiplicityObjectives) {
58 multiplicity += multiplicityObjective.getFitness(context) // *0.5 80 if(multiplicityObjective.containment) {
81 containmentMultiplicity+=multiplicityObjective.getFitness(context)
82 } else {
83 nonContainmentMultiplicity+=multiplicityObjective.getFitness(context)
84 }
59 } 85 }
60 sum += multiplicity 86 val size = if(punishSize) {
61 sum += unfinishedWFsFitness // *0.5 87 0.9/model.newElements.size
62// println('''Sum=«sum»|Scope=«scopeFitnes»|Multiplicity=«multiplicity»|WFs=«unfinishedWFsFitness»''') 88 } else {
89 0
90 }
91
92 var sum = 0.0
93 sum += scopeFitnes*scopeWeight
94 sum += containmentMultiplicity*conaintmentWeight
95 sum += nonContainmentMultiplicity*nonContainmentWeight
96 sum += unfinishedWFsFitness*unfinishedWFWeight
97 sum+=size
63 return sum 98 return sum
64 } 99 }
65 100