#region License Information /* HeuristicLab * Copyright (C) 2002-2012 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; using System.Collections.Generic; using System.Linq; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Encodings.ConditionActionEncoding; using HeuristicLab.Parameters; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.Encodings.VariableVector { [Item("VariableVectorCoveringCreator", "Description missing")] [StorableClass] public class VariableVectorCoveringCreator : CoveringSolutionCreator, IVariableVectorCoveringCreator { public IValueLookupParameter SampleVariableVectorParameter { get { return (IValueLookupParameter)Parameters["SampleVariableVector"]; } } [StorableConstructor] protected VariableVectorCoveringCreator(bool deserializing) : base(deserializing) { } protected VariableVectorCoveringCreator(VariableVectorCoveringCreator original, Cloner cloner) : base(original, cloner) { } public VariableVectorCoveringCreator() : base() { Parameters.Add(new ValueLookupParameter("SampleVariableVector")); } public override IDeepCloneable Clone(Cloner cloner) { return new VariableVectorCoveringCreator(this, cloner); } protected override IClassifier CreateCoveredClassifier(IInput input, IAction action, IRandom random, double changeSymbolProbability) { var inputCast = input as VariableVectorInput; var actionCast = action as VariableVectorAction; VariableVectorCondition sampleVariableVectorCondition = SampleVariableVectorParameter.ActualValue.Condition; IEnumerable newCondition = CoverInput(inputCast, sampleVariableVectorCondition, random, changeSymbolProbability); return new VariableVector(newCondition, actionCast.Values); } private IEnumerable CoverInput(VariableVectorInput input, VariableVectorCondition sample, IRandom random, double changeSymbolProbability) { var conditionVariables = new List(); if (!sample.Keys.All(x => input.ContainsKey(x))) { throw new ArgumentException("Input does not contain all variable names from sample"); } foreach (var keyValuePair in sample) { IVariable variable = keyValuePair.Value.GetEmptyCopy(); variable.Cover(random, input[keyValuePair.Key], changeSymbolProbability); conditionVariables.Add(variable); } return conditionVariables; } } }