Free cookie consent management tool by TermsFeed Policy Generator

source: stable/HeuristicLab.Problems.Programmable/3.3/Templates/CompiledSingleObjectiveProblemDefinition.cs @ 18016

Last change on this file since 18016 was 17105, checked in by mkommend, 5 years ago

#2520: Merged 16584, 16585,16594,16595, 16625, 16658, 16659, 16672, 16707, 16729, 16792, 16796, 16797, 16799, 16819, 16906, 16907, 16908, 16933, 16945, 16992, 16994, 16995, 16996, 16997, 17014, 17015, 17017, 17020, 17021, 17022, 17023, 17024, 17029, 17086, 17087, 17088, 17089 into stable.

File size: 4.1 KB
Line 
1using System;
2using System.Linq;
3using System.Collections.Generic;
4using HeuristicLab.Common;
5using HeuristicLab.Core;
6using HeuristicLab.Data;
7using HeuristicLab.Encodings.BinaryVectorEncoding;
8using HeuristicLab.Encodings.IntegerVectorEncoding;
9using HeuristicLab.Encodings.RealVectorEncoding;
10using HeuristicLab.Encodings.PermutationEncoding;
11using HeuristicLab.Encodings.LinearLinkageEncoding;
12using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
13using HeuristicLab.Optimization;
14using HeuristicLab.Problems.Programmable;
15
16namespace HeuristicLab.Problems.Programmable {
17  public class CompiledSingleObjectiveProblemDefinition : CompiledProblemDefinition, ISingleObjectiveProblemDefinition {
18    public bool Maximization { get { return false; } }
19
20    public override void Initialize() {
21      // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
22      // Define the solution encoding which can also consist of multiple vectors, examples below
23      //Encoding = new BinaryVectorEncoding("b", length: 5);
24      //Encoding = new IntegerVectorEncoding("i", length: 5, min: 2, max: 14, step: 2);
25      //Encoding = new RealVectorEncoding("r", length: 5, min: -1.0, max: 1.0);
26      //Encoding = new PermutationEncoding("p", length: 5, type: PermutationTypes.Absolute);
27      //Encoding = new LinearLinkageEncoding("l", length: 5);
28      //Encoding = new SymbolicExpressionTreeEncoding("s", new SimpleSymbolicExpressionGrammar(), 50, 12);
29      // The encoding can also be a combination
30      //Encoding = new MultiEncoding()
31      //.Add(new BinaryVectorEncoding("b", length: 5))
32      //.Add(new IntegerVectorEncoding("i", length: 5, min: 2, max: 14, step: 4))
33      //.Add(new RealVectorEncoding("r", length: 5, min: -1.0, max: 1.0))
34      //.Add(new PermutationEncoding("p", length: 5, type: PermutationTypes.Absolute))
35      //.Add(new LinearLinkageEncoding("l", length: 5))
36      //.Add(new SymbolicExpressionTreeEncoding("s", new SimpleSymbolicExpressionGrammar(), 50, 12))
37      ;
38      // Add additional initialization code e.g. private variables that you need for evaluating
39    }
40
41    public double Evaluate(Individual individual, IRandom random) {
42      // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
43      var quality = 0.0;
44      //quality = individual.RealVector("r").Sum(x => x * x);
45      return quality;
46    }
47
48    public void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
49      // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
50      // Write or update results given the range of vectors and resulting qualities
51      // Uncomment the following lines if you want to retrieve the best individual
52
53      //var orderedIndividuals = individuals.Zip(qualities, (i, q) => new { Individual = i, Quality = q }).OrderBy(z => z.Quality);
54      //var best = Maximization ? orderedIndividuals.Last().Individual : orderedIndividuals.First().Individual;
55
56      //if (!results.ContainsKey("Best Solution")) {
57      //  results.Add(new Result("Best Solution", typeof(RealVector)));
58      //}
59      //results["Best Solution"].Value = (IItem)best.RealVector("r").Clone();
60    }
61
62    public IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
63      // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
64      // Create new vectors, based on the given one that represent small changes
65      // This method is only called from move-based algorithms (Local Search, Simulated Annealing, etc.)
66      while (true) {
67        // Algorithm will draw only a finite amount of samples
68        // Change to a for-loop to return a concrete amount of neighbors
69        var neighbor = individual.Copy();
70        // For instance, perform a single bit-flip in a binary parameter
71        //var bIndex = random.Next(neighbor.BinaryVector("b").Length);
72        //neighbor.BinaryVector("b")[bIndex] = !neighbor.BinaryVector("b")[bIndex];
73        yield return neighbor;
74      }
75    }
76
77    // Implement further classes and methods
78  }
79}
80
Note: See TracBrowser for help on using the repository browser.