kangaroo  1.0
the cbls library
singleRangeVarDoubleObjectiveOptimalValueSelector.hpp
Go to the documentation of this file.
1 
12 #ifndef SingleRangeVarDoubleObjectiveOptimalValueSelectorHppIncluded
13 #define SingleRangeVarDoubleObjectiveOptimalValueSelectorHppIncluded
14 
15 
16 
17 #include "cbls/frames/index.hpp"
18 
19 
21 
22 
23 
31 template<Order MaxiOrMini0, Order MaxiOrMini1, typename varType, typename objType0, typename objType1>
32 
34 {
35  public:
36 
39 
42  (System * const pSystem, Expression * const pObjectiveExpr0, Expression * const pObjectiveExpr1,
43  DomainType const StaticOrDynamic = StaticDomain);
44 
45  void setDynamicRange(Bool const SetNotUnset);
46  void includeCurrValue(Bool const SetNotUnset);
47 
49 
50  private:
51 
54  (System * const pSystem, Expression * const * pParamExprs, DomainType const StaticOrDynamic);
55 
64 
65  virtual Bool selectAnew(Random & pRandom);
66  virtual Bool selectIncr(Random & pRandom);
67 
68  #if ComputeLazyHalf
69  virtual void setRequirement(Bool const SetNotUnset);
70  #endif
71 
75  Bool mIncludeCurr;
76 };
77 
78 
82 template<Order MaxiOrMini0, Order MaxiOrMini1,typename varType, typename objType0, typename objType1>
84 {
85  WatchError
86  // nothing to be done.
87  CatchError
88 }
89 
90 
94 template<Order MaxiOrMini0, Order MaxiOrMini1,typename varType, typename objType0, typename objType1>
97  (System * const pSystem, Expression * const pObjectiveExpr0, Expression * const pObjectiveExpr1, DomainType const StaticOrDynamic)
98 {
99  WatchError
100  Expr * tParamExprs[2] = { pObjectiveExpr0, pObjectiveExpr1 };
103 
104  Serial const tSelSerial = Selector::defineWithinSystem(tSelector);
105  if (tSelSerial != InvalidSerial)
106  return scast<SingleRangeVarDoubleObjectiveOptimalValueSelector *>(pSystem->LocateSel(tSelSerial));
107 
108  return tSelector;
109  CatchError
110 }
111 
112 
113 
117 template<Order MaxiOrMini0, Order MaxiOrMini1,typename varType, typename objType0, typename objType1>
119  (System * const pSystem, Expression * const * pParamExprs, DomainType const StaticOrDynamic) : Selector(pSystem, 2), mDomainType(StaticOrDynamic),
120  mIncludeCurr(false)
121 {
122  WatchError
124  this->setParameters(2, pParamExprs);
125  this->setSelHash(this->calcSelHash());
126 
127  Function * tFunction = scast<Function *>(this->ParamExprs[0]);
128  Alert(!tFunction->FactorVars.ItemCount(), kNoVarsForSelection);
129  tFunction = scast<Function *>(this->ParamExprs[1]);
130  Alert(!tFunction->FactorVars.ItemCount(), kNoVarsForSelection);
131 
132  this->mObjValueRecord0 = getExprValueRecord<objType0>(pParamExprs[0]);
133  this->mObjValueRecord1 = getExprValueRecord<objType1>(pParamExprs[1]);
134 
135  this->setExecReady(true);
136  this->setHoldValue(true);
137  CatchError
138 }
139 
140 
141 
142 #if ComputeLazyHalf
143 
146 template<Order MaxiOrMini0, Order MaxiOrMini1,typename varType, typename objType0, typename objType1>
148 {
149  WatchError
151  scast<Function *>(this->ParamExprs[0])->activateLazyHalfAutoExec(SetNotUnset);
152  // the other Expr remains defered.
153  CatchError
154 }
155 #endif
156 
157 
158 
162 template<Order MaxiOrMini0, Order MaxiOrMini1,typename varType, typename objType0, typename objType1>
164 {
165  WatchError
166  Warn(this->mSelectedVars.ItemCount() != 1, kSelNotRequiredVars);
167 
168  Variable * tVariable = this->mSelectedVars[0];
169  Warn(tVariable->ExprModel != identifier<RangeVariable<varType>>(), kWrongTypeEncountered);
170  RangeVariable<varType> * tRangeVar = scast<RangeVariable<varType> *>(tVariable);
172 
173  if (mDomainType == DynamicDomain)
174  {
175  #if ComputeLazy
176  if (tRangeVar->DynamicDomainUpdateDefined())
177  {
178  #if ComputeLazyHalf
179  if (!tRangeVar->ActiveLazyHalfDynamicDomainUpdate())
180  #endif
181  tRangeVar->updateDynamicDomain();
182  }
183  #endif
184  }
185 
186  #if SimulFixedFlexi
187  #if UseFlexiSimulForSelector
188  this->SysMaster->setSimulFlexiVar(tRangeVar);
189  #else
190  this->SysMaster->setSimulFixedVar(tRangeVar);
191  #endif
192  #elif SimulFixedOnly
193  this->SysMaster->setSimulFixedVar(tRangeVar);
194  #elif SimulFlexiOnly
195  this->SysMaster->setSimulFlexiVar(tRangeVar);
196  #endif
197 
198  this->mSelectedValues.clear();
199  objType0 tRunObj0 = OrderBoundary<MaxiOrMini0,objType0>::First(0);
200  objType1 tRunObj1 = OrderBoundary<MaxiOrMini1,objType1>::First(0);
201 
202  varType tExecValue = tRangeVar->ExecValue();
203  varType tMinValue = tRangeVar->MinValue(mDomainType);
204  varType tMaxValue = tRangeVar->MaxValue(mDomainType);
205  varType tStepValue = tRangeVar->StepSizeValue();
206 
207  if (tExecValue < tMinValue || tExecValue > tMaxValue)
208  for(varType tSimulValue = tMinValue; tSimulValue <= tMaxValue; nextAssign<varType>::iof(tSimulValue, tStepValue))
209  {
211  tRangeVar->simulateAnewValue(tSimulValue);
213  #if SimulUpward
214  this->SysMaster->propagateSimulAnew();
215  #endif
216  #if SimulDownward
218  #endif
219 
220  objType0 tNextObj0 = mObjValueRecord0->SimulData(this->SysMaster->SimulClock());
222  {
223  this->mSelectedValues.clear();
224  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
225  tRunObj0 = tNextObj0;
226  #if SimulDownward
228  #endif
229  tRunObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
230  }
231  else if (eq<objType0,Bool>::iof(tRunObj0, tNextObj0))
232  {
233  #if SimulDownward
235  #endif
236  objType1 tNextObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
238  {
239  this->mSelectedValues.clear();
240  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
241  tRunObj1 = tNextObj1;
242  }
243  else if (eq<objType1,Bool>::iof(tRunObj1, tNextObj1))
244  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
245  }
246  }
247  else
248  {
249  if (mIncludeCurr)
250  {
251  this->mSelectedValues.insertMem(Wrap(tExecValue));
252  #if ComputeLazy
253  #if ComputeLazyHalf
254  if (!this->ActiveLazyHalf())
255  #endif
258  #endif
259  tRunObj0 = mObjValueRecord0->ExecData();
260  tRunObj1 = mObjValueRecord1->ExecData();
261  }
262 
263  for(varType tSimulValue = tMinValue; tSimulValue < tExecValue; nextAssign<varType>::iof(tSimulValue, tStepValue))
264  {
266  tRangeVar->simulateAnewValue(tSimulValue);
268  #if SimulUpward
269  this->SysMaster->propagateSimulAnew();
270  #endif
271  #if SimulDownward
273  #endif
274 
275  objType0 tNextObj0 = mObjValueRecord0->SimulData(this->SysMaster->SimulClock());
277  {
278  this->mSelectedValues.clear();
279  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
280  tRunObj0 = tNextObj0;
281  #if SimulDownward
283  #endif
284  tRunObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
285  }
286  else if (eq<objType0,Bool>::iof(tRunObj0, tNextObj0))
287  {
288  #if SimulDownward
290  #endif
291  objType1 tNextObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
293  {
294  this->mSelectedValues.clear();
295  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
296  tRunObj1 = tNextObj1;
297  }
298  else if (eq<objType1,Bool>::iof(tRunObj1, tNextObj1))
299  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
300  }
301  }
302  for(varType tSimulValue = tMaxValue; tSimulValue > tExecValue; prevAssign<varType>::iof(tSimulValue, tStepValue))
303  {
305  tRangeVar->simulateAnewValue(tSimulValue);
307  #if SimulUpward
308  this->SysMaster->propagateSimulAnew();
309  #endif
310  #if SimulDownward
312  #endif
313 
314  objType0 tNextObj0 = mObjValueRecord0->SimulData(this->SysMaster->SimulClock());
316  {
317  this->mSelectedValues.clear();
318  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
319  tRunObj0 = tNextObj0;
320  #if SimulDownward
322  #endif
323  tRunObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
324  }
325  else if (eq<objType0,Bool>::iof(tRunObj0, tNextObj0))
326  {
327  #if SimulDownward
329  #endif
330  objType1 tNextObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
332  {
333  this->mSelectedValues.clear();
334  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
335  tRunObj1 = tNextObj1;
336  }
337  else if (eq<objType1,Bool>::iof(tRunObj1, tNextObj1))
338  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
339  }
340  }
341  }
342  if (this->mSelectedValues.ItemCount() > 1)
343  {
344  Index tIndex = uniformRandom(pRandom, this->mSelectedValues.ItemCount());
345  Wrap tWrap = this->mSelectedValues.Item(tIndex);
346  this->mSelectedValues.clear();
347  this->mSelectedValues.insertMem(tWrap);
348  }
349  return this->mSelectedValues.ItemCount();
350  CatchError
351 }
352 
353 
354 
358 template<Order MaxiOrMini0, Order MaxiOrMini1,typename varType, typename objType0, typename objType1>
360 {
361  WatchError
362  Warn(this->mSelectedVars.ItemCount() != 1, kSelNotRequiredVars);
363 
364  Variable * tVariable = this->mSelectedVars[0];
365  Warn(tVariable->ExprModel != identifier<RangeVariable<varType>>(), kWrongTypeEncountered);
366  RangeVariable<varType> * tRangeVar = scast<RangeVariable<varType> *>(tVariable);
368 
369  if (mDomainType == DynamicDomain)
370  {
371  #if ComputeLazy
372  if (tRangeVar->DynamicDomainUpdateDefined())
373  {
374  #if ComputeLazyHalf
375  if (!tRangeVar->ActiveLazyHalfDynamicDomainUpdate())
376  #endif
377  tRangeVar->updateDynamicDomain();
378  }
379  #endif
380  }
381 
382  #if SimulFixedFlexi
383  #if UseFlexiSimulForSelector
384  this->SysMaster->setSimulFlexiVar(tRangeVar);
385  #else
386  this->SysMaster->setSimulFixedVar(tRangeVar);
387  #endif
388  #elif SimulFixedOnly
389  this->SysMaster->setSimulFixedVar(tRangeVar);
390  #elif SimulFlexiOnly
391  this->SysMaster->setSimulFlexiVar(tRangeVar);
392  #endif
393 
394  this->mSelectedValues.clear();
395  objType0 tRunObj0 = OrderBoundary<MaxiOrMini0,objType0>::First(0);
396  objType1 tRunObj1 = OrderBoundary<MaxiOrMini1,objType1>::First(0);
397 
398  varType tExecValue = tRangeVar->ExecValue();
399  varType tMinValue = tRangeVar->MinValue(mDomainType);
400  varType tMaxValue = tRangeVar->MaxValue(mDomainType);
401  varType tStepValue = tRangeVar->StepSizeValue();
402 
403  if (tExecValue < tMinValue || tExecValue > tMaxValue)
404  for(varType tSimulValue = tMinValue; tSimulValue <= tMaxValue; nextAssign<varType>::iof(tSimulValue, tStepValue))
405  {
407  tRangeVar->simulateIncrValue(tSimulValue);
409  #if SimulUpward
410  this->SysMaster->propagateSimulIncr();
411  #endif
412  #if SimulDownward
414  #endif
415 
416  objType0 tNextObj0 = mObjValueRecord0->SimulData(this->SysMaster->SimulClock());
418  {
419  this->mSelectedValues.clear();
420  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
421  tRunObj0 = tNextObj0;
422  #if SimulDownward
424  #endif
425  tRunObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
426  }
427  else if (eq<objType0,Bool>::iof(tRunObj0, tNextObj0))
428  {
429  #if SimulDownward
431  #endif
432  objType1 tNextObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
434  {
435  this->mSelectedValues.clear();
436  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
437  tRunObj1 = tNextObj1;
438  }
439  else if (eq<objType1,Bool>::iof(tRunObj1, tNextObj1))
440  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
441  }
442  }
443  else
444  {
445  if (mIncludeCurr)
446  {
447  this->mSelectedValues.insertMem(Wrap(tExecValue));
448  #if ComputeLazy
449  #if ComputeLazyHalf
450  if (!this->ActiveLazyHalf())
451  #endif
454  #endif
455  tRunObj0 = mObjValueRecord0->ExecData();
456  tRunObj1 = mObjValueRecord1->ExecData();
457  }
458 
459  for(varType tSimulValue = tMinValue; tSimulValue < tExecValue; nextAssign<varType>::iof(tSimulValue, tStepValue))
460  {
462  tRangeVar->simulateIncrValue(tSimulValue);
464  #if SimulUpward
465  this->SysMaster->propagateSimulIncr();
466  #endif
467  #if SimulDownward
469  #endif
470 
471  objType0 tNextObj0 = mObjValueRecord0->SimulData(this->SysMaster->SimulClock());
473  {
474  this->mSelectedValues.clear();
475  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
476  tRunObj0 = tNextObj0;
477  #if SimulDownward
479  #endif
480  tRunObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
481  }
482  else if (eq<objType0,Bool>::iof(tRunObj0, tNextObj0))
483  {
484  #if SimulDownward
486  #endif
487  objType1 tNextObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
489  {
490  this->mSelectedValues.clear();
491  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
492  tRunObj1 = tNextObj1;
493  }
494  else if (eq<objType1,Bool>::iof(tRunObj1, tNextObj1))
495  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
496  }
497  }
498  for(varType tSimulValue = tMaxValue; tSimulValue > tExecValue; prevAssign<varType>::iof(tSimulValue, tStepValue))
499  {
501  tRangeVar->simulateIncrValue(tSimulValue);
503  #if SimulUpward
504  this->SysMaster->propagateSimulIncr();
505  #endif
506  #if SimulDownward
508  #endif
509 
510  objType0 tNextObj0 = mObjValueRecord0->SimulData(this->SysMaster->SimulClock());
512  {
513  this->mSelectedValues.clear();
514  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
515  tRunObj0 = tNextObj0;
516  #if SimulDownward
518  #endif
519  tRunObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
520  }
521  else if (eq<objType0,Bool>::iof(tRunObj0, tNextObj0))
522  {
523  #if SimulDownward
525  #endif
526  objType1 tNextObj1 = mObjValueRecord1->SimulData(this->SysMaster->SimulClock());
528  {
529  this->mSelectedValues.clear();
530  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
531  tRunObj1 = tNextObj1;
532  }
533  else if (eq<objType1,Bool>::iof(tRunObj1, tNextObj1))
534  this->mSelectedValues.insertMem(Wrap(tRangeVar->SimulValue()));
535  }
536  }
537  }
538  if (this->mSelectedValues.ItemCount() > 1)
539  {
540  Index tIndex = uniformRandom(pRandom, this->mSelectedValues.ItemCount());
541  Wrap tWrap = this->mSelectedValues.Item(tIndex);
542  this->mSelectedValues.clear();
543  this->mSelectedValues.insertMem(tWrap);
544  }
545  return this->mSelectedValues.ItemCount();
546  CatchError
547 }
548 
549 
550 
551 
555 template<Order MaxiOrMini0, Order MaxiOrMini1,typename varType, typename objType0, typename objType1>
557 {
558  WatchError
559  mDomainType = SetNotUnset ? DynamicDomain : StaticDomain;
560  CatchError
561 }
562 
563 
564 
568 template<Order MaxiOrMini0, Order MaxiOrMini1,typename varType, typename objType0, typename objType1>
570 {
571  WatchError
572  mIncludeCurr = SetNotUnset;
573  CatchError
574 }
575 
576 
577 
579 
580 
581 #endif //SingleRangeVarDoubleObjectiveOptimalValueSelectorHppIncluded
void setSimulMode(SysMode::ModeEnum const pModeEnum)
Set the simulation mode.
Definition: system1.hpp:361
void includeCurrValue(Bool const SetNotUnset)
Include current value in search.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:569
Clock SimulClock() const
Get the simulation clock.
Definition: system1.hpp:249
Functions that depend on other expressions.
Definition: function0.hpp:31
Bool ActiveLazyHalf() const
Get whether active.
Definition: selector1.hpp:64
xb< Wrap > mSelectedValues
Selector values.
Definition: selector0.hpp:246
void setExecReady(Bool const SetNotUnset)
Set ready for execution.
Definition: selector1.hpp:144
void setSelFormat(Identifier const pFormat)
Set selector format.
Definition: selector1.hpp:100
#define openKangarooSpace
Open the project namespace.
Definition: project.hpp:74
xb< Variable * > const FactorVars
Factor variables that this function transitively depends on.
Definition: function0.hpp:177
virtual Bool DynamicDomainUpdateDefined() const
Whether the dynamic domain update defined.
Definition: variable1.hpp:39
constexpr char const * kSelNotRequiredVars
Selector does not have required variables.
Definition: messages.hpp:108
Range variables that have domains defined by ranges of values.
Definition: rangeVariable.hpp:31
virtual Serial ValueTypeSerial() const overridefinal
Value type serial.
Definition: rangeVariable.hpp:307
void setSelHash(Hash const pHash)
Set selector hash.
Definition: selector1.hpp:130
kb< Expression * > const ParamExprs
The parameter expressions.
Definition: selector0.hpp:240
static data First(Byte1 const OffSet)
Definition: datatypes.hpp:252
virtual void simulateIncrValue(value const &Value)=0
Simulate incrementally with a given value.
data const & ExecData() const
Return execution data in execution buffer.
Definition: scalarrecord.hpp:287
Dynamic domain.
Definition: variable0.hpp:60
constexpr char const * kWrongTypeEncountered
Wrong type encountered.
Definition: messages.hpp:42
virtual void simulateAnewValue(value const &Value)=0
Simulate anew with a given value.
Abstract variable class.
Definition: variable0.hpp:86
static void performExecution(Expression *const pExpression)
Execute in current (anew or incrmental) mode.
Definition: expression1.hpp:237
SingleRangeVarDoubleObjectiveOptimalValueSelector(System *const pSystem, Expression *const *pParamExprs, DomainType const StaticOrDynamic)
Param constructor.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:119
constexpr char const * kSysYetNotInitialised
System yet uninitialised.
Definition: messages.hpp:167
void setDynamicRange(Bool const SetNotUnset)
Set dynamic range.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:556
void setHoldValue(Bool const SetNotUnset)
Set whether holds values.
Definition: selector1.hpp:158
Index for Library Frames.
xb< Variable * > mSelectedVars
Selector variables.
Definition: selector0.hpp:245
value SimulValue() const
Simulation value of the variable.
Definition: rangeVariable.hpp:282
virtual Bool selectAnew(Random &pRandom)
Run the selector in the system.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:163
Unique identifier of a class.
Represents sorting order binary operators.
Definition: datatypes.hpp:171
ValueRecord< objType1 > const * mObjValueRecord1
Objective value.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:73
ValueRecord< objType0 > const * mObjValueRecord0
Objective value.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:72
value ExecValue() const
Execution value of the variable.
Definition: rangeVariable.hpp:269
virtual void updateDynamicDomain()
Update the dynamic domain.
Definition: variable1.hpp:27
Null computation mode.
Definition: sysmode.hpp:43
Hash calcSelHash() const
Calculate hash value.
Definition: selector1.hpp:197
Selects variables or values or moves.
Definition: selector0.hpp:40
virtual Bool selectIncr(Random &pRandom)
Run the selector in the system.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:359
Selector(System *const pSystem, Dim const ParamCount)
Param constructor.
Definition: selector1.hpp:81
Incremental assignment propagation mode.
Definition: sysmode.hpp:47
static void performSimulIncr(Expression *const pExpression)
Simulate in incremental mode.
Definition: expression1.hpp:326
Constraint-based local search systems.
Definition: system0.hpp:45
static Serial defineWithinSystem(Selector *const pSelector)
Define the selector.
Definition: selector1.hpp:244
void setParameters(Dim const ParamCount, Expression *const *const pParamExprs, ParamSpecType const *const pParamSpecs=nullptr)
Set the parameters.
Definition: selector1.hpp:260
Bool mIncludeCurr
Include current value.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:75
Bool ActiveLazyHalfDynamicDomainUpdate() const
Whether the dynamic domain update is active in lazy half mode.
Definition: variable1.hpp:51
Selecting an optimal value for a range variable, optimising two objectives.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:33
Incremental assignment application mode.
Definition: sysmode.hpp:46
Anew propagation mode.
Definition: sysmode.hpp:45
virtual value StepSizeValue() const =0
The step size value of the domain.
Bool CheckExecMode(SysMode::ModeEnum const pModeEnum) const
Check the execution mode.
Definition: system1.hpp:390
DomainType mDomainType
Whether dynamic range.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:74
constexpr char const * kNoVarsForSelection
No variables found for selection.
Definition: messages.hpp:109
#define closeKangarooSpace
Close the project namespace.
Definition: project.hpp:75
DomainType
Domain types.
Definition: variable0.hpp:57
Anew application mode.
Definition: sysmode.hpp:44
static SingleRangeVarDoubleObjectiveOptimalValueSelector * define(System *const pSystem, Expression *const pObjectiveExpr0, Expression *const pObjectiveExpr1, DomainType const StaticOrDynamic=StaticDomain)
< Define a selector that selects an optimal value for a range variable, optimising two objectives...
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:97
~SingleRangeVarDoubleObjectiveOptimalValueSelector()
Destructor.
Definition: singleRangeVarDoubleObjectiveOptimalValueSelector.hpp:83
System *const SysMaster
Selector&#39;s system.
Definition: selector0.hpp:239
data const & SimulData(Clock const SimulClock) const
SimulDiff ? SimulBuffer : ExecBuffer().
Definition: valuerecord.hpp:408
Wrappers for values.
Definition: wrapper.hpp:68
virtual value MaxValue(DomainType const StaticOrDynamic) const =0
The maximum value of the domain.
Wrapper Wrap
Shortcut for Wrapper.
Definition: wrapper.hpp:321
Represents data type meta.
Definition: datatypes.hpp:73
Abstract expressions.
Definition: expression0.hpp:41
static void performSimulAnew(Expression *const pExpression)
Simulate in anew mode.
Definition: expression1.hpp:310
virtual value MinValue(DomainType const StaticOrDynamic) const =0
The Minimum value of the domain.
Static domain.
Definition: variable0.hpp:59