Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/23/15 18:38:37 (8 years ago)
Author:
mkommend
Message:

#2521: refactored programmable problem

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs

    r13336 r13345  
    3333namespace HeuristicLab.Problems.Programmable {
    3434  [Item("Programmable Problem (single-objective)", "Represents a single-objective problem that can be programmed with a script.")]
    35   [Creatable(CreatableAttribute.Categories.Problems, Priority = 100)]
    3635  [StorableClass]
    37   public sealed class SingleObjectiveProgrammableProblem : SingleObjectiveProblem<IEncoding>, IProgrammableItem {
     36  public class SingleObjectiveProgrammableProblem<TEncoding, TSolution> : SingleObjectiveProblem<TEncoding, TSolution>, IProgrammableItem, IProgrammableProblem
     37    where TEncoding : class, IEncoding<TSolution>
     38    where TSolution : class, ISolution {
    3839    public static new Image StaticItemImage {
    3940      get { return VSImageLibrary.Script; }
    4041    }
    4142
    42     private FixedValueParameter<SingleObjectiveProblemDefinitionScript> SingleObjectiveProblemScriptParameter {
    43       get { return (FixedValueParameter<SingleObjectiveProblemDefinitionScript>)Parameters["ProblemScript"]; }
     43    private FixedValueParameter<SingleObjectiveProblemDefinitionScript<TEncoding, TSolution>> SingleObjectiveProblemScriptParameter {
     44      get { return (FixedValueParameter<SingleObjectiveProblemDefinitionScript<TEncoding, TSolution>>)Parameters["ProblemScript"]; }
    4445    }
    4546
    46     public SingleObjectiveProblemDefinitionScript ProblemScript {
     47    public SingleObjectiveProblemDefinitionScript<TEncoding, TSolution> ProblemScript {
    4748      get { return SingleObjectiveProblemScriptParameter.Value; }
    4849    }
    4950
    50     public ISingleObjectiveProblemDefinition ProblemDefinition {
     51    public ISingleObjectiveProblemDefinition<TEncoding, TSolution> ProblemDefinition {
    5152      get { return SingleObjectiveProblemScriptParameter.Value; }
    5253    }
    5354
    54     private SingleObjectiveProgrammableProblem(SingleObjectiveProgrammableProblem original, Cloner cloner)
     55    protected SingleObjectiveProgrammableProblem(SingleObjectiveProgrammableProblem<TEncoding, TSolution> original, Cloner cloner)
    5556      : base(original, cloner) {
    5657      RegisterEvents();
    5758    }
    58     public override IDeepCloneable Clone(Cloner cloner) { return new SingleObjectiveProgrammableProblem(this, cloner); }
     59    public override IDeepCloneable Clone(Cloner cloner) { return new SingleObjectiveProgrammableProblem<TEncoding, TSolution>(this, cloner); }
    5960
    6061    [StorableConstructor]
    61     private SingleObjectiveProgrammableProblem(bool deserializing) : base(deserializing) { }
    62     public SingleObjectiveProgrammableProblem()
     62    protected SingleObjectiveProgrammableProblem(bool deserializing) : base(deserializing) { }
     63    public SingleObjectiveProgrammableProblem(string codeTemplate)
    6364      : base() {
    64       Parameters.Add(new FixedValueParameter<SingleObjectiveProblemDefinitionScript>("ProblemScript", "Defines the problem.", new SingleObjectiveProblemDefinitionScript() { Name = Name }));
     65      Parameters.Add(new FixedValueParameter<SingleObjectiveProblemDefinitionScript<TEncoding, TSolution>>("ProblemScript", "Defines the problem.", new SingleObjectiveProblemDefinitionScript<TEncoding, TSolution>(codeTemplate) { Name = Name, Encoding = Encoding }));
    6566      Operators.Add(new BestScopeSolutionAnalyzer());
    6667      RegisterEvents();
     
    7980      Parameters.Remove("Maximization");
    8081      Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
     82      ProblemScript.Initialize();
    8183
    82       Encoding = ProblemDefinition.Encoding;
    8384      OnOperatorsChanged();
    8485      OnReset();
     
    8687
    8788    public override bool Maximization {
    88       get { return Parameters.ContainsKey("ProblemScript") ? ProblemDefinition.Maximization : false; }
     89      get { return Parameters.ContainsKey("ProblemScript") && ProblemDefinition.Maximization; }
    8990    }
    9091
    91     public override double Evaluate(Individual individual, IRandom random) {
     92    public override double Evaluate(TSolution individual, IRandom random) {
    9293      return ProblemDefinition.Evaluate(individual, random);
    9394    }
    9495
    95     public override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
     96    public override void Analyze(TSolution[] individuals, double[] qualities, ResultCollection results, IRandom random) {
    9697      ProblemDefinition.Analyze(individuals, qualities, results, random);
    9798    }
    98     public override IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
     99    public override IEnumerable<TSolution> GetNeighbors(TSolution individual, IRandom random) {
    99100      return ProblemDefinition.GetNeighbors(individual, random);
    100101    }
     102
     103    #region IProgrammableProblem Members
     104    Scripting.Script IProgrammableProblem.ProblemScript {
     105      get { return ProblemScript; }
     106    }
     107    #endregion
    101108  }
    102109}
Note: See TracChangeset for help on using the changeset viewer.