Skip to content

Commit

Permalink
Calculate initial points and suggestion count
Browse files Browse the repository at this point in the history
  • Loading branch information
langdal committed Jul 6, 2022
1 parent f48f6ca commit f359680
Show file tree
Hide file tree
Showing 2 changed files with 130 additions and 59 deletions.
13 changes: 12 additions & 1 deletion src/reducers/experiment-reducers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ import { assertUnreachable } from '../utility'
import produce from 'immer'

const calculateInitialPoints = (state: ExperimentType) =>
(state.categoricalVariables.length + state.valueVariables.length) * 3
Math.max(
3,
(state.categoricalVariables.length + state.valueVariables.length) * 3
)

export type ExperimentAction =
| {
Expand Down Expand Up @@ -95,12 +98,16 @@ export const experimentReducer = produce(
action.payload
)
state.optimizerConfig.initialPoints = calculateInitialPoints(state)
state.extras.experimentSuggestionCount =
state.optimizerConfig.initialPoints
break
case 'deleteValueVariable':
state.changedSinceLastEvaluation = true
let indexOfDelete = state.valueVariables.indexOf(action.payload)
state.valueVariables.splice(indexOfDelete, 1)
state.optimizerConfig.initialPoints = calculateInitialPoints(state)
state.extras.experimentSuggestionCount =
state.optimizerConfig.initialPoints
break
case 'addCategorialVariable':
state.changedSinceLastEvaluation = true
Expand All @@ -110,6 +117,8 @@ export const experimentReducer = produce(
action.payload
)
state.optimizerConfig.initialPoints = calculateInitialPoints(state)
state.extras.experimentSuggestionCount =
state.optimizerConfig.initialPoints
break
case 'deleteCategorialVariable':
state.changedSinceLastEvaluation = true
Expand All @@ -118,6 +127,8 @@ export const experimentReducer = produce(
)
state.categoricalVariables.splice(indexOfCatDelete, 1)
state.optimizerConfig.initialPoints = calculateInitialPoints(state)
state.extras.experimentSuggestionCount =
state.optimizerConfig.initialPoints
break
case 'updateConfiguration':
state.changedSinceLastEvaluation = true
Expand Down
176 changes: 118 additions & 58 deletions src/reducers/reducers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,26 +175,42 @@ describe('experiment reducer', () => {
payload,
}

expect(rootReducer(initState, action)).toEqual({
experiment: {
...initState.experiment,
optimizerConfig: {
...initState.experiment.optimizerConfig,
initialPoints: 9,
},
changedSinceLastEvaluation: true,
valueVariables: [
{
name: 'Water',
description: 'Wet',
type: 'continuous',
min: 100,
max: 200,
},
payload,
],
expect(
rootReducer(initState, action).experiment.valueVariables
).toEqual([
{
name: 'Water',
description: 'Wet',
type: 'continuous',
min: 100,
max: 200,
},
})
payload,
])
})

it('should set initial points and suggestion', async () => {
const payload: ValueVariableType = {
type: 'continuous',
name: 'Flour',
description: 'Wet',
min: 300,
max: 400,
}

const action: ExperimentAction = {
type: 'addValueVariable',
payload,
}

expect(
rootReducer(initState, action).experiment.optimizerConfig
.initialPoints
).toEqual(9)
expect(
rootReducer(initState, action).experiment.extras
.experimentSuggestionCount
).toEqual(9)
})
})

Expand All @@ -213,17 +229,33 @@ describe('experiment reducer', () => {
payload,
}

expect(rootReducer(initState, action)).toEqual({
experiment: {
...initState.experiment,
optimizerConfig: {
...initState.experiment.optimizerConfig,
initialPoints: 3,
},
changedSinceLastEvaluation: true,
valueVariables: [],
},
})
expect(
rootReducer(initState, action).experiment.valueVariables
).toEqual([])
})

it('should reset initial points and suggestion', async () => {
const payload: ValueVariableType = {
type: 'continuous',
name: 'Water',
description: 'Wet',
min: 100,
max: 200,
}

const action: ExperimentAction = {
type: 'deleteValueVariable',
payload,
}

expect(
rootReducer(initState, action).experiment.optimizerConfig
.initialPoints
).toEqual(3)
expect(
rootReducer(initState, action).experiment.extras
.experimentSuggestionCount
).toEqual(3)
})
})

Expand All @@ -240,24 +272,38 @@ describe('experiment reducer', () => {
payload,
}

expect(rootReducer(initState, action)).toEqual({
experiment: {
...initState.experiment,
optimizerConfig: {
...initState.experiment.optimizerConfig,
initialPoints: 9,
},
changedSinceLastEvaluation: true,
categoricalVariables: [
{
name: 'Icing',
description: 'Sugary',
options: [],
},
payload,
],
expect(
rootReducer(initState, action).experiment.categoricalVariables
).toEqual([
{
name: 'Icing',
description: 'Sugary',
options: [],
},
})
payload,
])
})

it('should set initial points and suggestion', async () => {
const payload: CategoricalVariableType = {
name: 'Fat',
description: 'Fatty',
options: [],
}

const action: ExperimentAction = {
type: 'addCategorialVariable',
payload,
}

expect(
rootReducer(initState, action).experiment.optimizerConfig
.initialPoints
).toEqual(9)
expect(
rootReducer(initState, action).experiment.extras
.experimentSuggestionCount
).toEqual(9)
})
})

Expand All @@ -274,17 +320,31 @@ describe('experiment reducer', () => {
payload,
}

expect(rootReducer(initState, action)).toEqual({
experiment: {
...initState.experiment,
optimizerConfig: {
...initState.experiment.optimizerConfig,
initialPoints: 3,
},
changedSinceLastEvaluation: true,
categoricalVariables: [],
},
})
expect(
rootReducer(initState, action).experiment.categoricalVariables
).toEqual([])
})

it('should reset suggestion count and initial points', async () => {
const payload: CategoricalVariableType = {
name: 'Icing',
description: 'Sugary',
options: [],
}

const action: ExperimentAction = {
type: 'deleteCategorialVariable',
payload,
}

expect(
rootReducer(initState, action).experiment.optimizerConfig
.initialPoints
).toEqual(3)
expect(
rootReducer(initState, action).experiment.extras
.experimentSuggestionCount
).toEqual(3)
})
})
})
Expand Down

0 comments on commit f359680

Please sign in to comment.