Closed HeuristicLab-Trac-Bot closed 8 years ago
r13394: Created new plugin for multi-objective test functions.
r13421: Implemented skeleton structure and first testfunctions(Fonesca, SchafferN1 & SchafferN2)
r13448 Implemented more Testfunctions; enabled setting of SolutionSize
r13563: Added reference to System.Drawing in HL.Problems.MultiObjectiveTestFunctions.
r13620 regorganized testfunctions, added view for qualities
r13622 recommited project file, renamed IMOSolution to MOSolution
r13623: Added instance provider base class for MOTestFunctions.
r13672 added Analyzers, reworked PFStore, added licence information, cleaned code
r13725 minor bugfixes, added Parameters to Analyzers, convenience Tooltips for ScatterPlot
r13771 bugfix + additional relative HV calculation added
r13894 set pareto-Series to lower Opacity so overlapping series can be identified
r13936 added more functions (IHR1-4, IHR6, CIGTAB, ELLI)
r14018: Rewrote and adapted the multi-objective calculators.
Review commentsI only had time to review and work on the calculator classes. Review of remaining classes and functionality is still pending.
Calculators
- Inconsistent usage of points and front for member names. Please check and unify.
- GenerationalDistance.cs
- Is the comment "//TODO build a kd-tree, sort the array, do something intelligent here" still valid
- Why has not been something intelligent done?
- How should the parameter p be set? A comment (XMLDoc) on this would be helpful
- The method is everywhere called with p == 1.0
- IMHO the Calculate method calculates [[math(1/n (\sum d[i])^{1/p})]] which is not [[math(1/n \sum d[i]^{1/p})]] as described in the XMLDoc.
- This is only true for p == 1.0.
- HyperVolume.cs
- Does Calculate2D work with differing maximization values (e.g., min dim0, max dim1)?
- CalculateMD should reuse the domination functionality of NonDominatedSelect (line 97)
- IsDominated must be removed. The method provides little to no benefits.
Crowding.cs
No unit tests
There should be a method that calculates the crowding distance between a point and a set of points / front. This method should then be reused for calculating the crowding distance of set of points / front. The crowding distance calculation should yield the same results as the CrowdingDistanceAssignment operator of the NSGA-II!
Why have inifinity values to be excluded while calculating the average? Is it normal for the individual calculation to result in infinity?
Line 58 - 67 can be rewritten as:
return pointsums.Where(d => !double.IsPositiveInfinity(d)).DefaultIfEmpty(double.PositiveInfinity).Average();
What is the difference between HyperVolume.CalculateMD and MultiDimensionalHypervolume?
The code looks the same to me.
r14030 several fixes according to the review comments in comment 31
r14044: Refactored and improved analyzers for multi-objective test functions.
Review of Analyzers* Why is the BestKnownFrontParameter defined in the MOTFAnalyzer, although it is only used by the hyper volume analyzers?
HypervolumeAnalyzer
- Why is the best known hyper volume saved in a parameter of the Analyzer? Should be in the TestFunction / Problem.
- The ReferencePoint should be taken from the TestFunction (no value parameter).
- Reuse DoubleValues by setting their values instead of creating new ones (results). Similar to the changes in r14044.
- Could NonDominatedSelect.selectNonDominatedVectors (line 93) return an empty enumberable? If not the check in line 95 is obsolete.
NormalizedHypervolumeAnalyzer
- Most of the comments for the hypervolume analyzers apply to this class as well.
- BestKnownFront Zitzler ?!?
- Always use FixedValueParameters for ValueParameters
where T in HeuristicLab.Data and T can be modified.
Review of TestFunctions* IHR
- What is the purpose of the Method Y
protected RealVector Y(RealVector x) { return x; }
- Why is the method G defined as abstract and implemented in derived classes, but never called?
- F2 never uses its first parameter r
- Evaluate calls F2(r,y) where y # Y(r) and Y just returns its argument. Therefore y= r. Why does F2 need two arguments at all?
- IHR5 ?
- ELLI
- Line 70 x is never used.
- SchafferN2
- Optimal ParetoFront throws NotImplementedException!
- ZDT5 ?
r14069: Moved Pareto fronts to subfolders in the according test functions folder and changed PFStore.
r14073: Worked on Multi-objective test function problem and adapted plugin dependencies.
r14085: Further refactoring of testfunction problem and analyzers.
Issue migrated from trac ticket # 1087
milestone: HeuristicLab 3.3.14 | component: Problems.TestFunctions | priority: high | resolution: done
2010-07-20 12:32:49: @abeham created the issue