aboutsummaryrefslogtreecommitdiffstats
path: root/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/TrainLocationsObjectiveHint.java
diff options
context:
space:
mode:
Diffstat (limited to 'Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/TrainLocationsObjectiveHint.java')
-rw-r--r--Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/TrainLocationsObjectiveHint.java117
1 files changed, 117 insertions, 0 deletions
diff --git a/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/TrainLocationsObjectiveHint.java b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/TrainLocationsObjectiveHint.java
new file mode 100644
index 00000000..570f9deb
--- /dev/null
+++ b/Domains/ca.mcgill.rtgmrt.example.modes3/xtend-gen/modes3/run/TrainLocationsObjectiveHint.java
@@ -0,0 +1,117 @@
1package modes3.run;
2
3import com.google.common.collect.ImmutableList;
4import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic;
5import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace;
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type;
7import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.Dimension;
8import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ExtendedLinearExpressionBuilder;
9import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.ExtendedLinearExpressionBuilderFactory;
10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.cardinality.PolyhedronExtensionOperator;
11import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.CostElementMatch;
12import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.CostElementMatchers;
13import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.optimization.CostObjectiveHint;
14import java.util.Collection;
15import java.util.List;
16import java.util.Map;
17import java.util.Set;
18import modes3.Modes3Package;
19import modes3.queries.TrainLocations_step_2;
20import modes3.queries.TrainLocations_step_3;
21import org.eclipse.xtext.xbase.lib.Extension;
22import org.eclipse.xtext.xbase.lib.Functions.Function1;
23import org.eclipse.xtext.xbase.lib.IterableExtensions;
24
25@SuppressWarnings("all")
26public class TrainLocationsObjectiveHint extends CostObjectiveHint {
27 private final Type segmentType;
28
29 private final Type trainType;
30
31 public TrainLocationsObjectiveHint(@Extension final Ecore2Logic ecore2Logic, final Ecore2Logic_Trace ecore2LogicTrace) {
32 @Extension
33 final Modes3Package Modes3Package = modes3.Modes3Package.eINSTANCE;
34 this.segmentType = ecore2Logic.TypeofEClass(ecore2LogicTrace, Modes3Package.getSegment());
35 this.trainType = ecore2Logic.TypeofEClass(ecore2LogicTrace, Modes3Package.getTrain());
36 }
37
38 @Override
39 public boolean isExact() {
40 return true;
41 }
42
43 @Override
44 public PolyhedronExtensionOperator createPolyhedronExtensionOperator(final Map<String, CostElementMatchers> costElementMatchers) {
45 PolyhedronExtensionOperator _xblockexpression = null;
46 {
47 final CostElementMatchers step2 = costElementMatchers.get(TrainLocations_step_2.instance().getFullyQualifiedName());
48 final CostElementMatchers step3 = costElementMatchers.get(TrainLocations_step_3.instance().getFullyQualifiedName());
49 final PolyhedronExtensionOperator _function = (ExtendedLinearExpressionBuilderFactory it) -> {
50 final ExtendedLinearExpressionBuilder objectiveBuilder = it.createBuilder();
51 ImmutableList<CostElementMatch> _matches = step2.getMatches();
52 for (final CostElementMatch m : _matches) {
53 {
54 final Dimension dimension = it.getDimension(m.getMatch());
55 objectiveBuilder.add(step2.getWeight(), dimension);
56 dimension.tightenLowerBound(Integer.valueOf(0));
57 boolean _isMulti = m.isMulti();
58 if (_isMulti) {
59 it.createBuilder().add(1, dimension).add((-1), this.trainType).build().assertEqualsTo(0);
60 } else {
61 dimension.tightenUpperBound(Integer.valueOf(1));
62 boolean _isMust = m.isMust();
63 if (_isMust) {
64 dimension.tightenLowerBound(Integer.valueOf(1));
65 }
66 }
67 }
68 }
69 final ImmutableList<CostElementMatch> step3Matches = step3.getMatches();
70 for (final CostElementMatch m_1 : step3Matches) {
71 {
72 final Dimension dimension = it.getDimension(m_1.getMatch());
73 objectiveBuilder.add(step3.getWeight(), dimension);
74 dimension.tightenLowerBound(Integer.valueOf(0));
75 boolean _isMulti = m_1.isMulti();
76 boolean _not = (!_isMulti);
77 if (_not) {
78 dimension.tightenUpperBound(Integer.valueOf(1));
79 boolean _isMust = m_1.isMust();
80 if (_isMust) {
81 dimension.tightenLowerBound(Integer.valueOf(1));
82 }
83 }
84 }
85 }
86 TrainLocationsObjectiveHint.boundLimit(it, step3Matches, 2, this.trainType, 1);
87 TrainLocationsObjectiveHint.boundLimit(it, step3Matches, 3, this.segmentType, 1);
88 this.buildWithBounds(objectiveBuilder);
89 };
90 _xblockexpression = _function;
91 }
92 return _xblockexpression;
93 }
94
95 private static void boundLimit(@Extension final ExtendedLinearExpressionBuilderFactory factory, final Collection<CostElementMatch> matches, final int index, final Type type, final int count) {
96 final Function1<CostElementMatch, Object> _function = (CostElementMatch it) -> {
97 return it.getMatch().get(index);
98 };
99 Set<Map.Entry<Object, List<CostElementMatch>>> _entrySet = IterableExtensions.<Object, CostElementMatch>groupBy(matches, _function).entrySet();
100 for (final Map.Entry<Object, List<CostElementMatch>> pair : _entrySet) {
101 {
102 final ExtendedLinearExpressionBuilder multiplicityBuilder = factory.createBuilder();
103 List<CostElementMatch> _value = pair.getValue();
104 for (final CostElementMatch m : _value) {
105 multiplicityBuilder.add(1, m.getMatch());
106 }
107 boolean _isMulti = CostElementMatchers.isMulti(pair.getKey());
108 if (_isMulti) {
109 multiplicityBuilder.add((-count), type);
110 multiplicityBuilder.build().tightenUpperBound(Integer.valueOf(0));
111 } else {
112 multiplicityBuilder.build().tightenUpperBound(Integer.valueOf(count));
113 }
114 }
115 }
116 }
117}