- Timestamp:
- 10/26/11 23:36:10 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.OneMax/3.3/OnemaxProblem.cs
r6042 r6938 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Drawing;25 24 using System.Linq; 26 25 using HeuristicLab.Common; … … 37 36 [Creatable("Problems")] 38 37 [StorableClass] 39 public sealed class OneMaxProblem : ParameterizedNamedItem, ISingleObjectiveHeuristicOptimizationProblem, IStorableContent {38 public sealed class OneMaxProblem : SingleObjectiveHeuristicOptimizationProblem<IOneMaxEvaluator, IBinaryVectorCreator>, IStorableContent { 40 39 public string Filename { get; set; } 41 40 42 public override Image ItemImage {43 get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }44 }45 46 41 #region Parameter Properties 47 public ValueParameter<BoolValue> MaximizationParameter {48 get { return (ValueParameter<BoolValue>)Parameters["Maximization"]; }49 }50 IParameter ISingleObjectiveHeuristicOptimizationProblem.MaximizationParameter {51 get { return MaximizationParameter; }52 }53 42 public ValueParameter<IntValue> LengthParameter { 54 43 get { return (ValueParameter<IntValue>)Parameters["Length"]; } 55 }56 public ValueParameter<IBinaryVectorCreator> SolutionCreatorParameter {57 get { return (ValueParameter<IBinaryVectorCreator>)Parameters["SolutionCreator"]; }58 }59 IParameter IHeuristicOptimizationProblem.SolutionCreatorParameter {60 get { return SolutionCreatorParameter; }61 }62 public ValueParameter<IOneMaxEvaluator> EvaluatorParameter {63 get { return (ValueParameter<IOneMaxEvaluator>)Parameters["Evaluator"]; }64 }65 IParameter IHeuristicOptimizationProblem.EvaluatorParameter {66 get { return EvaluatorParameter; }67 }68 public ValueParameter<DoubleValue> BestKnownQualityParameter {69 get { return (ValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }70 }71 IParameter ISingleObjectiveHeuristicOptimizationProblem.BestKnownQualityParameter {72 get { return BestKnownQualityParameter; }73 44 } 74 45 #endregion … … 79 50 set { LengthParameter.Value = value; } 80 51 } 81 public IBinaryVectorCreator SolutionCreator {82 get { return SolutionCreatorParameter.Value; }83 set { SolutionCreatorParameter.Value = value; }84 }85 ISolutionCreator IHeuristicOptimizationProblem.SolutionCreator {86 get { return SolutionCreatorParameter.Value; }87 }88 public IOneMaxEvaluator Evaluator {89 get { return EvaluatorParameter.Value; }90 set { EvaluatorParameter.Value = value; }91 }92 ISingleObjectiveEvaluator ISingleObjectiveHeuristicOptimizationProblem.Evaluator {93 get { return EvaluatorParameter.Value; }94 }95 IEvaluator IHeuristicOptimizationProblem.Evaluator {96 get { return EvaluatorParameter.Value; }97 }98 public DoubleValue BestKnownQuality {99 get { return BestKnownQualityParameter.Value; }100 }101 public IEnumerable<IOperator> Operators {102 get { return operators.Cast<IOperator>(); }103 }104 52 private BestOneMaxSolutionAnalyzer BestOneMaxSolutionAnalyzer { 105 get { return operators.OfType<BestOneMaxSolutionAnalyzer>().FirstOrDefault(); }53 get { return Operators.OfType<BestOneMaxSolutionAnalyzer>().FirstOrDefault(); } 106 54 } 107 55 #endregion 108 56 109 [Storable] 110 private List<IOperator> operators; 57 // BackwardsCompatibility3.3 58 #region Backwards compatible code, remove with 3.4 59 [Obsolete] 60 [Storable(Name = "operators")] 61 private IEnumerable<IOperator> oldOperators { 62 get { return null; } 63 set { 64 if (value != null && value.Any()) 65 Operators.AddRange(value); 66 } 67 } 68 #endregion 111 69 112 70 [StorableConstructor] … … 114 72 private OneMaxProblem(OneMaxProblem original, Cloner cloner) 115 73 : base(original, cloner) { 116 operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList();117 74 AttachEventHandlers(); 118 75 } 119 76 public OneMaxProblem() 120 : base( ) {121 RandomBinaryVectorCreator creator = new RandomBinaryVectorCreator();122 OneMaxEvaluator evaluator = new OneMaxEvaluator();77 : base(new OneMaxEvaluator(), new RandomBinaryVectorCreator()) { 78 Parameters.Add(new ValueParameter<IntValue>("Length", "The length of the BinaryVector.", new IntValue(5))); 79 BestKnownQuality.Value = 5; 123 80 124 Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to true as the OneMax Problem is a maximization problem.", new BoolValue(true))); 125 Parameters.Add(new ValueParameter<IntValue>("Length", "The length of the BinaryVector.", new IntValue(5))); 126 Parameters.Add(new ValueParameter<IBinaryVectorCreator>("SolutionCreator", "The operator which should be used to create new OneMax solutions.", creator)); 127 Parameters.Add(new ValueParameter<IOneMaxEvaluator>("Evaluator", "The operator which should be used to evaluate OneMax solutions.", evaluator)); 128 Parameters.Add(new ValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this OneMax instance.", new DoubleValue(5))); 129 130 creator.BinaryVectorParameter.ActualName = "OneMaxSolution"; 131 evaluator.QualityParameter.ActualName = "NumberOfOnes"; 81 SolutionCreator.BinaryVectorParameter.ActualName = "OneMaxSolution"; 82 Evaluator.QualityParameter.ActualName = "NumberOfOnes"; 132 83 ParameterizeSolutionCreator(); 133 84 ParameterizeEvaluator(); … … 142 93 143 94 #region Events 144 public event EventHandler SolutionCreatorChanged; 145 private void OnSolutionCreatorChanged() { 146 EventHandler handler = SolutionCreatorChanged; 147 if (handler != null) handler(this, EventArgs.Empty); 148 } 149 public event EventHandler EvaluatorChanged; 150 private void OnEvaluatorChanged() { 151 EventHandler handler = EvaluatorChanged; 152 if (handler != null) handler(this, EventArgs.Empty); 153 } 154 public event EventHandler OperatorsChanged; 155 private void OnOperatorsChanged() { 156 EventHandler handler = OperatorsChanged; 157 if (handler != null) handler(this, EventArgs.Empty); 158 } 159 public event EventHandler Reset; 160 private void OnReset() { 161 EventHandler handler = Reset; 162 if (handler != null) handler(this, EventArgs.Empty); 163 } 164 165 private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) { 95 protected override void OnSolutionCreatorChanged() { 96 base.OnSolutionCreatorChanged(); 166 97 SolutionCreator.BinaryVectorParameter.ActualNameChanged += new EventHandler(SolutionCreator_BinaryVectorParameter_ActualNameChanged); 167 98 ParameterizeSolutionCreator(); … … 169 100 ParameterizeAnalyzer(); 170 101 ParameterizeOperators(); 171 OnSolutionCreatorChanged(); 102 } 103 protected override void OnEvaluatorChanged() { 104 base.OnEvaluatorChanged(); 105 ParameterizeEvaluator(); 106 ParameterizeAnalyzer(); 172 107 } 173 108 private void SolutionCreator_BinaryVectorParameter_ActualNameChanged(object sender, EventArgs e) { … … 176 111 ParameterizeOperators(); 177 112 } 178 private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) { 179 ParameterizeEvaluator(); 180 ParameterizeAnalyzer(); 181 OnEvaluatorChanged(); 182 } 183 void LengthParameter_ValueChanged(object sender, EventArgs e) { 113 private void LengthParameter_ValueChanged(object sender, EventArgs e) { 184 114 ParameterizeSolutionCreator(); 185 115 LengthParameter.Value.ValueChanged += new EventHandler(Length_ValueChanged); 186 116 BestKnownQualityParameter.Value.Value = Length.Value; 187 117 } 188 void Length_ValueChanged(object sender, EventArgs e) {118 private void Length_ValueChanged(object sender, EventArgs e) { 189 119 BestKnownQualityParameter.Value.Value = Length.Value; 190 120 } 191 void BestKnownQualityParameter_ValueChanged(object sender, EventArgs e) {121 private void BestKnownQualityParameter_ValueChanged(object sender, EventArgs e) { 192 122 BestKnownQualityParameter.Value.Value = Length.Value; 193 123 } 194 void OneBitflipMoveParameter_ActualNameChanged(object sender, EventArgs e) {124 private void OneBitflipMoveParameter_ActualNameChanged(object sender, EventArgs e) { 195 125 string name = ((ILookupParameter<OneBitflipMove>)sender).ActualName; 196 126 foreach (IOneBitflipMoveOperator op in Operators.OfType<IOneBitflipMoveOperator>()) { … … 205 135 // BackwardsCompatibility3.3 206 136 #region Backwards compatible code (remove with 3.4) 207 if ( operators == null) InitializeOperators();137 if (Operators.Count == 0) InitializeOperators(); 208 138 #endregion 209 139 AttachEventHandlers(); … … 211 141 212 142 private void AttachEventHandlers() { 213 SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);214 143 SolutionCreator.BinaryVectorParameter.ActualNameChanged += new EventHandler(SolutionCreator_BinaryVectorParameter_ActualNameChanged); 215 EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);216 144 LengthParameter.ValueChanged += new EventHandler(LengthParameter_ValueChanged); 217 145 LengthParameter.Value.ValueChanged += new EventHandler(Length_ValueChanged); … … 233 161 } 234 162 private void InitializeOperators() { 235 operators = new List<IOperator>(); 236 operators.Add(new BestOneMaxSolutionAnalyzer()); 163 Operators.Add(new BestOneMaxSolutionAnalyzer()); 237 164 ParameterizeAnalyzer(); 238 165 foreach (IBinaryVectorOperator op in ApplicationManager.Manager.GetInstances<IBinaryVectorOperator>()) { 239 166 if (!(op is ISingleObjectiveMoveEvaluator) || (op is IOneMaxMoveEvaluator)) { 240 operators.Add(op);167 Operators.Add(op); 241 168 } 242 169 }
Note: See TracChangeset
for help on using the changeset viewer.