Changeset 11546 for branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
- Timestamp:
- 11/12/14 23:48:56 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
r11543 r11546 107 107 private void RegisterEventHandlers() { 108 108 ProblemDefinitionParameter.ValueChanged += ProblemDefinitionParameterOnValueChanged; 109 Register HostInstanceChanges();109 RegisterProblemDefinitionEventHandlers(); 110 110 } 111 111 112 112 private void ProblemDefinitionParameterOnValueChanged(object sender, EventArgs eventArgs) { 113 Register HostInstanceChanges();113 RegisterProblemDefinitionEventHandlers(); 114 114 Parameterize(); 115 115 } 116 116 117 private void Register HostInstanceChanges() {117 private void RegisterProblemDefinitionEventHandlers() { 118 118 ProblemDefinitionParameter.Value.ProblemDefinitionChanged += ProblemDefinitionChanged; 119 ProblemDefinitionParameter.Value.NameChanged += ProblemDefinition HostOnNameChanged;120 } 121 122 private void ProblemDefinition HostOnNameChanged(object sender, EventArgs eventArgs) {119 ProblemDefinitionParameter.Value.NameChanged += ProblemDefinitionNameChanged; 120 } 121 122 private void ProblemDefinitionNameChanged(object sender, EventArgs eventArgs) { 123 123 if (sender != ProblemDefinitionParameter.Value) return; 124 124 Name = ProblemDefinitionParameter.Value.Name; … … 182 182 183 183 protected virtual ISolutionCreator ConfigureCreator(Encoding encoding) { 184 #region Configure RealVector Creator 185 var realEnc = encoding as RealEncoding; 186 if (realEnc != null) { 187 DynamicEncodingParameters.AddRange(realEnc.EncodingParameters); 188 return realEnc.DefaultSolutionCreator; 189 } 190 #endregion 184 191 #region Configure MultiEncoding Creator 185 192 var multiEncoding = encoding as MultiEncoding; … … 220 227 } 221 228 #endregion 222 #region Configure RealVector Creator223 var realEnc = encoding as RealEncoding;224 if (realEnc != null) {225 DynamicEncodingParameters.AddRange(realEnc.EncodingParameters);226 return realEnc.SolutionCreator;227 }228 #endregion229 229 #region Configure Permutation Creator 230 230 var permEnc = encoding as PermutationEncoding; … … 243 243 } 244 244 245 246 private IEnumerable<IOperator> GetDiscoveredOperators<T>() where T : class,IOperator 247 { 248 return ApplicationManager.Manager.GetInstances<T>() 249 .Except(Operators.OfType<T>(), new TypeEqualityComparer<T>()); 250 } 245 251 protected virtual void ConfigureSingleEncodingOperators(ISolutionCreator newCreator, Encoding encoding) { 246 252 // remove all multiencoding operators … … 249 255 || x is MultiEncodingCreator); 250 256 257 #region Configure Operators for RealVectorEncoding 258 var realCreator = newCreator as IRealVectorCreator; 259 var realEncoding = encoding as RealEncoding; 260 if (realEncoding != null) { 261 // do not replace a real vector creator that was manually set 262 if (!(SolutionCreator is IRealVectorCreator) 263 || 264 ((IRealVectorCreator)SolutionCreator).RealVectorParameter.ActualName != 265 realCreator.RealVectorParameter.ActualName) { 266 Operators.Remove(SolutionCreator); 267 SolutionCreator = newCreator; 268 Operators.Add(SolutionCreator); 269 } 270 271 Operators.AddRange(GetDiscoveredOperators<IRealVectorCrossover>()); 272 Operators.AddRange(GetDiscoveredOperators<IRealVectorManipulator>()); 273 Operators.AddRange(GetDiscoveredOperators<IRealVectorStdDevStrategyParameterOperator>()); 274 Operators.AddRange(GetDiscoveredOperators<IRealVectorParticleCreator>()); 275 Operators.AddRange(GetDiscoveredOperators<IRealVectorParticleUpdater>()); 276 Operators.AddRange(GetDiscoveredOperators<IRealVectorSwarmUpdater>()); 277 Operators.AddRange(GetDiscoveredOperators<IRealVectorMultiNeighborhoodShakingOperator>()); 278 279 foreach (var su in Operators.OfType<IRealVectorSwarmUpdater>()) { 280 su.MaximizationParameter.ActualName = MaximizationParameter.Name; 281 } 282 realEncoding.ConfigureOperators(Operators.OfType<IOperator>()); 283 284 } else { 285 Operators.RemoveAll(x => x is IRealVectorCrossover 286 || x is IRealVectorManipulator 287 || x is IRealVectorStdDevStrategyParameterOperator 288 || x is IRealVectorParticleCreator 289 || x is IRealVectorParticleUpdater 290 || x is IRealVectorSwarmUpdater 291 || x is IRealVectorMultiNeighborhoodShakingOperator); 292 } 293 #endregion 251 294 #region Configure Operators for BinaryVectorEncoding 252 295 var binCreator = newCreator as IBinaryVectorCreator; … … 402 445 || x is IIntegerVectorStdDevStrategyParameterOperator 403 446 || x is IIntegerVectorMultiNeighborhoodShakingOperator); 404 }405 #endregion406 #region Configure Operators for RealVectorEncoding407 var realCreator = newCreator as IRealVectorCreator;408 if (realCreator != null) {409 var paramName = realCreator.RealVectorParameter.ActualName;410 // do not replace a real vector creator that was manually set411 if (!(SolutionCreator is IRealVectorCreator)412 || ((IRealVectorCreator)SolutionCreator).RealVectorParameter.ActualName != realCreator.RealVectorParameter.ActualName) {413 Operators.Remove(SolutionCreator);414 SolutionCreator = newCreator;415 Operators.Add(SolutionCreator);416 }417 418 #region Wire RealVector Crossovers419 var crossovers = Operators.OfType<IRealVectorCrossover>()420 .Union(ApplicationManager.Manager.GetInstances<IRealVectorCrossover>(), new TypeEqualityComparer<IRealVectorCrossover>())421 .ToList();422 foreach (var xo in crossovers) {423 xo.ChildParameter.ActualName = paramName;424 xo.ChildParameter.Hidden = true;425 xo.ParentsParameter.ActualName = paramName;426 xo.ParentsParameter.Hidden = true;427 xo.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;428 xo.BoundsParameter.Hidden = true;429 }430 Operators.AddRange(crossovers.Except(Operators.OfType<IRealVectorCrossover>()));431 #endregion432 #region Wire RealVector Manipulators433 var manipulators = Operators.OfType<IRealVectorManipulator>()434 .Union(ApplicationManager.Manager.GetInstances<IRealVectorManipulator>(), new TypeEqualityComparer<IRealVectorManipulator>())435 .ToList();436 foreach (var m in manipulators) {437 m.RealVectorParameter.ActualName = paramName;438 m.RealVectorParameter.Hidden = true;439 m.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;440 m.BoundsParameter.Hidden = true;441 var sm = m as ISelfAdaptiveManipulator;442 if (sm != null) {443 var p = sm.StrategyParameterParameter as ILookupParameter;444 if (p != null) {445 p.ActualName = paramName + "Strategy";446 p.Hidden = true;447 }448 }449 }450 Operators.AddRange(manipulators.Except(Operators.OfType<IRealVectorManipulator>()));451 #region Wire RealVector Strategy Parameters for SelfAdaptiveManipulators452 var strategyOperators = Operators.OfType<IRealVectorStdDevStrategyParameterOperator>()453 .Union(ApplicationManager.Manager.GetInstances<IRealVectorStdDevStrategyParameterOperator>(), new TypeEqualityComparer<IRealVectorStdDevStrategyParameterOperator>())454 .ToList();455 var problemSize = ((RealEncoding)encoding).Length;456 var bounds = (DoubleMatrix)((RealEncoding)encoding).Bounds.Clone();457 for (var i = 0; i < bounds.Rows; i++) {458 bounds[i, 1] = 0.1 * (bounds[i, 1] - bounds[i, 0]);459 bounds[i, 0] = 0;460 }461 foreach (var s in strategyOperators) {462 var c = s as IRealVectorStdDevStrategyParameterCreator;463 if (c != null) {464 c.BoundsParameter.Value = (DoubleMatrix)bounds.Clone();465 c.LengthParameter.ActualName = realCreator.LengthParameter.ActualName;466 c.StrategyParameterParameter.ActualName = paramName + "Strategy";467 }468 var m = s as IRealVectorStdDevStrategyParameterManipulator;469 if (m != null) {470 m.BoundsParameter.Value = (DoubleMatrix)bounds.Clone();471 m.StrategyParameterParameter.ActualName = paramName + "Strategy";472 }473 var mm = s as Encodings.RealVectorEncoding.StdDevStrategyVectorManipulator;474 if (mm != null) {475 mm.GeneralLearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * problemSize));476 mm.LearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * Math.Sqrt(problemSize)));477 }478 var x = s as IRealVectorStdDevStrategyParameterCrossover;479 if (x != null) {480 x.ParentsParameter.ActualName = paramName + "Strategy";481 x.StrategyParameterParameter.ActualName = paramName + "Strategy";482 }483 }484 Operators.AddRange(strategyOperators.Except(Operators.OfType<IRealVectorStdDevStrategyParameterOperator>()));485 #endregion486 #endregion487 #region Wire RealVector ParticleCreators488 var particleCreators = Operators.OfType<IRealVectorParticleCreator>()489 .Union(ApplicationManager.Manager.GetInstances<IRealVectorParticleCreator>(), new TypeEqualityComparer<IRealVectorParticleCreator>())490 .ToList();491 foreach (var pc in particleCreators) {492 pc.RealVectorParameter.ActualName = paramName;493 pc.RealVectorParameter.Hidden = true;494 pc.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;495 pc.BoundsParameter.Hidden = true;496 pc.ProblemSizeParameter.ActualName = realCreator.LengthParameter.ActualName;497 pc.ProblemSizeParameter.Hidden = true;498 }499 Operators.AddRange(particleCreators.Except(Operators.OfType<IRealVectorParticleCreator>()));500 #endregion501 #region Wire RealVector ParticleUpdaters502 var particleUpdaters = Operators.OfType<IRealVectorParticleUpdater>()503 .Union(ApplicationManager.Manager.GetInstances<IRealVectorParticleUpdater>(), new TypeEqualityComparer<IRealVectorParticleUpdater>())504 .ToList();505 foreach (var pu in particleUpdaters) {506 pu.RealVectorParameter.ActualName = paramName;507 pu.RealVectorParameter.Hidden = true;508 pu.BoundsParameter.ActualName = realCreator.BoundsParameter.ActualName;509 pu.BoundsParameter.Hidden = true;510 }511 Operators.AddRange(particleUpdaters.Except(Operators.OfType<IRealVectorParticleUpdater>()));512 #endregion513 #region Wire RealVector SwarmUpdaters514 var swarmUpdaters = Operators.OfType<IRealVectorSwarmUpdater>()515 .Union(ApplicationManager.Manager.GetInstances<IRealVectorSwarmUpdater>(), new TypeEqualityComparer<IRealVectorSwarmUpdater>())516 .ToList();517 foreach (var su in swarmUpdaters) {518 su.RealVectorParameter.ActualName = paramName;519 su.RealVectorParameter.Hidden = true;520 su.MaximizationParameter.ActualName = MaximizationParameter.Name;521 su.MaximizationParameter.Hidden = true;522 }523 Operators.AddRange(swarmUpdaters.Except(Operators.OfType<IRealVectorSwarmUpdater>()));524 #endregion525 #region Wire RealVector ShakingOperators526 var shakingOperators = Operators.OfType<IRealVectorMultiNeighborhoodShakingOperator>()527 .Union(ApplicationManager.Manager.GetInstances<IRealVectorMultiNeighborhoodShakingOperator>(), new TypeEqualityComparer<IRealVectorMultiNeighborhoodShakingOperator>())528 .ToList();529 foreach (var so in shakingOperators) {530 so.RealVectorParameter.ActualName = paramName;531 so.RealVectorParameter.Hidden = true;532 }533 Operators.AddRange(shakingOperators.Except(Operators.OfType<IRealVectorMultiNeighborhoodShakingOperator>()));534 #endregion535 } else {536 Operators.RemoveAll(x => x is IRealVectorCrossover537 || x is IRealVectorManipulator538 || x is IRealVectorStdDevStrategyParameterOperator539 || x is IRealVectorParticleCreator540 || x is IRealVectorParticleUpdater541 || x is IRealVectorSwarmUpdater542 || x is IRealVectorMultiNeighborhoodShakingOperator);543 447 } 544 448 #endregion … … 795 699 } 796 700 } 797 798 701 protected virtual void UpdateMoveOperators() { 799 702 if (!Operators.Any(x => x is SingleObjectiveMoveGenerator))
Note: See TracChangeset
for help on using the changeset viewer.