Skip to content

Commit 14a479a

Browse files
authored
Merge pull request #1263 from guardian/tf-fix-roulette
Fix roulette
2 parents 79b29b3 + bcb5050 commit 14a479a

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/server/roulette/rouletteSelection.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,21 @@ describe('roulette', () => {
125125
);
126126
expect(variant).toBe(epicTest.variants[2]);
127127
});
128+
129+
it('should randomly select variant if means are 0', () => {
130+
const rand = 0.49;
131+
const variants = epicTest.variants.map((variant) => ({
132+
variantName: variant.name,
133+
mean: 0,
134+
}));
135+
const banditData = {
136+
testName: 'example-1',
137+
bestVariants: variants,
138+
variants: variants,
139+
};
140+
const variant = selectVariantUsingRoulette([banditData], epicTest, rand);
141+
expect(variant).toBeDefined();
142+
});
128143
});
129144

130145
describe('rouletteTest2', () => {

src/server/roulette/rouletteSelection.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ export function selectVariantUsingRoulette<V extends Variant, T extends Test<V>>
1414

1515
const sumOfMeans = testBanditData.variants.reduce((sum, v) => sum + v.mean, 0);
1616

17+
if (sumOfMeans <= 0) {
18+
return selectRandomVariant(test);
19+
}
20+
1721
// sorted variant weights, which will add up to 1
1822
const variantsWithWeights: { weight: number; variantName: string }[] = testBanditData.variants
1923
.map(({ variantName, mean }) => ({ variantName, weight: mean / sumOfMeans }))

0 commit comments

Comments
 (0)