diff options
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.xtend | 97 |
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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse | 1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse |
2 | 2 | ||
3 | import com.google.common.collect.ImmutableList | 3 | import com.google.common.collect.ImmutableList |
4 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
5 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasonerConfiguration | ||
4 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.IThreeValuedObjective | 6 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.IThreeValuedObjective |
5 | import java.util.Comparator | 7 | import java.util.Comparator |
6 | import java.util.List | 8 | import java.util.List |
7 | import org.eclipse.viatra.dse.base.ThreadContext | 9 | import org.eclipse.viatra.dse.base.ThreadContext |
8 | import org.eclipse.viatra.dse.objectives.Comparators | 10 | import org.eclipse.viatra.dse.objectives.Comparators |
9 | import org.eclipse.viatra.dse.objectives.IObjective | 11 | import org.eclipse.viatra.dse.objectives.IObjective |
10 | import 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 | ||
28 | class ModelGenerationCompositeObjective implements IThreeValuedObjective { | 13 | class 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 | ||