"Bug in RouletteWheel.java?"

pengie
pengie New Altair Community Member
edited November 5 in Community Q&A
Not sure whether anyone else encountered this problem when using GeneticAlgorithm operator. When using selection_scheme="roulette wheel", sometimes I will encounter the following:
Exception: com.rapidminer.operator.UserError
Message: Generation exception: 'java.lang.IndexOutOfBoundsException: Index: 5, Size: 5'
Stack trace:

  com.rapidminer.operator.features.FeatureOperator.applyOpList(FeatureOperator.java:413)
  com.rapidminer.operator.features.FeatureOperator.apply(FeatureOperator.java:330)
  com.rapidminer.operator.Operator.apply(Operator.java:666)
  com.rapidminer.operator.OperatorChain.apply(OperatorChain.java:416)
  com.rapidminer.operator.Operator.apply(Operator.java:666)
  com.rapidminer.Process.run(Process.java:695)
  com.rapidminer.Process.run(Process.java:665)
  com.rapidminer.Process.run(Process.java:655)
  com.rapidminer.gui.ProcessThread.run(ProcessThread.java:61)

Cause
Exception: java.lang.IndexOutOfBoundsException
Message: Index: 5, Size: 5
Stack trace:

  java.util.ArrayList.RangeCheck(ArrayList.java:547)
  java.util.ArrayList.get(ArrayList.java:322)
  com.rapidminer.operator.features.Population.get(Population.java:104)
  com.rapidminer.operator.features.selection.RouletteWheel.operate(RouletteWheel.java:88)
  com.rapidminer.operator.features.FeatureOperator.applyOpList(FeatureOperator.java:406)
  com.rapidminer.operator.features.FeatureOperator.apply(FeatureOperator.java:330)
  com.rapidminer.operator.Operator.apply(Operator.java:666)
  com.rapidminer.operator.OperatorChain.apply(OperatorChain.java:416)
  com.rapidminer.operator.Operator.apply(Operator.java:666)
  com.rapidminer.Process.run(Process.java:695)
  com.rapidminer.Process.run(Process.java:665)
  com.rapidminer.Process.run(Process.java:655)
  com.rapidminer.gui.ProcessThread.run(ProcessThread.java:61)
I have attempted to trace the problem and I realized that if my main_criterion for my RegressionPerformance operator is root_mean_square_error, I will encounter this problem. But if I change it to squared_correlation, the problem disappears. It seems that the offending piece of code is as follow:
while (newGeneration.size() < popSize) {
double r = fitnessSum * random.nextDouble();
int j = 0;
double f = 0;
Individual individual = null;
do {
individual = population.get(j++);
f += filterFitness(individual.getPerformance().getMainCriterion().getFitness());
} while (f < r);
newGeneration.add(individual);
}
Theoretically, f will be lesser than r before j exceeds with number of individuals in population. However, it seems like this assumption will break down once in a while. Not very sure why this happens. Does anyone knows why and is this a bug?

BTW, if you want to create this error, just need to use the following process XML
<operator name="Root" class="Process" expanded="yes">
    <description text="This process is very similar to the previous process. Again, a cross validation building block is used as fitness evaluation. In this case, a genetic algortihm for feature selection is used. This process demonstrates two other features of the feature operators of RapidMiner: the stop button which allows the abort of the process if the user was already satisfied and the ProcessLog operator which allows online plotting of current fitness values. Please refer to the visualisation sample processes and the RapidMiner operator reference for further details."/>
    <parameter key="random_seed" value="1976"/>
    <operator name="ExampleSetGenerator" class="ExampleSetGenerator">
        <parameter key="target_function" value="sum"/>
        <parameter key="number_examples" value="200"/>
        <parameter key="number_of_attributes" value="4"/>
        <parameter key="attributes_lower_bound" value="0.0"/>
    </operator>
    <operator name="NoiseGenerator" class="NoiseGenerator">
        <parameter key="random_attributes" value="8"/>
        <parameter key="label_noise" value="0.0010"/>
        <list key="noise">
        </list>
    </operator>
    <operator name="GeneticAlgorithm" class="GeneticAlgorithm" expanded="yes">
        <parameter key="show_stop_dialog" value="true"/>
        <parameter key="population_size" value="6"/>
        <parameter key="maximum_number_of_generations" value="12"/>
        <parameter key="selection_scheme" value="roulette wheel"/>
        <operator name="OperatorChain" class="OperatorChain" expanded="yes">
            <operator name="XValidation" class="XValidation" expanded="yes">
                <parameter key="sampling_type" value="shuffled sampling"/>
                <operator name="LinearRegression" class="LinearRegression">
                    <parameter key="feature_selection" value="none"/>
                </operator>
                <operator name="OperatorChain (2)" class="OperatorChain" expanded="yes">
                    <operator name="ModelApplier" class="ModelApplier">
                        <list key="application_parameters">
                        </list>
                    </operator>
                    <operator name="RegressionPerformance" class="RegressionPerformance">
                        <parameter key="main_criterion" value="root_mean_squared_error"/>
                        <parameter key="root_mean_squared_error" value="true"/>
                        <parameter key="root_relative_squared_error" value="true"/>
                    </operator>
                </operator>
            </operator>
            <operator name="ProcessLog" class="ProcessLog">
                <list key="log">
                  <parameter key="gen" value="operator.GeneticAlgorithm.value.generation"/>
                  <parameter key="perf" value="operator.GeneticAlgorithm.value.performance"/>
                  <parameter key="best" value="operator.GeneticAlgorithm.value.best"/>
                </list>
            </operator>
        </operator>
    </operator>
</operator>

Answers

  • IngoRM
    IngoRM New Altair Community Member
    Hi,

    thanks for the clear and rich description. We will have a look into this and post back as soon as possible.

    Cheers,
    Ingo
  • Legacy User
    Legacy User New Altair Community Member
    Hi again,

    this bug is fixed now. Thanks again for sending the rich description which was really helpful.

    Cheers,
    Ingo
  • pengie
    pengie New Altair Community Member
    And thank you for the quick fix  :D

    Cheers.