Hello,
I created a problem using binary representation.
The problem read some files and set the result for my 5 objectives and the size of my binary representation.
For better visualization: https://github.com/jacksonpradolima/MOEAFramework/tree/master/src/lps
In the main of the LPS_Main file, it's using a string instance = "instances/cas", you can change for "instances/james" for run. If is differente of instances/james appear the problem.
I saw the explanation about the "objective with empty range" in the manual, but my problem appear when I use a folder differente from james, for example, cas.
I have 3 objetives for maximize and 2 for minimize, where in all my objetives the range of values is between 0.0 and 1.0. I saw that 2 objectives has -1.0 and -1.0, handling de exception, but in james instance I have too and doesn't appear.
I already done in jMetal and run correctly, but I want to use algorithm of MOEA Framework and thereafter use the MOEA FRAMEWORK in my master's research.
View and moderate all "feature-requests Discussion" comments posted by this user
Mark all as spam, and block user from posting to "Feature Requests"
Nothing?
View and moderate all "feature-requests Discussion" comments posted by this user
Mark all as spam, and block user from posting to "Feature Requests"
Hello, first to provide some insight into why you see that exception. Many of the performance indicators, including hypervolume, normalize the objective values in the range [0,1]. This is a common practice when reporting performance indicators in academic papers and aids comparing results across multiple studies. The code is failing on this problem since the two objectives are degenerate (max-min=0, resulting in division by 0 when normalizing).
There are a few solutions:
Remove the degenerate objectives. If the value is always -1, then it is not providing any input to the optimization and can be removed.
Provide a reference set. If you know the value is not always -1, then it may be possible to generate a reference set with these other values. Use the Analyzer#withReferenceSet method to load this reference set. It's a best practice to use a reference set when computing performance indicators since it means your indicator values are consistent across runs.
Hack to prevent the exception. This will let you compute the hypervolume, BUT IT WILL BREAK OTHER PERFORMANCE INDICATORS. Replace your Normalizer.java file with the attached version. Essentially, this hack will assign a fixed objective value (0.5) for any degenerate objectives instead of throwing the exception. Since the value is fixed, it is not adding to the hypervolume. The end result is the hypervolume of the remaining, non-degenerate objectives.
View and moderate all "feature-requests Discussion" comments posted by this user
Mark all as spam, and block user from posting to "Feature Requests"
Thanks for answer