#2976 closed defect (done)
SampleProportionalWithoutRepetition with Windowing may cause a NullReferenceException
Reported by: | bburlacu | Owned by: | bburlacu |
---|---|---|---|
Priority: | medium | Milestone: | HeuristicLab 3.3.16 |
Component: | Random | Version: | trunk |
Keywords: | Cc: |
Description
In some cases trying to sample proportionally from a sequence with windowing causes an exception.
The following code demonstrates the issue:
using System; using System.Linq; using System.Collections.Generic; using HeuristicLab.Core; using HeuristicLab.Common; using HeuristicLab.Random; public class MyScript : HeuristicLab.Scripting.CSharpScriptBase { public override void Main() { var rand = new FastRandom(1234); var weights = new[] { 0.1, 0.1, 0.1, 0.9, 0.9, 0.1, 0.9, 0.9 }; var seq = Enumerable.Range(0, weights.Length).ToArray(); var sampled = seq.SampleProportionalWithoutRepetition(rand, seq.Length, weights, windowing: true).ToArray(); } }
Exception:
HeuristicLab version: 3.3.15.15589 NullReferenceException: Object reference not set to an instance of an object. at HeuristicLab.Random.RandomEnumerable.<SampleProportionalWithoutRepetition>d__9`1.MoveNext() in C:\Projects\hl-core\trunk\HeuristicLab.Random\3.3\RandomEnumerable.cs:line 210 at System.Linq.Enumerable.<TakeIterator>d__25`1.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at MyScript.Main() in c:\Users\Bogdan\AppData\Local\Temp\j5j04ynv.0.cs:line 16 at HeuristicLab.Scripting.ExecutableScript.Execute() in C:\Projects\hl-core\trunk\HeuristicLab.Scripting\3.3\ExecutableScript.cs:line 80
Change History (5)
comment:1 Changed 6 years ago by bburlacu
- Status changed from new to accepted
comment:2 Changed 6 years ago by bburlacu
- Owner changed from bburlacu to gkronber
- Status changed from accepted to reviewing
comment:3 Changed 6 years ago by abeham
- Owner changed from gkronber to bburlacu
- Status changed from reviewing to readytorelease
I reviewed the change in r16496. This may happen due to numerical instabilities. The null check prevents looping past the last element.
comment:4 Changed 6 years ago by bburlacu
- Resolution set to done
- Status changed from readytorelease to closed
comment:5 Changed 5 years ago by gkronber
Note: See
TracTickets for help on using
tickets.
r16496: Add null check to avoid NullReferenceException.