aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-07-07 15:00:13 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-07-07 15:00:13 +0200
commita7b9a3eef14fc165909d00c65bb6fc1744a8ebd8 (patch)
treedd816939088926b3009432afa22be0e2a116436f
parentAdd modified VIATRA-DSE version (diff)
downloadVIATRA-Generator-a7b9a3eef14fc165909d00c65bb6fc1744a8ebd8.tar.gz
VIATRA-Generator-a7b9a3eef14fc165909d00c65bb6fc1744a8ebd8.tar.zst
VIATRA-Generator-a7b9a3eef14fc165909d00c65bb6fc1744a8ebd8.zip
Trying to fix performance regressions
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbinbin1701 -> 1701 bytes
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbinbin2526 -> 2526 bytes
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/SolverLoader.xtend56
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbinbin5334 -> 5334 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbinbin4902 -> 4902 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbinbin1717 -> 1717 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbinbin2742 -> 2742 bytes
-rw-r--r--Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbinbin2758 -> 2758 bytes
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend3
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend3
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend14
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend2
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDeclarationIndexer.xtend4
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationRefinementGenerator.xtend3
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/GoalConstraintProvider.xtend71
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend12
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasonerConfiguration.xtend7
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java8
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ModelGenerationCompositeObjective.xtend27
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PunishSizeObjective.xtend70
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ScopeObjective.xtend2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/.gitignore1
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig7
23 files changed, 227 insertions, 63 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin
index 1641af7c..27ebff86 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin
+++ b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin
Binary files differ
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin
index d06f6684..4c3dcf43 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin
+++ b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin
Binary files differ
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/SolverLoader.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/SolverLoader.xtend
index b1be56cb..bc4fa42f 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/SolverLoader.xtend
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/SolverLoader.xtend
@@ -10,6 +10,9 @@ import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.Threshold
10import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration 10import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration
11import hu.bme.mit.inf.dslreasoner.smt.reasoner.SMTSolver 11import hu.bme.mit.inf.dslreasoner.smt.reasoner.SMTSolver
12import hu.bme.mit.inf.dslreasoner.smt.reasoner.SmtSolverConfiguration 12import hu.bme.mit.inf.dslreasoner.smt.reasoner.SmtSolverConfiguration
13import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedralScopePropagatorConstraints
14import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedralScopePropagatorSolver
15import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy
13import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.CostObjectiveConfiguration 16import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.CostObjectiveConfiguration
14import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.CostObjectiveElementConfiguration 17import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.CostObjectiveElementConfiguration
15import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DiversityDescriptor 18import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DiversityDescriptor
@@ -98,42 +101,47 @@ class SolverLoader {
98 console.writeError('''Malformed number format: «e.message»''') 101 console.writeError('''Malformed number format: «e.message»''')
99 } 102 }
100 } 103 }
101 if(config.containsKey("numeric-solver-at-end")) { 104 if (config.containsKey("numeric-solver-at-end")) {
102 val stringValue = config.get("numeric-solver-at-end") 105 val stringValue = config.get("numeric-solver-at-end")
103 if(stringValue.equals("true")) { 106 if (stringValue.equals("true")) {
104 println("numeric-solver-at-end") 107 println("numeric-solver-at-end")
105 c.runIntermediateNumericalConsistencyChecks = false 108 c.runIntermediateNumericalConsistencyChecks = false
106 } 109 }
107 } 110 }
108 if(config.containsKey("fitness-punishSize")) { 111 if (config.containsKey("fitness-punishSize")) {
109 val stringValue = config.get("fitness-punishSize") 112 val stringValue = config.get("fitness-punishSize")
110 try { 113 c.punishSize = Boolean.parseBoolean(stringValue)
111 c.punishSize = Boolean.parseBoolean(stringValue)
112 } catch(Exception e) {}
113 } 114 }
114 if(config.containsKey("fitness-scope")) { 115 if (config.containsKey("fitness-scope")) {
115 val stringValue = config.get("fitness-scope") 116 val stringValue = config.get("fitness-scope")
116 try { 117 c.scopeWeight = Integer.parseInt(stringValue)
117 c.scopeWeight = Integer.parseInt(stringValue)
118 } catch(Exception e) {}
119 } 118 }
120 if(config.containsKey("fitness-missing-containent")) { 119 if (config.containsKey("fitness-missing-containment")) {
121 val stringValue = config.get("fitness-missing-containent") 120 val stringValue = config.get("fitness-missing-containment")
122 try { 121 c.conaintmentWeight = Integer.parseInt(stringValue)
123 c.conaintmentWeight = Integer.parseInt(stringValue)
124 } catch(Exception e) {}
125 } 122 }
126 if(config.containsKey("fitness-missing-noncontainent")) { 123 if (config.containsKey("fitness-missing-noncontainment")) {
127 val stringValue = config.get("fitness-missing-noncontainent") 124 val stringValue = config.get("fitness-missing-noncontainment")
128 try { 125 c.nonContainmentWeight = Integer.parseInt(stringValue)
129 c.nonContainmentWeight = Integer.parseInt(stringValue)
130 } catch(Exception e) {}
131 } 126 }
132 if(config.containsKey("fitness-missing-wf")) { 127 if (config.containsKey("fitness-missing-wf")) {
133 val stringValue = config.get("fitness-missing-wf") 128 val stringValue = config.get("fitness-missing-wf")
134 try { 129 c.unfinishedWFWeight = Integer.parseInt(stringValue)
135 c.unfinishedWFWeight = Integer.parseInt(stringValue) 130 }
136 } catch(Exception e) {} 131 if (config.containsKey("fitness-objectCreationCosts")) {
132 val stringValue = config.get("fitness-objectCreationCosts")
133 c.calculateObjectCreationCosts = Boolean.parseBoolean(stringValue)
134 }
135 if (config.containsKey("scopePropagator")) {
136 val stringValue = config.get("scopePropagator")
137 c.scopePropagatorStrategy = switch (stringValue) {
138 case "polyhedral": new ScopePropagatorStrategy.Polyhedral(
139 PolyhedralScopePropagatorConstraints.Relational, PolyhedralScopePropagatorSolver.Clp, true)
140 case "hybrid": new ScopePropagatorStrategy.Polyhedral(
141 PolyhedralScopePropagatorConstraints.Relational, PolyhedralScopePropagatorSolver.Clp, false)
142 case "typeHierarchy": ScopePropagatorStrategy.BasicTypeHierarchy
143 default: throw new IllegalArgumentException("Unknown scope propagator: " + stringValue)
144 }
137 } 145 }
138 for (objectiveEntry : objectiveEntries) { 146 for (objectiveEntry : objectiveEntries) {
139 val costObjectiveConfig = new CostObjectiveConfiguration 147 val costObjectiveConfig = new CostObjectiveConfiguration
diff --git a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin
index b54e44de..dbdd38d8 100644
--- a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticHighlightCalculator.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin
index 4976e388..6b2259b5 100644
--- a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/ui/syntaxcoloring/.SolverSemanticTextAttributeProvider.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin
index 6cd15573..5437df8f 100644
--- a/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language.ui/xtend-gen/org/eclipse/viatra/solver/language/validation/.SolverLanguageValidator.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin
index 3663bdb4..26756ae5 100644
--- a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/parser/antlr/.SolverLanguageTokenDefInjectingParser.xtendbin
Binary files differ
diff --git a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin
index 08e3330b..6f7cebd0 100644
--- a/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin
+++ b/Application/org.eclipse.viatra.solver.language/xtend-gen/org/eclipse/viatra/solver/language/serializer/.SolverLanguageSyntheticTokenSyntacticSequencer.xtendbin
Binary files differ
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend
index 78eda150..b79039cb 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/ModelGenerationMethodProvider.xtend
@@ -112,6 +112,7 @@ class ModelGenerationMethodProvider {
112 ReasonerWorkspace workspace, 112 ReasonerWorkspace workspace,
113 boolean nameNewElements, 113 boolean nameNewElements,
114 TypeInferenceMethod typeInferenceMethod, 114 TypeInferenceMethod typeInferenceMethod,
115 boolean calculateObjectCreationCosts,
115 ScopePropagatorStrategy scopePropagatorStrategy, 116 ScopePropagatorStrategy scopePropagatorStrategy,
116 Collection<LinearTypeConstraintHint> hints, 117 Collection<LinearTypeConstraintHint> hints,
117 DocumentationLevel debugLevel 118 DocumentationLevel debugLevel
@@ -135,7 +136,7 @@ class ModelGenerationMethodProvider {
135 val relationRefinementRules = refinementRuleProvider.createRelationRefinementRules(queries, scopePropagator, 136 val relationRefinementRules = refinementRuleProvider.createRelationRefinementRules(queries, scopePropagator,
136 statistics) 137 statistics)
137 138
138 val unfinishedMultiplicities = goalConstraintProvider.getUnfinishedMultiplicityQueries(logicProblem,queries) 139 val unfinishedMultiplicities = goalConstraintProvider.getUnfinishedMultiplicityQueries(logicProblem,queries,calculateObjectCreationCosts)
139 140
140 val unfinishedWF = queries.getUnfinishedWFQueries.values 141 val unfinishedWF = queries.getUnfinishedWFQueries.values
141 142
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
index 392ab3ee..273e0ac3 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/MultiplicityGoalConstraintCalculator.xtend
@@ -14,6 +14,9 @@ class MultiplicityGoalConstraintCalculator {
14 val int cost 14 val int cost
15 15
16 new(String targetRelationName, IQuerySpecification<?> querySpecification, boolean containment, int lowerBound, int cost) { 16 new(String targetRelationName, IQuerySpecification<?> querySpecification, boolean containment, int lowerBound, int cost) {
17 if (lowerBound <= 0) {
18 throw new IllegalArgumentException("Invalid lower bound: " + lowerBound)
19 }
17 this.targetRelationName = targetRelationName 20 this.targetRelationName = targetRelationName
18 this.querySpecification = querySpecification 21 this.querySpecification = querySpecification
19 this.calculator = null 22 this.calculator = null
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend
index 132ca8e8..3e95b2cc 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/cardinality/ScopePropagator.xtend
@@ -60,15 +60,23 @@ class ScopePropagator {
60 } 60 }
61 } 61 }
62 } while (changed) 62 } while (changed)
63 63
64 copyScopeBoundsToHeuristic() 64 copyScopeBoundsToHeuristic()
65 } 65 }
66 66
67 def propagateAllScopeConstraints() { 67 def propagateAllScopeConstraints() {
68 if (!valid) {
69 return
70 }
68 statistics.incrementScopePropagationCount() 71 statistics.incrementScopePropagationCount()
69 doPropagateAllScopeConstraints() 72 doPropagateAllScopeConstraints()
70 } 73 }
71 74
75 def isValid() {
76 partialInterpretation.maxNewElements == -1 ||
77 partialInterpretation.minNewElements <= partialInterpretation.maxNewElements
78 }
79
72 protected def copyScopeBoundsToHeuristic() { 80 protected def copyScopeBoundsToHeuristic() {
73 partialInterpretation.minNewElementsHeuristic = partialInterpretation.minNewElements 81 partialInterpretation.minNewElementsHeuristic = partialInterpretation.minNewElements
74 for (scope : partialInterpretation.scopes) { 82 for (scope : partialInterpretation.scopes) {
@@ -109,7 +117,7 @@ class ScopePropagator {
109// this.partialInterpretation.scopes.forEach[println(''' «(it.targetTypeInterpretation as PartialComplexTypeInterpretation).interpretationOf.name»: «it.minNewElements»-«it.maxNewElements»''')] 117// this.partialInterpretation.scopes.forEach[println(''' «(it.targetTypeInterpretation as PartialComplexTypeInterpretation).interpretationOf.name»: «it.minNewElements»-«it.maxNewElements»''')]
110// println('''All constraints are propagated upon increasing «(t as PartialComplexTypeInterpretation).interpretationOf.name»''') 118// println('''All constraints are propagated upon increasing «(t as PartialComplexTypeInterpretation).interpretationOf.name»''')
111 } 119 }
112 120
113 protected def setScopesInvalid() { 121 protected def setScopesInvalid() {
114 partialInterpretation.minNewElements = Integer.MAX_VALUE 122 partialInterpretation.minNewElements = Integer.MAX_VALUE
115 partialInterpretation.maxNewElements = 0 123 partialInterpretation.maxNewElements = 0
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend
index f3125b80..80bc3844 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend
@@ -51,7 +51,7 @@ class PatternGenerator {
51 @Accessors(PUBLIC_GETTER) val RelationRefinementGenerator relationRefinementGenerator = new RelationRefinementGenerator(this) 51 @Accessors(PUBLIC_GETTER) val RelationRefinementGenerator relationRefinementGenerator = new RelationRefinementGenerator(this)
52 @Accessors(PUBLIC_GETTER) val UnitPropagationPreconditionGenerator unitPropagationPreconditionGenerator = new UnitPropagationPreconditionGenerator(this) 52 @Accessors(PUBLIC_GETTER) val UnitPropagationPreconditionGenerator unitPropagationPreconditionGenerator = new UnitPropagationPreconditionGenerator(this)
53 53
54 public new(TypeInferenceMethod typeInferenceMethod, ScopePropagatorStrategy scopePropagatorStrategy) { 54 new(TypeInferenceMethod typeInferenceMethod, ScopePropagatorStrategy scopePropagatorStrategy) {
55 if(typeInferenceMethod == TypeInferenceMethod.Generic) { 55 if(typeInferenceMethod == TypeInferenceMethod.Generic) {
56 this.typeIndexer = new GenericTypeIndexer(this) 56 this.typeIndexer = new GenericTypeIndexer(this)
57 this.typeRefinementGenerator = new GenericTypeRefinementGenerator(this) 57 this.typeRefinementGenerator = new GenericTypeRefinementGenerator(this)
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDeclarationIndexer.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDeclarationIndexer.xtend
index cef707c5..b4403979 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDeclarationIndexer.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDeclarationIndexer.xtend
@@ -19,7 +19,7 @@ class RelationDeclarationIndexer {
19 this.base = base 19 this.base = base
20 } 20 }
21 21
22 public def generateRelationIndexers(LogicProblem problem, Iterable<RelationDeclaration> relations, Map<String,PQuery> fqn2PQuery) { 22 def generateRelationIndexers(LogicProblem problem, Iterable<RelationDeclaration> relations, Map<String,PQuery> fqn2PQuery) {
23 val upperMultiplicities = new HashMap 23 val upperMultiplicities = new HashMap
24 problem.annotations.filter(UpperMultiplicityAssertion).forEach[ 24 problem.annotations.filter(UpperMultiplicityAssertion).forEach[
25 upperMultiplicities.put(it.relation,it.upper) 25 upperMultiplicities.put(it.relation,it.upper)
@@ -42,7 +42,7 @@ class RelationDeclarationIndexer {
42 '''«modality.name.toLowerCase»InRelation«base.canonizeName(r.name)»''' 42 '''«modality.name.toLowerCase»InRelation«base.canonizeName(r.name)»'''
43 } 43 }
44 44
45 public def referRelation( 45 def referRelation(
46 RelationDeclaration referred, 46 RelationDeclaration referred,
47 String sourceVariable, 47 String sourceVariable,
48 String targetVariable, 48 String targetVariable,
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationRefinementGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationRefinementGenerator.xtend
index d915d47e..783cd36b 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationRefinementGenerator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationRefinementGenerator.xtend
@@ -5,12 +5,11 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
5import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem 5import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
6import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality 6import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality
7import java.util.LinkedList 7import java.util.LinkedList
8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ComplexTypeReference
9 8
10class RelationRefinementGenerator { 9class RelationRefinementGenerator {
11 PatternGenerator base; 10 PatternGenerator base;
12 11
13 public new(PatternGenerator base) { 12 new(PatternGenerator base) {
14 this.base = base 13 this.base = base
15 } 14 }
16 15
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/GoalConstraintProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/GoalConstraintProvider.xtend
index 7dc21410..732c135d 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/GoalConstraintProvider.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/GoalConstraintProvider.xtend
@@ -1,13 +1,25 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules 1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules
2 2
3import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.LowerMultiplicityAssertion
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ComplexTypeReference
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
3import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem 6import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
4import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.MultiplicityGoalConstraintCalculator 7import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.MultiplicityGoalConstraintCalculator
5import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns 8import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns
6import java.util.ArrayList 9import java.util.ArrayList
10import java.util.HashMap
11import java.util.LinkedList
12import java.util.List
13import java.util.Map
7 14
8class GoalConstraintProvider { 15class GoalConstraintProvider {
9 16
10 def getUnfinishedMultiplicityQueries(LogicProblem p, GeneratedPatterns patterns) { 17 def getUnfinishedMultiplicityQueries(LogicProblem p, GeneratedPatterns patterns, boolean calculateObjectCost) {
18 val objectCosts = if (calculateObjectCost) {
19 calculateMissingObjectCost(p)
20 } else {
21 emptyMap
22 }
11 val res = new ArrayList() 23 val res = new ArrayList()
12 for (entry : patterns.multiplicityConstraintQueries.entrySet) { 24 for (entry : patterns.multiplicityConstraintQueries.entrySet) {
13 val constraint = entry.key 25 val constraint = entry.key
@@ -17,10 +29,61 @@ class GoalConstraintProvider {
17 val query = queries.existingMultiplicityQuery 29 val query = queries.existingMultiplicityQuery
18 val containment = constraint.containment 30 val containment = constraint.containment
19 val lowerBound = constraint.lowerBound 31 val lowerBound = constraint.lowerBound
20 res += new MultiplicityGoalConstraintCalculator(targetRelationName, query, containment, 1, lowerBound) 32 val cost = objectCosts.getOrDefault(constraint.relation, 1)
33 res += new MultiplicityGoalConstraintCalculator(
34 targetRelationName,
35 query,
36 containment,
37 lowerBound,
38 cost
39 )
21 } 40 }
22 } 41 }
23 return res 42 return res
24 } 43 }
25 44
26} \ No newline at end of file 45 private def calculateMissingObjectCost(LogicProblem p) {
46 val containments = p.containmentHierarchies.head.containmentRelations
47 val containment2Lower = containments.toInvertedMap [ containment |
48 val lower = p.annotations.filter(LowerMultiplicityAssertion).filter[it.relation === containment].head
49 if (lower !== null) {
50 lower.lower
51 } else {
52 0
53 }
54 ]
55 val types = p.types
56 val Map<Type, List<? extends Pair<Type, Integer>>> type2NewCost = new HashMap
57 for (type : types) {
58 val allSupertypes = (#[type] + type.supertypes).toSet
59 val allOutgoingContainments = containments.filter [
60 allSupertypes.contains((it.parameters.get(0) as ComplexTypeReference).referred)
61 ]
62 val list = new LinkedList
63 for (outgoingContainment : allOutgoingContainments) {
64 val value = containment2Lower.get(outgoingContainment)
65 if (value > 0) {
66 list.add((outgoingContainment.parameters.get(1) as ComplexTypeReference).referred -> value)
67 }
68 }
69 type2NewCost.put(type, list)
70 }
71 val res = new HashMap
72 for (containment : containments) {
73 val key = containment
74 val value = (containment.parameters.get(1) as ComplexTypeReference).referred.count(type2NewCost)
75// println('''«key.name» --> «value» new''')
76 res.put(key, value)
77 }
78 return res
79 }
80
81 private def int count(Type t, Map<Type, List<? extends Pair<Type, Integer>>> containments) {
82 val list = containments.get(t)
83 var r = 1
84 for (element : list) {
85 r += element.value * element.key.count(containments)
86 }
87 return r
88 }
89}
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
index b9056685..b58033d7 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend
@@ -43,6 +43,7 @@ import org.eclipse.viatra.dse.api.DesignSpaceExplorer
43import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel 43import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel
44import org.eclipse.viatra.dse.solutionstore.SolutionStore 44import org.eclipse.viatra.dse.solutionstore.SolutionStore
45import org.eclipse.viatra.dse.statecode.IStateCoderFactory 45import org.eclipse.viatra.dse.statecode.IStateCoderFactory
46import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PunishSizeObjective
46 47
47class ViatraReasoner extends LogicReasoner { 48class ViatraReasoner extends LogicReasoner {
48 val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() 49 val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser()
@@ -86,17 +87,24 @@ class ViatraReasoner extends LogicReasoner {
86 workspace, 87 workspace,
87 viatraConfig.nameNewElements, 88 viatraConfig.nameNewElements,
88 viatraConfig.typeInferenceMethod, 89 viatraConfig.typeInferenceMethod,
90 viatraConfig.calculateObjectCreationCosts,
89 viatraConfig.scopePropagatorStrategy, 91 viatraConfig.scopePropagatorStrategy,
90 viatraConfig.hints, 92 viatraConfig.hints,
91 viatraConfig.documentationLevel 93 viatraConfig.documentationLevel
92 ) 94 )
93 95
94 dse.addObjective(new ModelGenerationCompositeObjective( 96 val compositeObjective = new ModelGenerationCompositeObjective(
95 basicScopeGlobalConstraint ?: new ScopeObjective, 97 basicScopeGlobalConstraint ?: new ScopeObjective,
96 method.unfinishedMultiplicities.map[new UnfinishedMultiplicityObjective(it)], 98 method.unfinishedMultiplicities.map[new UnfinishedMultiplicityObjective(it)],
97 wf2ObjectiveConverter.createCompletenessObjective(method.unfinishedWF), 99 wf2ObjectiveConverter.createCompletenessObjective(method.unfinishedWF),
98 viatraConfig 100 viatraConfig
99 )) 101 )
102 dse.addObjective(compositeObjective)
103 if (viatraConfig.punishSize) {
104 val punishObjective = new PunishSizeObjective
105 punishObjective.level = compositeObjective.level + 1
106 dse.addObjective(punishObjective)
107 }
100 108
101 val extremalObjectives = Lists.newArrayListWithExpectedSize(viatraConfig.costObjectives.size) 109 val extremalObjectives = Lists.newArrayListWithExpectedSize(viatraConfig.costObjectives.size)
102 for (entry : viatraConfig.costObjectives.indexed) { 110 for (entry : viatraConfig.costObjectives.indexed) {
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasonerConfiguration.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasonerConfiguration.xtend
index e33a2590..a2f6de22 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasonerConfiguration.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasonerConfiguration.xtend
@@ -57,11 +57,12 @@ class ViatraReasonerConfiguration extends LogicSolverConfiguration {
57 57
58 public var runIntermediateNumericalConsistencyChecks = true 58 public var runIntermediateNumericalConsistencyChecks = true
59 59
60 public var punishSize = true 60 public var punishSize = false
61 public var scopeWeight = 2 61 public var scopeWeight = 1
62 public var conaintmentWeight = 1 62 public var conaintmentWeight = 2
63 public var nonContainmentWeight = 1 63 public var nonContainmentWeight = 1
64 public var unfinishedWFWeight = 1 64 public var unfinishedWFWeight = 1
65 public var calculateObjectCreationCosts = false
65 66
66 public var ScopePropagatorStrategy scopePropagatorStrategy = new ScopePropagatorStrategy.Polyhedral( 67 public var ScopePropagatorStrategy scopePropagatorStrategy = new ScopePropagatorStrategy.Polyhedral(
67 PolyhedralScopePropagatorConstraints.Relational, PolyhedralScopePropagatorSolver.Clp) 68 PolyhedralScopePropagatorConstraints.Relational, PolyhedralScopePropagatorSolver.Clp)
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java
index 09575384..a2de1abc 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java
@@ -18,7 +18,6 @@ import java.util.List;
18import java.util.PriorityQueue; 18import java.util.PriorityQueue;
19import java.util.Random; 19import java.util.Random;
20 20
21import org.apache.log4j.Level;
22import org.apache.log4j.Logger; 21import org.apache.log4j.Logger;
23import org.eclipse.emf.ecore.EObject; 22import org.eclipse.emf.ecore.EObject;
24import org.eclipse.emf.ecore.util.EcoreUtil; 23import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -29,6 +28,8 @@ import org.eclipse.viatra.dse.objectives.Fitness;
29import org.eclipse.viatra.dse.objectives.ObjectiveComparatorHelper; 28import org.eclipse.viatra.dse.objectives.ObjectiveComparatorHelper;
30import org.eclipse.viatra.dse.solutionstore.ISolutionFoundHandler; 29import org.eclipse.viatra.dse.solutionstore.ISolutionFoundHandler;
31import org.eclipse.viatra.dse.solutionstore.SolutionStore; 30import org.eclipse.viatra.dse.solutionstore.SolutionStore;
31import org.eclipse.viatra.query.runtime.api.IPatternMatch;
32import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
32 33
33import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel; 34import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel;
34import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner; 35import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner;
@@ -137,10 +138,9 @@ public class BestFirstStrategyForModelGeneration implements IStrategy {
137// ViatraQueryEngine engine = context.getQueryEngine(); 138// ViatraQueryEngine engine = context.getQueryEngine();
138// matchers = new LinkedList<ViatraQueryMatcher<? extends IPatternMatch>>(); 139// matchers = new LinkedList<ViatraQueryMatcher<? extends IPatternMatch>>();
139// for(IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> p : this.method.getAllPatterns()) { 140// for(IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> p : this.method.getAllPatterns()) {
140// ViatraQueryMatcher<? extends IPatternMatch> matcher = p.getMatcher(engine); 141// ViatraQueryMatcher<? extends IPatternMatch> matcher = p.getMatcher(engine);
141// matchers.add(matcher);
142// } 142// }
143 143//
144 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper(); 144 final ObjectiveComparatorHelper objectiveComparatorHelper = context.getObjectiveComparatorHelper();
145 this.comparator = new Comparator<TrajectoryWithFitness>() { 145 this.comparator = new Comparator<TrajectoryWithFitness>() {
146 @Override 146 @Override
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 481f4ce1..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
@@ -9,13 +9,13 @@ import java.util.List
9import org.eclipse.viatra.dse.base.ThreadContext 9import org.eclipse.viatra.dse.base.ThreadContext
10import org.eclipse.viatra.dse.objectives.Comparators 10import org.eclipse.viatra.dse.objectives.Comparators
11import org.eclipse.viatra.dse.objectives.IObjective 11import org.eclipse.viatra.dse.objectives.IObjective
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement
12 13
13class ModelGenerationCompositeObjective implements IThreeValuedObjective { 14class ModelGenerationCompositeObjective implements IThreeValuedObjective {
14 val IObjective scopeObjective 15 val IObjective scopeObjective
15 val List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives 16 val List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives
16 val UnfinishedWFObjective unfinishedWFObjective 17 val UnfinishedWFObjective unfinishedWFObjective
17 var PartialInterpretation model = null 18 var PartialInterpretation model = null
18 val boolean punishSize
19 val int scopeWeight 19 val int scopeWeight
20 val int conaintmentWeight 20 val int conaintmentWeight
21 val int nonContainmentWeight 21 val int nonContainmentWeight
@@ -28,7 +28,7 @@ class ModelGenerationCompositeObjective implements IThreeValuedObjective {
28 ViatraReasonerConfiguration configuration) 28 ViatraReasonerConfiguration configuration)
29 { 29 {
30 this( 30 this(
31 scopeObjective, unfinishedMultiplicityObjectives, unfinishedWFObjective, configuration.punishSize, 31 scopeObjective, unfinishedMultiplicityObjectives, unfinishedWFObjective,
32 configuration.scopeWeight, configuration.conaintmentWeight, configuration.nonContainmentWeight, 32 configuration.scopeWeight, configuration.conaintmentWeight, configuration.nonContainmentWeight,
33 configuration.unfinishedWFWeight 33 configuration.unfinishedWFWeight
34 ) 34 )
@@ -38,13 +38,12 @@ class ModelGenerationCompositeObjective implements IThreeValuedObjective {
38 IObjective scopeObjective, 38 IObjective scopeObjective,
39 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives, 39 List<UnfinishedMultiplicityObjective> unfinishedMultiplicityObjectives,
40 UnfinishedWFObjective unfinishedWFObjective, 40 UnfinishedWFObjective unfinishedWFObjective,
41 boolean punishSize, int scopeWeight, int conaintmentWeight, int nonContainmentWeight, int unfinishedWFWeight) 41 int scopeWeight, int conaintmentWeight, int nonContainmentWeight, int unfinishedWFWeight)
42 { 42 {
43 this.scopeObjective = scopeObjective 43 this.scopeObjective = scopeObjective
44 this.unfinishedMultiplicityObjectives = unfinishedMultiplicityObjectives 44 this.unfinishedMultiplicityObjectives = unfinishedMultiplicityObjectives
45 this.unfinishedWFObjective = unfinishedWFObjective 45 this.unfinishedWFObjective = unfinishedWFObjective
46 46
47 this.punishSize = punishSize
48 this.scopeWeight = scopeWeight 47 this.scopeWeight = scopeWeight
49 this.conaintmentWeight = conaintmentWeight 48 this.conaintmentWeight = conaintmentWeight
50 this.nonContainmentWeight = nonContainmentWeight 49 this.nonContainmentWeight = nonContainmentWeight
@@ -63,7 +62,7 @@ class ModelGenerationCompositeObjective implements IThreeValuedObjective {
63 scopeObjective.createNew, 62 scopeObjective.createNew,
64 ImmutableList.copyOf(unfinishedMultiplicityObjectives.map[createNew as UnfinishedMultiplicityObjective]), 63 ImmutableList.copyOf(unfinishedMultiplicityObjectives.map[createNew as UnfinishedMultiplicityObjective]),
65 unfinishedWFObjective.createNew as UnfinishedWFObjective, 64 unfinishedWFObjective.createNew as UnfinishedWFObjective,
66 punishSize, scopeWeight, conaintmentWeight, nonContainmentWeight, unfinishedWFWeight 65 scopeWeight, conaintmentWeight, nonContainmentWeight, unfinishedWFWeight
67 ) 66 )
68 } 67 }
69 68
@@ -77,16 +76,14 @@ class ModelGenerationCompositeObjective implements IThreeValuedObjective {
77 var containmentMultiplicity = 0.0 76 var containmentMultiplicity = 0.0
78 var nonContainmentMultiplicity = 0.0 77 var nonContainmentMultiplicity = 0.0
79 for(multiplicityObjective : unfinishedMultiplicityObjectives) { 78 for(multiplicityObjective : unfinishedMultiplicityObjectives) {
79 val multiplicity = multiplicityObjective.getFitness(context)
80// println(multiplicityObjective.name + "=" + multiplicity)
80 if(multiplicityObjective.containment) { 81 if(multiplicityObjective.containment) {
81 containmentMultiplicity+=multiplicityObjective.getFitness(context) 82 containmentMultiplicity+=multiplicity
82 } else { 83 } else {
83 nonContainmentMultiplicity+=multiplicityObjective.getFitness(context) 84 nonContainmentMultiplicity+=multiplicity
84 } 85 }
85 } 86
86 val size = if(punishSize) {
87 0.9/model.newElements.size
88 } else {
89 0
90 } 87 }
91 88
92 var sum = 0.0 89 var sum = 0.0
@@ -94,7 +91,9 @@ class ModelGenerationCompositeObjective implements IThreeValuedObjective {
94 sum += containmentMultiplicity*conaintmentWeight 91 sum += containmentMultiplicity*conaintmentWeight
95 sum += nonContainmentMultiplicity*nonContainmentWeight 92 sum += nonContainmentMultiplicity*nonContainmentWeight
96 sum += unfinishedWFsFitness*unfinishedWFWeight 93 sum += unfinishedWFsFitness*unfinishedWFWeight
97 sum+=size 94
95// println('''scope=«scopeFitnes», containment=«containmentMultiplicity», nonContainment=«nonContainmentMultiplicity», wf=«unfinishedWFsFitness», sum=«sum»''')
96
98 return sum 97 return sum
99 } 98 }
100 99
@@ -112,7 +111,7 @@ class ModelGenerationCompositeObjective implements IThreeValuedObjective {
112 111
113 override isHardObjective() { true } 112 override isHardObjective() { true }
114 113
115 override satisifiesHardObjective(Double fitness) { fitness <= 0.9 } 114 override satisifiesHardObjective(Double fitness) { fitness < 0.01 }
116 115
117 override setComparator(Comparator<Double> comparator) { 116 override setComparator(Comparator<Double> comparator) {
118 throw new UnsupportedOperationException("Model generation objective comparator cannot be set.") 117 throw new UnsupportedOperationException("Model generation objective comparator cannot be set.")
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PunishSizeObjective.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PunishSizeObjective.xtend
new file mode 100644
index 00000000..8505661c
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PunishSizeObjective.xtend
@@ -0,0 +1,70 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse
2
3import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
4import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement
5import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.IThreeValuedObjective
6import java.util.Comparator
7import org.eclipse.viatra.dse.base.ThreadContext
8import org.eclipse.viatra.dse.objectives.Comparators
9import org.eclipse.xtend.lib.annotations.Accessors
10
11class PunishSizeObjective implements IThreeValuedObjective {
12 @Accessors int level = 3
13
14 override createNew() {
15 this
16 }
17
18 override init(ThreadContext context) {
19 // Nothing to initialize.
20 }
21
22 override getComparator() {
23 Comparators.LOWER_IS_BETTER
24 }
25
26 override getFitness(ThreadContext threadContext) {
27 val model = threadContext.model
28 if (model instanceof PartialInterpretation) {
29 val size = model.newObjectCount
30// println('''size=«size»''')
31 size as double
32 } else {
33 throw new IllegalArgumentException("notifier must be a PartialInterpretation")
34 }
35 }
36
37 override getBestPossibleFitness(ThreadContext threadContext) {
38 getFitness(threadContext)
39 }
40
41 override getWorstPossibleFitness(ThreadContext threadContext) {
42 val model = threadContext.model
43 if (model instanceof PartialInterpretation) {
44 (model.newObjectCount + model.maxNewElements) as double
45 } else {
46 throw new IllegalArgumentException("notifier must be a PartialInterpretation")
47 }
48 }
49
50 private def getNewObjectCount(PartialInterpretation interpretation) {
51 interpretation.newElements.reject[it instanceof PrimitiveElement].size
52 }
53
54 override getName() {
55 typeof(PunishSizeObjective).name
56 }
57
58 override isHardObjective() {
59 false
60 }
61
62 override satisifiesHardObjective(Double fitness) {
63 true
64 }
65
66 override setComparator(Comparator<Double> comparator) {
67 throw new UnsupportedOperationException("Model generation objective comparator cannot be set.")
68 }
69
70} \ No newline at end of file
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ScopeObjective.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ScopeObjective.xtend
index 7abc5cb8..b61bd20b 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ScopeObjective.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/ScopeObjective.xtend
@@ -25,7 +25,7 @@ class ScopeObjective implements IObjective{
25 val interpretation = context.model as PartialInterpretation 25 val interpretation = context.model as PartialInterpretation
26 var res = interpretation.minNewElementsHeuristic.doubleValue 26 var res = interpretation.minNewElementsHeuristic.doubleValue
27 for(scope : interpretation.scopes) { 27 for(scope : interpretation.scopes) {
28 res += scope.minNewElementsHeuristic 28 res += scope.minNewElementsHeuristic * 2
29 } 29 }
30 return res 30 return res
31 } 31 }
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/.gitignore b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/.gitignore
new file mode 100644
index 00000000..7050a7e3
--- /dev/null
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/bin/.gitignore
@@ -0,0 +1 @@
/queries/
diff --git a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig
index 127b174d..2ff20880 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig
+++ b/Tests/MODELS2020-CaseStudies/case.study.pledge.run/config/genericSatellite.vsconfig
@@ -23,7 +23,7 @@ generate {
23generate { 23generate {
24 metamodel = { package satellite } 24 metamodel = { package satellite }
25 constraints = { package hu.bme.mit.inf.dslreasoner.domains.satellite.queries } 25 constraints = { package hu.bme.mit.inf.dslreasoner.domains.satellite.queries }
26 partial-model = { "inputs/SatelliteInstance.xmi"} 26 partial-model = { "inputs/SatelliteInstance.xmi" }
27 solver = ViatraSolver 27 solver = ViatraSolver
28 scope = { 28 scope = {
29 #node += 64..* 29 #node += 64..*
@@ -33,7 +33,10 @@ generate {
33 runtime = 10000, 33 runtime = 10000,
34 log-level = normal, 34 log-level = normal,
35 "fitness-scope" = "3", 35 "fitness-scope" = "3",
36 "fitness-objectCreationCosts" = "true" 36 "fitness-punishSize" = "true",
37 "fitness-objectCreationCosts" = "true",
38 "scopePropagator" = "typeHierarchy",
39 "fitness-missing-containment" = "2"
37 } 40 }
38 41
39 runs = 1 42 runs = 1