diff options
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 | |||
10 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration | 10 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration |
11 | import hu.bme.mit.inf.dslreasoner.smt.reasoner.SMTSolver | 11 | import hu.bme.mit.inf.dslreasoner.smt.reasoner.SMTSolver |
12 | import hu.bme.mit.inf.dslreasoner.smt.reasoner.SmtSolverConfiguration | 12 | import hu.bme.mit.inf.dslreasoner.smt.reasoner.SmtSolverConfiguration |
13 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedralScopePropagatorConstraints | ||
14 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedralScopePropagatorSolver | ||
15 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ScopePropagatorStrategy | ||
13 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.CostObjectiveConfiguration | 16 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.CostObjectiveConfiguration |
14 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.CostObjectiveElementConfiguration | 17 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.CostObjectiveElementConfiguration |
15 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DiversityDescriptor | 18 | import 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 | |||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | 5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem |
6 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality | 6 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality |
7 | import java.util.LinkedList | 7 | import java.util.LinkedList |
8 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ComplexTypeReference | ||
9 | 8 | ||
10 | class RelationRefinementGenerator { | 9 | class 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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules | 1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.rules |
2 | 2 | ||
3 | import hu.bme.mit.inf.dslreasoner.ecore2logic.ecore2logicannotations.LowerMultiplicityAssertion | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ComplexTypeReference | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | ||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | 6 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem |
4 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.MultiplicityGoalConstraintCalculator | 7 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.MultiplicityGoalConstraintCalculator |
5 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns | 8 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns |
6 | import java.util.ArrayList | 9 | import java.util.ArrayList |
10 | import java.util.HashMap | ||
11 | import java.util.LinkedList | ||
12 | import java.util.List | ||
13 | import java.util.Map | ||
7 | 14 | ||
8 | class GoalConstraintProvider { | 15 | class 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 | |||
43 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel | 43 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel |
44 | import org.eclipse.viatra.dse.solutionstore.SolutionStore | 44 | import org.eclipse.viatra.dse.solutionstore.SolutionStore |
45 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory | 45 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory |
46 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.PunishSizeObjective | ||
46 | 47 | ||
47 | class ViatraReasoner extends LogicReasoner { | 48 | class 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; | |||
18 | import java.util.PriorityQueue; | 18 | import java.util.PriorityQueue; |
19 | import java.util.Random; | 19 | import java.util.Random; |
20 | 20 | ||
21 | import org.apache.log4j.Level; | ||
22 | import org.apache.log4j.Logger; | 21 | import org.apache.log4j.Logger; |
23 | import org.eclipse.emf.ecore.EObject; | 22 | import org.eclipse.emf.ecore.EObject; |
24 | import org.eclipse.emf.ecore.util.EcoreUtil; | 23 | import org.eclipse.emf.ecore.util.EcoreUtil; |
@@ -29,6 +28,8 @@ import org.eclipse.viatra.dse.objectives.Fitness; | |||
29 | import org.eclipse.viatra.dse.objectives.ObjectiveComparatorHelper; | 28 | import org.eclipse.viatra.dse.objectives.ObjectiveComparatorHelper; |
30 | import org.eclipse.viatra.dse.solutionstore.ISolutionFoundHandler; | 29 | import org.eclipse.viatra.dse.solutionstore.ISolutionFoundHandler; |
31 | import org.eclipse.viatra.dse.solutionstore.SolutionStore; | 30 | import org.eclipse.viatra.dse.solutionstore.SolutionStore; |
31 | import org.eclipse.viatra.query.runtime.api.IPatternMatch; | ||
32 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | ||
32 | 33 | ||
33 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel; | 34 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel; |
34 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner; | 35 | import 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 | |||
9 | import org.eclipse.viatra.dse.base.ThreadContext | 9 | import org.eclipse.viatra.dse.base.ThreadContext |
10 | import org.eclipse.viatra.dse.objectives.Comparators | 10 | import org.eclipse.viatra.dse.objectives.Comparators |
11 | import org.eclipse.viatra.dse.objectives.IObjective | 11 | import org.eclipse.viatra.dse.objectives.IObjective |
12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement | ||
12 | 13 | ||
13 | class ModelGenerationCompositeObjective implements IThreeValuedObjective { | 14 | class 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 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
4 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement | ||
5 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.IThreeValuedObjective | ||
6 | import java.util.Comparator | ||
7 | import org.eclipse.viatra.dse.base.ThreadContext | ||
8 | import org.eclipse.viatra.dse.objectives.Comparators | ||
9 | import org.eclipse.xtend.lib.annotations.Accessors | ||
10 | |||
11 | class 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 { | |||
23 | generate { | 23 | generate { |
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 |