Changeset 15960
- Timestamp:
- 06/15/18 14:53:46 (6 years ago)
- Location:
- branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs
r15930 r15960 4 4 using System.Linq; 5 5 using HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.GrammarEnumeration; 6 using HeuristicLab.Common; 6 7 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 8 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 7 9 using HeuristicLab.Problems.DataAnalysis; 8 10 using HeuristicLab.Problems.DataAnalysis.Symbolic; … … 18 20 } 19 21 20 public class Grammar { 22 [StorableClass(StorableClassType.AllFieldsAndAllProperties)] 23 public class Grammar : DeepCloneable { 21 24 22 25 public Symbol StartSymbol { get; } … … 74 77 75 78 public Grammar(string[] variables) : this(variables, Enum.GetValues(typeof(GrammarRule)).Cast<GrammarRule>()) { } 79 80 protected Grammar(Grammar original, Cloner cloner) : base(original, cloner) { 81 VarTerminals = original.VarTerminals.Select(cloner.Clone).ToArray(); 82 StartSymbol = cloner.Clone(original.StartSymbol); 83 Hasher = cloner.Clone(original.Hasher); // how to handle circular reference grammar <-> hasher? (the cloner *should* handle it) 84 Productions = original.Productions.ToDictionary(x => cloner.Clone(x.Key), x => (IReadOnlyList<Production>)x.Value.Select(cloner.Clone).ToList()); 85 Var = cloner.Clone(original.Var); 86 VarTerminals = original.VarTerminals.Select(cloner.Clone).ToList(); 87 Expr = cloner.Clone(original.Expr); 88 Term = cloner.Clone(original.Term); 89 Factor = cloner.Clone(original.Factor); 90 LogFactor = cloner.Clone(original.LogFactor); 91 ExpFactor = cloner.Clone(original.ExpFactor); 92 SinFactor = cloner.Clone(original.SinFactor); 93 SimpleExpr = cloner.Clone(original.SimpleExpr); 94 SimpleTerm = cloner.Clone(original.SimpleTerm); 95 InvExpr = cloner.Clone(original.InvExpr); 96 InvTerm = cloner.Clone(original.InvTerm); 97 Addition = cloner.Clone(original.Addition); 98 Multiplication = cloner.Clone(original.Multiplication); 99 Log = cloner.Clone(original.Log); 100 Exp = cloner.Clone(original.Exp); 101 Sin = cloner.Clone(original.Sin); 102 Sin = cloner.Clone(original.Sin); 103 Inv = cloner.Clone(original.Inv); 104 Const = cloner.Clone(original.Const); 105 106 107 constSy = cloner.Clone(original.constSy); 108 varSy = cloner.Clone(original.varSy); 109 addSy = cloner.Clone(original.addSy); 110 mulSy = cloner.Clone(original.mulSy); 111 logSy = cloner.Clone(original.logSy); 112 expSy = cloner.Clone(original.expSy); 113 divSy = cloner.Clone(original.divSy); 114 sinSy = cloner.Clone(original.sinSy); 115 116 rootSy = cloner.Clone(original.rootSy); 117 startSy = cloner.Clone(original.startSy); 118 119 infixExpressionFormatter = cloner.Clone(original.infixExpressionFormatter); 120 } 76 121 77 122 public Grammar(string[] variables, IEnumerable<GrammarRule> includedRules) { … … 291 336 } 292 337 #endregion 338 339 #region abstract DeepCloneable methods 340 public override IDeepCloneable Clone(Cloner cloner) { 341 return new Grammar(this, cloner); 342 } 343 #endregion 293 344 } 294 345 } -
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/GrammarEnumerationAlgorithm.cs
r15957 r15960 37 37 private readonly string GrammarSymbolsParameterName = "Grammar Symbols"; 38 38 39 public override bool SupportsPause { get { return false; } }39 public override bool SupportsPause { get { return true; } } 40 40 41 41 protected IValueParameter<DoubleValue> VariableImportanceWeightParameter { … … 107 107 #endregion 108 108 109 [Storable] 109 110 public Dictionary<int, int> DistinctSentencesComplexity { get; private set; } // Semantically distinct sentences and their length in a run. 111 112 [Storable] 110 113 public HashSet<int> ArchivedPhrases { get; private set; } 114 115 [Storable] 111 116 internal SearchDataStore OpenPhrases { get; private set; } // Stack/Queue/etc. for fetching the next node in the search tree. 112 117 … … 121 126 122 127 public Grammar Grammar { get; private set; } 123 124 128 125 129 #region ctors … … 174 178 analyzer.Register(this); 175 179 Analyzers.CheckedItemsChanged += Analyzers_CheckedItemsChanged; 180 181 DistinctSentencesComplexity = new Dictionary<int, int>(original.DistinctSentencesComplexity); 182 ArchivedPhrases = new HashSet<int>(original.ArchivedPhrases); 183 OpenPhrases = cloner.Clone(original.OpenPhrases); 184 185 AllGeneratedSentencesCount = original.AllGeneratedSentencesCount; 186 OverwrittenSentencesCount = original.OverwrittenSentencesCount; 187 PhraseExpansionCount = original.PhraseExpansionCount; 188 Grammar = cloner.Clone(original.Grammar); 189 190 if (original.variableImportance != null) 191 variableImportance = new Dictionary<VariableTerminalSymbol, double>(original.variableImportance); 176 192 } 177 193 #endregion … … 193 209 } 194 210 195 protected override void Run(CancellationToken cancellationToken) { 196 InitResults(); 197 var phrase0 = new SymbolString(new[] { Grammar.StartSymbol }); 198 var phrase0Hash = Grammar.Hasher.CalcHashCode(phrase0); 199 200 #region Variable Importance 211 private Dictionary<VariableTerminalSymbol, double> CalculateVariableImportances() { 201 212 variableImportance = new Dictionary<VariableTerminalSymbol, double>(); 202 213 … … 216 227 variableImportance[varSym] = rfImpact.Item2 / sum; 217 228 } 218 #endregion 229 return variableImportance; 230 } 231 232 protected override void Run(CancellationToken cancellationToken) { 233 // do not reinitialize the algorithm if we're resuming from pause 234 if (previousExecutionState != ExecutionState.Paused) { 235 CalculateVariableImportances(); 236 InitResults(); 237 var phrase0 = new SymbolString(new[] { Grammar.StartSymbol }); 238 var phrase0Hash = Grammar.Hasher.CalcHashCode(phrase0); 239 OpenPhrases.Store(new SearchNode(phrase0Hash, 0.0, 0.0, phrase0)); 240 } 219 241 220 242 int maxSentenceLength = GetMaxSentenceLength(); 221 222 OpenPhrases.Store(new SearchNode(phrase0Hash, 0.0, 0.0, phrase0));223 224 243 var errorWeight = ErrorWeight; 225 244 var variableImportanceWeight = VariableImportanceWeight; 226 245 // main search loop 227 246 while (OpenPhrases.Count > 0) { 228 if (cancellationToken.IsCancellationRequested) break; 247 if (cancellationToken.IsCancellationRequested) 248 break; 229 249 230 250 SearchNode fetchedSearchNode = OpenPhrases.GetNext(); … … 343 363 return p.Count(s => s is NonterminalSymbol); 344 364 } 365 366 #region pause support 367 private ExecutionState previousExecutionState; 368 protected override void OnPaused() { 369 previousExecutionState = this.ExecutionState; 370 base.OnPaused(); 371 } 372 protected override void OnPrepared() { 373 previousExecutionState = this.ExecutionState; 374 base.OnPrepared(); 375 } 376 protected override void OnStarted() { 377 previousExecutionState = this.ExecutionState; 378 base.OnStarted(); 379 } 380 protected override void OnStopped() { 381 previousExecutionState = this.ExecutionState; 382 base.OnStopped(); 383 } 384 #endregion 345 385 346 386 #region Visualization in HL -
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/SearchDataStructure.cs
r15915 r15960 2 2 using System.Collections; 3 3 using System.Collections.Generic; 4 using System.Linq; 5 using HeuristicLab.Common; 6 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 4 7 5 8 namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.GrammarEnumeration { 6 7 public class SearchNode { 9 [StorableClass] 10 public class SearchNode : DeepCloneable { 11 [Storable] 8 12 public readonly int Hash; 13 [Storable] 9 14 public readonly SymbolString SymbolString; 15 [Storable] 10 16 public readonly double Priority; 17 [Storable] 11 18 public readonly double R2; 19 20 private SearchNode() { } 12 21 13 22 public SearchNode(int hash, double priority, double r2, SymbolString symbolString) { … … 17 26 R2 = r2; 18 27 } 28 29 protected SearchNode(SearchNode original, Cloner cloner) : base(original, cloner) { 30 Hash = original.Hash; 31 Priority = original.Priority; 32 SymbolString = original.SymbolString; 33 R2 = original.R2; 34 } 35 36 [StorableConstructor] 37 protected SearchNode(bool deserializing) { } 38 39 public override IDeepCloneable Clone(Cloner cloner) { 40 return new SearchNode(this, cloner); 41 } 19 42 } 20 43 … … 23 46 } 24 47 25 class SearchDataStore : IEnumerable<SearchNode> { 26 48 [StorableClass] 49 class SearchDataStore : DeepCloneable, IEnumerable<SearchNode> { 50 [Storable] 27 51 private Dictionary<int, SearchNode> storedValues; // Store hash-references and associated, actual values 52 [Storable] 53 private StorageType storageType; 54 55 // private storage 56 [Storable] 57 private Queue<int> queue; 58 59 [Storable] 60 private Stack<int> stack; 61 62 [Storable] 63 private List<int> list; 64 65 [ExcludeFromObjectGraphTraversal] 66 PriorityQueue<double, int> priorityQueue; // does not support [Storable], we rebuild it from the storedValues 67 28 68 private Action<int, double> storeInternal; // Store hash-references 29 69 private Func<int> fetchInternal; // Fetch hash-reference 30 70 71 public SearchDataStore() : this(StorageType.PriorityQueue) { } 72 73 [StorableConstructor] 74 protected SearchDataStore(bool deserializing) : this() { } 75 31 76 public SearchDataStore(StorageType storageType) { 77 this.storageType = storageType; 32 78 storedValues = new Dictionary<int, SearchNode>(); 33 79 InitStorage(); 80 } 81 82 private void InitStorage() { 34 83 switch (storageType) { 35 84 case StorageType.PriorityQueue: … … 46 95 break; 47 96 } 48 49 } 50 97 } 98 99 public override IDeepCloneable Clone(Cloner cloner) { 100 return new SearchDataStore(this, cloner); 101 } 102 103 protected SearchDataStore(SearchDataStore original, Cloner cloner) : base(original, cloner) { 104 storedValues = original.storedValues.ToDictionary(x => x.Key, x => cloner.Clone(x.Value)); 105 storageType = original.storageType; 106 InitStorage(); 107 switch (storageType) { 108 case StorageType.PriorityQueue: 109 foreach (var t in storedValues) 110 storeInternal(t.Key, t.Value.Priority); 111 break; 112 case StorageType.Stack: 113 foreach (var v in original.stack.Reverse()) { 114 stack.Push(v); 115 } 116 break; 117 case StorageType.Queue: 118 foreach (var v in original.queue) { 119 queue.Enqueue(v); 120 } 121 break; 122 case StorageType.RandomList: 123 list.AddRange(original.list); 124 break; 125 } 126 } 127 128 [StorableHook(HookType.AfterDeserialization)] 129 private void AfterDeserialization() { 130 // access lambdas need to be reinitialized 131 switch (storageType) { 132 case StorageType.PriorityQueue: 133 InitPriorityQueue(); 134 foreach (var t in storedValues) 135 storeInternal(t.Key, t.Value.Priority); 136 break; 137 case StorageType.Stack: 138 storeInternal = (hash, prio) => stack.Push(hash); 139 fetchInternal = () => stack.Pop(); 140 break; 141 case StorageType.Queue: 142 storeInternal = (hash, prio) => queue.Enqueue(hash); 143 fetchInternal = () => queue.Dequeue(); 144 break; 145 case StorageType.RandomList: 146 System.Random rand = new System.Random(999); 147 storeInternal = (hash, prio) => list.Add(hash); 148 fetchInternal = () => { 149 int indexOfHash = rand.Next(list.Count); 150 int result = list[indexOfHash]; 151 list.RemoveAt(indexOfHash); // TODO: beware this is O(n), at some point in time we should fix this. Maybe change to priority queue with random key. 152 return result; 153 }; 154 break; 155 } 156 } 51 157 #region SearchStrategies 52 158 53 159 private void InitPriorityQueue() { 54 160 int capacity = 10000000; 55 PriorityQueue<double, int> queue = new PriorityQueue<double, int>(double.MaxValue, double.MinValue, capacity);56 storeInternal = (hash, prio) => queue.Insert(prio, hash);161 priorityQueue = new PriorityQueue<double, int>(double.MaxValue, double.MinValue, capacity); 162 storeInternal = (hash, prio) => priorityQueue.Insert(prio, hash); 57 163 fetchInternal = () => { 58 int ret = queue.PeekMinValue();59 queue.RemoveMin();164 int ret = priorityQueue.PeekMinValue(); 165 priorityQueue.RemoveMin(); 60 166 return ret; 61 167 }; … … 63 169 64 170 private void InitStack() { 65 Stack<int>stack = new Stack<int>();171 stack = new Stack<int>(); 66 172 67 173 storeInternal = (hash, prio) => stack.Push(hash); … … 70 176 71 177 private void InitQueue() { 72 Queue<int>queue = new Queue<int>();178 queue = new Queue<int>(); 73 179 74 180 storeInternal = (hash, prio) => queue.Enqueue(hash); … … 77 183 78 184 private void InitRandomList() { 79 List<int>list = new List<int>();185 list = new List<int>(); 80 186 System.Random rand = new System.Random(999); 81 187 -
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Sentence.cs
r15827 r15960 4 4 using System.Diagnostics; 5 5 using System.Linq; 6 using HeuristicLab.Common; 7 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 6 8 7 9 namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.GrammarEnumeration { 8 public class SymbolString : IEnumerable<Symbol> { 10 [StorableClass] 11 public class SymbolString : DeepCloneable, IEnumerable<Symbol> { 12 [Storable] 9 13 private readonly Symbol[] symbols; 10 14 … … 19 23 public SymbolString(params Symbol[] s) { 20 24 symbols = s; 25 } 26 27 protected SymbolString(SymbolString original, Cloner cloner) : base(original, cloner) { 28 symbols = original.symbols.ToArray(); 29 } 30 31 public override IDeepCloneable Clone(Cloner cloner) { 32 return new SymbolString(this, cloner); 21 33 } 22 34 -
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Symbol.cs
r15834 r15960 1 1 using System; 2 2 using System.Collections.Generic; 3 using HeuristicLab.Common; 4 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 3 5 4 6 namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration { 5 6 public abstract class Symbol : IEquatable<Symbol> { 7 [StorableClass] 8 public abstract class Symbol : DeepCloneable, IEquatable<Symbol> { 9 [Storable] 7 10 private readonly int stringRepresentationHash; 8 11 12 [Storable] 9 13 public string StringRepresentation { get; } 10 14 … … 12 16 StringRepresentation = representation; 13 17 stringRepresentationHash = representation.GetHashCode(); 18 } 19 20 protected Symbol(Symbol original, Cloner cloner) : base(original, cloner) { 21 StringRepresentation = original.StringRepresentation; 22 stringRepresentationHash = original.stringRepresentationHash; 14 23 } 15 24 … … 49 58 } 50 59 60 [StorableClass] 51 61 public class TerminalSymbol : Symbol { 62 public TerminalSymbol(string representation) : base(representation) { } 63 public TerminalSymbol(TerminalSymbol original, Cloner cloner) : base(original, cloner) { } 52 64 53 public TerminalSymbol(string representation) : base(representation) { } 65 public override IDeepCloneable Clone(Cloner cloner) { 66 return new TerminalSymbol(this, cloner); 67 } 54 68 } 55 69 70 [StorableClass] 56 71 public class VariableTerminalSymbol : TerminalSymbol { 57 72 public VariableTerminalSymbol(string representation) : base(representation) { } 73 public VariableTerminalSymbol(VariableTerminalSymbol original, Cloner cloner) : base(original, cloner) { } 74 75 public override IDeepCloneable Clone(Cloner cloner) { 76 return new VariableTerminalSymbol(this, cloner); 77 } 58 78 } 59 79 60 80 [StorableClass] 61 81 public class NonterminalSymbol : Symbol { 62 82 public NonterminalSymbol(string representation) : base(representation) { } 83 public NonterminalSymbol(NonterminalSymbol original, Cloner cloner) : base(original, cloner) { } 84 85 public override IDeepCloneable Clone(Cloner cloner) { 86 return new NonterminalSymbol(this, cloner); 87 } 63 88 } 64 89 65 public class Production : List<Symbol> { 90 [StorableClass] 91 public class Production : List<Symbol>, IDeepCloneable { 66 92 67 93 public Production(params Symbol[] symbols) : base(symbols) { } 68 94 69 95 public Production(IEnumerable<Symbol> symbols) : base(symbols) { } 96 97 protected Production(Production original, Cloner cloner) : this(original) { 98 cloner.RegisterClonedObject(original, this); 99 } 100 101 public IDeepCloneable Clone(Cloner cloner) { 102 return new Production(this, cloner); 103 } 104 105 public object Clone() { 106 return Clone(new Cloner()); 107 } 70 108 71 109 public override string ToString() { -
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/Hashing/Hasher.cs
r15851 r15960 3 3 using System.Diagnostics; 4 4 using System.Linq; 5 using HeuristicLab.Common; 6 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 5 7 6 8 namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.GrammarEnumeration { 7 public abstract class Hasher<THashType> { 9 [StorableClass] 10 public abstract class Hasher<THashType> : DeepCloneable { 8 11 protected Hasher(Grammar grammar) { 9 12 Grammar = grammar; 13 } 14 15 protected Hasher(Hasher<THashType> original, Cloner cloner) : base(original, cloner) { 16 Grammar = cloner.Clone(original.Grammar); 10 17 } 11 18 … … 22 29 return AggregateHashes(peek, GetSubtreeHashes(parseStack)).GetHashCode(); 23 30 } 31 32 [StorableConstructor] 33 protected Hasher(bool deserializing) { } 24 34 25 35 private THashType[] GetSubtreeHashes(Stack<Symbol> parseStack) { … … 109 119 .ToArray(); 110 120 } 111 112 113 121 } 114 122 123 [StorableClass] 115 124 public class IntHasher : Hasher<int> { 116 125 public IntHasher(Grammar grammar) : base(grammar) { } 126 127 public IntHasher(IntHasher original, Cloner cloner) : base(original, cloner) { } 128 129 public override IDeepCloneable Clone(Cloner cloner) { 130 return new IntHasher(this, cloner); 131 } 132 133 [StorableConstructor] 134 protected IntHasher(bool deserializing) : base(deserializing) { } 117 135 118 136 protected override int AggregateHashes(Symbol operatorSym, int[] hashes) { … … 135 153 } 136 154 155 [StorableClass] 137 156 public class StringHasher : Hasher<string> { 138 157 public StringHasher(Grammar grammar) : base(grammar) { } 158 159 public StringHasher(StringHasher original, Cloner cloner) : base(original, cloner) { } 160 161 public override IDeepCloneable Clone(Cloner cloner) { 162 return new StringHasher(this, cloner); 163 } 164 165 [StorableConstructor] 166 protected StringHasher(bool deserializing) : base(deserializing) { } 139 167 140 168 protected override string AggregateHashes(Symbol operatorSym, string[] hashes) { -
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.csproj
r15928 r15960 9 9 <AppDesignerFolder>Properties</AppDesignerFolder> 10 10 <RootNamespace>HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration</RootNamespace> 11 <AssemblyName>HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration </AssemblyName>11 <AssemblyName>HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration-3.4</AssemblyName> 12 12 <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> 13 13 <FileAlignment>512</FileAlignment> … … 29 29 <ErrorReport>prompt</ErrorReport> 30 30 <WarningLevel>4</WarningLevel> 31 </PropertyGroup> 32 <PropertyGroup> 33 <SignAssembly>true</SignAssembly> 34 </PropertyGroup> 35 <PropertyGroup> 36 <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile> 31 37 </PropertyGroup> 32 38 <ItemGroup> … … 130 136 </ItemGroup> 131 137 <ItemGroup> 138 <None Include="HeuristicLab.snk" /> 132 139 <None Include="Plugin.cs.frame" /> 133 140 </ItemGroup> -
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/Plugin.cs.frame
r15823 r15960 23 23 24 24 namespace HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration { 25 [Plugin("HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration", "", "3.4.0.$WCREV$")] 26 [PluginFile("HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.dll", PluginFileType.Assembly)] 27 [PluginDependency("HeuristicLab.ALGLIB", "3.7")] 25 /// <summary> 26 /// Plugin class for the Grammar Enumeration Symbolc Regression algorithm. 27 /// </summary> 28 [Plugin("HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration", "3.4.0.$WCREV$")] 29 [PluginFile("HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration-3.4.dll", PluginFileType.Assembly)] 28 30 [PluginDependency("HeuristicLab.Algorithms.DataAnalysis", "3.4")] 29 [PluginDependency("HeuristicLab.Analysis", "3.3")]30 31 [PluginDependency("HeuristicLab.Collections", "3.3")] 31 32 [PluginDependency("HeuristicLab.Common", "3.3")] … … 33 34 [PluginDependency("HeuristicLab.Data", "3.3")] 34 35 [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.4")] 35 [PluginDependency("HeuristicLab.Operators", "3.3")]36 36 [PluginDependency("HeuristicLab.Optimization", "3.3")] 37 37 [PluginDependency("HeuristicLab.Parameters", "3.3")] … … 41 41 [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression", "3.4")] 42 42 [PluginDependency("HeuristicLab.Problems.Instances", "3.3")] 43 [PluginDependency("HeuristicLab.Problems.Instances.DataAnalysis", "3.3")] 43 44 [PluginDependency("HeuristicLab.Random", "3.3")] 44 45 -
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/Properties/AssemblyInfo.cs
r15712 r15960 33 33 // by using the '*' as shown below: 34 34 // [assembly: AssemblyVersion("1.0.*")] 35 [assembly: AssemblyVersion(" 1.0.0.0")]35 [assembly: AssemblyVersion("3.4.0.0")] 36 36 [assembly: AssemblyFileVersion("1.0.0.0")]
Note: See TracChangeset
for help on using the changeset viewer.