#region License Information /* HeuristicLab * Copyright (C) 2002-2017 Heuristic and Evolutionary Algorithms Laboratory (HEAL) * * This file is part of HeuristicLab. * * HeuristicLab is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HeuristicLab is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HeuristicLab. If not, see . */ #endregion using System.Linq; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Encodings.PermutationEncoding; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.Analysis.FitnessLandscape { [Item("QAP Path-Relinking Problem Instance Analyzer", "")] [StorableClass] public sealed class QAPPRProblemInstanceAnalyzer : PrProblemInstanceAnalyzer { [StorableConstructor] private QAPPRProblemInstanceAnalyzer(bool deserializing) : base(deserializing) { } private QAPPRProblemInstanceAnalyzer(QAPPRProblemInstanceAnalyzer original, Cloner cloner) : base(original, cloner) { } public QAPPRProblemInstanceAnalyzer() { } public override IDeepCloneable Clone(Cloner cloner) { return new QAPPRProblemInstanceAnalyzer(this, cloner); } protected override DoubleArray GetCharacteristics() { var paths = PathsParameter.ActualValue; if (paths == null || paths.IsEmpty) return null; var trajectories = paths.Paths.ToList(); var length = trajectories[0].First().Item1.Length; trajectories = paths.Paths.Where(x => x.Count > 0.75 * length).ToList(); if (trajectories.Count == 0) return null; var characteristics = QAPDirectedWalk.Calculate(trajectories).Select(x => x.Value).ToList(); var result = new DoubleArray(characteristics.Count); for (var i = 0; i < characteristics.Count; i++) { var dv = characteristics[i] as DoubleValue; if (dv != null) result[i] = dv.Value; else { var iv = characteristics[i] as IntValue; if (iv != null) result[i] = iv.Value; } } return result; } } }