11import type { Test , Variant } from '../../shared/types' ;
22import type { BanditData } from './banditData' ;
3- import { selectRandomVariant } from './helpers' ;
3+ import { filterValidVariants , selectRandomVariant } from './helpers' ;
44
55export function selectVariantUsingRoulette < V extends Variant , T extends Test < V > > (
66 test : T ,
@@ -11,20 +11,20 @@ export function selectVariantUsingRoulette<V extends Variant, T extends Test<V>>
1111 return selectRandomVariant ( test ) ;
1212 }
1313
14- const sumOfMeans = testBanditData . sortedVariants . reduce ( ( sum , v ) => sum + v . mean , 0 ) ;
14+ const sortedVariants = filterValidVariants ( testBanditData . sortedVariants , test ) ;
15+ const sumOfMeans = sortedVariants . reduce ( ( sum , v ) => sum + v . mean , 0 ) ;
1516
1617 if ( sumOfMeans <= 0 ) {
1718 return selectRandomVariant ( test ) ;
1819 }
1920
2021 const minWeight = 0.1 ; // Ensure no variant gets less than 10%
21- const variantsWithWeights : Array < { weight : number ; variantName : string } > =
22- testBanditData . sortedVariants
23- . map ( ( { variantName, mean } ) => ( {
24- variantName,
25- weight : Math . max ( mean / sumOfMeans , minWeight ) ,
26- } ) )
27- . sort ( ( a , b ) => a . weight - b . weight ) ;
22+ const variantsWithWeights : Array < { weight : number ; variantName : string } > = sortedVariants
23+ . map ( ( { variantName, mean } ) => ( {
24+ variantName,
25+ weight : Math . max ( mean / sumOfMeans , minWeight ) ,
26+ } ) )
27+ . sort ( ( a , b ) => a . weight - b . weight ) ;
2828
2929 // The sum of the weights may be greater than 1, so we now need to normalise them
3030 const sumOfWeights = variantsWithWeights . reduce ( ( sum , v ) => sum + v . weight , 0 ) ;
0 commit comments