[2158] | 1 | using System;
|
---|
| 2 | using System.Collections.Generic;
|
---|
| 3 | using System.Linq;
|
---|
| 4 | using System.Text;
|
---|
| 5 | using HeuristicLab.Core;
|
---|
| 6 | using HeuristicLab.ES;
|
---|
| 7 | using HeuristicLab.Operators;
|
---|
| 8 | using HeuristicLab.Data;
|
---|
| 9 |
|
---|
| 10 |
|
---|
| 11 | namespace HeuristicLab.FixedOperators {
|
---|
| 12 | class FixedESMain : FixedGAMainBase {
|
---|
| 13 | protected ESRandomSelector childSelector;
|
---|
| 14 | protected OperatorBase recombinator;
|
---|
| 15 |
|
---|
| 16 | public FixedESMain() {
|
---|
| 17 | Name = this.GetType().Name;
|
---|
| 18 | Init();
|
---|
| 19 |
|
---|
| 20 | } // FixedESMain
|
---|
| 21 |
|
---|
| 22 | private void Init() {
|
---|
| 23 | childSelector = new ESRandomSelector();
|
---|
| 24 | childSelector.GetVariableInfo("Lambda").ActualName = "ESlambda";
|
---|
| 25 | childSelector.GetVariableInfo("Rho").ActualName = "ESrho";
|
---|
| 26 |
|
---|
| 27 | ls.GetVariableInfo("Selected").ActualName = "ESmu";
|
---|
| 28 | //ci.GetVariableInfo("ParentsPerChild").ActualName = "ESrho";
|
---|
| 29 |
|
---|
| 30 |
|
---|
| 31 | } // Init
|
---|
| 32 |
|
---|
| 33 | protected override void GetOperatorsFromScope(IScope scope) {
|
---|
| 34 | mutator = new OperatorExtractor();
|
---|
| 35 | mutator.GetVariableInfo("Operator").ActualName = "Mutator";
|
---|
| 36 |
|
---|
| 37 | evaluator = new OperatorExtractor();
|
---|
| 38 | evaluator.GetVariableInfo("Operator").ActualName = "Evaluation (Rosenbrock)";
|
---|
| 39 |
|
---|
| 40 | recombinator = new OperatorExtractor();
|
---|
| 41 | recombinator.GetVariableInfo("Operator").ActualName = "Recombinator";
|
---|
| 42 |
|
---|
| 43 | //mutator = (OperatorBase)GetVariableValue("Mutator", scope, true);
|
---|
| 44 | //evaluator = GetVariableValue<OperatorBase>("Evaluator", scope, true);
|
---|
| 45 | //recombinator = GetVariableValue<OperatorBase>("Recombinator", scope, true);
|
---|
| 46 | }
|
---|
| 47 |
|
---|
| 48 | public override IOperation Apply(IScope scope) {
|
---|
| 49 | base.Apply(scope);
|
---|
| 50 | IScope s;
|
---|
| 51 | IScope s2;
|
---|
| 52 | bool loopSkipped = true;
|
---|
| 53 |
|
---|
| 54 | tempExePointer = new int[10];
|
---|
| 55 | tempPersExePointer = new int[10];
|
---|
| 56 | IntData esRho;
|
---|
| 57 |
|
---|
| 58 | try {
|
---|
| 59 | for (; nrOfGenerations.Data < maxGenerations.Data; nrOfGenerations.Data++) {
|
---|
| 60 |
|
---|
| 61 | Execute(childSelector, scope);
|
---|
| 62 | ////// Create Children //////
|
---|
| 63 | s = scope.SubScopes[1];
|
---|
| 64 | esRho = s.GetVariableValue<IntData>("ESrho", true);
|
---|
| 65 |
|
---|
| 66 | if (esRho.Data > 1) { // Use recombination?
|
---|
| 67 | Execute(ci, s);
|
---|
| 68 | SaveExecutionPointer(0);
|
---|
| 69 | for (; subscopeNr.Data < s.SubScopes.Count; subscopeNr.Data++) {
|
---|
| 70 | SetExecutionPointerToLastSaved(0);
|
---|
| 71 | s2 = s.SubScopes[subscopeNr.Data];
|
---|
| 72 | Execute(recombinator, s2);
|
---|
| 73 | Execute(mutator, s2);
|
---|
| 74 | Execute(evaluator, s2);
|
---|
| 75 | Execute(counter, s2);
|
---|
| 76 | Execute(sr, s2);
|
---|
| 77 | loopSkipped = false;
|
---|
| 78 | } // foreach
|
---|
| 79 |
|
---|
| 80 | if (loopSkipped)
|
---|
| 81 | executionPointer += 5;
|
---|
| 82 | } // if (esRho.Data > 1)
|
---|
| 83 | else {
|
---|
| 84 | SaveExecutionPointer(0);
|
---|
| 85 | for (; subscopeNr.Data < s.SubScopes.Count; subscopeNr.Data++) {
|
---|
| 86 | SetExecutionPointerToLastSaved(0);
|
---|
| 87 | s2 = s.SubScopes[subscopeNr.Data];
|
---|
| 88 | Execute(mutator, s2);
|
---|
| 89 | Execute(evaluator, s2);
|
---|
| 90 | Execute(counter, s2);
|
---|
| 91 | loopSkipped = false;
|
---|
| 92 | } // foreach
|
---|
| 93 |
|
---|
| 94 | if (loopSkipped)
|
---|
| 95 | executionPointer += 3;
|
---|
| 96 | } // else
|
---|
| 97 |
|
---|
| 98 | Execute(sorter, s);
|
---|
| 99 |
|
---|
| 100 |
|
---|
| 101 | // if for loop skipped, we had to add skiped operations
|
---|
| 102 | // to execution pointer.
|
---|
| 103 | if (loopSkipped)
|
---|
| 104 | executionPointer += 5;
|
---|
| 105 |
|
---|
| 106 | ////// END Create Children //////
|
---|
| 107 |
|
---|
| 108 |
|
---|
| 109 | // Plus or Comma Replacement
|
---|
| 110 | BoolData plusNotation = scope.GetVariableValue<BoolData>("PlusNotation", true);
|
---|
| 111 | if (plusNotation.Data)
|
---|
| 112 | Execute(mr, scope);
|
---|
| 113 | else
|
---|
| 114 | Execute(rr, scope);
|
---|
| 115 |
|
---|
| 116 | // TODO: Parents Selection
|
---|
| 117 | Execute(sorter, scope);
|
---|
| 118 | Execute(ls, scope);
|
---|
| 119 | Execute(rr, scope);
|
---|
| 120 |
|
---|
| 121 | Execute(ql, scope);
|
---|
| 122 | Execute(bawqc, scope);
|
---|
| 123 | Execute(dc, scope);
|
---|
| 124 | Execute(lci, scope);
|
---|
| 125 | subscopeNr.Data = 0;
|
---|
| 126 | ResetExecutionPointer();
|
---|
| 127 | } // for Generations
|
---|
| 128 | } // try
|
---|
| 129 | catch (CancelException) {
|
---|
| 130 | return new AtomicOperation(this, scope);
|
---|
| 131 | }
|
---|
| 132 |
|
---|
| 133 | return null;
|
---|
| 134 | } // Apply
|
---|
| 135 | } // class FixedESMain
|
---|
| 136 | } // namespace HeuristicLab.FixedOperators
|
---|