heal-research / HeuristicLab

HeuristicLab - An environment for heuristic and evolutionary optimization
https://dev.heuristiclab.com
GNU General Public License v3.0
38 stars 16 forks source link

UniformOnePositionManipulator throws Exception if only a single value is allowed #3148

Open HeuristicLab-Trac-Bot opened 2 years ago

HeuristicLab-Trac-Bot commented 2 years ago

Issue migrated from trac ticket # 3148

component: Encodings.IntegerVectorEncoding | priority: medium

2022-03-10 13:45:20: @NimZwei created the issue


If the bounds for an UniformOnePositionManipulator limits the value range to a single, admissible value, an Exception is thrown.

This is caused in lines 94-95 in UniformOnePositionManipulator.cs, that were introduced in r8790:

max = FloorFeasible(min, max, step, max - 1);
vector[index] = RoundFeasible(min, max, step, random.Next(min, max));

For instance, the bounds [0, 1[ allowing only allow 0 as value, causes min and max to be 0, causing an exception when calling random.Next(min, max).

I guess, the min == max check in line 88 could be used after adapting the upper bound.