1  #region License Information


2  /* HeuristicLab


3  * Copyright (C) 20022013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)


4  *


5  * This file is part of HeuristicLab.


6  *


7  * HeuristicLab is free software: you can redistribute it and/or modify


8  * it under the terms of the GNU General Public License as published by


9  * the Free Software Foundation, either version 3 of the License, or


10  * (at your option) any later version.


11  *


12  * HeuristicLab is distributed in the hope that it will be useful,


13  * but WITHOUT ANY WARRANTY; without even the implied warranty of


14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the


15  * GNU General Public License for more details.


16  *


17  * You should have received a copy of the GNU General Public License


18  * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.


19  */


20  #endregion


21 


22  using System.Collections.Generic;


23  using System.Linq;


24 


25  namespace HeuristicLab.Analysis.AlgorithmBehavior.Analyzers {


26  public static class ConvexHullMeasures {


27  //TODO: Calculates only the volumne of a dsimplex


28  public static double CalculateVolume(List<double[]> hyperHull) {


29  double[,] diffs = new double[hyperHull.Count, hyperHull.Count];


30 


31  for (int i = 0; i < hyperHull.Count; i++) {


32  for (int j = 0; j < hyperHull.Count; j++) {


33  diffs[i, j] = CalculateVectorDiff(hyperHull[i], hyperHull[j]);


34  }


35  }


36 


37  double det = alglib.rmatrixdet(diffs);


38  double result = det / hyperHull[0].Count().Fact();


39 


40  return result;


41  }


42 


43  private static double CalculateVectorDiff(double[] vector1, double[] vector2) {


44  double result = 0.0;


45 


46  for (int i = 0; i < vector1.Length; i++) {


47  result += vector1[i]  vector2[i];


48  }


49 


50  return result;


51  }


52  }


53  }

