Free cookie consent management tool by TermsFeed Policy Generator

Changeset 16899 for branches


Ignore:
Timestamp:
05/06/19 14:20:06 (5 years ago)
Author:
msemenki
Message:

#2988: New version of class structure.

Location:
branches/2988_ModelsOfModels2
Files:
3 added
42 edited
1 copied
2 moved

Legend:

Unmodified
Added
Removed
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.DataAnalysis

  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.DataAnalysis/3.4

  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/RegressionTreeModel.cs

    r16565 r16899  
    9191    #region old storable format
    9292    // remove with HL 3.4
    93     [Storable(AllowOneWay = true)]
     93    [Storable(OldName = "SerializedTree")]
    9494    // to prevent storing the references to data caches in nodes
    9595    // seemingly, it is bad (performance-wise) to persist tuples (tuples are used as keys in a dictionary)
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.DataAnalysis/3.4/NearestNeighbour/NearestNeighbourModel.cs

    r16565 r16899  
    294294        return IsProblemDataCompatible(classificationProblemData, out errorMessage);
    295295
    296       throw new ArgumentException("The problem data is not a regression nor a classification problem data. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
     296      throw new ArgumentException("The problem data is not compatible with this nearest neighbour model. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
    297297    }
    298298
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkEnsembleModel.cs

    r16565 r16899  
    144144        return IsProblemDataCompatible(classificationProblemData, out errorMessage);
    145145
    146       throw new ArgumentException("The problem data is not a regression nor a classification problem data. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
     146      throw new ArgumentException("The problem data is not compatible with this neural network ensemble. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
    147147    }
    148148
     
    153153      return new NeuralNetworkEnsembleClassificationSolution(this, new ClassificationEnsembleProblemData(problemData));
    154154    }
    155    
     155
    156156    #region persistence
    157157    [Storable]
     
    183183      }
    184184    }
    185     [Storable(AllowOneWay = true)]
     185    [Storable(OldName = "MultiLayerPerceptronEnsembleDfdnet")]
    186186    private double[] MultiLayerPerceptronEnsembleDfdnet {
    187187      set {
     
    197197      }
    198198    }
    199     [Storable(AllowOneWay = true)]
     199    [Storable(OldName = "MultiLayerPerceptronEnsembleNeurons")]
    200200    private double[] MultiLayerPerceptronEnsembleNeurons {
    201201      set { mlpEnsemble.innerobj.network.neurons = value; }
    202202    }
    203     [Storable(AllowOneWay = true)]
     203    [Storable(OldName = "MultiLayerPerceptronEnsembleSerializedMlp")]
    204204    private double[] MultiLayerPerceptronEnsembleSerializedMlp {
    205205      set {
     
    207207      }
    208208    }
    209     [Storable(AllowOneWay = true)]
     209    [Storable(OldName = "MultiLayerPerceptronStuctinfo")]
    210210    private int[] MultiLayerPerceptronStuctinfo {
    211211      set {
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkModel.cs

    r16565 r16899  
    147147        return IsProblemDataCompatible(classificationProblemData, out errorMessage);
    148148
    149       throw new ArgumentException("The problem data is not a regression nor a classification problem data. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
     149      throw new ArgumentException("The problem data is not compatible with this neural network. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
    150150    }
    151151
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModel.cs

    r16565 r16899  
    300300        return IsProblemDataCompatible(classificationProblemData, out errorMessage);
    301301
    302       throw new ArgumentException("The problem data is not a regression nor a classification problem data. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
     302      throw new ArgumentException("The problem data is not compatible with this random forest. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
    303303    }
    304304
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorMachineModel.cs

    r16565 r16899  
    143143        return IsProblemDataCompatible(classificationProblemData, out errorMessage);
    144144
    145       throw new ArgumentException("The problem data is not a regression nor a classification problem data. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
     145      throw new ArgumentException("The problem data is not compatible with this SVM. Instead a " + problemData.GetType().GetPrettyName() + " was provided.", "problemData");
    146146    }
    147147
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMAlgorithm.cs

    r16760 r16899  
    2828using HeuristicLab.Random;
    2929using HeuristicLab.Selection;
    30 using System;
    3130using System.Collections.Generic;
    3231using System.IO;
     
    4039  [StorableType("AD23B21F-089A-4C6C-AD2E-1B01E7939CF5")]
    4140  public class EMMAlgorithm : EvolvmentModelsOfModelsAlgorithmBase {
    42     public EMMMapTreeModel Map { get; private set; }
    43 
    4441    public EMMAlgorithm() : base() { }
    4542    protected EMMAlgorithm(EMMAlgorithm original, Cloner cloner) : base(original, cloner) {
    46       if (original.Map != null) {
    47         Map = cloner.Clone(original.Map);
    48       }
     43      //if (original.Map != null) {
     44      //  Map = cloner.Clone(original.Map);
     45      //}
    4946    }
    5047    public override IDeepCloneable Clone(Cloner cloner) {
     
    5855      InfixExpressionParser parser = new InfixExpressionParser();
    5956      var trees = File.ReadAllLines(InputFileParameter.Value.Value).Select(parser.Parse);
    60       // this.Problem.SymbolicExpressionTreeGrammar;
    61       /*   Problem.ProblemData.Dataset.ColumnNames.Take(2).ToList();
    62          trees.First().Root.Grammar.ContainsSymbol((IVariable)a).
    63            = this.Problem.SymbolicExpressionTreeGrammar;*/
    64       int neghboorNumber = 10;
    65       switch (MapCreationType.Value) { // Configure Map type and it's parameters: IslandMap, FullMap and Percent, Number
    66         case "IslandMap": break;
    67         case "FullMap":
    68           ClusterNumbersParameter.Value.Value = trees.Count();
    69           switch (NegbourType.Value) {
    70             case "Percent": neghboorNumber = Convert.ToInt32((Convert.ToDouble(ClusterNumbersParameter.Value.Value)) * (Convert.ToDouble(NegbourNumber.Value)) / 100.0); break;
    71             case "Number": neghboorNumber = NegbourNumber.Value; break;
    72             default: neghboorNumber = NegbourNumber.Value; break;
    73           }
    74           break;
    75         default: MapCreationType.Value = "IslandMap"; break;
    76       }
    77       switch (AlgorithmImplemetationType.Value) { //Configure type of algorithm application
    78         case "OnlyMapCreation": // for case when we want only create map, and do  not want made somting also. OnlyMapCreation, CrateMapAndGo, ReadMapAndGo
    79           Map = new EMMMapTreeModel(RandomParameter.Value, trees, ClusterNumbersParameter.Value.Value, neghboorNumber);
    80           ClusterNumbersParameter.Value.Value = Map.K;
    81           File.WriteAllLines("Map.txt", Map.MapToString());
    82           File.WriteAllLines("MapToSee.txt", Map.MapToSee());
    83           globalScope = new Scope("Global Scope");
    84           executionContext = new ExecutionContext(null, this, globalScope);
    85           break;
    86         case "ReadMapAndGo": // for case when we want read existed map and work with it;
    87           Map = new EMMMapTreeModel(RandomParameter.Value, trees);
    88           ClusterNumbersParameter.Value.Value = Map.K;
    89           if (previousExecutionState != ExecutionState.Paused) {
    90             InitializeAlgorithm(cancellationToken);
    91           }
     57      if (AlgorithmImplemetationType.Value == "Read") {
     58        Map.MapRead(RandomParameter.Value, trees, "Map.txt");
     59      } else {
     60        Map.MapCreationPrepare(RandomParameter.Value, trees, ClusterNumbersParameter.Value.Value);
     61        Map.CreateMap(RandomParameter.Value, ClusterNumbersParameter.Value.Value);
     62       // Map.WriteMapToTxtFile(RandomParameter.Value);
     63      }
     64
     65      ClusterNumbersShowParameter.Value.Value = Map.K;
     66
     67      if (AlgorithmImplemetationType.Value == "OnlyMap") {
     68        globalScope = new Scope("Global Scope");
     69        executionContext = new ExecutionContext(null, this, globalScope);
     70      } else {
     71        if (previousExecutionState != ExecutionState.Paused) {
     72          InitializeAlgorithm(cancellationToken);
     73        }
     74        if (!globalScope.Variables.ContainsKey("TreeModelMap"))
    9275          globalScope.Variables.Add(new Variable("TreeModelMap", Map));
    93           EMMAlgorithmRun(cancellationToken);
    94           break;
    95         case "CreateMapAndGo":
    96           Map = new EMMMapTreeModel(RandomParameter.Value, trees, ClusterNumbersParameter.Value.Value, neghboorNumber);
    97           ClusterNumbersParameter.Value.Value = Map.K;
    98           if (previousExecutionState != ExecutionState.Paused) {
    99             InitializeAlgorithm(cancellationToken);
    100           }
    101           globalScope.Variables.Add(new Variable("TreeModelMap", Map));
    102           File.WriteAllLines("Map.txt", Map.MapToString());
    103           File.WriteAllLines("MapToSee.txt", Map.MapToSee());
    104           EMMAlgorithmRun(cancellationToken);
    105           break;
    106         default: //for case of usial from zero step starting
    107           AlgorithmImplemetationType.Value = "CreateMapAndGo";
    108           Map = new EMMMapTreeModel(RandomParameter.Value, trees, ClusterNumbersParameter.Value.Value, neghboorNumber);
    109           ClusterNumbersParameter.Value.Value = Map.K;
    110           File.WriteAllLines("Map.txt", Map.MapToString());
    111           File.WriteAllLines("MapToSee.txt", Map.MapToSee());
    112           if (previousExecutionState != ExecutionState.Paused) {
    113             InitializeAlgorithm(cancellationToken);
    114           }
    115           globalScope.Variables.Add(new Variable("TreeModelMap", Map));
    116           EMMAlgorithmRun(cancellationToken);
    117           break;
    118       }
    119 
     76        EMMAlgorithmRun(cancellationToken);
     77      }
    12078    }
    12179    private void EMMAlgorithmRun(CancellationToken cancellationToken) {
     
    227185
    228186      // initialize data structures for map clustering
    229       var models = new ItemList<ISymbolicExpressionTree>(Map.ModelSet);
    230       var map = new ItemList<ItemList<IntValue>>();
    231       foreach (var list in Map.Map) {
    232         map.Add(new ItemList<IntValue>(list.Select(x => new IntValue(x))));
    233       }
    234       var clusterNumber = new ItemList<IntValue>(Map.ClusterNumber.Select(x => new IntValue(x)));
    235       globalScope.Variables.Add(new Core.Variable("Models", models));
    236       globalScope.Variables.Add(new Core.Variable("Map", map));
    237       globalScope.Variables.Add(new Core.Variable("ClusterNumber", clusterNumber));
     187      //var models = new ItemList<ISymbolicExpressionTree>(Map.ModelSet);
     188      //var map = new ItemList<ItemList<IntValue>>();
     189      //foreach (var list in Map.Map) {
     190      //  map.Add(new ItemList<IntValue>(list.Select(x => new IntValue(x))));
     191      //}
     192      //var clusterNumber = new ItemList<IntValue>(Map.ClusterNumber.Select(x => new IntValue(x)));
     193      //globalScope.Variables.Add(new Variable("Models", models));
     194      //globalScope.Variables.Add(new Variable("Map", map));
     195      //globalScope.Variables.Add(new Variable("ClusterNumber", clusterNumber));
    238196
    239197      EvaluatedSolutions = populationSize;
     
    274232      }
    275233    }
     234    private void LocalDecent(ISymbolicDataAnalysisSingleObjectiveProblem problem, CancellationToken cancellationToken, IScope childScope) {
     235      int maxStepNumber = 100;
     236      var creator = Problem.SolutionCreator;
     237      var name = ((ISymbolicExpressionTreeCreator)creator).SymbolicExpressionTreeParameter.ActualName;
     238      var tree = (ISymbolicExpressionTree)childScope.Variables[name].Value;
     239      var evaluator = problem.Evaluator;
     240      var oldTree = tree.Clone();
     241      ExecuteOperation(executionContext, cancellationToken, executionContext.CreateChildOperation(evaluator, childScope));
     242      var rand = RandomParameter.Value;
     243      if (SetSeedRandomly) Seed = RandomSeedGenerator.GetSeed();
     244      rand.Reset(Seed);
     245      while (maxStepNumber > 0) {
     246        maxStepNumber = TreeIterator(tree.Root, rand, cancellationToken, childScope, maxStepNumber);
     247      }
     248    }
     249    int TreeIterator(ISymbolicExpressionTreeNode a, IRandom rand, CancellationToken cancellationToken, IScope childScope, int maxStepNumber) {
     250      if (a is TreeModelTreeNode modelNode) {
     251        ModelChange(modelNode, rand, cancellationToken, childScope);
     252        maxStepNumber--;
     253      }
     254      if (a.Subtrees != null) {
     255        for (int i = 0; i < (a.Subtrees.Count()); i++) {
     256          TreeIterator(a.Subtrees.ToList()[i], rand, cancellationToken, childScope, maxStepNumber);
     257        }
     258      }
     259      return maxStepNumber;
     260    }
     261    void ModelChange(TreeModelTreeNode a, IRandom rand, CancellationToken cancellationToken, IScope childScope) {
     262      int treeNumber = a.TreeNumber;
     263      var oldSubTree = (ISymbolicExpressionTree)a.Tree.Clone();
     264      double oldQuality = ((DoubleValue)childScope.Variables["Quality"].Value).Value;
     265      int cluster = Map.ClusterNumber[treeNumber];
     266      int newTreeNumber = rand.Next(Map.Map[cluster].Count);
     267      a.Tree = (ISymbolicExpressionTree)Map.ModelSet[newTreeNumber].Clone();
     268      a.Tree.Root.ShakeLocalParameters(rand, 1);
     269      var evaluator = Problem.Evaluator;
     270      ExecuteOperation(executionContext, cancellationToken, executionContext.CreateChildOperation(evaluator, childScope));
     271      double currentQuality = ((DoubleValue)childScope.Variables["Quality"].Value).Value;
     272      if (oldQuality > currentQuality) {
     273        a.Tree = (ISymbolicExpressionTree)oldSubTree.Clone();
     274        ((DoubleValue)childScope.Variables["Quality"].Value).Value = oldQuality;
     275      }
     276    }
    276277  }
    277278
     279
    278280}
    279281
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMBaseAlgorithm.cs

    r16760 r16899  
    2626using HeuristicLab.Core;
    2727using HeuristicLab.Data;
     28using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    2829using HeuristicLab.Optimization;
    2930using HeuristicLab.Parameters;
     
    5556    [Storable]
    5657    protected ExecutionState previousExecutionState;
     58
     59    [Storable]
     60    protected ExecutionState currentExecutionState;
    5761    #endregion
    5862
     
    7276    private const string InputFileParameterName = "InputFile";
    7377    private const string ClusterNumbersParameterName = "ClusterNumbers";
     78    private const string ClusterNumbersShowParameterName = "ClusterNumbersShow";
    7479    private const string AlgorithmImplementationTypeParameterName = "AlgorithmImplemetationType";
    75     private const string MapCreationTypeParameterName = "MapCreationType";
     80    private const string MapParameterName = "Map";
    7681    private const string NegbourTypeParameterName = "NegbourType";
    7782    private const string NegbourNumberParameterName = "NegbourNumber";
     
    8590      get { return (IValueParameter<IntValue>)Parameters[ClusterNumbersParameterName]; }
    8691    }
    87     public IFixedValueParameter<StringValue> AlgorithmImplementationTypeParameter {
    88       get { return (IFixedValueParameter<StringValue>)Parameters[AlgorithmImplementationTypeParameterName]; }
    89     }
    90     public IFixedValueParameter<StringValue> MapCreationTypeParameter {
    91       get { return (IFixedValueParameter<StringValue>)Parameters[MapCreationTypeParameterName]; }
     92    public IValueParameter<IntValue> ClusterNumbersShowParameter {
     93      get { return (IValueParameter<IntValue>)Parameters[ClusterNumbersShowParameterName]; }
     94    }
     95    public IConstrainedValueParameter<StringValue> AlgorithmImplementationTypeParameter {
     96      get { return (IConstrainedValueParameter<StringValue>)Parameters[AlgorithmImplementationTypeParameterName]; }
     97    }
     98    public IConstrainedValueParameter<EMMMapBase<ISymbolicExpressionTree>> MapParameter {
     99      get { return (IConstrainedValueParameter<EMMMapBase<ISymbolicExpressionTree>>)Parameters[MapParameterName]; }
    92100    }
    93101    public IFixedValueParameter<StringValue> NegbourTypeParameter {
     
    144152      set { ClusterNumbersParameter.Value = value; }
    145153    }
     154    public IntValue ClusterNumbersShow {
     155      get { return ClusterNumbersShowParameter.Value; }
     156      set { ClusterNumbersShowParameter.Value = value; }
     157    }
    146158    public StringValue AlgorithmImplemetationType {
    147159      get { return AlgorithmImplementationTypeParameter.Value; }
    148160      set { AlgorithmImplementationTypeParameter.Value.Value = value.Value; }
    149161    }
    150     public StringValue MapCreationType {
    151       get { return MapCreationTypeParameter.Value; }
    152       set { MapCreationTypeParameter.Value.Value = value.Value; }
     162    public EMMMapBase<ISymbolicExpressionTree> Map {
     163      get { return MapParameter.Value; }
     164      set { MapParameter.Value = value; }
    153165    }
    154166    public StringValue NegbourType {
     
    214226      Parameters.Add(new FixedValueParameter<IntValue>(SeedParameterName, "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
    215227      Parameters.Add(new FixedValueParameter<StringValue>(InputFileParameterName, "The file with set of models that will be.", new StringValue("input.txt")));
    216       Parameters.Add(new FixedValueParameter<StringValue>(AlgorithmImplementationTypeParameterName, "The Type of possible algorith, implemetation, choose one: OnlyMapCreation, CreateMapAndGo, ReadMapAndGo.", new StringValue("CreateMapAndGo")));
    217       Parameters.Add(new FixedValueParameter<StringValue>(MapCreationTypeParameterName, "The type of map crearion algorithm. Use one from: IslandMap, FullMap.", new StringValue("IslandMap")));
     228      Parameters.Add(new ConstrainedValueParameter<StringValue>(AlgorithmImplementationTypeParameterName, "The Type of possible algorith, implemetation, choose one: OnlyMap, Full, Read."));
     229      Parameters.Add(new ConstrainedValueParameter<EMMMapBase<ISymbolicExpressionTree>>(MapParameterName, "The type of map crearion algorithm. Use one from: IslandMap, NetworkMap."));
    218230      Parameters.Add(new FixedValueParameter<IntValue>(NegbourNumberParameterName, "The parametr for FullMap type of map crearion algorithm. Use one from: 10, 20.", new IntValue(10)));
    219231      Parameters.Add(new FixedValueParameter<StringValue>(NegbourTypeParameterName, "The parametr for FullMap type of map crearion algorithm. Use one from: Percent, Number.", new StringValue("Number")));
     
    230242      Parameters.Add(new ValueParameter<IRandom>(RandomParameterName, new MersenneTwister()));
    231243      Parameters.Add(new ValueParameter<IntValue>("Elites", "The numer of elite Solutions which are kept in each generation.", new IntValue(1)));
    232       Parameters.Add(new ValueParameter<IntValue>(ClusterNumbersParameterName, "The number of clusters for model Map.", new IntValue(100)));
     244      Parameters.Add(new ValueParameter<IntValue>(ClusterNumbersParameterName, "The number of clusters for model Map.", new IntValue(10)));
     245      Parameters.Add(new ValueParameter<IntValue>(ClusterNumbersShowParameterName, "The number of clusters for model Map.", new IntValue(10)));
    233246      foreach (ISelector selector in ApplicationManager.Manager.GetInstances<ISelector>().Where(x => !(x is IMultiObjectiveSelector)).OrderBy(x => x.Name))
    234247        SelectorParameter.ValidValues.Add(selector);
     
    238251
    239252      ProblemChanged += EvolvmentModelsOfModelsAlgorithmBase_ProblemChanged;
    240 
     253      MapParameterUpdate();
    241254    }
    242255
     
    245258        Problem.SymbolicExpressionTreeInterpreter = new SymbolicDataAnalysisExpressionTreeBatchInterpreter();
    246259        //Problem.SymbolicExpressionTreeGrammar = new EMMGrammar();
     260      }
     261    }
     262    protected void MapParameterUpdate() {
     263      int neghboorNumber = 10;
     264
     265      switch (NegbourType.Value) {
     266        case "Percent": neghboorNumber = Convert.ToInt32((Convert.ToDouble(ClusterNumbersParameter.Value.Value)) * (Convert.ToDouble(NegbourNumber.Value)) / 100.0); break;
     267        case "Number": neghboorNumber = NegbourNumber.Value; break;
     268        default: neghboorNumber = NegbourNumber.Value; break;
     269      }
     270      var mapTypes = new EMMMapBase<ISymbolicExpressionTree>[]
     271      {
     272        new EMMIslandMap(),
     273        new EMMNetworkMap(neghboorNumber)
     274      };
     275      foreach (var t in mapTypes) {
     276        MapParameter.ValidValues.Add(t);
     277      }
     278      var algorithmType = new StringValue[]
     279        {
     280          new StringValue("Full"),
     281          new StringValue("Read"),
     282          new StringValue ("OnlyMap")
     283        };
     284      foreach (var t in algorithmType) {
     285        AlgorithmImplementationTypeParameter.ValidValues.Add(t);
    247286      }
    248287    }
     
    410449
    411450    protected override void OnExecutionStateChanged() {
    412       previousExecutionState = ExecutionState;
     451      previousExecutionState = currentExecutionState;
     452      currentExecutionState = ExecutionState;
    413453      base.OnExecutionStateChanged();
    414454    }
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMBaseMap.cs

    r16898 r16899  
    2121
    2222using HEAL.Attic;
     23using HeuristicLab.Common;
    2324using HeuristicLab.Core;
     25using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
     26using HeuristicLab.Problems.DataAnalysis.Symbolic;
    2427using System.Collections.Generic;
     28using System.IO;
     29using System.Linq;
    2530
    2631namespace HeuristicLab.Algorithms.EvolvmentModelsOfModels {
    2732  [StorableType("83CF9650-98FF-454B-9072-82EA4D39C752")]
    2833  public abstract class EMMMapBase<T> : Item where T : class {
     34    [Storable]
    2935    public List<T> ModelSet { get; set; }
     36    [Storable]
    3037    public List<int> ClusterNumber { get; set; }
     38    [Storable]
    3139    public List<List<int>> Map { get; set; }
     40    [Storable]
    3241    public double[,] Distances { get; set; }
    33     public int K { get; set; }
     42    [Storable]
     43    public int K { get; protected set; }
    3444
    35     protected abstract void CalculateDistances();
    36     protected abstract void CreateIslandMap(IRandom random, int k);
    37     public abstract T NewModelForInizializtion(IRandom random, out int cluster, out int treeNumber);
     45    protected void CalculateDistances() {
     46      if (ModelSet is List<ISymbolicExpressionTree> set) {
     47        Distances = SymbolicExpressionTreeHash.ComputeSimilarityMatrix(set, simplify: false, strict: true);
     48      } else { /// for future work
     49        for (int i = 0; i < ModelSet.Count - 1; i++) {
     50          for (int j = 0; j <= i; j++) {
     51            Distances[i, j] = 0;
     52          }
     53        }
     54      }
     55      for (int i = 0; i < ModelSet.Count - 1; i++) {
     56        for (int j = i + 1; j < ModelSet.Count; j++) {
     57          Distances[j, i] = Distances[i, j] = 1 - Distances[i, j];
     58        }
     59      }
     60
     61    }
     62    public abstract void CreateMap(IRandom random, int k);
     63    public abstract T NewModelForInizializtionNotTree(IRandom random, out int cluster, out int treeNumber);
     64    public ISymbolicExpressionTree NewModelForInizializtion(IRandom random, out int cluster, out int treeNumber) {
     65      treeNumber = random.Next(ModelSet.Count);
     66      cluster = ClusterNumber[treeNumber];
     67      if (ModelSet[treeNumber] is ISymbolicExpressionTree model)
     68        return (ISymbolicExpressionTree)(model.Clone());
     69      return new SymbolicExpressionTree();
     70    }
    3871
    3972    [StorableConstructor]
    4073    protected EMMMapBase(StorableConstructorFlag _) : base(_) { }
    41     protected EMMMapBase() { }
    42 
     74    protected EMMMapBase() : this(1) { }
     75    public EMMMapBase(int k) {
     76      K = k;
     77      ClusterNumber = new List<int>();
     78      Map = new List<List<int>>();
     79    }
     80    public EMMMapBase(EMMMapBase<T> original, Cloner cloner) {
     81      if (original.ModelSet != null) {
     82        if (original.ModelSet is List<ISymbolicExpressionTree> originalSet && ModelSet is List<ISymbolicExpressionTree> set)
     83          set = originalSet.Select(cloner.Clone).ToList();
     84        else ModelSet = original.ModelSet.ToList(); /// check this if you want to use it
     85      }
     86      if (original.ClusterNumber != null) {
     87        ClusterNumber = original.ClusterNumber.ToList();
     88      }
     89      if (original.Map != null) {
     90        Map = original.Map.Select(x => x.ToList()).ToList();
     91      }
     92      K = original.K;
     93    }
     94    //public EMMMapBase(IRandom random, IEnumerable<T> trees, int k) : this(k) {
     95    //  // constructor that should be used in case of creation of a new map from the start point
     96    //  ModelSet = trees.ToList();
     97    //  CalculateDistances();
     98    //  CreateMap(random, k);
     99    //}
     100    //public EMMMapBase(IRandom random, IEnumerable<T> trees, string fileName = "Map.txt") : this(1) {
     101    //  // constructor that shoud be used in case of using of "old" map, that was previously created and now shoud be readed from file
     102    //  ModelSet = trees.ToList();
     103    //  MapFromFileRead(fileName);
     104    //  K = Map.Count;
     105    //  MapPreparation();
     106    //}
     107    public void MapCreationPrepare(IRandom random, IEnumerable<T> trees, int k) {
     108      ModelSet = trees.ToList();
     109      CalculateDistances();
     110      CreateMap(random, k);
     111    }
     112    public void MapRead(IRandom random, IEnumerable<T> trees, string fileName = "Map.txt") {
     113      ModelSet = trees.ToList();
     114      MapFromFileRead(fileName);
     115      K = Map.Count;
     116      MapPreparation();
     117      if (this is EMMNetworkMap one) { one.NeghboorNumber = Map[0].Count; }
     118    }
     119    public void WriteMapToTxtFile(IRandom random) {
     120      string s = random.ToString();
     121      string fileName = "Map";
     122      fileName += s;
     123      fileName += ".txt";
     124      File.WriteAllLines(fileName, MapToString());
     125      string fileName2 = "MapToSee";
     126      fileName2 += s;
     127      fileName2 += ".txt";
     128      File.WriteAllLines(fileName, MapToSee());
     129    }
     130    public string[] MapToString() { // Function that preapre Map to printing in .txt File: create a set of strings for future reading by computer
     131      string[] s;
     132      s = new string[K];
     133      for (int i = 0; i < K; i++) {
     134        s[i] = "";
     135        for (int j = 0; j < Map[i].Count; j++) {
     136          s[i] += Map[i][j].ToString();
     137          s[i] += " ";
     138        }
     139      }
     140      return s;
     141    }
     142    public string[] MapToSee() { // Function that prepare Map to printing in .txt File: create a set of strings in human readable view
     143      var fmt = new InfixExpressionFormatter();
     144      string[] s;
     145      s = new string[(ModelSet.Count) + 1];
     146      s[0] = "ClusterNumber" + "," + "ModelNumber" + "," + "Model";
     147      for (int i = 1; i < ((ModelSet.Count) + 1); i++) {
     148        s[i] = ClusterNumber[i - 1].ToString() + "," + (i - 1).ToString() + ",";
     149        if (ModelSet[i - 1] is ISymbolicExpressionTree model) {
     150          s[i] += fmt.Format(model);
     151        } else { s[i] += ModelSet[i - 1].ToString(); }
     152      }
     153      return s;
     154    }
     155    public void MapFromFileRead(string fileName) {
     156      string input = File.ReadAllText(fileName);
     157      int i = 0;
     158      foreach (var row in input.Split('\n')) {
     159        Map.Add(new List<int>());
     160        foreach (var col in row.Trim().Split(' ')) {
     161          Map[i].Add(int.Parse(col.Trim()));
     162        }
     163        i++;
     164      }
     165    }
     166    protected void MapSizeCheck() {
     167      if (Map != null) Map.Clear();
     168      else Map = new List<List<int>>();
     169      if (Map.Count != K) {
     170        if (Map.Count != 0) {
     171          Map.Clear();
     172        }
     173        for (int i = 0; i < K; i++) {
     174          Map.Add(new List<int>());
     175        }
     176      }
     177    }
     178    protected void MapPreparation() {
     179      for (int i = 0; i < Map.Count; i++) {
     180        for (int j = 0; j < Map[i].Count; j++) {
     181          ClusterNumber.Add(0);
     182        }
     183      }
     184      for (int i = 0; i < Map.Count; i++) {
     185        for (int j = 0; j < Map[i].Count; j++) {
     186          ClusterNumber[Map[i][j]] = i;
     187        }
     188      }
     189    }
    43190  }
    44191}
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMClustering.cs

    r16760 r16899  
    2222using HeuristicLab.Core;
    2323using System.Collections.Generic;
    24 using System.Linq;
    2524
    2625namespace HeuristicLab.Algorithms.EvolvmentModelsOfModels {
     
    4039      return K;
    4140    }
    42     public static void ApplyFullConectedMapCreationAlgorithm(IRandom random, double[,] distances, List<List<int>> map, int k, int neghboorNumber = 10) {
    43       int mapSize = distances.GetLength(0);
    44       List<double> currentList = new List<double>();
    45       for (int i = 0; i < mapSize; i++) {
    46         map.Add(new List<int>());
    47         for (int j = 0; j < mapSize; j++) {
    48           currentList.Add(distances[i, j]);
    49         }
    50         map[i].Add(ChooseMinElement(currentList));
    51         while (map[i].Count < neghboorNumber) {
    52           map[i].Add(ChooseMinElement(currentList, i, map[i]));
    53         }
    54         currentList.Clear();
    55       }
    56     }
    57     private static bool CheckNumberIsInList(int number, List<int> priviousNumber) {
    58       foreach (var pNum in priviousNumber) {
    59         if (number == pNum)
    60           return true;
    61       }
    62       return false;
    63     }
     41
    6442    public static int ApplyClusteringAlgorithm(IRandom random, double[,] distances, List<int> numberCluster, int k) {
    6543      int mapSize = distances.GetLength(0);
     
    8260        }
    8361        for (int i = 0; i < mapSize; i++) {
    84           numberCluster[i] = LookCloseCentroid(centroids, mapSize, distances, i, k);
     62          numberCluster[i] = LookCloseCentroid(centroids, distances, i, k);
    8563          clusters[numberCluster[i]].Add(numberCluster[i]);
    8664        }
     
    8967        for (int i = 0; i < k; i++) {
    9068          AverageClusterDistanceCalculation(averageClusterDistance, distances, numberCluster, mapSize, i);
    91           var newCentroid = clusters[i][ChooseMinElement(averageClusterDistance)];
     69          var newCentroid = clusters[i][HelpFunctions.ChooseMinElementIndex(averageClusterDistance)];
    9270          if (newCentroid != centroids[i]) {
    9371            flag = true;
     
    10482      }
    10583    }
    106     private static int LookCloseCentroid(List<int> centroids, int MapSize, double[,] distances, int currentNumber, int k) {
     84    private static int LookCloseCentroid(List<int> centroids, double[,] distances, int currentNumber, int k) {
    10785      double minDistanse = distances[currentNumber, centroids[0]];
    10886      int clusterNum = 0;
     
    152130      }
    153131    }
    154     private static int ChooseMinElement(List<double> averageClusterDistance) {
    155       double minValue = averageClusterDistance[0];
    156       int minElementNumber = 0;
    157       for (int i = 1; i < averageClusterDistance.Count(); i++) {
    158         if (averageClusterDistance[i] < minValue) {
    159           minValue = averageClusterDistance[i];
    160           minElementNumber = i;
    161         }
    162       }
    163       return minElementNumber;
    164     }
    165     private static int ChooseMinElement(List<double> distances, int currentElement, List<int> previousNumbers) {
    166       double minValue = 100;
    167       int minElementNumber = 0;
    168       int temp = 0, i = 0;
    169       while (temp == 0) {
    170         if ((currentElement != i) && (!CheckNumberIsInList(i, previousNumbers))) {
    171           minValue = distances[i];
    172           minElementNumber = i;
    173           temp = i;
    174         }
    175         i++;
    176       }
    177       for (i = 0; i < distances.Count(); i++) {
    178         if ((distances[i] < minValue) && (currentElement != i) && (!CheckNumberIsInList(i, previousNumbers))) {
    179           minValue = distances[i];
    180           minElementNumber = i;
    181         }
    182       }
    183       return minElementNumber;
    184     }
     132
     133
    185134  }
    186135}
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMIslandMap.cs

    r16898 r16899  
    2424using HeuristicLab.Core;
    2525using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    26 using HeuristicLab.Problems.DataAnalysis.Symbolic;
    2726using System.Collections.Generic;
    28 using System.IO;
    29 using System.Linq;
    3027
    3128namespace HeuristicLab.Algorithms.EvolvmentModelsOfModels {
    32   [Item("TreeModelMap", "A map of models of models of models")]
     29  [Item("IslandMap", "A map of models of models of models")]
    3330  [StorableType("E4AB04B9-FD5D-47EE-949D-243660754F3A")]
    34   public class EMMMapTreeModel : EMMMapBase<ISymbolicExpressionTree> {
     31  public class EMMIslandMap : EMMMapBase<ISymbolicExpressionTree> {
    3532    #region conctructors
    3633    [StorableConstructor]
    37     protected EMMMapTreeModel(StorableConstructorFlag _) : base(_) { }
    38     public EMMMapTreeModel() : this(1) { }
    39     public EMMMapTreeModel(int k) {
    40       K = k;
    41       ModelSet = new List<ISymbolicExpressionTree>();
    42       ClusterNumber = new List<int>();
    43       Map = new List<List<int>>();
     34    protected EMMIslandMap(StorableConstructorFlag _) : base(_) { }
     35    public EMMIslandMap() : this(1) { }
     36    public override IDeepCloneable Clone(Cloner cloner) {
     37      return new EMMIslandMap(this, cloner);
    4438    }
    45     public EMMMapTreeModel(EMMMapTreeModel original, Cloner cloner) {
    46       //original.ModelSet.ForEach(x => ModelSet.Add((ISymbolicExpressionTree)x.Clone(cloner)));
    47       //original.ClusterNumber.ForEach(x => ClusterNumber.Add(x));
    48       //original.Map.ForEach(x => Map.Add(x));
    49       if (original.ModelSet != null) {
    50         ModelSet = original.ModelSet.Select(cloner.Clone).ToList();
    51       }
    52       if (original.ClusterNumber != null) {
    53         ClusterNumber = original.ClusterNumber.ToList();
    54       }
    55       if (original.Map != null) {
    56         Map = original.Map.Select(x => x.ToList()).ToList();
    57       }
    58       K = original.K;
    59     }
    60     public EMMMapTreeModel(IRandom random, IEnumerable<ISymbolicExpressionTree> trees, int k, int neghboorNumber) : this(k) {
    61       ModelSet = trees.ToList();
    62       CalculateDistances();
    63       if (k < ModelSet.Count)
    64         CreateIslandMap(random, k);
    65       else if (k == ModelSet.Count) {
    66         CreateFullConnectedMap(random, k, neghboorNumber);
    67       } else {
    68         k -= ModelSet.Count;
    69         CreateIslandMap(random, k);
    70       }
    71     }
    72     public EMMMapTreeModel(IRandom random, IEnumerable<ISymbolicExpressionTree> trees) : this(1) {
    73       ModelSet = trees.ToList();
    74       string input = File.ReadAllText("Map.txt");
    75 
    76       int i = 0;
    77       foreach (var row in input.Split('\n')) {
    78         Map.Add(new List<int>());
    79         foreach (var col in row.Trim().Split(' ')) {
    80           Map[i].Add(int.Parse(col.Trim()));
    81         }
    82         i++;
    83       }
    84       K = Map.Count;
    85       MapPreparation();
    86     }
    87     public override IDeepCloneable Clone(Cloner cloner) {
    88       return new EMMMapTreeModel(this, cloner);
    89     }
     39    public EMMIslandMap(int k) : base(k) { ModelSet = new List<ISymbolicExpressionTree>(); }
     40    public EMMIslandMap(EMMIslandMap original, Cloner cloner) : base(original, cloner) { }
     41    // public EMMIslandMap(IRandom random, IEnumerable<ISymbolicExpressionTree> trees, int k, int neghboorNumber) : base(random, trees, k) { }
     42    //public EMMIslandMap(IRandom random, IEnumerable<ISymbolicExpressionTree> trees, string fileName = "Map.txt") : base(random, trees, fileName) { }
    9043    #endregion
    91     #region MapTransformation
    92     override protected void CalculateDistances() {
    93       Distances = SymbolicExpressionTreeHash.ComputeSimilarityMatrix(ModelSet, simplify: false, strict: true);
    94       for (int i = 0; i < ModelSet.Count - 1; i++) {
    95         for (int j = i + 1; j < ModelSet.Count; j++) {
    96           Distances[j, i] = Distances[i, j] = 1 - Distances[i, j];
    97         }
    98       }
    99     }
    100     protected void CreateFullConnectedMap(IRandom random, int k, int neghboorNumber) {
    101       EMModelsClusterizationAlgorithm.ApplyFullConectedMapCreationAlgorithm(random, Distances, Map, k, neghboorNumber);
    102       K = k;
    103       for (int i = 0; i < Map.Count; i++) {
    104         ClusterNumber.Add(i);
    105       }
    106     }
    107     override protected void CreateIslandMap(IRandom random, int k) {
    108       //Clusterization
     44    #region MapApplayFunctions
     45    override public void CreateMap(IRandom random, int k) {
    10946      K = EMModelsClusterizationAlgorithm.ApplyClusteringAlgorithm(random, Distances, ClusterNumber, k);
    110       // Cheking a Map size
    111       if (Map != null) Map.Clear();
    112       else Map = new List<List<int>>();
    113       if (Map.Count != K) {
    114         if (Map.Count != 0) {
    115           Map.Clear();
    116         }
    117         for (int i = 0; i < K; i++) {
    118           Map.Add(new List<int>());
    119         }
    120       }
    121       // Map fulfilment
     47      MapSizeCheck();
    12248      for (int i = 0; i < ModelSet.Count; i++) {
    12349        Map[ClusterNumber[i]].Add(i);
    12450      }
    12551    }
    126     protected void MapPreparation() {
    127       for (int i = 0; i < Map.Count; i++) {
    128         for (int j = 0; j < Map[i].Count; j++) {
    129           ClusterNumber.Add(0);
    130         }
    131       }
    132       for (int i = 0; i < Map.Count; i++) {
    133         for (int j = 0; j < Map[i].Count; j++) {
    134           ClusterNumber[Map[i][j]] = i;
    135         }
    136       }
     52    override public ISymbolicExpressionTree NewModelForInizializtionNotTree(IRandom random, out int cluster, out int treeNumber) {
     53      return NewModelForInizializtion(random, out cluster, out treeNumber);
    13754    }
    13855    #endregion
    139     #region Dialog with surroudings
    140     override public ISymbolicExpressionTree NewModelForInizializtion(IRandom random, out int cluster, out int treeNumber) {
    141       treeNumber = random.Next(ModelSet.Count);
    142       cluster = ClusterNumber[treeNumber];
    143       return (ISymbolicExpressionTree)ModelSet[treeNumber].Clone();
    144     }
    145     public string[] MapToString() {
    146       string[] s;
    147       s = new string[K];
    148       for (int i = 0; i < K; i++) {
    149         s[i] = "";
    150         for (int j = 0; j < Map[i].Count; j++) {
    151           s[i] += Map[i][j].ToString();
    152           s[i] += " ";
    153         }
    154       }
    155       return s;
    156     }
    157     public string[] MapToSee() {
    158       var fmt = new InfixExpressionFormatter();
    159       string[] s;
    160       s = new string[(ModelSet.Count) + 1];
    161       s[0] = "ClusterNumber" + "," + "Modfelnumber" + "," + "Model";
    162       for (int i = 1; i < ((ModelSet.Count) + 1); i++) {
    163         s[i] = ClusterNumber[i - 1].ToString() + "," + (i - 1).ToString() + "," + fmt.Format(ModelSet[i - 1]);
    164       }
    165       return s;
    166     }
    16756
    168     #endregion
    16957  }
    17058}
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMMultyPointsMutator.cs

    r16760 r16899  
    3535  [StorableType("918B5F77-3B9E-4620-94A3-236913C4A3F2")]
    3636  public sealed class EMMMultyPointsMutator : SymbolicExpressionTreeManipulator {
    37     private const string ModelSetParameterName = "Models";
    38     private const string ClusterNumberParameterName = "ClusterNumber";
    3937    private const string MapParameterName = "Map";
    4038    private const string MutationProbabilityParameterName = "MutationProbability";
    41     public ILookupParameter<ItemList<ISymbolicExpressionTree>> ModelSetParameter {
    42       get { return (ILookupParameter<ItemList<ISymbolicExpressionTree>>)Parameters[ModelSetParameterName]; }
    43     }
    44     public ILookupParameter<ItemList<IntValue>> ClusterNumberParameter {
    45       get { return (ILookupParameter<ItemList<IntValue>>)Parameters[ClusterNumberParameterName]; }
    46     }
    47 
    48     public ILookupParameter<ItemList<ItemList<IntValue>>> MapParameter {
    49       get { return (ILookupParameter<ItemList<ItemList<IntValue>>>)Parameters[MapParameterName]; }
     39    public ILookupParameter<EMMMapBase<ISymbolicExpressionTree>> MapParameter {
     40      get { return (ILookupParameter<EMMMapBase<ISymbolicExpressionTree>>)Parameters[MapParameterName]; }
    5041    }
    5142    public ILookupParameter<PercentValue> MutationProbabilityParameter {
    5243      get { return (ILookupParameter<PercentValue>)Parameters[MutationProbabilityParameterName]; }
    5344    }
    54     public ItemList<ISymbolicExpressionTree> ModelSet => ModelSetParameter.ActualValue;
    55     public ItemList<IntValue> ClusterNumber => ClusterNumberParameter.ActualValue;
    56     public ItemList<ItemList<IntValue>> Map => MapParameter.ActualValue;
     45    public List<ISymbolicExpressionTree> ModelSet => MapParameter.ActualValue.ModelSet;
     46    public List<int> ClusterNumber => MapParameter.ActualValue.ClusterNumber;
     47    public List<List<int>> Map => MapParameter.ActualValue.Map;
    5748    public PercentValue MutationProbability => MutationProbabilityParameter.ActualValue;
    5849
     
    6152    private EMMMultyPointsMutator(EMMMultyPointsMutator original, Cloner cloner) : base(original, cloner) { }
    6253    public EMMMultyPointsMutator() : base() {
    63       Parameters.Add(new LookupParameter<ItemList<ISymbolicExpressionTree>>(ModelSetParameterName));
    64       Parameters.Add(new LookupParameter<ItemList<IntValue>>(ClusterNumberParameterName));
    65       Parameters.Add(new LookupParameter<ItemList<ItemList<IntValue>>>(MapParameterName));
     54      Parameters.Add(new LookupParameter<EMMMapBase<ISymbolicExpressionTree>>(MapParameterName));
    6655      Parameters.Add(new LookupParameter<PercentValue>(MutationProbabilityParameterName));
    6756    }
     
    8170      return false;
    8271    }
    83     public static void EMMOnePointMutatorPart(IRandom random, ISymbolicExpressionTree symbolicExpressionTree, ItemList<ISymbolicExpressionTree> modelSet, ItemList<IntValue> clusterNumber, ItemList<ItemList<IntValue>> map, PercentValue mutationProbability) {
     72    public static void EMMOnePointMutatorPart(IRandom random, ISymbolicExpressionTree symbolicExpressionTree, List<ISymbolicExpressionTree> modelSet, List<int> clusterNumber, List<List<int>> map, PercentValue mutationProbability) {
    8473
    8574      List<ISymbol> allowedSymbols = new List<ISymbol>();
     
    113102
    114103            if (node is TreeModelTreeNode treeNode2) { // make rigth mutation for tree model
    115               treeNode2.TreeNumber = map[pTemp].SampleRandom(random).Value;
     104              treeNode2.TreeNumber = map[pTemp].SampleRandom(random);
    116105              treeNode2.Tree = (ISymbolicExpressionTree)modelSet[treeNode2.TreeNumber].Clone();
    117106              treeNode2.ClusterNumer = pTemp;
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMMultyPointsMutatorNodeTypeSaving.cs

    r16760 r16899  
    3535  [StorableType("8A24C715-BEFD-4396-9264-31F949330B1A")]
    3636  public sealed class EMMMultyPointsMutatorNodeTypeSaving : SymbolicExpressionTreeManipulator {
    37     private const string ModelSetParameterName = "Models";
    38     private const string ClusterNumberParameterName = "ClusterNumber";
     37
    3938    private const string MapParameterName = "Map";
    4039    private const string MutationProbabilityParameterName = "MutationProbability";
    41     public ILookupParameter<ItemList<ISymbolicExpressionTree>> ModelSetParameter {
    42       get { return (ILookupParameter<ItemList<ISymbolicExpressionTree>>)Parameters[ModelSetParameterName]; }
     40    public ILookupParameter<EMMMapBase<ISymbolicExpressionTree>> MapParameter {
     41      get { return (ILookupParameter<EMMMapBase<ISymbolicExpressionTree>>)Parameters[MapParameterName]; }
    4342    }
    44     public ILookupParameter<ItemList<IntValue>> ClusterNumberParameter {
    45       get { return (ILookupParameter<ItemList<IntValue>>)Parameters[ClusterNumberParameterName]; }
    46     }
     43    public List<ISymbolicExpressionTree> ModelSet => MapParameter.ActualValue.ModelSet;
     44    public List<int> ClusterNumber => MapParameter.ActualValue.ClusterNumber;
     45    public List<List<int>> Map => MapParameter.ActualValue.Map;
    4746
    48     public ILookupParameter<ItemList<ItemList<IntValue>>> MapParameter {
    49       get { return (ILookupParameter<ItemList<ItemList<IntValue>>>)Parameters[MapParameterName]; }
    50     }
    5147    public ILookupParameter<PercentValue> MutationProbabilityParameter {
    5248      get { return (ILookupParameter<PercentValue>)Parameters[MutationProbabilityParameterName]; }
    5349    }
    54     public ItemList<ISymbolicExpressionTree> ModelSet => ModelSetParameter.ActualValue;
    55     public ItemList<IntValue> ClusterNumber => ClusterNumberParameter.ActualValue;
    56     public ItemList<ItemList<IntValue>> Map => MapParameter.ActualValue;
     50
    5751    public PercentValue MutationProbability => MutationProbabilityParameter.ActualValue;
    5852
     
    6155    private EMMMultyPointsMutatorNodeTypeSaving(EMMMultyPointsMutatorNodeTypeSaving original, Cloner cloner) : base(original, cloner) { }
    6256    public EMMMultyPointsMutatorNodeTypeSaving() : base() {
    63       Parameters.Add(new LookupParameter<ItemList<ISymbolicExpressionTree>>(ModelSetParameterName));
    64       Parameters.Add(new LookupParameter<ItemList<IntValue>>(ClusterNumberParameterName));
    65       Parameters.Add(new LookupParameter<ItemList<ItemList<IntValue>>>(MapParameterName));
     57      Parameters.Add(new LookupParameter<EMMMapBase<ISymbolicExpressionTree>>(MapParameterName));
    6658      Parameters.Add(new LookupParameter<PercentValue>(MutationProbabilityParameterName));
    6759    }
     
    8173      return false;
    8274    }
    83     public static void EMMOnePointMutatorPart(IRandom random, ISymbolicExpressionTree symbolicExpressionTree, ItemList<ISymbolicExpressionTree> modelSet, ItemList<IntValue> clusterNumber, ItemList<ItemList<IntValue>> map, PercentValue mutationProbability) {
     75    public static void EMMOnePointMutatorPart(IRandom random, ISymbolicExpressionTree symbolicExpressionTree, List<ISymbolicExpressionTree> modelSet, List<int> clusterNumber, List<List<int>> map, PercentValue mutationProbability) {
    8476
    8577      List<ISymbol> allowedSymbols = new List<ISymbol>();
     
    113105
    114106            if (node is TreeModelTreeNode treeNode2) { // make rigth mutation for tree model
    115               treeNode2.TreeNumber = map[pTemp].SampleRandom(random).Value;
     107              treeNode2.TreeNumber = map[pTemp].SampleRandom(random);
    116108              treeNode2.Tree = (ISymbolicExpressionTree)modelSet[treeNode2.TreeNumber].Clone();
    117109              treeNode2.ClusterNumer = pTemp;
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMMutators.cs

    r16760 r16899  
    3636  public sealed class EMMMutators : SymbolicExpressionTreeManipulator {
    3737    private const int MAX_TRIES = 100;
    38 
    39     private const string ModelSetParameterName = "Models";
    40     private const string ClusterNumberParameterName = "ClusterNumber";
    4138    private const string MapParameterName = "Map";
    4239
    43     public ILookupParameter<ItemList<ISymbolicExpressionTree>> ModelSetParameter {
    44       get { return (ILookupParameter<ItemList<ISymbolicExpressionTree>>)Parameters[ModelSetParameterName]; }
     40    public ILookupParameter<EMMMapBase<ISymbolicExpressionTree>> MapParameter {
     41      get { return (ILookupParameter<EMMMapBase<ISymbolicExpressionTree>>)Parameters[MapParameterName]; }
    4542    }
    4643
    47     public ILookupParameter<ItemList<IntValue>> ClusterNumberParameter {
    48       get { return (ILookupParameter<ItemList<IntValue>>)Parameters[ClusterNumberParameterName]; }
    49     }
    50 
    51     public ILookupParameter<ItemList<ItemList<IntValue>>> MapParameter {
    52       get { return (ILookupParameter<ItemList<ItemList<IntValue>>>)Parameters[MapParameterName]; }
    53     }
    54 
    55     public ItemList<ISymbolicExpressionTree> ModelSet => ModelSetParameter.ActualValue;
    56     public ItemList<IntValue> ClusterNumber => ClusterNumberParameter.ActualValue;
    57     public ItemList<ItemList<IntValue>> Map => MapParameter.ActualValue;
     44    public List<ISymbolicExpressionTree> ModelSet => MapParameter.ActualValue.ModelSet;
     45    public List<int> ClusterNumber => MapParameter.ActualValue.ClusterNumber;
     46    public List<List<int>> Map => MapParameter.ActualValue.Map;
    5847
    5948    [StorableConstructor]
     
    6150    private EMMMutators(EMMMutators original, Cloner cloner) : base(original, cloner) { }
    6251    public EMMMutators() : base() {
    63       Parameters.Add(new LookupParameter<ItemList<ISymbolicExpressionTree>>(ModelSetParameterName));
    64       Parameters.Add(new LookupParameter<ItemList<IntValue>>(ClusterNumberParameterName));
    65       Parameters.Add(new LookupParameter<ItemList<ItemList<IntValue>>>(MapParameterName));
     52      Parameters.Add(new LookupParameter<EMMMapBase<ISymbolicExpressionTree>>(MapParameterName));
    6653    }
    6754
     
    7360      EMMMutatorsPart(random, symbolicExpressionTree, ModelSet, ClusterNumber, Map);
    7461    }
    75     public static void EMMMutatorsPart(IRandom random, ISymbolicExpressionTree symbolicExpressionTree, ItemList<ISymbolicExpressionTree> modelSet, ItemList<IntValue> clusterNumber, ItemList<ItemList<IntValue>> map) {
     62    public static void EMMMutatorsPart(IRandom random, ISymbolicExpressionTree symbolicExpressionTree, List<ISymbolicExpressionTree> modelSet, List<int> clusterNumber, List<List<int>> map) {
    7663      List<ISymbol> allowedSymbols = new List<ISymbol>();
    7764      ISymbolicExpressionTreeNode parent;
     
    124111          int p = random.Next(map.Count);
    125112          if (child is TreeModelTreeNode chNode) { p = chNode.ClusterNumer; }
    126           treeNode.TreeNumber = map[p].SampleRandom(random).Value;
     113          treeNode.TreeNumber = map[p].SampleRandom(random);
    127114          treeNode.Tree = (ISymbolicExpressionTree)modelSet[treeNode.TreeNumber].Clone();
    128115          treeNode.ClusterNumer = p;
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/HeuristicLab.Algorithms.EvolvmentModelsOfModels.csproj

    r16760 r16899  
    2323    <ErrorReport>prompt</ErrorReport>
    2424    <WarningLevel>4</WarningLevel>
     25    <LangVersion>7.1</LangVersion>
    2526  </PropertyGroup>
    2627  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     
    3132    <ErrorReport>prompt</ErrorReport>
    3233    <WarningLevel>4</WarningLevel>
     34    <LangVersion>7.1</LangVersion>
    3335  </PropertyGroup>
    3436  <ItemGroup>
     
    4042    <Reference Include="HeuristicLab.Analysis-3.3">
    4143      <HintPath>..\..\..\trunk\bin\HeuristicLab.Analysis-3.3.dll</HintPath>
     44      <Private>False</Private>
     45    </Reference>
     46    <Reference Include="HeuristicLab.Attic, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
     47      <SpecificVersion>False</SpecificVersion>
     48      <HintPath>..\..\..\trunk\bin\HeuristicLab.Attic.dll</HintPath>
    4249      <Private>False</Private>
    4350    </Reference>
     
    6168      <SpecificVersion>False</SpecificVersion>
    6269      <HintPath>..\..\..\trunk\bin\HeuristicLab.Operators-3.3.dll</HintPath>
     70      <Private>False</Private>
    6371    </Reference>
    6472    <Reference Include="HeuristicLab.Optimization-3.3">
     
    109117  </ItemGroup>
    110118  <ItemGroup>
     119    <Compile Include="EMMDisatanceMap.cs" />
    111120    <Compile Include="EMMMultyPointsMutator.cs" />
    112121    <Compile Include="EMMAlgorithm.cs" />
    113122    <Compile Include="EMMClustering.cs" />
    114     <Compile Include="EMMMapBase.cs" />
    115     <Compile Include="EMMMapTreeModel.cs" />
     123    <Compile Include="EMMBaseMap.cs" />
     124    <Compile Include="EMMIslandMap.cs" />
    116125    <Compile Include="EMMMultyPointsMutatorNodeTypeSaving.cs" />
    117126    <Compile Include="EMMMutators.cs" />
    118127    <Compile Include="EMMSolution.cs" />
    119128    <Compile Include="EMMBaseAlgorithm.cs" />
     129    <Compile Include="EMMNetworkMap.cs" />
     130    <Compile Include="HelpFunctions.cs" />
    120131    <Compile Include="Plugin.cs" />
    121132    <Compile Include="Properties\AssemblyInfo.cs" />
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/Plugin.cs

    r16760 r16899  
    2626  /// Plugin class for HeuristicLab.Algorithms.EMMAlgorithm plugin.
    2727  /// </summary>
    28   [Plugin("HeuristicLab.Algorithms.EMMAlgorithm", "3.3.15.16734")]
     28  [Plugin("HeuristicLab.Algorithms.EMMAlgorithm", "3.3.15.16760")]
    2929  [PluginFile("HeuristicLab.Algorithms.EMMAlgorithm-3.3.dll", PluginFileType.Assembly)]
    3030  [PluginDependency("HeuristicLab.Analysis", "3.3")]
  • branches/2988_ModelsOfModels2/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding

  • branches/2988_ModelsOfModels2/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Formatters/SymbolicExpressionTreeGraphvizFormatter.cs

    r16565 r16899  
    3333      // match Koza style
    3434      {"ProgramRootSymbol", "Prog"},
    35       {"StartSymbol", "RPB"},
     35      {"StartSymbol", "RPB"},
     36
     37      // short form
     38      {"Subtraction", "-" },
     39      {"Addition", "+" },
     40      {"Multiplication", "*" },
     41      {"Division", "/" },
     42      {"Absolute", "abs" },
     43      {"AnalyticQuotient", "AQ" },
     44      {"Sine", "sin" },
     45      {"Cosine", "cos" },
     46      {"Tanget", "tan" },
     47      {"HyperbolicTangent", "tanh" },
     48      {"Exponential", "exp" },
     49      {"Logarithm", "log" },
     50      {"SquareRoot", "sqrt" },
     51      {"Square", "sqr" },
     52      {"CubeRoot", "cbrt" },
     53      {"Cube", "cube" },
     54      {"GreaterThan", ">" },
     55      {"LessThan", "<" },
    3656    };
    3757
  • branches/2988_ModelsOfModels2/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj

    r16760 r16899  
    100100  </PropertyGroup>
    101101  <ItemGroup>
     102    <Reference Include="HEAL.Attic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
     103      <SpecificVersion>False</SpecificVersion>
     104      <HintPath>..\..\..\..\trunk\bin\HEAL.Attic.dll</HintPath>
     105      <Private>False</Private>
     106    </Reference>
    102107    <Reference Include="HeuristicLab.Analysis-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    103108      <SpecificVersion>False</SpecificVersion>
    104109      <HintPath>..\..\..\..\trunk\bin\HeuristicLab.Analysis-3.3.dll</HintPath>
     110    </Reference>
     111    <Reference Include="HeuristicLab.Attic, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
     112      <SpecificVersion>False</SpecificVersion>
     113      <HintPath>..\..\..\..\trunk\bin\HeuristicLab.Attic.dll</HintPath>
    105114    </Reference>
    106115    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
     
    279288    </BootstrapperPackage>
    280289  </ItemGroup>
    281   <ItemGroup>
    282     <Reference Include="HEAL.Attic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    283       <SpecificVersion>False</SpecificVersion>
    284       <HintPath>..\..\bin\HEAL.Attic.dll</HintPath>
    285       <Private>False</Private>
    286     </Reference>
    287   </ItemGroup>
    288290  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    289291  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic

  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/ModelClustersFrequencyAnalyzer.cs

    r16734 r16899  
    4343
    4444    #region parameter properties
     45    [Storable]
    4546    public ILookupParameter<DataTable> ModelClustersFrequencyParameter {
    4647      get { return (ILookupParameter<DataTable>)Parameters[ModelClustersFrequencyParameterName]; }
    4748    }
     49    [Storable]
    4850    public IValueLookupParameter<BoolValue> AggregateModelClustersParameter {
    4951      get { return (IValueLookupParameter<BoolValue>)Parameters[AggregateModelClustersParameterName]; }
     
    5456      get { return AggregateModelClustersParameter.ActualValue; }
    5557      set { AggregateModelClustersParameter.Value = value; }
     58    }
     59    public DataTable ModelClustersFrequency {
     60      get { return ModelClustersFrequencyParameter.ActualValue; }
     61      set { ModelClustersFrequencyParameter.ActualValue = value; }
    5662    }
    5763    #endregion
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/ModelsFrequencyAnalyzer.cs

    r16734 r16899  
    4343
    4444    #region parameter properties
     45    [Storable]
    4546    public ILookupParameter<DataTable> ModelFrequencyParameter {
    4647      get { return (ILookupParameter<DataTable>)Parameters[ModelsFrequencyParameterName]; }
    4748    }
     49    [Storable]
    4850    public IValueLookupParameter<BoolValue> AggregateModelParameter {
    4951      get { return (IValueLookupParameter<BoolValue>)Parameters[AggregateModelParameterName]; }
     
    5456      get { return AggregateModelParameter.ActualValue; }
    5557      set { AggregateModelParameter.Value = value; }
     58    }
     59    public DataTable ModelFrequency {
     60      get { return ModelFrequencyParameter.ActualValue; }
     61      set { ModelFrequencyParameter.ActualValue = value; }
    5662    }
    5763    #endregion
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/TerminalNodesFrequencyAnalyzer.cs

    r16760 r16899  
    4343
    4444    #region parameter properties
     45    [Storable]
    4546    public ILookupParameter<DataTable> TerminalNodesFrequencyParameter {
    4647      get { return (ILookupParameter<DataTable>)Parameters[TerminalNodesFrequencyParameterName]; }
    4748    }
     49    [Storable]
    4850    public IValueLookupParameter<BoolValue> AggregateTerminalNodesParameter {
    4951      get { return (IValueLookupParameter<BoolValue>)Parameters[AggregateTerminalNodesParameterName]; }
     
    5557      set { AggregateTerminalNodesParameter.Value = value; }
    5658    }
     59    public DataTable TerminalNodesFrequency {
     60      get { return TerminalNodesFrequencyParameter.ActualValue; }
     61      set { TerminalNodesFrequencyParameter.ActualValue = value; }
     62    }
     63
    5764    #endregion
    5865    [StorableConstructor]
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs

    r16565 r16899  
    8383        if (branch.SubtreeCount >= 2) {
    8484          var f = (ISymbolicExpressionTreeNode)branch.GetSubtree(0).Clone();
    85           var g = (ISymbolicExpressionTreeNode)branch.GetSubtree(1).Clone();
    8685          var fprime = Derive(f, variableName);
    87           var gprime = Derive(g, variableName);
    88           var fgPrime = Sum(Product(f, gprime), Product(fprime, g));
    89           for (int i = 2; i < branch.SubtreeCount; i++) {
     86          for (int i = 1; i < branch.SubtreeCount; i++) {
     87            var g = (ISymbolicExpressionTreeNode)branch.GetSubtree(i).Clone();
    9088            var fg = Product((ISymbolicExpressionTreeNode)f.Clone(), (ISymbolicExpressionTreeNode)g.Clone());
    91             var h = (ISymbolicExpressionTreeNode)branch.GetSubtree(i).Clone();
    92             var hPrime = Derive(h, variableName);
    93             fgPrime = Sum(Product(fgPrime, h), Product(fg, hPrime));
     89            var gPrime = Derive(g, variableName);
     90            var fgPrime = Sum(Product(fprime, g), Product(gPrime, f));
     91            // prepare for next iteration
     92            f = fg;
     93            fprime = fgPrime;
    9494          }
    95           return fgPrime;
     95          return fprime;
    9696        } else
    9797          // multiplication with only one argument has no effect -> derive the argument
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/LinearModelToTreeConverter.cs

    r16565 r16899  
    3838      double @const = 0) {
    3939
    40       if (factorCoefficients.Length == 0 && coefficients.Length == 0) throw new ArgumentException();
     40      if (factorCoefficients.Length == 0 && coefficients.Length == 0 && @const==0) throw new ArgumentException();
     41
     42      // Combine both trees
     43      ISymbolicExpressionTreeNode add = (new Addition()).CreateTreeNode();
    4144
    4245      // Create tree for double variables
    43       ISymbolicExpressionTree tree = null;     
    4446      if (coefficients.Length > 0) {
    45         tree = CreateTree(variableNames, new int[variableNames.Length], coefficients, @const);
    46         if (factorCoefficients.Length == 0) return tree;
     47        var varTree = CreateTree(variableNames, new int[variableNames.Length], coefficients);
     48        foreach (var varNode in varTree.IterateNodesPrefix().OfType<VariableTreeNode>())
     49          add.AddSubtree(varNode);
    4750      }
    4851
    4952      // Create tree for string variables
    50       ISymbolicExpressionTree factorTree = null;     
    5153      if (factorCoefficients.Length > 0) {
    52         factorTree = CreateTree(factors, factorCoefficients, @const);
    53         if (tree == null) return factorTree; 
     54        var factorTree = CreateTree(factors, factorCoefficients);
     55        foreach (var binFactorNode in factorTree.IterateNodesPrefix().OfType<BinaryFactorVariableTreeNode>())
     56          add.AddSubtree(binFactorNode);
    5457      }
    5558
    56       // Combine both trees
    57       ISymbolicExpressionTreeNode add = tree.Root.GetSubtree(0).GetSubtree(0);
    58       foreach (var binFactorNode in factorTree.IterateNodesPrefix().OfType<BinaryFactorVariableTreeNode>())
    59         add.InsertSubtree(add.SubtreeCount - 1, binFactorNode);
     59      if (@const!=0.0) {
     60        ConstantTreeNode cNode = (ConstantTreeNode)new Constant().CreateTreeNode();
     61        cNode.Value = @const;
     62        add.AddSubtree(cNode);
     63      }
     64
     65      ISymbolicExpressionTree tree = new SymbolicExpressionTree(new ProgramRootSymbol().CreateTreeNode());
     66      ISymbolicExpressionTreeNode startNode = new StartSymbol().CreateTreeNode();
     67      tree.Root.AddSubtree(startNode);
     68      startNode.AddSubtree(add);
    6069      return tree;
    61 
    62       throw new ArgumentException();
    6370    }
    6471
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionCSharpFormatter.cs

    r16722 r16899  
    137137        } else if (node.Symbol is SquareRoot) {
    138138          FormatFunction(node, "Math.Sqrt", strBuilder);
     139        } else if (node.Symbol is Cube) {
     140          FormatPower(node, strBuilder, "3");
     141        } else if (node.Symbol is CubeRoot) {
     142          FormatPower(node, strBuilder, "1.0/3");
    139143        } else if (node.Symbol is Power) {
    140144          FormatFunction(node, "Math.Pow", strBuilder);
    141145        } else if (node.Symbol is Root) {
    142146          FormatRoot(node, strBuilder);
     147        } else if (node.Symbol is Absolute) {
     148          FormatFunction(node, "Math.Abs", strBuilder);
     149        } else if (node.Symbol is AnalyticQuotient) {
     150          strBuilder.Append("(");
     151          FormatRecursively(node.GetSubtree(0), strBuilder);
     152          strBuilder.Append(" / Math.Sqrt(1 + Math.Pow(");
     153          FormatRecursively(node.GetSubtree(1), strBuilder);
     154          strBuilder.Append(" , 2) )");
    143155        } else {
    144156          throw new NotSupportedException("Formatting of symbol: " + node.Symbol + " not supported for C# symbolic expression tree formatter.");
     
    173185
    174186    private void FormatSquare(ISymbolicExpressionTreeNode node, StringBuilder strBuilder) {
     187      FormatPower(node, strBuilder, "2");
     188    }
     189    private void FormatPower(ISymbolicExpressionTreeNode node, StringBuilder strBuilder, string exponent) {
    175190      strBuilder.Append("Math.Pow(");
    176191      FormatRecursively(node.GetSubtree(0), strBuilder);
    177       strBuilder.Append(", 2)");
     192      strBuilder.Append($", {exponent})");
    178193    }
    179194
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionExcelFormatter.cs

    r16722 r16899  
    119119        }
    120120        stringBuilder.Append(")");
     121      } else if (symbol is Absolute) {
     122        stringBuilder.Append($"ABS({FormatRecursively(node.GetSubtree(0))})");
     123      } else if (symbol is AnalyticQuotient) {
     124        stringBuilder.Append($"({FormatRecursively(node.GetSubtree(0))}) / SQRT(1 + POWER({FormatRecursively(node.GetSubtree(1))}, 2))");
    121125      } else if (symbol is Average) {
    122         stringBuilder.Append("(1/");
     126        stringBuilder.Append("(1/(");
    123127        stringBuilder.Append(node.SubtreeCount);
    124128        stringBuilder.Append(")*(");
     
    129133          stringBuilder.Append(")");
    130134        }
    131         stringBuilder.Append(")");
     135        stringBuilder.Append("))");
    132136      } else if (symbol is Constant) {
    133137        ConstantTreeNode constantTreeNode = node as ConstantTreeNode;
     
    137141        stringBuilder.Append(FormatRecursively(node.GetSubtree(0)));
    138142        stringBuilder.Append(")");
     143      } else if (symbol is Cube) {
     144        stringBuilder.Append($"POWER({FormatRecursively(node.GetSubtree(0))}, 3)");
     145      } else if (symbol is CubeRoot) {
     146        stringBuilder.Append($"POWER({FormatRecursively(node.GetSubtree(0))}, 1/3)");
    139147      } else if (symbol is Division) {
    140148        if (node.SubtreeCount == 1) {
    141           stringBuilder.Append("1/");
    142           stringBuilder.Append(FormatRecursively(node.GetSubtree(0)));
     149          stringBuilder.Append("1/(");
     150          stringBuilder.Append(FormatRecursively(node.GetSubtree(0)));
     151          stringBuilder.Append(")");
    143152        } else {
    144153          stringBuilder.Append(FormatRecursively(node.GetSubtree(0)));
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionLatexFormatter.cs

    r16722 r16899  
    117117          strBuilder.Append(@" \cfrac{ ");
    118118        }
     119      } else if (node.Symbol is Absolute) {
     120        strBuilder.Append(@"\operatorname{abs} \left( ");
     121      } else if (node.Symbol is AnalyticQuotient) {
     122        strBuilder.Append(@" \frac { ");
    119123      } else if (node.Symbol is Average) {
    120124        // skip output of (1/1) if only one subtree
     
    131135      } else if (node.Symbol is SquareRoot) {
    132136        strBuilder.Append(@"\sqrt{");
     137      } else if (node.Symbol is Cube) {
     138        strBuilder.Append(@"\left(");
     139      } else if (node.Symbol is CubeRoot) {
     140        strBuilder.Append(@"\left(");
    133141      } else if (node.Symbol is Sine) {
    134142        strBuilder.Append(@"\sin \left( ");
     
    289297        else
    290298          strBuilder.Append(@" }{ \cfrac{ ");
     299      } else if (node.Symbol is Absolute) {
     300        throw new InvalidOperationException();
     301      } else if (node.Symbol is AnalyticQuotient) {
     302        strBuilder.Append(@"}{\sqrt{1 + \left( ");
    291303      } else if (node.Symbol is Average) {
    292304        strBuilder.Append(@" + ");
     
    298310        throw new InvalidOperationException();
    299311      } else if (node.Symbol is SquareRoot) {
     312        throw new InvalidOperationException();
     313      } else if (node.Symbol is Cube) {
     314        throw new InvalidOperationException();
     315      } else if (node.Symbol is CubeRoot) {
    300316        throw new InvalidOperationException();
    301317      } else if (node.Symbol is Sine) {
     
    387403        for (int i = 2; i < node.SubtreeCount; i++)
    388404          strBuilder.Append(" } ");
     405      } else if (node.Symbol is Absolute) {
     406        strBuilder.Append(@" \right)");
     407      } else if (node.Symbol is AnalyticQuotient) {
     408        strBuilder.Append(@" \right)^2}}");
    389409      } else if (node.Symbol is Average) {
    390410        strBuilder.Append(@" \right) ");
     
    397417      } else if (node.Symbol is SquareRoot) {
    398418        strBuilder.Append(@"}");
     419      } else if (node.Symbol is Cube) {
     420        strBuilder.Append(@"\right)^3");
     421      } else if (node.Symbol is CubeRoot) {
     422        strBuilder.Append(@"\right)^\frac{1}{3}");
    399423      } else if (node.Symbol is Sine) {
    400424        strBuilder.Append(@" \right) ");
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionMATLABFormatter.cs

    r16722 r16899  
    126126        }
    127127        stringBuilder.Append(")");
     128      } else if (symbol is Absolute) {
     129        stringBuilder.Append($"abs({FormatRecursively(node.GetSubtree(0))})");
     130      } else if (symbol is AnalyticQuotient) {
     131        stringBuilder.Append($"({FormatRecursively(node.GetSubtree(0))}) / sqrt(1 + ({FormatRecursively(node.GetSubtree(1))}).^2)");
    128132      } else if (symbol is And) {
    129133        stringBuilder.Append("((");
     
    179183        stringBuilder.Append(FormatRecursively(node.GetSubtree(0)));
    180184        stringBuilder.Append(")");
     185      } else if (symbol is Cube) {
     186        stringBuilder.Append("(");
     187        stringBuilder.Append(FormatRecursively(node.GetSubtree(0)));
     188        stringBuilder.Append(").^3");
     189      } else if (symbol is CubeRoot) {
     190        stringBuilder.Append("(");
     191        stringBuilder.Append(FormatRecursively(node.GetSubtree(0)));
     192        stringBuilder.Append(").^(1/3)");
    181193      } else if (symbol is GreaterThan) {
    182194        stringBuilder.Append("((");
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionMathematicaFormatter.cs

    r16722 r16899  
    5656        if (node.Symbol is Addition) {
    5757          FormatFunction(node, "Plus", strBuilder);
     58        } else if (node.Symbol is Absolute) {
     59          FormatFunction(node, "Abs", strBuilder);
     60        } else if (node.Symbol is AnalyticQuotient) {
     61          strBuilder.Append("[");
     62          FormatRecursively(node.GetSubtree(0), strBuilder);
     63          strBuilder.Append("]/Sqrt[ 1 + Power[");
     64          FormatRecursively(node.GetSubtree(1), strBuilder);
     65          strBuilder.Append(", 2]]");
    5866        } else if (node.Symbol is Average) {
    5967          FormatAverage(node, strBuilder);
     
    104112        } else if (node.Symbol is SquareRoot) {
    105113          FormatFunction(node, "Sqrt", strBuilder);
     114        } else if (node.Symbol is Cube) {
     115          FormatPower(node, strBuilder, "3");
     116        } else if (node.Symbol is CubeRoot) {
     117          FormatPower(node, strBuilder, "1/3");
    106118        } else if (node.Symbol is Power) {
    107119          FormatFunction(node, "Power", strBuilder);
     
    205217
    206218    private void FormatSquare(ISymbolicExpressionTreeNode node, StringBuilder strBuilder) {
     219      FormatPower(node, strBuilder, "2");
     220    }
     221
     222    private void FormatPower(ISymbolicExpressionTreeNode node, StringBuilder strBuilder, string exponent) {
    207223      strBuilder.Append("Power[");
    208224      FormatRecursively(node.GetSubtree(0), strBuilder);
    209       strBuilder.Append(", 2]");
     225      strBuilder.Append($", {exponent}]");
    210226    }
    211227
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionSmalltalkFormatter.cs

    r16722 r16899  
    2020#endregion
    2121
     22using System;
    2223using System.Globalization;
    2324using System.Text;
     
    6970        }
    7071        stringBuilder.Append(") ifTrue:[1] ifFalse:[-1]");
     72      } else if (symbol is Absolute) {
     73        stringBuilder.Append($"({FormatRecursively(node.GetSubtree(0))}) abs");
     74      } else if (symbol is AnalyticQuotient) {
     75        stringBuilder.Append($"({FormatRecursively(node.GetSubtree(0))}) / (1 + ({FormatPower(node.GetSubtree(1), "2")})) sqrt");
    7176      } else if (symbol is Average) {
    7277        stringBuilder.Append("(1/");
     
    8489        stringBuilder.Append(FormatRecursively(node.GetSubtree(0)));
    8590        stringBuilder.Append(" cos");
     91      } else if (symbol is Cube) {
     92        stringBuilder.Append(FormatPower(node.GetSubtree(0), "3"));
     93      } else if (symbol is CubeRoot) {
     94        stringBuilder.Append(FormatPower(node.GetSubtree(0), "(1/3)"));
    8695      } else if (symbol is Division) {
    8796        if (node.SubtreeCount == 1) {
     
    146155        stringBuilder.Append(FormatRecursively(node.GetSubtree(0)));
    147156        stringBuilder.Append(" sin");
     157      } else if (symbol is Square) {
     158        stringBuilder.Append(FormatPower(node.GetSubtree(0), "2"));
     159      } else if (symbol is SquareRoot) {
     160        stringBuilder.Append(FormatPower(node.GetSubtree(0), "(1/2)"));
    148161      } else if (symbol is Subtraction) {
    149162        if (node.SubtreeCount == 1) {
     
    184197    }
    185198
     199    private string FormatPower(ISymbolicExpressionTreeNode node, string exponent) {
     200      return $"(({FormatRecursively(node)}) log * {exponent}) exp ";
     201    }
     202
    186203    public override IDeepCloneable Clone(Cloner cloner) {
    187204      return new SymbolicDataAnalysisExpressionSmalltalkFormatter(this, cloner);
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalInterpreter.cs

    r16722 r16899  
    6969    #endregion
    7070
    71     public Interval GetSymbolicExressionTreeInterval(ISymbolicExpressionTree tree, IDataset dataset, IEnumerable<int> rows = null) {
     71    public Interval GetSymbolicExpressionTreeInterval(ISymbolicExpressionTree tree, IDataset dataset, IEnumerable<int> rows = null) {
    7272      var variableRanges = DatasetUtil.GetVariableRanges(dataset, rows);
    73       return GetSymbolicExressionTreeInterval(tree, variableRanges);
    74     }
    75 
    76     public Interval GetSymbolicExressionTreeIntervals(ISymbolicExpressionTree tree, IDataset dataset,
    77       out Dictionary<ISymbolicExpressionTreeNode, Interval> nodeIntervals, IEnumerable<int> rows = null) {
     73      return GetSymbolicExpressionTreeInterval(tree, variableRanges);
     74    }
     75
     76    public Interval GetSymbolicExpressionTreeIntervals(ISymbolicExpressionTree tree, IDataset dataset,
     77      out IDictionary<ISymbolicExpressionTreeNode, Interval> nodeIntervals, IEnumerable<int> rows = null) {
    7878      var variableRanges = DatasetUtil.GetVariableRanges(dataset, rows);
    79       return GetSymbolicExressionTreeIntervals(tree, variableRanges, out nodeIntervals);
    80     }
    81 
    82     public Interval GetSymbolicExressionTreeInterval(ISymbolicExpressionTree tree, Dictionary<string, Interval> variableRanges) {
     79      return GetSymbolicExpressionTreeIntervals(tree, variableRanges, out nodeIntervals);
     80    }
     81
     82    public Interval GetSymbolicExpressionTreeInterval(ISymbolicExpressionTree tree, IDictionary<string, Interval> variableRanges) {
    8383      lock (syncRoot) {
    8484        EvaluatedSolutions++;
     
    9696
    9797
    98     public Interval GetSymbolicExressionTreeIntervals(ISymbolicExpressionTree tree,
    99       Dictionary<string, Interval> variableRanges, out Dictionary<ISymbolicExpressionTreeNode, Interval> nodeIntervals) {
     98    public Interval GetSymbolicExpressionTreeIntervals(ISymbolicExpressionTree tree,
     99      IDictionary<string, Interval> variableRanges, out IDictionary<ISymbolicExpressionTreeNode, Interval> nodeIntervals) {
    100100      lock (syncRoot) {
    101101        EvaluatedSolutions++;
     
    108108      // fix incorrect intervals if necessary (could occur because of numerical errors)
    109109      nodeIntervals = new Dictionary<ISymbolicExpressionTreeNode, Interval>();
    110       foreach(var kvp in intervals) {
     110      foreach (var kvp in intervals) {
    111111        var interval = kvp.Value;
    112112        if (interval.IsInfiniteOrUndefined || interval.LowerBound <= interval.UpperBound)
     
    124124
    125125
    126     private static Instruction[] PrepareInterpreterState(ISymbolicExpressionTree tree, Dictionary<string, Interval> variableRanges) {
     126    private static Instruction[] PrepareInterpreterState(ISymbolicExpressionTree tree, IDictionary<string, Interval> variableRanges) {
    127127      if (variableRanges == null)
    128128        throw new ArgumentNullException("No variablew ranges are present!", nameof(variableRanges));
     
    133133      }
    134134
    135       Instruction[] code = SymbolicExpressionTreeCompiler.Compile(tree, OpCodes.MapSymbolToOpCode);
    136       foreach (Instruction instr in code.Where(i => i.opCode == OpCodes.Variable)) {
     135      Instruction[] code = SymbolicExpressionTreeCompiler.Compile(tree, OpCode.MapSymbolToOpCode);
     136      foreach (Instruction instr in code.Where(i => i.opCode == OpCode.Variable)) {
    137137        var variableTreeNode = (VariableTreeNode)instr.dynamicNode;
    138138        instr.data = variableRanges[variableTreeNode.VariableName];
     
    141141    }
    142142
    143     private Interval Evaluate(Instruction[] instructions, ref int instructionCounter, Dictionary<ISymbolicExpressionTreeNode, Interval> nodeIntervals = null) {
     143    private Interval Evaluate(Instruction[] instructions, ref int instructionCounter, IDictionary<ISymbolicExpressionTreeNode, Interval> nodeIntervals = null) {
    144144      Instruction currentInstr = instructions[instructionCounter];
    145145      //Use ref parameter, because the tree will be iterated through recursively from the left-side branch to the right side
     
    150150      switch (currentInstr.opCode) {
    151151        //Variables, Constants, ...
    152         case OpCodes.Variable: {
     152        case OpCode.Variable: {
    153153            var variableTreeNode = (VariableTreeNode)currentInstr.dynamicNode;
    154154            var weightInterval = new Interval(variableTreeNode.Weight, variableTreeNode.Weight);
     
    158158            break;
    159159          }
    160         case OpCodes.Constant: {
     160        case OpCode.Constant: {
    161161            var constTreeNode = (ConstantTreeNode)currentInstr.dynamicNode;
    162162            result = new Interval(constTreeNode.Value, constTreeNode.Value);
     
    164164          }
    165165        //Elementary arithmetic rules
    166         case OpCodes.Add: {
     166        case OpCode.Add: {
    167167            result = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    168168            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    172172            break;
    173173          }
    174         case OpCodes.Sub: {
     174        case OpCode.Sub: {
    175175            result = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    176176            if (currentInstr.nArguments == 1)
     
    183183            break;
    184184          }
    185         case OpCodes.Mul: {
     185        case OpCode.Mul: {
    186186            result = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    187187            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    191191            break;
    192192          }
    193         case OpCodes.Div: {
     193        case OpCode.Div: {
    194194            result = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    195195            if (currentInstr.nArguments == 1)
     
    203203          }
    204204        //Trigonometric functions
    205         case OpCodes.Sin: {
     205        case OpCode.Sin: {
    206206            var argumentInterval = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    207207            result = Interval.Sine(argumentInterval);
    208208            break;
    209209          }
    210         case OpCodes.Cos: {
     210        case OpCode.Cos: {
    211211            var argumentInterval = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    212212            result = Interval.Cosine(argumentInterval);
    213213            break;
    214214          }
    215         case OpCodes.Tan: {
     215        case OpCode.Tan: {
    216216            var argumentInterval = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    217217            result = Interval.Tangens(argumentInterval);
    218218            break;
    219219          }
     220        case OpCode.Tanh: {
     221            var argumentInterval = Evaluate(instructions, ref instructionCounter, nodeIntervals);
     222            result = Interval.HyperbolicTangent(argumentInterval);
     223            break;
     224          }
    220225        //Exponential functions
    221         case OpCodes.Log: {
     226        case OpCode.Log: {
    222227            var argumentInterval = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    223228            result = Interval.Logarithm(argumentInterval);
    224229            break;
    225230          }
    226         case OpCodes.Exp: {
     231        case OpCode.Exp: {
    227232            var argumentInterval = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    228233            result = Interval.Exponential(argumentInterval);
    229234            break;
    230235          }
    231         case OpCodes.Power: {
     236        case OpCode.Power: {
    232237            result = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    233238            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    237242            break;
    238243          }
    239         case OpCodes.Square: {
     244        case OpCode.Square: {
    240245            var argumentInterval = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    241246            result = Interval.Square(argumentInterval);
    242247            break;
    243248          }
    244         case OpCodes.Root: {
     249        case OpCode.Root: {
    245250            result = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    246251            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    250255            break;
    251256          }
    252         case OpCodes.SquareRoot: {
     257        case OpCode.SquareRoot: {
    253258            var argumentInterval = Evaluate(instructions, ref instructionCounter, nodeIntervals);
    254259            result = Interval.SquareRoot(argumentInterval);
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/OpCodes.cs

    r16722 r16899  
    2020#endregion
    2121
     22using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    2223using System;
    2324using System.Collections.Generic;
    24 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    2525
    2626namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
    27   public static class OpCodes {
     27  public static class OpCode {
    2828    public const byte Add = 1;
    2929    public const byte Sub = 2;
     
    9595
    9696    private static Dictionary<Type, byte> symbolToOpcode = new Dictionary<Type, byte>() {
    97        { typeof(Addition), OpCodes.Add },
    98       { typeof(Subtraction), OpCodes.Sub },
    99       { typeof(Multiplication), OpCodes.Mul },
    100       { typeof(Division), OpCodes.Div },
    101       { typeof(Sine), OpCodes.Sin },
    102       { typeof(Cosine), OpCodes.Cos },
    103       { typeof(Tangent), OpCodes.Tan },
    104       { typeof (HyperbolicTangent), OpCodes.Tanh},
    105       { typeof(Logarithm), OpCodes.Log },
    106       { typeof(Exponential), OpCodes.Exp },
    107       { typeof(IfThenElse), OpCodes.IfThenElse },
    108       { typeof(GreaterThan), OpCodes.GT },
    109       { typeof(LessThan), OpCodes.LT },
    110       { typeof(And), OpCodes.AND },
    111       { typeof(Or), OpCodes.OR },
    112       { typeof(Not), OpCodes.NOT},
    113       { typeof(Xor),OpCodes.XOR},
    114       { typeof(Average), OpCodes.Average},
    115       { typeof(InvokeFunction), OpCodes.Call },
    116       { typeof(Variable), OpCodes.Variable },
    117       { typeof(LaggedVariable), OpCodes.LagVariable },
    118       { typeof(AutoregressiveTargetVariable),OpCodes.LagVariable},
    119       { typeof(Constant), OpCodes.Constant },
    120       { typeof(TreeModel), OpCodes.TreeModel },
    121       { typeof(Argument), OpCodes.Arg },
    122       { typeof(Power),OpCodes.Power},
    123       { typeof(Root),OpCodes.Root},
    124       { typeof(TimeLag), OpCodes.TimeLag},
    125       { typeof(Integral), OpCodes.Integral},
    126       { typeof(Derivative), OpCodes.Derivative},
    127       { typeof(VariableCondition),OpCodes.VariableCondition},
    128       { typeof(Square),OpCodes.Square},
    129       { typeof(SquareRoot),OpCodes.SquareRoot},
    130       { typeof(Gamma), OpCodes.Gamma },
    131       { typeof(Psi), OpCodes.Psi },
    132       { typeof(Dawson), OpCodes.Dawson},
    133       { typeof(ExponentialIntegralEi), OpCodes.ExponentialIntegralEi },
    134       { typeof(CosineIntegral), OpCodes.CosineIntegral },
    135       { typeof(SineIntegral), OpCodes.SineIntegral },
    136       { typeof(HyperbolicCosineIntegral), OpCodes.HyperbolicCosineIntegral },
    137       { typeof(HyperbolicSineIntegral), OpCodes.HyperbolicSineIntegral },
    138       { typeof(FresnelCosineIntegral), OpCodes.FresnelCosineIntegral },
    139       { typeof(FresnelSineIntegral), OpCodes.FresnelSineIntegral },
    140       { typeof(AiryA), OpCodes.AiryA },
    141       { typeof(AiryB), OpCodes.AiryB },
    142       { typeof(Norm), OpCodes.Norm},
    143       { typeof(Erf), OpCodes.Erf},
    144       { typeof(Bessel), OpCodes.Bessel},
    145       { typeof(FactorVariable), OpCodes.FactorVariable },
    146       { typeof(BinaryFactorVariable), OpCodes.BinaryFactorVariable },
    147       { typeof(Absolute), OpCodes.Absolute },
    148       { typeof(AnalyticQuotient), OpCodes.AnalyticQuotient },
    149       { typeof(Cube), OpCodes.Cube },
    150       { typeof(CubeRoot), OpCodes.CubeRoot }
     97       { typeof(Addition), OpCode.Add },
     98      { typeof(Subtraction), OpCode.Sub },
     99      { typeof(Multiplication), OpCode.Mul },
     100      { typeof(Division), OpCode.Div },
     101      { typeof(Sine), OpCode.Sin },
     102      { typeof(Cosine), OpCode.Cos },
     103      { typeof(Tangent), OpCode.Tan },
     104      { typeof (HyperbolicTangent), OpCode.Tanh},
     105      { typeof(Logarithm), OpCode.Log },
     106      { typeof(Exponential), OpCode.Exp },
     107      { typeof(IfThenElse), OpCode.IfThenElse },
     108      { typeof(GreaterThan), OpCode.GT },
     109      { typeof(LessThan), OpCode.LT },
     110      { typeof(And), OpCode.AND },
     111      { typeof(Or), OpCode.OR },
     112      { typeof(Not), OpCode.NOT},
     113      { typeof(Xor),OpCode.XOR},
     114      { typeof(Average), OpCode.Average},
     115      { typeof(InvokeFunction), OpCode.Call },
     116      { typeof(Variable), OpCode.Variable },
     117      { typeof(LaggedVariable), OpCode.LagVariable },
     118      { typeof(AutoregressiveTargetVariable),OpCode.LagVariable},
     119      { typeof(Constant), OpCode.Constant },
     120      { typeof(TreeModel), OpCode.TreeModel },
     121      { typeof(Argument), OpCode.Arg },
     122      { typeof(Power),OpCode.Power},
     123      { typeof(Root),OpCode.Root},
     124      { typeof(TimeLag), OpCode.TimeLag},
     125      { typeof(Integral), OpCode.Integral},
     126      { typeof(Derivative), OpCode.Derivative},
     127      { typeof(VariableCondition),OpCode.VariableCondition},
     128      { typeof(Square),OpCode.Square},
     129      { typeof(SquareRoot),OpCode.SquareRoot},
     130      { typeof(Gamma), OpCode.Gamma },
     131      { typeof(Psi), OpCode.Psi },
     132      { typeof(Dawson), OpCode.Dawson},
     133      { typeof(ExponentialIntegralEi), OpCode.ExponentialIntegralEi },
     134      { typeof(CosineIntegral), OpCode.CosineIntegral },
     135      { typeof(SineIntegral), OpCode.SineIntegral },
     136      { typeof(HyperbolicCosineIntegral), OpCode.HyperbolicCosineIntegral },
     137      { typeof(HyperbolicSineIntegral), OpCode.HyperbolicSineIntegral },
     138      { typeof(FresnelCosineIntegral), OpCode.FresnelCosineIntegral },
     139      { typeof(FresnelSineIntegral), OpCode.FresnelSineIntegral },
     140      { typeof(AiryA), OpCode.AiryA },
     141      { typeof(AiryB), OpCode.AiryB },
     142      { typeof(Norm), OpCode.Norm},
     143      { typeof(Erf), OpCode.Erf},
     144      { typeof(Bessel), OpCode.Bessel},
     145      { typeof(FactorVariable), OpCode.FactorVariable },
     146      { typeof(BinaryFactorVariable), OpCode.BinaryFactorVariable },
     147      { typeof(Absolute), OpCode.Absolute },
     148      { typeof(AnalyticQuotient), OpCode.AnalyticQuotient },
     149      { typeof(Cube), OpCode.Cube },
     150      { typeof(CubeRoot), OpCode.CubeRoot }
    151151    };
    152152
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionCompiledTreeInterpreter.cs

    r16722 r16899  
    154154    private static readonly PropertyInfo Indexer = typeof(IList<double>).GetProperty("Item");
    155155    private static Expression MakeExpr(ISymbolicExpressionTreeNode node, Dictionary<string, int> variableIndices, Expression row, Expression columns) {
    156       var opcode = OpCodes.MapSymbolToOpCode(node);
     156      var opcode = OpCode.MapSymbolToOpCode(node);
    157157      #region switch opcode
    158158      switch (opcode) {
    159         case OpCodes.Constant: {
     159        case OpCode.Constant: {
    160160            var constantTreeNode = (ConstantTreeNode)node;
    161161            return Expression.Constant(constantTreeNode.Value);
    162162          }
    163         case OpCodes.Variable: {
     163        case OpCode.Variable: {
    164164            var variableTreeNode = (VariableTreeNode)node;
    165165            var variableWeight = Expression.Constant(variableTreeNode.Weight);
     
    169169            return Expression.Multiply(variableWeight, Expression.Property(valuesExpr, Indexer, row));
    170170          }
    171         case OpCodes.Add: {
     171        case OpCode.Add: {
    172172            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    173173            for (int i = 1; i < node.SubtreeCount; ++i) {
     
    176176            return result;
    177177          }
    178         case OpCodes.Sub: {
     178        case OpCode.Sub: {
    179179            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    180180            if (node.SubtreeCount == 1)
     
    185185            return result;
    186186          }
    187         case OpCodes.Mul: {
     187        case OpCode.Mul: {
    188188            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    189189            for (int i = 1; i < node.SubtreeCount; ++i) {
     
    192192            return result;
    193193          }
    194         case OpCodes.Div: {
     194        case OpCode.Div: {
    195195            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    196196            if (node.SubtreeCount == 1)
     
    201201            return result;
    202202          }
    203         case OpCodes.Average: {
     203        case OpCode.Average: {
    204204            Expression result = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    205205            for (int i = 1; i < node.SubtreeCount; ++i) {
     
    208208            return Expression.Divide(result, Expression.Constant((double)node.SubtreeCount));
    209209          }
    210         case OpCodes.Absolute: {
     210        case OpCode.Absolute: {
    211211            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    212212            return Expression.Call(Abs, arg);
    213213          }
    214         case OpCodes.Cos: {
     214        case OpCode.Cos: {
    215215            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    216216            return Expression.Call(Cos, arg);
    217217          }
    218         case OpCodes.Sin: {
     218        case OpCode.Sin: {
    219219            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    220220            return Expression.Call(Sin, arg);
    221221          }
    222         case OpCodes.Tan: {
     222        case OpCode.Tan: {
    223223            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    224224            return Expression.Call(Tan, arg);
    225225          }
    226         case OpCodes.Tanh: {
     226        case OpCode.Tanh: {
    227227            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    228228            return Expression.Call(Tanh, arg);
    229229          }
    230         case OpCodes.Square: {
     230        case OpCode.Square: {
    231231            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    232232            return Expression.Power(arg, Expression.Constant(2.0));
    233233          }
    234         case OpCodes.Cube: {
     234        case OpCode.Cube: {
    235235            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    236236            return Expression.Power(arg, Expression.Constant(3.0));
    237237          }
    238         case OpCodes.Power: {
     238        case OpCode.Power: {
    239239            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    240240            var power = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
    241241            return Expression.Power(arg, Expression.Call(Round, power));
    242242          }
    243         case OpCodes.SquareRoot: {
     243        case OpCode.SquareRoot: {
    244244            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    245245            return Expression.Call(Sqrt, arg);
    246246          }
    247         case OpCodes.CubeRoot: {
     247        case OpCode.CubeRoot: {
    248248            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    249249            return Expression.Power(arg, Expression.Constant(1.0 / 3.0));
    250250          }
    251         case OpCodes.Root: {
     251        case OpCode.Root: {
    252252            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    253253            var power = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
    254254            return Expression.Power(arg, Expression.Divide(Expression.Constant(1.0), Expression.Call(Round, power)));
    255255          }
    256         case OpCodes.Exp: {
     256        case OpCode.Exp: {
    257257            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    258258            return Expression.Call(Exp, arg);
    259259          }
    260         case OpCodes.Log: {
     260        case OpCode.Log: {
    261261            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    262262            return Expression.Call(Log, arg);
    263263          }
    264         case OpCodes.Gamma: {
     264        case OpCode.Gamma: {
    265265            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    266266            var isNaN = Expression.Call(IsNaN, arg);
     
    278278            return expr;
    279279          }
    280         case OpCodes.Psi: {
     280        case OpCode.Psi: {
    281281            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    282282            var isNaN = Expression.Call(IsNaN, arg);
     
    300300            return expr;
    301301          }
    302         case OpCodes.Dawson: {
     302        case OpCode.Dawson: {
    303303            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    304304            var isNaN = Expression.Call(IsNaN, arg);
     
    314314            return expr;
    315315          }
    316         case OpCodes.ExponentialIntegralEi: {
     316        case OpCode.ExponentialIntegralEi: {
    317317            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    318318            var isNaN = Expression.Call(IsNaN, arg);
     
    328328            return expr;
    329329          }
    330         case OpCodes.SineIntegral: {
     330        case OpCode.SineIntegral: {
    331331            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    332332            var isNaN = Expression.Call(IsNaN, arg);
     
    348348            return expr;
    349349          }
    350         case OpCodes.CosineIntegral: {
     350        case OpCode.CosineIntegral: {
    351351            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    352352            var isNaN = Expression.Call(IsNaN, arg);
     
    368368            return expr;
    369369          }
    370         case OpCodes.HyperbolicSineIntegral: {
     370        case OpCode.HyperbolicSineIntegral: {
    371371            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    372372            var isNaN = Expression.Call(IsNaN, arg);
     
    388388            return expr;
    389389          }
    390         case OpCodes.HyperbolicCosineIntegral: {
     390        case OpCode.HyperbolicCosineIntegral: {
    391391            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    392392            var isNaN = Expression.Call(IsNaN, arg);
     
    408408            return expr;
    409409          }
    410         case OpCodes.FresnelSineIntegral: {
     410        case OpCode.FresnelSineIntegral: {
    411411            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    412412            var isNaN = Expression.Call(IsNaN, arg);
     
    424424            return expr;
    425425          }
    426         case OpCodes.FresnelCosineIntegral: {
     426        case OpCode.FresnelCosineIntegral: {
    427427            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    428428            var isNaN = Expression.Call(IsNaN, arg);
     
    440440            return expr;
    441441          }
    442         case OpCodes.AiryA: {
     442        case OpCode.AiryA: {
    443443            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    444444            var isNaN = Expression.Call(IsNaN, arg);
     
    458458            return expr;
    459459          }
    460         case OpCodes.AiryB: {
     460        case OpCode.AiryB: {
    461461            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    462462            var isNaN = Expression.Call(IsNaN, arg);
     
    476476            return expr;
    477477          }
    478         case OpCodes.Norm: {
     478        case OpCode.Norm: {
    479479            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    480480            var result = Expression.Variable(typeof(double));
     
    487487              result);
    488488          }
    489         case OpCodes.Erf: {
     489        case OpCode.Erf: {
    490490            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    491491            var isNaN = Expression.Call(IsNaN, arg);
     
    499499              result);
    500500          }
    501         case OpCodes.Bessel: {
     501        case OpCode.Bessel: {
    502502            var arg = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    503503            var isNaN = Expression.Call(IsNaN, arg);
     
    511511              result);
    512512          }
    513         case OpCodes.AnalyticQuotient: {
     513        case OpCode.AnalyticQuotient: {
    514514            var x1 = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    515515            var x2 = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
     
    520520                Expression.Multiply(x2, x2))));
    521521          }
    522         case OpCodes.IfThenElse: {
     522        case OpCode.IfThenElse: {
    523523            var test = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    524524            var result = Expression.Variable(typeof(double));
     
    528528            return Expression.Block(new[] { result }, condition, result);
    529529          }
    530         case OpCodes.AND: {
     530        case OpCode.AND: {
    531531            var result = Expression.Variable(typeof(double));
    532532            var expr = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
     
    553553              );
    554554          }
    555         case OpCodes.OR: {
     555        case OpCode.OR: {
    556556            var result = Expression.Variable(typeof(double));
    557557            var expr = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
     
    578578              );
    579579          }
    580         case OpCodes.NOT: {
     580        case OpCode.NOT: {
    581581            var value = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    582582            var result = Expression.Variable(typeof(double));
     
    586586            return Expression.Block(new[] { result }, condition, result);
    587587          }
    588         case OpCodes.XOR: {
     588        case OpCode.XOR: {
    589589            var ps = Expression.Variable(typeof(int));
    590590            var block = Expression.Block(
     
    617617            return xorExpr;
    618618          }
    619         case OpCodes.GT: {
     619        case OpCode.GT: {
    620620            var left = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    621621            var right = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
     
    629629              result);
    630630          }
    631         case OpCodes.LT: {
     631        case OpCode.LT: {
    632632            var left = MakeExpr(node.GetSubtree(0), variableIndices, row, columns);
    633633            var right = MakeExpr(node.GetSubtree(1), variableIndices, row, columns);
     
    638638            return Expression.Block(new[] { result }, condition, result);
    639639          }
    640         case OpCodes.VariableCondition: {
     640        case OpCode.VariableCondition: {
    641641            var variableConditionTreeNode = (VariableConditionTreeNode)node;
    642642            if (variableConditionTreeNode.Symbol.IgnoreSlope) throw new NotSupportedException("Strict variable conditionals are not supported");
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeBatchInterpreter.cs

    r16722 r16899  
    6464
    6565        switch (instr.opcode) {
    66           case OpCodes.Variable: {
     66          case OpCode.Variable: {
    6767              LoadData(instr, rows, rowIndex, batchSize);
    6868              break;
    6969            }
    70           case OpCodes.TreeModel: {
     70          case OpCode.TreeModel: {
    7171              SubTreeEvoluate(instr, rows, rowIndex, batchSize);
    7272              break;
    7373            }
    7474
    75           case OpCodes.Add: {
     75          case OpCode.Add: {
    7676              Load(instr.buf, code[c].buf);
    7777              for (int j = 1; j < n; ++j) {
     
    8181            }
    8282
    83           case OpCodes.Sub: {
     83          case OpCode.Sub: {
    8484              if (n == 1) {
    8585                Neg(instr.buf, code[c].buf);
     
    9393            }
    9494
    95           case OpCodes.Mul: {
     95          case OpCode.Mul: {
    9696              Load(instr.buf, code[c].buf);
    9797              for (int j = 1; j < n; ++j) {
     
    101101            }
    102102
    103           case OpCodes.Div: {
     103          case OpCode.Div: {
    104104              if (n == 1) {
    105105                Inv(instr.buf, code[c].buf);
     
    113113            }
    114114
    115           case OpCodes.Square: {
     115          case OpCode.Square: {
    116116              Square(instr.buf, code[c].buf);
    117117              break;
    118118            }
    119119
    120           case OpCodes.Root: {
     120          case OpCode.Root: {
    121121              Load(instr.buf, code[c].buf);
    122122              Root(instr.buf, code[c + 1].buf);
     
    124124            }
    125125
    126           case OpCodes.SquareRoot: {
     126          case OpCode.SquareRoot: {
    127127              Sqrt(instr.buf, code[c].buf);
    128128              break;
    129129            }
    130130
    131           case OpCodes.Cube: {
     131          case OpCode.Cube: {
    132132              Cube(instr.buf, code[c].buf);
    133133              break;
    134134            }
    135           case OpCodes.CubeRoot: {
     135          case OpCode.CubeRoot: {
    136136              CubeRoot(instr.buf, code[c].buf);
    137137              break;
    138138            }
    139139
    140           case OpCodes.Power: {
     140          case OpCode.Power: {
    141141              Load(instr.buf, code[c].buf);
    142142              Pow(instr.buf, code[c + 1].buf);
     
    144144            }
    145145
    146           case OpCodes.Exp: {
     146          case OpCode.Exp: {
    147147              Exp(instr.buf, code[c].buf);
    148148              break;
    149149            }
    150150
    151           case OpCodes.Log: {
     151          case OpCode.Log: {
    152152              Log(instr.buf, code[c].buf);
    153153              break;
    154154            }
    155155
    156           case OpCodes.Sin: {
     156          case OpCode.Sin: {
    157157              Sin(instr.buf, code[c].buf);
    158158              break;
    159159            }
    160160
    161           case OpCodes.Cos: {
     161          case OpCode.Cos: {
    162162              Cos(instr.buf, code[c].buf);
    163163              break;
    164164            }
    165165
    166           case OpCodes.Tan: {
     166          case OpCode.Tan: {
    167167              Tan(instr.buf, code[c].buf);
    168168              break;
    169169            }
    170           case OpCodes.Tanh: {
     170          case OpCode.Tanh: {
    171171              Tanh(instr.buf, code[c].buf);
    172172              break;
    173173            }
    174           case OpCodes.Absolute: {
     174          case OpCode.Absolute: {
    175175              Absolute(instr.buf, code[c].buf);
    176176              break;
    177177            }
    178178
    179           case OpCodes.AnalyticQuotient: {
     179          case OpCode.AnalyticQuotient: {
    180180              Load(instr.buf, code[c].buf);
    181181              AnalyticQuotient(instr.buf, code[c + 1].buf);
     
    213213      }
    214214
    215       var code = Compile(tree, dataset, OpCodes.MapSymbolToOpCode, rows);
     215      var code = Compile(tree, dataset, OpCode.MapSymbolToOpCode, rows);
    216216      var remainingRows = rows.Length % BATCHSIZE;
    217217      var roundedTotal = rows.Length - remainingRows;
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs

    r16722 r16899  
    180180
    181181    private InterpreterState PrepareInterpreterState(ISymbolicExpressionTree tree, IDataset dataset) {
    182       Instruction[] code = SymbolicExpressionTreeCompiler.Compile(tree, OpCodes.MapSymbolToOpCode);
     182      Instruction[] code = SymbolicExpressionTreeCompiler.Compile(tree, OpCode.MapSymbolToOpCode);
    183183      Dictionary<string, int> doubleVariableNames = dataset.DoubleVariables.Select((x, i) => new { x, i }).ToDictionary(e => e.x, e => e.i);
    184184      int necessaryArgStackSize = 0;
    185185      foreach (Instruction instr in code) {
    186         if (instr.opCode == OpCodes.Variable) {
     186        if (instr.opCode == OpCode.Variable) {
    187187          var variableTreeNode = (VariableTreeNode)instr.dynamicNode;
    188188          instr.data = doubleVariableNames[variableTreeNode.VariableName];
    189         } else if (instr.opCode == OpCodes.LagVariable) {
     189        } else if (instr.opCode == OpCode.LagVariable) {
    190190          var laggedVariableTreeNode = (LaggedVariableTreeNode)instr.dynamicNode;
    191191          instr.data = doubleVariableNames[laggedVariableTreeNode.VariableName];
    192         } else if (instr.opCode == OpCodes.VariableCondition) {
     192        } else if (instr.opCode == OpCode.VariableCondition) {
    193193          var variableConditionTreeNode = (VariableConditionTreeNode)instr.dynamicNode;
    194194          instr.data = doubleVariableNames[variableConditionTreeNode.VariableName];
    195         } else if (instr.opCode == OpCodes.Call) {
     195        } else if (instr.opCode == OpCode.Call) {
    196196          necessaryArgStackSize += instr.nArguments + 1;
    197197        }
     
    205205
    206206      switch (currentInstr.opCode) {
    207         case OpCodes.Add: {
     207        case OpCode.Add: {
    208208            if (nArgs > 0) {
    209209              CompileInstructions(il, state, ds);
     
    215215            return;
    216216          }
    217         case OpCodes.Sub: {
     217        case OpCode.Sub: {
    218218            if (nArgs == 1) {
    219219              CompileInstructions(il, state, ds);
     
    230230            return;
    231231          }
    232         case OpCodes.Mul: {
     232        case OpCode.Mul: {
    233233            if (nArgs > 0) {
    234234              CompileInstructions(il, state, ds);
     
    240240            return;
    241241          }
    242         case OpCodes.Div: {
     242        case OpCode.Div: {
    243243            if (nArgs == 1) {
    244244              il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 1.0);
     
    256256            return;
    257257          }
    258         case OpCodes.Average: {
     258        case OpCode.Average: {
    259259            CompileInstructions(il, state, ds);
    260260            for (int i = 1; i < nArgs; i++) {
     
    266266            return;
    267267          }
    268         case OpCodes.Absolute: {
     268        case OpCode.Absolute: {
    269269            CompileInstructions(il, state, ds);
    270270            il.Emit(System.Reflection.Emit.OpCodes.Call, abs);
    271271            return;
    272272          }
    273         case OpCodes.Cos: {
     273        case OpCode.Cos: {
    274274            CompileInstructions(il, state, ds);
    275275            il.Emit(System.Reflection.Emit.OpCodes.Call, cos);
    276276            return;
    277277          }
    278         case OpCodes.Sin: {
     278        case OpCode.Sin: {
    279279            CompileInstructions(il, state, ds);
    280280            il.Emit(System.Reflection.Emit.OpCodes.Call, sin);
    281281            return;
    282282          }
    283         case OpCodes.Tan: {
     283        case OpCode.Tan: {
    284284            CompileInstructions(il, state, ds);
    285285            il.Emit(System.Reflection.Emit.OpCodes.Call, tan);
    286286            return;
    287287          }
    288         case OpCodes.Tanh: {
     288        case OpCode.Tanh: {
    289289            CompileInstructions(il, state, ds);
    290290            il.Emit(System.Reflection.Emit.OpCodes.Call, tanh);
    291291            return;
    292292          }
    293         case OpCodes.Power: {
     293        case OpCode.Power: {
    294294            CompileInstructions(il, state, ds);
    295295            CompileInstructions(il, state, ds);
     
    298298            return;
    299299          }
    300         case OpCodes.Root: {
     300        case OpCode.Root: {
    301301            CompileInstructions(il, state, ds);
    302302            il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 1.0); // 1 / round(...)
     
    307307            return;
    308308          }
    309         case OpCodes.Exp: {
     309        case OpCode.Exp: {
    310310            CompileInstructions(il, state, ds);
    311311            il.Emit(System.Reflection.Emit.OpCodes.Call, exp);
    312312            return;
    313313          }
    314         case OpCodes.Log: {
     314        case OpCode.Log: {
    315315            CompileInstructions(il, state, ds);
    316316            il.Emit(System.Reflection.Emit.OpCodes.Call, log);
    317317            return;
    318318          }
    319         case OpCodes.Square: {
     319        case OpCode.Square: {
    320320            CompileInstructions(il, state, ds);
    321321            il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 2.0);
     
    323323            return;
    324324          }
    325         case OpCodes.Cube: {
     325        case OpCode.Cube: {
    326326            CompileInstructions(il, state, ds);
    327327            il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 3.0);
     
    329329            return;
    330330          }
    331         case OpCodes.SquareRoot: {
     331        case OpCode.SquareRoot: {
    332332            CompileInstructions(il, state, ds);
    333333            il.Emit(System.Reflection.Emit.OpCodes.Call, sqrt);
    334334            return;
    335335          }
    336         case OpCodes.CubeRoot: {
     336        case OpCode.CubeRoot: {
    337337            CompileInstructions(il, state, ds);
    338338            il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 1.0 / 3.0);
     
    340340            return;
    341341          }
    342         case OpCodes.AiryA: {
     342        case OpCode.AiryA: {
    343343            CompileInstructions(il, state, ds);
    344344            il.Emit(System.Reflection.Emit.OpCodes.Call, airyA);
    345345            return;
    346346          }
    347         case OpCodes.AiryB: {
     347        case OpCode.AiryB: {
    348348            CompileInstructions(il, state, ds);
    349349            il.Emit(System.Reflection.Emit.OpCodes.Call, airyB);
    350350            return;
    351351          }
    352         case OpCodes.Bessel: {
     352        case OpCode.Bessel: {
    353353            CompileInstructions(il, state, ds);
    354354            il.Emit(System.Reflection.Emit.OpCodes.Call, bessel);
    355355            return;
    356356          }
    357         case OpCodes.CosineIntegral: {
     357        case OpCode.CosineIntegral: {
    358358            CompileInstructions(il, state, ds);
    359359            il.Emit(System.Reflection.Emit.OpCodes.Call, cosIntegral);
    360360            return;
    361361          }
    362         case OpCodes.Dawson: {
     362        case OpCode.Dawson: {
    363363            CompileInstructions(il, state, ds);
    364364            il.Emit(System.Reflection.Emit.OpCodes.Call, dawson);
    365365            return;
    366366          }
    367         case OpCodes.Erf: {
     367        case OpCode.Erf: {
    368368            CompileInstructions(il, state, ds);
    369369            il.Emit(System.Reflection.Emit.OpCodes.Call, erf);
    370370            return;
    371371          }
    372         case OpCodes.ExponentialIntegralEi: {
     372        case OpCode.ExponentialIntegralEi: {
    373373            CompileInstructions(il, state, ds);
    374374            il.Emit(System.Reflection.Emit.OpCodes.Call, expIntegralEi);
    375375            return;
    376376          }
    377         case OpCodes.FresnelCosineIntegral: {
     377        case OpCode.FresnelCosineIntegral: {
    378378            CompileInstructions(il, state, ds);
    379379            il.Emit(System.Reflection.Emit.OpCodes.Call, fresnelCosIntegral);
    380380            return;
    381381          }
    382         case OpCodes.FresnelSineIntegral: {
     382        case OpCode.FresnelSineIntegral: {
    383383            CompileInstructions(il, state, ds);
    384384            il.Emit(System.Reflection.Emit.OpCodes.Call, fresnelSinIntegral);
    385385            return;
    386386          }
    387         case OpCodes.Gamma: {
     387        case OpCode.Gamma: {
    388388            CompileInstructions(il, state, ds);
    389389            il.Emit(System.Reflection.Emit.OpCodes.Call, gamma);
    390390            return;
    391391          }
    392         case OpCodes.HyperbolicCosineIntegral: {
     392        case OpCode.HyperbolicCosineIntegral: {
    393393            CompileInstructions(il, state, ds);
    394394            il.Emit(System.Reflection.Emit.OpCodes.Call, hypCosIntegral);
    395395            return;
    396396          }
    397         case OpCodes.HyperbolicSineIntegral: {
     397        case OpCode.HyperbolicSineIntegral: {
    398398            CompileInstructions(il, state, ds);
    399399            il.Emit(System.Reflection.Emit.OpCodes.Call, hypSinIntegral);
    400400            return;
    401401          }
    402         case OpCodes.Norm: {
     402        case OpCode.Norm: {
    403403            CompileInstructions(il, state, ds);
    404404            il.Emit(System.Reflection.Emit.OpCodes.Call, norm);
    405405            return;
    406406          }
    407         case OpCodes.Psi: {
     407        case OpCode.Psi: {
    408408            CompileInstructions(il, state, ds);
    409409            il.Emit(System.Reflection.Emit.OpCodes.Call, psi);
    410410            return;
    411411          }
    412         case OpCodes.SineIntegral: {
     412        case OpCode.SineIntegral: {
    413413            CompileInstructions(il, state, ds);
    414414            il.Emit(System.Reflection.Emit.OpCodes.Call, sinIntegral);
    415415            return;
    416416          }
    417         case OpCodes.AnalyticQuotient: {
     417        case OpCode.AnalyticQuotient: {
    418418            CompileInstructions(il, state, ds); // x1
    419419            CompileInstructions(il, state, ds); // x2
     
    427427            return;
    428428          }
    429         case OpCodes.IfThenElse: {
     429        case OpCode.IfThenElse: {
    430430            Label end = il.DefineLabel();
    431431            Label c1 = il.DefineLabel();
     
    441441            return;
    442442          }
    443         case OpCodes.AND: {
     443        case OpCode.AND: {
    444444            Label falseBranch = il.DefineLabel();
    445445            Label end = il.DefineLabel();
     
    462462            return;
    463463          }
    464         case OpCodes.OR: {
     464        case OpCode.OR: {
    465465            Label trueBranch = il.DefineLabel();
    466466            Label end = il.DefineLabel();
     
    490490            return;
    491491          }
    492         case OpCodes.NOT: {
     492        case OpCode.NOT: {
    493493            CompileInstructions(il, state, ds);
    494494            il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 0.0); // > 0
     
    502502            return;
    503503          }
    504         case OpCodes.XOR: {
     504        case OpCode.XOR: {
    505505            CompileInstructions(il, state, ds);
    506506            il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 0.0);
     
    521521            return;
    522522          }
    523         case OpCodes.GT: {
     523        case OpCode.GT: {
    524524            CompileInstructions(il, state, ds);
    525525            CompileInstructions(il, state, ds);
     
    533533            return;
    534534          }
    535         case OpCodes.LT: {
     535        case OpCode.LT: {
    536536            CompileInstructions(il, state, ds);
    537537            CompileInstructions(il, state, ds);
     
    544544            return;
    545545          }
    546         case OpCodes.TimeLag: {
     546        case OpCode.TimeLag: {
    547547            LaggedTreeNode laggedTreeNode = (LaggedTreeNode)currentInstr.dynamicNode;
    548548            il.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); // row -= lag
     
    560560            return;
    561561          }
    562         case OpCodes.Integral: {
     562        case OpCode.Integral: {
    563563            int savedPc = state.ProgramCounter;
    564564            LaggedTreeNode laggedTreeNode = (LaggedTreeNode)currentInstr.dynamicNode;
     
    587587        //one sided smooth differentiatior, N = 4
    588588        // y' = 1/8h (f_i + 2f_i-1, -2 f_i-3 - f_i-4)
    589         case OpCodes.Derivative: {
     589        case OpCode.Derivative: {
    590590            int savedPc = state.ProgramCounter;
    591591            CompileInstructions(il, state, ds);
     
    629629            return;
    630630          }
    631         case OpCodes.Call: {
     631        case OpCode.Call: {
    632632            throw new NotSupportedException(
    633633              "Automatically defined functions are not supported by the SymbolicDataAnalysisTreeILEmittingInterpreter. Either turn of ADFs or change the interpeter.");
    634634          }
    635         case OpCodes.Arg: {
     635        case OpCode.Arg: {
    636636            throw new NotSupportedException(
    637637              "Automatically defined functions are not supported by the SymbolicDataAnalysisTreeILEmittingInterpreter. Either turn of ADFs or change the interpeter.");
    638638          }
    639         case OpCodes.Variable: {
     639        case OpCode.Variable: {
    640640            VariableTreeNode varNode = (VariableTreeNode)currentInstr.dynamicNode;
    641641            il.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); // load columns array
     
    669669            return;
    670670          }
    671         case OpCodes.LagVariable: {
     671        case OpCode.LagVariable: {
    672672            var nanResult = il.DefineLabel();
    673673            var normalResult = il.DefineLabel();
     
    697697            return;
    698698          }
    699         case OpCodes.Constant: {
     699        case OpCode.Constant: {
    700700            ConstantTreeNode constNode = (ConstantTreeNode)currentInstr.dynamicNode;
    701701            il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, constNode.Value);
     
    705705        //mkommend: this symbol uses the logistic function f(x) = 1 / (1 + e^(-alpha * x) )
    706706        //to determine the relative amounts of the true and false branch see http://en.wikipedia.org/wiki/Logistic_function
    707         case OpCodes.VariableCondition: {
     707        case OpCode.VariableCondition: {
    708708            throw new NotSupportedException("Interpretation of symbol " + currentInstr.dynamicNode.Symbol.Name +
    709709                                            " is not supported by the SymbolicDataAnalysisTreeILEmittingInterpreter");
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs

    r16722 r16899  
    137137
    138138    private static InterpreterState PrepareInterpreterState(ISymbolicExpressionTree tree, IDataset dataset) {
    139       Instruction[] code = SymbolicExpressionTreeCompiler.Compile(tree, OpCodes.MapSymbolToOpCode);
     139      Instruction[] code = SymbolicExpressionTreeCompiler.Compile(tree, OpCode.MapSymbolToOpCode);
    140140      int necessaryArgStackSize = 0;
    141141      foreach (Instruction instr in code) {
    142         if (instr.opCode == OpCodes.Variable) {
     142        if (instr.opCode == OpCode.Variable) {
    143143          var variableTreeNode = (VariableTreeNode)instr.dynamicNode;
    144144          instr.data = dataset.GetReadOnlyDoubleValues(variableTreeNode.VariableName);
    145         } else if (instr.opCode == OpCodes.FactorVariable) {
     145        } else if (instr.opCode == OpCode.FactorVariable) {
    146146          var factorTreeNode = instr.dynamicNode as FactorVariableTreeNode;
    147147          instr.data = dataset.GetReadOnlyStringValues(factorTreeNode.VariableName);
    148         } else if (instr.opCode == OpCodes.BinaryFactorVariable) {
     148        } else if (instr.opCode == OpCode.BinaryFactorVariable) {
    149149          var factorTreeNode = instr.dynamicNode as BinaryFactorVariableTreeNode;
    150150          instr.data = dataset.GetReadOnlyStringValues(factorTreeNode.VariableName);
    151         } else if (instr.opCode == OpCodes.LagVariable) {
     151        } else if (instr.opCode == OpCode.LagVariable) {
    152152          var laggedVariableTreeNode = (LaggedVariableTreeNode)instr.dynamicNode;
    153153          instr.data = dataset.GetReadOnlyDoubleValues(laggedVariableTreeNode.VariableName);
    154         } else if (instr.opCode == OpCodes.VariableCondition) {
     154        } else if (instr.opCode == OpCode.VariableCondition) {
    155155          var variableConditionTreeNode = (VariableConditionTreeNode)instr.dynamicNode;
    156156          instr.data = dataset.GetReadOnlyDoubleValues(variableConditionTreeNode.VariableName);
    157         } else if (instr.opCode == OpCodes.Call) {
     157        } else if (instr.opCode == OpCode.Call) {
    158158          necessaryArgStackSize += instr.nArguments + 1;
    159159        }
     
    165165      Instruction currentInstr = state.NextInstruction();
    166166      switch (currentInstr.opCode) {
    167         case OpCodes.Add: {
     167        case OpCode.Add: {
    168168            double s = Evaluate(dataset, ref row, state);
    169169            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    172172            return s;
    173173          }
    174         case OpCodes.Sub: {
     174        case OpCode.Sub: {
    175175            double s = Evaluate(dataset, ref row, state);
    176176            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    180180            return s;
    181181          }
    182         case OpCodes.Mul: {
     182        case OpCode.Mul: {
    183183            double p = Evaluate(dataset, ref row, state);
    184184            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    187187            return p;
    188188          }
    189         case OpCodes.Div: {
     189        case OpCode.Div: {
    190190            double p = Evaluate(dataset, ref row, state);
    191191            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    195195            return p;
    196196          }
    197         case OpCodes.Average: {
     197        case OpCode.Average: {
    198198            double sum = Evaluate(dataset, ref row, state);
    199199            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    202202            return sum / currentInstr.nArguments;
    203203          }
    204         case OpCodes.Absolute: {
     204        case OpCode.Absolute: {
    205205            return Math.Abs(Evaluate(dataset, ref row, state));
    206206          }
    207         case OpCodes.Tanh: {
     207        case OpCode.Tanh: {
    208208            return Math.Tanh(Evaluate(dataset, ref row, state));
    209209          }
    210         case OpCodes.Cos: {
     210        case OpCode.Cos: {
    211211            return Math.Cos(Evaluate(dataset, ref row, state));
    212212          }
    213         case OpCodes.Sin: {
     213        case OpCode.Sin: {
    214214            return Math.Sin(Evaluate(dataset, ref row, state));
    215215          }
    216         case OpCodes.Tan: {
     216        case OpCode.Tan: {
    217217            return Math.Tan(Evaluate(dataset, ref row, state));
    218218          }
    219         case OpCodes.Square: {
     219        case OpCode.Square: {
    220220            return Math.Pow(Evaluate(dataset, ref row, state), 2);
    221221          }
    222         case OpCodes.Cube: {
     222        case OpCode.Cube: {
    223223            return Math.Pow(Evaluate(dataset, ref row, state), 3);
    224224          }
    225         case OpCodes.Power: {
     225        case OpCode.Power: {
    226226            double x = Evaluate(dataset, ref row, state);
    227227            double y = Math.Round(Evaluate(dataset, ref row, state));
    228228            return Math.Pow(x, y);
    229229          }
    230         case OpCodes.SquareRoot: {
     230        case OpCode.SquareRoot: {
    231231            return Math.Sqrt(Evaluate(dataset, ref row, state));
    232232          }
    233         case OpCodes.CubeRoot: {
     233        case OpCode.CubeRoot: {
    234234            return Math.Pow(Evaluate(dataset, ref row, state), 1.0 / 3.0);
    235235          }
    236         case OpCodes.Root: {
     236        case OpCode.Root: {
    237237            double x = Evaluate(dataset, ref row, state);
    238238            double y = Math.Round(Evaluate(dataset, ref row, state));
    239239            return Math.Pow(x, 1 / y);
    240240          }
    241         case OpCodes.Exp: {
     241        case OpCode.Exp: {
    242242            return Math.Exp(Evaluate(dataset, ref row, state));
    243243          }
    244         case OpCodes.Log: {
     244        case OpCode.Log: {
    245245            return Math.Log(Evaluate(dataset, ref row, state));
    246246          }
    247         case OpCodes.Gamma: {
     247        case OpCode.Gamma: {
    248248            var x = Evaluate(dataset, ref row, state);
    249249            if (double.IsNaN(x)) { return double.NaN; } else { return alglib.gammafunction(x); }
    250250          }
    251         case OpCodes.Psi: {
     251        case OpCode.Psi: {
    252252            var x = Evaluate(dataset, ref row, state);
    253253            if (double.IsNaN(x)) return double.NaN;
     
    255255            return alglib.psi(x);
    256256          }
    257         case OpCodes.Dawson: {
     257        case OpCode.Dawson: {
    258258            var x = Evaluate(dataset, ref row, state);
    259259            if (double.IsNaN(x)) { return double.NaN; }
    260260            return alglib.dawsonintegral(x);
    261261          }
    262         case OpCodes.ExponentialIntegralEi: {
     262        case OpCode.ExponentialIntegralEi: {
    263263            var x = Evaluate(dataset, ref row, state);
    264264            if (double.IsNaN(x)) { return double.NaN; }
    265265            return alglib.exponentialintegralei(x);
    266266          }
    267         case OpCodes.SineIntegral: {
     267        case OpCode.SineIntegral: {
    268268            double si, ci;
    269269            var x = Evaluate(dataset, ref row, state);
     
    274274            }
    275275          }
    276         case OpCodes.CosineIntegral: {
     276        case OpCode.CosineIntegral: {
    277277            double si, ci;
    278278            var x = Evaluate(dataset, ref row, state);
     
    283283            }
    284284          }
    285         case OpCodes.HyperbolicSineIntegral: {
     285        case OpCode.HyperbolicSineIntegral: {
    286286            double shi, chi;
    287287            var x = Evaluate(dataset, ref row, state);
     
    292292            }
    293293          }
    294         case OpCodes.HyperbolicCosineIntegral: {
     294        case OpCode.HyperbolicCosineIntegral: {
    295295            double shi, chi;
    296296            var x = Evaluate(dataset, ref row, state);
     
    301301            }
    302302          }
    303         case OpCodes.FresnelCosineIntegral: {
     303        case OpCode.FresnelCosineIntegral: {
    304304            double c = 0, s = 0;
    305305            var x = Evaluate(dataset, ref row, state);
     
    310310            }
    311311          }
    312         case OpCodes.FresnelSineIntegral: {
     312        case OpCode.FresnelSineIntegral: {
    313313            double c = 0, s = 0;
    314314            var x = Evaluate(dataset, ref row, state);
     
    319319            }
    320320          }
    321         case OpCodes.AiryA: {
     321        case OpCode.AiryA: {
    322322            double ai, aip, bi, bip;
    323323            var x = Evaluate(dataset, ref row, state);
     
    328328            }
    329329          }
    330         case OpCodes.AiryB: {
     330        case OpCode.AiryB: {
    331331            double ai, aip, bi, bip;
    332332            var x = Evaluate(dataset, ref row, state);
     
    337337            }
    338338          }
    339         case OpCodes.Norm: {
     339        case OpCode.Norm: {
    340340            var x = Evaluate(dataset, ref row, state);
    341341            if (double.IsNaN(x)) return double.NaN;
    342342            else return alglib.normaldistribution(x);
    343343          }
    344         case OpCodes.Erf: {
     344        case OpCode.Erf: {
    345345            var x = Evaluate(dataset, ref row, state);
    346346            if (double.IsNaN(x)) return double.NaN;
    347347            else return alglib.errorfunction(x);
    348348          }
    349         case OpCodes.Bessel: {
     349        case OpCode.Bessel: {
    350350            var x = Evaluate(dataset, ref row, state);
    351351            if (double.IsNaN(x)) return double.NaN;
     
    353353          }
    354354
    355         case OpCodes.AnalyticQuotient: {
     355        case OpCode.AnalyticQuotient: {
    356356            var x1 = Evaluate(dataset, ref row, state);
    357357            var x2 = Evaluate(dataset, ref row, state);
    358358            return x1 / Math.Pow(1 + x2 * x2, 0.5);
    359359          }
    360         case OpCodes.IfThenElse: {
     360        case OpCode.IfThenElse: {
    361361            double condition = Evaluate(dataset, ref row, state);
    362362            double result;
     
    368368            return result;
    369369          }
    370         case OpCodes.AND: {
     370        case OpCode.AND: {
    371371            double result = Evaluate(dataset, ref row, state);
    372372            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    378378            return result > 0.0 ? 1.0 : -1.0;
    379379          }
    380         case OpCodes.OR: {
     380        case OpCode.OR: {
    381381            double result = Evaluate(dataset, ref row, state);
    382382            for (int i = 1; i < currentInstr.nArguments; i++) {
     
    388388            return result > 0.0 ? 1.0 : -1.0;
    389389          }
    390         case OpCodes.NOT: {
     390        case OpCode.NOT: {
    391391            return Evaluate(dataset, ref row, state) > 0.0 ? -1.0 : 1.0;
    392392          }
    393         case OpCodes.XOR: {
     393        case OpCode.XOR: {
    394394            //mkommend: XOR on multiple inputs is defined as true if the number of positive signals is odd
    395395            // this is equal to a consecutive execution of binary XOR operations.
     
    400400            return positiveSignals % 2 != 0 ? 1.0 : -1.0;
    401401          }
    402         case OpCodes.GT: {
     402        case OpCode.GT: {
    403403            double x = Evaluate(dataset, ref row, state);
    404404            double y = Evaluate(dataset, ref row, state);
    405405            if (x > y) { return 1.0; } else { return -1.0; }
    406406          }
    407         case OpCodes.LT: {
     407        case OpCode.LT: {
    408408            double x = Evaluate(dataset, ref row, state);
    409409            double y = Evaluate(dataset, ref row, state);
    410410            if (x < y) { return 1.0; } else { return -1.0; }
    411411          }
    412         case OpCodes.TimeLag: {
     412        case OpCode.TimeLag: {
    413413            var timeLagTreeNode = (LaggedTreeNode)currentInstr.dynamicNode;
    414414            row += timeLagTreeNode.Lag;
     
    417417            return result;
    418418          }
    419         case OpCodes.Integral: {
     419        case OpCode.Integral: {
    420420            int savedPc = state.ProgramCounter;
    421421            var timeLagTreeNode = (LaggedTreeNode)currentInstr.dynamicNode;
     
    435435        //one sided smooth differentiatior, N = 4
    436436        // y' = 1/8h (f_i + 2f_i-1, -2 f_i-3 - f_i-4)
    437         case OpCodes.Derivative: {
     437        case OpCode.Derivative: {
    438438            int savedPc = state.ProgramCounter;
    439439            double f_0 = Evaluate(dataset, ref row, state); row--;
     
    448448            return (f_0 + 2 * f_1 - 2 * f_3 - f_4) / 8; // h = 1
    449449          }
    450         case OpCodes.Call: {
     450        case OpCode.Call: {
    451451            // evaluate sub-trees
    452452            double[] argValues = new double[currentInstr.nArguments];
     
    471471            return v;
    472472          }
    473         case OpCodes.Arg: {
     473        case OpCode.Arg: {
    474474            return state.GetStackFrameValue((ushort)currentInstr.data);
    475475          }
    476         case OpCodes.Variable: {
     476        case OpCode.Variable: {
    477477            if (row < 0 || row >= dataset.Rows) return double.NaN;
    478478            var variableTreeNode = (VariableTreeNode)currentInstr.dynamicNode;
    479479            return ((IList<double>)currentInstr.data)[row] * variableTreeNode.Weight;
    480480          }
    481         case OpCodes.BinaryFactorVariable: {
     481        case OpCode.BinaryFactorVariable: {
    482482            if (row < 0 || row >= dataset.Rows) return double.NaN;
    483483            var factorVarTreeNode = currentInstr.dynamicNode as BinaryFactorVariableTreeNode;
    484484            return ((IList<string>)currentInstr.data)[row] == factorVarTreeNode.VariableValue ? factorVarTreeNode.Weight : 0;
    485485          }
    486         case OpCodes.FactorVariable: {
     486        case OpCode.FactorVariable: {
    487487            if (row < 0 || row >= dataset.Rows) return double.NaN;
    488488            var factorVarTreeNode = currentInstr.dynamicNode as FactorVariableTreeNode;
    489489            return factorVarTreeNode.GetValue(((IList<string>)currentInstr.data)[row]);
    490490          }
    491         case OpCodes.LagVariable: {
     491        case OpCode.LagVariable: {
    492492            var laggedVariableTreeNode = (LaggedVariableTreeNode)currentInstr.dynamicNode;
    493493            int actualRow = row + laggedVariableTreeNode.Lag;
     
    495495            return ((IList<double>)currentInstr.data)[actualRow] * laggedVariableTreeNode.Weight;
    496496          }
    497         case OpCodes.Constant: {
     497        case OpCode.Constant: {
    498498            var constTreeNode = (ConstantTreeNode)currentInstr.dynamicNode;
    499499            return constTreeNode.Value;
     
    502502        //mkommend: this symbol uses the logistic function f(x) = 1 / (1 + e^(-alpha * x) )
    503503        //to determine the relative amounts of the true and false branch see http://en.wikipedia.org/wiki/Logistic_function
    504         case OpCodes.VariableCondition: {
     504        case OpCode.VariableCondition: {
    505505            if (row < 0 || row >= dataset.Rows) return double.NaN;
    506506            var variableConditionTreeNode = (VariableConditionTreeNode)currentInstr.dynamicNode;
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeLinearInterpreter.cs

    r16722 r16899  
    133133      }
    134134
    135       var code = SymbolicExpressionTreeLinearCompiler.Compile(tree, OpCodes.MapSymbolToOpCode);
     135      var code = SymbolicExpressionTreeLinearCompiler.Compile(tree, OpCode.MapSymbolToOpCode);
    136136      PrepareInstructions(code, dataset);
    137137      return rows.Select(row => Evaluate(dataset, row, code));
     
    143143        #region opcode if
    144144        var instr = code[i];
    145         if (instr.opCode == OpCodes.Variable) {
     145        if (instr.opCode == OpCode.Variable) {
    146146          if (row < 0 || row >= dataset.Rows) instr.value = double.NaN;
    147147          else {
     
    149149            instr.value = ((IList<double>)instr.data)[row] * variableTreeNode.Weight;
    150150          }
    151         } else if (instr.opCode == OpCodes.BinaryFactorVariable) {
     151        } else if (instr.opCode == OpCode.BinaryFactorVariable) {
    152152          if (row < 0 || row >= dataset.Rows) instr.value = double.NaN;
    153153          else {
     
    155155            instr.value = ((IList<string>)instr.data)[row] == factorTreeNode.VariableValue ? factorTreeNode.Weight : 0;
    156156          }
    157         } else if (instr.opCode == OpCodes.FactorVariable) {
     157        } else if (instr.opCode == OpCode.FactorVariable) {
    158158          if (row < 0 || row >= dataset.Rows) instr.value = double.NaN;
    159159          else {
     
    161161            instr.value = factorTreeNode.GetValue(((IList<string>)instr.data)[row]);
    162162          }
    163         } else if (instr.opCode == OpCodes.LagVariable) {
     163        } else if (instr.opCode == OpCode.LagVariable) {
    164164          var laggedVariableTreeNode = (LaggedVariableTreeNode)instr.dynamicNode;
    165165          int actualRow = row + laggedVariableTreeNode.Lag;
     
    168168          else
    169169            instr.value = ((IList<double>)instr.data)[actualRow] * laggedVariableTreeNode.Weight;
    170         } else if (instr.opCode == OpCodes.VariableCondition) {
     170        } else if (instr.opCode == OpCode.VariableCondition) {
    171171          if (row < 0 || row >= dataset.Rows) instr.value = double.NaN;
    172172          var variableConditionTreeNode = (VariableConditionTreeNode)instr.dynamicNode;
     
    188188            }
    189189          }
    190         } else if (instr.opCode == OpCodes.Add) {
     190        } else if (instr.opCode == OpCode.Add) {
    191191          double s = code[instr.childIndex].value;
    192192          for (int j = 1; j != instr.nArguments; ++j) {
     
    194194          }
    195195          instr.value = s;
    196         } else if (instr.opCode == OpCodes.Sub) {
     196        } else if (instr.opCode == OpCode.Sub) {
    197197          double s = code[instr.childIndex].value;
    198198          for (int j = 1; j != instr.nArguments; ++j) {
     
    201201          if (instr.nArguments == 1) s = -s;
    202202          instr.value = s;
    203         } else if (instr.opCode == OpCodes.Mul) {
     203        } else if (instr.opCode == OpCode.Mul) {
    204204          double p = code[instr.childIndex].value;
    205205          for (int j = 1; j != instr.nArguments; ++j) {
     
    207207          }
    208208          instr.value = p;
    209         } else if (instr.opCode == OpCodes.Div) {
     209        } else if (instr.opCode == OpCode.Div) {
    210210          double p = code[instr.childIndex].value;
    211211          for (int j = 1; j != instr.nArguments; ++j) {
     
    214214          if (instr.nArguments == 1) p = 1.0 / p;
    215215          instr.value = p;
    216         } else if (instr.opCode == OpCodes.AnalyticQuotient) {
     216        } else if (instr.opCode == OpCode.AnalyticQuotient) {
    217217          var x1 = code[instr.childIndex].value;
    218218          var x2 = code[instr.childIndex + 1].value;
    219219          instr.value = x1 / Math.Sqrt(1 + x2 * x2);
    220         } else if (instr.opCode == OpCodes.Average) {
     220        } else if (instr.opCode == OpCode.Average) {
    221221          double s = code[instr.childIndex].value;
    222222          for (int j = 1; j != instr.nArguments; ++j) {
     
    224224          }
    225225          instr.value = s / instr.nArguments;
    226         } else if (instr.opCode == OpCodes.Absolute) {
     226        } else if (instr.opCode == OpCode.Absolute) {
    227227          instr.value = Math.Abs(code[instr.childIndex].value);
    228         } else if (instr.opCode == OpCodes.Tanh) {
     228        } else if (instr.opCode == OpCode.Tanh) {
    229229          instr.value = Math.Tanh(code[instr.childIndex].value);
    230         } else if (instr.opCode == OpCodes.Cos) {
     230        } else if (instr.opCode == OpCode.Cos) {
    231231          instr.value = Math.Cos(code[instr.childIndex].value);
    232         } else if (instr.opCode == OpCodes.Sin) {
     232        } else if (instr.opCode == OpCode.Sin) {
    233233          instr.value = Math.Sin(code[instr.childIndex].value);
    234         } else if (instr.opCode == OpCodes.Tan) {
     234        } else if (instr.opCode == OpCode.Tan) {
    235235          instr.value = Math.Tan(code[instr.childIndex].value);
    236         } else if (instr.opCode == OpCodes.Square) {
     236        } else if (instr.opCode == OpCode.Square) {
    237237          instr.value = Math.Pow(code[instr.childIndex].value, 2);
    238         } else if (instr.opCode == OpCodes.Cube) {
     238        } else if (instr.opCode == OpCode.Cube) {
    239239          instr.value = Math.Pow(code[instr.childIndex].value, 3);
    240         } else if (instr.opCode == OpCodes.Power) {
     240        } else if (instr.opCode == OpCode.Power) {
    241241          double x = code[instr.childIndex].value;
    242242          double y = Math.Round(code[instr.childIndex + 1].value);
    243243          instr.value = Math.Pow(x, y);
    244         } else if (instr.opCode == OpCodes.SquareRoot) {
     244        } else if (instr.opCode == OpCode.SquareRoot) {
    245245          instr.value = Math.Sqrt(code[instr.childIndex].value);
    246         } else if (instr.opCode == OpCodes.CubeRoot) {
     246        } else if (instr.opCode == OpCode.CubeRoot) {
    247247          instr.value = Math.Pow(code[instr.childIndex].value, 1.0 / 3.0);
    248         } else if (instr.opCode == OpCodes.Root) {
     248        } else if (instr.opCode == OpCode.Root) {
    249249          double x = code[instr.childIndex].value;
    250250          double y = Math.Round(code[instr.childIndex + 1].value);
    251251          instr.value = Math.Pow(x, 1 / y);
    252         } else if (instr.opCode == OpCodes.Exp) {
     252        } else if (instr.opCode == OpCode.Exp) {
    253253          instr.value = Math.Exp(code[instr.childIndex].value);
    254         } else if (instr.opCode == OpCodes.Log) {
     254        } else if (instr.opCode == OpCode.Log) {
    255255          instr.value = Math.Log(code[instr.childIndex].value);
    256         } else if (instr.opCode == OpCodes.Gamma) {
     256        } else if (instr.opCode == OpCode.Gamma) {
    257257          var x = code[instr.childIndex].value;
    258258          instr.value = double.IsNaN(x) ? double.NaN : alglib.gammafunction(x);
    259         } else if (instr.opCode == OpCodes.Psi) {
     259        } else if (instr.opCode == OpCode.Psi) {
    260260          var x = code[instr.childIndex].value;
    261261          if (double.IsNaN(x)) instr.value = double.NaN;
    262262          else if (x <= 0 && (Math.Floor(x) - x).IsAlmost(0)) instr.value = double.NaN;
    263263          else instr.value = alglib.psi(x);
    264         } else if (instr.opCode == OpCodes.Dawson) {
     264        } else if (instr.opCode == OpCode.Dawson) {
    265265          var x = code[instr.childIndex].value;
    266266          instr.value = double.IsNaN(x) ? double.NaN : alglib.dawsonintegral(x);
    267         } else if (instr.opCode == OpCodes.ExponentialIntegralEi) {
     267        } else if (instr.opCode == OpCode.ExponentialIntegralEi) {
    268268          var x = code[instr.childIndex].value;
    269269          instr.value = double.IsNaN(x) ? double.NaN : alglib.exponentialintegralei(x);
    270         } else if (instr.opCode == OpCodes.SineIntegral) {
     270        } else if (instr.opCode == OpCode.SineIntegral) {
    271271          double si, ci;
    272272          var x = code[instr.childIndex].value;
     
    276276            instr.value = si;
    277277          }
    278         } else if (instr.opCode == OpCodes.CosineIntegral) {
     278        } else if (instr.opCode == OpCode.CosineIntegral) {
    279279          double si, ci;
    280280          var x = code[instr.childIndex].value;
     
    284284            instr.value = ci;
    285285          }
    286         } else if (instr.opCode == OpCodes.HyperbolicSineIntegral) {
     286        } else if (instr.opCode == OpCode.HyperbolicSineIntegral) {
    287287          double shi, chi;
    288288          var x = code[instr.childIndex].value;
     
    292292            instr.value = shi;
    293293          }
    294         } else if (instr.opCode == OpCodes.HyperbolicCosineIntegral) {
     294        } else if (instr.opCode == OpCode.HyperbolicCosineIntegral) {
    295295          double shi, chi;
    296296          var x = code[instr.childIndex].value;
     
    300300            instr.value = chi;
    301301          }
    302         } else if (instr.opCode == OpCodes.FresnelCosineIntegral) {
     302        } else if (instr.opCode == OpCode.FresnelCosineIntegral) {
    303303          double c = 0, s = 0;
    304304          var x = code[instr.childIndex].value;
     
    308308            instr.value = c;
    309309          }
    310         } else if (instr.opCode == OpCodes.FresnelSineIntegral) {
     310        } else if (instr.opCode == OpCode.FresnelSineIntegral) {
    311311          double c = 0, s = 0;
    312312          var x = code[instr.childIndex].value;
     
    316316            instr.value = s;
    317317          }
    318         } else if (instr.opCode == OpCodes.AiryA) {
     318        } else if (instr.opCode == OpCode.AiryA) {
    319319          double ai, aip, bi, bip;
    320320          var x = code[instr.childIndex].value;
     
    324324            instr.value = ai;
    325325          }
    326         } else if (instr.opCode == OpCodes.AiryB) {
     326        } else if (instr.opCode == OpCode.AiryB) {
    327327          double ai, aip, bi, bip;
    328328          var x = code[instr.childIndex].value;
     
    332332            instr.value = bi;
    333333          }
    334         } else if (instr.opCode == OpCodes.Norm) {
     334        } else if (instr.opCode == OpCode.Norm) {
    335335          var x = code[instr.childIndex].value;
    336336          if (double.IsNaN(x)) instr.value = double.NaN;
    337337          else instr.value = alglib.normaldistribution(x);
    338         } else if (instr.opCode == OpCodes.Erf) {
     338        } else if (instr.opCode == OpCode.Erf) {
    339339          var x = code[instr.childIndex].value;
    340340          if (double.IsNaN(x)) instr.value = double.NaN;
    341341          else instr.value = alglib.errorfunction(x);
    342         } else if (instr.opCode == OpCodes.Bessel) {
     342        } else if (instr.opCode == OpCode.Bessel) {
    343343          var x = code[instr.childIndex].value;
    344344          if (double.IsNaN(x)) instr.value = double.NaN;
    345345          else instr.value = alglib.besseli0(x);
    346         } else if (instr.opCode == OpCodes.IfThenElse) {
     346        } else if (instr.opCode == OpCode.IfThenElse) {
    347347          double condition = code[instr.childIndex].value;
    348348          double result;
     
    353353          }
    354354          instr.value = result;
    355         } else if (instr.opCode == OpCodes.AND) {
     355        } else if (instr.opCode == OpCode.AND) {
    356356          double result = code[instr.childIndex].value;
    357357          for (int j = 1; j < instr.nArguments; j++) {
     
    360360          }
    361361          instr.value = result > 0.0 ? 1.0 : -1.0;
    362         } else if (instr.opCode == OpCodes.OR) {
     362        } else if (instr.opCode == OpCode.OR) {
    363363          double result = code[instr.childIndex].value;
    364364          for (int j = 1; j < instr.nArguments; j++) {
     
    367367          }
    368368          instr.value = result > 0.0 ? 1.0 : -1.0;
    369         } else if (instr.opCode == OpCodes.NOT) {
     369        } else if (instr.opCode == OpCode.NOT) {
    370370          instr.value = code[instr.childIndex].value > 0.0 ? -1.0 : 1.0;
    371         } else if (instr.opCode == OpCodes.XOR) {
     371        } else if (instr.opCode == OpCode.XOR) {
    372372          int positiveSignals = 0;
    373373          for (int j = 0; j < instr.nArguments; j++) {
     
    375375          }
    376376          instr.value = positiveSignals % 2 != 0 ? 1.0 : -1.0;
    377         } else if (instr.opCode == OpCodes.GT) {
     377        } else if (instr.opCode == OpCode.GT) {
    378378          double x = code[instr.childIndex].value;
    379379          double y = code[instr.childIndex + 1].value;
    380380          instr.value = x > y ? 1.0 : -1.0;
    381         } else if (instr.opCode == OpCodes.LT) {
     381        } else if (instr.opCode == OpCode.LT) {
    382382          double x = code[instr.childIndex].value;
    383383          double y = code[instr.childIndex + 1].value;
    384384          instr.value = x < y ? 1.0 : -1.0;
    385         } else if (instr.opCode == OpCodes.TimeLag || instr.opCode == OpCodes.Derivative || instr.opCode == OpCodes.Integral) {
     385        } else if (instr.opCode == OpCode.TimeLag || instr.opCode == OpCode.Derivative || instr.opCode == OpCode.Integral) {
    386386          var state = (InterpreterState)instr.data;
    387387          state.Reset();
     
    415415        #region opcode switch
    416416        switch (instr.opCode) {
    417           case OpCodes.Constant: {
     417          case OpCode.Constant: {
    418418              var constTreeNode = (ConstantTreeNode)instr.dynamicNode;
    419419              instr.value = constTreeNode.Value;
     
    421421            }
    422422            break;
    423           case OpCodes.Variable: {
     423          case OpCode.Variable: {
    424424              var variableTreeNode = (VariableTreeNode)instr.dynamicNode;
    425425              instr.data = dataset.GetReadOnlyDoubleValues(variableTreeNode.VariableName);
    426426            }
    427427            break;
    428           case OpCodes.BinaryFactorVariable: {
     428          case OpCode.BinaryFactorVariable: {
    429429              var factorVariableTreeNode = instr.dynamicNode as BinaryFactorVariableTreeNode;
    430430              instr.data = dataset.GetReadOnlyStringValues(factorVariableTreeNode.VariableName);
    431431            }
    432432            break;
    433           case OpCodes.FactorVariable: {
     433          case OpCode.FactorVariable: {
    434434              var factorVariableTreeNode = instr.dynamicNode as FactorVariableTreeNode;
    435435              instr.data = dataset.GetReadOnlyStringValues(factorVariableTreeNode.VariableName);
    436436            }
    437437            break;
    438           case OpCodes.LagVariable: {
     438          case OpCode.LagVariable: {
    439439              var laggedVariableTreeNode = (LaggedVariableTreeNode)instr.dynamicNode;
    440440              instr.data = dataset.GetReadOnlyDoubleValues(laggedVariableTreeNode.VariableName);
    441441            }
    442442            break;
    443           case OpCodes.VariableCondition: {
     443          case OpCode.VariableCondition: {
    444444              var variableConditionTreeNode = (VariableConditionTreeNode)instr.dynamicNode;
    445445              instr.data = dataset.GetReadOnlyDoubleValues(variableConditionTreeNode.VariableName);
    446446            }
    447447            break;
    448           case OpCodes.TimeLag:
    449           case OpCodes.Integral:
    450           case OpCodes.Derivative: {
     448          case OpCode.TimeLag:
     449          case OpCode.Integral:
     450          case OpCode.Derivative: {
    451451              var seq = GetPrefixSequence(code, i);
    452452              var interpreterState = new InterpreterState(seq, 0);
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeNativeInterpreter.cs

    r16565 r16899  
    2020#endregion
    2121
    22 using System;
    23 using System.Collections.Generic;
    24 using System.Linq;
    25 using System.Runtime.InteropServices;
     22using HEAL.Attic;
    2623using HeuristicLab.Common;
    2724using HeuristicLab.Core;
     
    2926using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    3027using HeuristicLab.Parameters;
    31 using HEAL.Attic;
     28using System;
     29using System.Collections.Generic;
     30using System.Linq;
     31using System.Runtime.InteropServices;
    3232
    3333namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
     
    101101    private IDataset dataset;
    102102
     103    private static readonly HashSet<byte> supportedOpCodes = new HashSet<byte>() {
     104      (byte)OpCode.Constant,
     105      (byte)OpCode.Variable,
     106      (byte)OpCode.Add,
     107      (byte)OpCode.Sub,
     108      (byte)OpCode.Mul,
     109      (byte)OpCode.Div,
     110      (byte)OpCode.Exp,
     111      (byte)OpCode.Log,
     112      (byte)OpCode.Sin,
     113      (byte)OpCode.Cos,
     114      (byte)OpCode.Tan,
     115      (byte)OpCode.Tanh,
     116      (byte)OpCode.Power,
     117      (byte)OpCode.Root,
     118      (byte)OpCode.SquareRoot,
     119      (byte)OpCode.Square,
     120      (byte)OpCode.CubeRoot,
     121      (byte)OpCode.Cube,
     122      (byte)OpCode.Absolute,
     123      (byte)OpCode.AnalyticQuotient
     124    };
     125
    103126    public IEnumerable<double> GetSymbolicExpressionTreeValues(ISymbolicExpressionTree tree, IDataset dataset, IEnumerable<int> rows) {
    104127      if (!rows.Any()) return Enumerable.Empty<double>();
     
    108131      }
    109132
    110       var code = Compile(tree, OpCodes.MapSymbolToOpCode);
     133      byte mapSupportedSymbols(ISymbolicExpressionTreeNode node) {
     134        var opCode = OpCode.MapSymbolToOpCode(node);
     135        if (supportedOpCodes.Contains(opCode)) return opCode;
     136        else throw new NotSupportedException($"The native interpreter does not support {node.Symbol.Name}");
     137      };
     138      var code = Compile(tree, mapSupportedSymbols);
    111139
    112140      var rowsArray = rows.ToArray();
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Selectors/DiversitySelector.cs

    r16722 r16899  
    100100    #region Events
    101101    private void RegisterParameterEventHandlers() {
    102       SelectorParameter.ValueChanged += new EventHandler(SelectorParameter_ValueChanged);
    103       CopySelected.ValueChanged += new EventHandler(CopySelected_ValueChanged);
     102      SelectorParameter.ValueChanged += SelectorParameter_ValueChanged;
     103      CopySelectedParameter.ValueChanged += CopySelectedParameter_ValueChanged;
     104      CopySelected.ValueChanged += CopySelected_ValueChanged;
     105    }
     106
     107    private void CopySelectedParameter_ValueChanged(object sender, EventArgs e) {
     108      if (CopySelected.Value != true) {
     109        CopySelected.Value = true;
     110      }
     111      CopySelected.ValueChanged += CopySelected_ValueChanged;
    104112    }
    105113
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisModelComplexityCalculator.cs

    r16565 r16899  
    3535      if (node.Symbol is StartSymbol) node = node.GetSubtree(0);
    3636
    37       switch (OpCodes.MapSymbolToOpCode(node)) {
    38         case OpCodes.Constant: {
     37      switch (OpCode.MapSymbolToOpCode(node)) {
     38        case OpCode.Constant: {
    3939            return 1;
    4040          }
    41         case OpCodes.Variable:
    42         case OpCodes.BinaryFactorVariable:
    43         case OpCodes.FactorVariable: {
     41        case OpCode.Variable:
     42        case OpCode.BinaryFactorVariable:
     43        case OpCode.FactorVariable: {
    4444            return 2;
    4545          }
    46         case OpCodes.Add:
    47         case OpCodes.Sub: {
     46        case OpCode.Add:
     47        case OpCode.Sub: {
    4848            double complexity = 0;
    4949            for (int i = 0; i < node.SubtreeCount; i++) {
     
    5252            return complexity;
    5353          }
    54         case OpCodes.Mul:
    55         case OpCodes.Div: {
     54        case OpCode.Mul:
     55        case OpCode.Div: {
    5656            double complexity = 1;
    5757            for (int i = 0; i < node.SubtreeCount; i++) {
     
    6161            return complexity;
    6262          }
    63         case OpCodes.Sin:
    64         case OpCodes.Cos:
    65         case OpCodes.Tan:
    66         case OpCodes.Exp:
    67         case OpCodes.Log: {
     63        case OpCode.Sin:
     64        case OpCode.Cos:
     65        case OpCode.Tan:
     66        case OpCode.Exp:
     67        case OpCode.Log: {
    6868            double complexity = CalculateComplexity(node.GetSubtree(0));
    6969            return Math.Pow(2.0, complexity);
    7070          }
    71         case OpCodes.Square: {
     71        case OpCode.Square: {
    7272            double complexity = CalculateComplexity(node.GetSubtree(0));
    7373            return complexity * complexity;
    7474          }
    75         case OpCodes.SquareRoot: {
     75        case OpCode.SquareRoot: {
    7676            double complexity = CalculateComplexity(node.GetSubtree(0));
    7777            return complexity * complexity * complexity;
    7878          }
    79         case OpCodes.Power:
    80         case OpCodes.Root: {
     79        case OpCode.Power:
     80        case OpCode.Root: {
    8181            double complexity = CalculateComplexity(node.GetSubtree(0));
    8282            var exponent = node.GetSubtree(1) as ConstantTreeNode;
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/ModelTreeNode.cs

    r16734 r16899  
    5757    private TreeModelTreeNode(TreeModelTreeNode original, Cloner cloner)
    5858      : base(original, cloner) {
    59       tree = original.tree;
     59      tree = (ISymbolicExpressionTree)original.tree.Clone(cloner);
    6060      ClusterNumer = original.ClusterNumer;
    6161      TreeNumber = original.TreeNumber;
Note: See TracChangeset for help on using the changeset viewer.