Menu

#47 Objective with empty range

Any Version
open
nobody
None
5
2015-07-07
2015-07-04
Anonymous
No

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.

Discussion

  • Anonymous

    Anonymous - 2015-07-07

    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:

    1. Remove the degenerate objectives. If the value is always -1, then it is not providing any input to the optimization and can be removed.

    2. 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.

    3. 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.

     
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.