Trial Placement¶
Package¶
trial_placement
¶
trial_placement¶
Strategies for selecting the next set of trials in an experiment.
This subpackage provides: - TrialPlacement : abstract base class. - GridPlacement : fixed non-adaptive design. - SobolPlacement : quasi-random low-discrepancy exploration. - StaircasePlacement : classical adaptive rule (1-up-2-down). - GreedyMAPPlacement : adaptive design based on MAP point estimate. - InfoGainPlacement : adaptive design based on expected information gain.
MVP implementation
- Simple grid, Sobol, and staircase procedures.
- Greedy placement uses MAP only.
- InfoGain uses entropy-style heuristic with placeholder logic.
Full WPPM mode
- InfoGainPlacement will integrate with posterior.sample() from LaplacePosterior or MCMCPosterior.
- StaircasePlacement can be extended to multi-dimensional, task-aware rules.
- Hybrid strategies: exploration (Sobol) -> exploitation (InfoGain).
Classes:
Name | Description |
---|---|
GreedyMAPPlacement |
Greedy adaptive placement (MAP-based). |
GridPlacement |
Fixed grid placement. |
InfoGainPlacement |
Information-gain adaptive placement. |
SobolPlacement |
Sobol quasi-random placement. |
StaircasePlacement |
Staircase procedure. |
TrialPlacement |
Abstract interface for trial placement strategies. |
GreedyMAPPlacement
¶
Bases: TrialPlacement
Greedy adaptive placement (MAP-based).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
candidate_pool
|
list of (ref, probe)
|
Candidate stimuli. |
required |
Methods:
Name | Description |
---|---|
propose |
Select trials based on MAP discriminability. |
Attributes:
Name | Type | Description |
---|---|---|
pool |
|
Source code in src/psyphy/trial_placement/greedy_map.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Select trials based on MAP discriminability.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Posterior object. Provides MAP params. |
required |
batch_size
|
int
|
Number of trials to propose. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Selected trials. |
Notes
MVP: Returns first N candidates. Full WPPM mode: - Score all candidates with _score_candidate(). - Rank candidates by score. - Select top-N.
Source code in src/psyphy/trial_placement/greedy_map.py
GridPlacement
¶
Bases: TrialPlacement
Fixed grid placement.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
grid_points
|
list of (ref, probe)
|
Predefined set of trial stimuli. |
required |
Notes
- grid = your set of allowable trials.
- this class simply walks through that set.
Methods:
Name | Description |
---|---|
propose |
Return the next batch of trials from the grid. |
Attributes:
Name | Type | Description |
---|---|---|
grid_points |
|
Source code in src/psyphy/trial_placement/grid.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Return the next batch of trials from the grid.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Ignored in MVP (grid is non-adaptive). |
required |
batch_size
|
int
|
Number of trials to return. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Fixed batch of (ref, probe). |
Source code in src/psyphy/trial_placement/grid.py
InfoGainPlacement
¶
Bases: TrialPlacement
Information-gain adaptive placement.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
candidate_pool
|
list of (ref, probe)
|
Candidate stimuli. |
required |
Methods:
Name | Description |
---|---|
propose |
Propose trials that maximize information gain. |
Attributes:
Name | Type | Description |
---|---|---|
pool |
|
Source code in src/psyphy/trial_placement/info_gain.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Propose trials that maximize information gain.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Posterior object. Must support sample(). |
required |
batch_size
|
int
|
Number of trials to propose. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Selected trials. |
Notes
MVP: Returns first N candidates. Full WPPM mode: - Score all candidates with _score_candidate(). - Rank candidates by score. - Select top-N.
Source code in src/psyphy/trial_placement/info_gain.py
SobolPlacement
¶
Bases: TrialPlacement
Sobol quasi-random placement.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
dim
|
int
|
Dimensionality of stimulus space. |
required |
bounds
|
list of (low, high)
|
Bounds per dimension. |
required |
seed
|
int
|
RNG seed. |
0
|
Methods:
Name | Description |
---|---|
propose |
Propose Sobol points (ignores posterior). |
Attributes:
Name | Type | Description |
---|---|---|
bounds |
|
|
engine |
|
Source code in src/psyphy/trial_placement/sobol.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Propose Sobol points (ignores posterior).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Ignored in MVP. |
required |
batch_size
|
int
|
Number of trials to return. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Candidate trials from Sobol sequence. |
Notes
MVP: Pure exploration of space. Full WPPM mode: Use Sobol as initialization, then switch to InfoGain.
Source code in src/psyphy/trial_placement/sobol.py
StaircasePlacement
¶
Bases: TrialPlacement
Staircase procedure.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
start_level
|
float
|
Starting stimulus intensity. |
required |
step_size
|
float
|
Step increment. |
required |
rule
|
str
|
Adaptive rule. |
"1up-2down"
|
Methods:
Name | Description |
---|---|
propose |
Return next trial(s) based on staircase rule. |
update |
Update staircase level given last response. |
Attributes:
Name | Type | Description |
---|---|---|
correct_counter |
|
|
current_level |
|
|
rule |
|
|
step_size |
|
Source code in src/psyphy/trial_placement/staircase.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Return next trial(s) based on staircase rule.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Ignored in MVP (not posterior-aware). |
required |
batch_size
|
int
|
Number of trials to propose. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Batch of trials with current staircase level. |
Source code in src/psyphy/trial_placement/staircase.py
update
¶
update(response: int)
Update staircase level given last response.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
response
|
int
|
1 = correct, 0 = incorrect. |
required |
Source code in src/psyphy/trial_placement/staircase.py
TrialPlacement
¶
Bases: ABC
Abstract interface for trial placement strategies.
Methods:
Name | Description |
---|---|
propose |
Propose the next batch of trials. |
All trial placement strategies |
|
propose
¶
Propose the next batch of trials.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Posterior distribution (MAP, Laplace, or MCMC). |
required |
batch_size
|
int
|
Number of trials to propose. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Proposed batch of (reference, probe) stimuli. |
Source code in src/psyphy/trial_placement/base.py
Base¶
base
¶
base.py
Abstract base class for trial placement strategies.
Classes:
Name | Description |
---|---|
TrialPlacement |
Abstract interface for trial placement strategies. |
TrialPlacement
¶
Bases: ABC
Abstract interface for trial placement strategies.
Methods:
Name | Description |
---|---|
propose |
Propose the next batch of trials. |
All trial placement strategies |
|
propose
¶
Propose the next batch of trials.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Posterior distribution (MAP, Laplace, or MCMC). |
required |
batch_size
|
int
|
Number of trials to propose. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Proposed batch of (reference, probe) stimuli. |
Source code in src/psyphy/trial_placement/base.py
Grid¶
grid
¶
grid.py
Grid-based placement strategy.
MVP: - Iterates through a fixed list of grid points. - Ignores the posterior (non-adaptive).
Full WPPM mode: - Could refine the grid adaptively around regions of high posterior uncertainty.
Classes:
Name | Description |
---|---|
GridPlacement |
Fixed grid placement. |
GridPlacement
¶
Bases: TrialPlacement
Fixed grid placement.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
grid_points
|
list of (ref, probe)
|
Predefined set of trial stimuli. |
required |
Notes
- grid = your set of allowable trials.
- this class simply walks through that set.
Methods:
Name | Description |
---|---|
propose |
Return the next batch of trials from the grid. |
Attributes:
Name | Type | Description |
---|---|---|
grid_points |
|
Source code in src/psyphy/trial_placement/grid.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Return the next batch of trials from the grid.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Ignored in MVP (grid is non-adaptive). |
required |
batch_size
|
int
|
Number of trials to return. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Fixed batch of (ref, probe). |
Source code in src/psyphy/trial_placement/grid.py
Sobol¶
sobol
¶
sobol.py
Sobol quasi-random placement.
MVP: - Uses a Sobol engine to generate low-discrepancy points. - Ignores the posterior (pure exploration).
Full WPPM mode: - Could combine Sobol exploration (early) with posterior-aware exploitation (later).
Classes:
Name | Description |
---|---|
SobolPlacement |
Sobol quasi-random placement. |
SobolPlacement
¶
Bases: TrialPlacement
Sobol quasi-random placement.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
dim
|
int
|
Dimensionality of stimulus space. |
required |
bounds
|
list of (low, high)
|
Bounds per dimension. |
required |
seed
|
int
|
RNG seed. |
0
|
Methods:
Name | Description |
---|---|
propose |
Propose Sobol points (ignores posterior). |
Attributes:
Name | Type | Description |
---|---|---|
bounds |
|
|
engine |
|
Source code in src/psyphy/trial_placement/sobol.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Propose Sobol points (ignores posterior).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Ignored in MVP. |
required |
batch_size
|
int
|
Number of trials to return. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Candidate trials from Sobol sequence. |
Notes
MVP: Pure exploration of space. Full WPPM mode: Use Sobol as initialization, then switch to InfoGain.
Source code in src/psyphy/trial_placement/sobol.py
Staircase¶
staircase
¶
staircase.py
Classical staircase placement (1-up, 2-down).
MVP: - Purely response-driven, 1D only. - Ignores posterior.
Full WPPM mode: - Extend to multi-D tasks, integrate with WPPM-based discriminability thresholds.
Classes:
Name | Description |
---|---|
StaircasePlacement |
Staircase procedure. |
StaircasePlacement
¶
Bases: TrialPlacement
Staircase procedure.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
start_level
|
float
|
Starting stimulus intensity. |
required |
step_size
|
float
|
Step increment. |
required |
rule
|
str
|
Adaptive rule. |
"1up-2down"
|
Methods:
Name | Description |
---|---|
propose |
Return next trial(s) based on staircase rule. |
update |
Update staircase level given last response. |
Attributes:
Name | Type | Description |
---|---|---|
correct_counter |
|
|
current_level |
|
|
rule |
|
|
step_size |
|
Source code in src/psyphy/trial_placement/staircase.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Return next trial(s) based on staircase rule.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Ignored in MVP (not posterior-aware). |
required |
batch_size
|
int
|
Number of trials to propose. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Batch of trials with current staircase level. |
Source code in src/psyphy/trial_placement/staircase.py
update
¶
update(response: int)
Update staircase level given last response.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
response
|
int
|
1 = correct, 0 = incorrect. |
required |
Source code in src/psyphy/trial_placement/staircase.py
Greedy MAP¶
greedy_map
¶
greedy_map.py
Greedy placement using MAP estimate.
MVP: - Returns first N candidates (stub). - Ignores posterior discriminability.
Full WPPM mode: - Score each candidate using posterior.MAP_params(). - Rank candidates by informativeness (e.g., discriminability).
Classes:
Name | Description |
---|---|
GreedyMAPPlacement |
Greedy adaptive placement (MAP-based). |
GreedyMAPPlacement
¶
Bases: TrialPlacement
Greedy adaptive placement (MAP-based).
Parameters:
Name | Type | Description | Default |
---|---|---|---|
candidate_pool
|
list of (ref, probe)
|
Candidate stimuli. |
required |
Methods:
Name | Description |
---|---|
propose |
Select trials based on MAP discriminability. |
Attributes:
Name | Type | Description |
---|---|---|
pool |
|
Source code in src/psyphy/trial_placement/greedy_map.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Select trials based on MAP discriminability.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Posterior object. Provides MAP params. |
required |
batch_size
|
int
|
Number of trials to propose. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Selected trials. |
Notes
MVP: Returns first N candidates. Full WPPM mode: - Score all candidates with _score_candidate(). - Rank candidates by score. - Select top-N.
Source code in src/psyphy/trial_placement/greedy_map.py
Info Gain¶
info_gain
¶
info_gain.py
Information-gain placement (e.g., entropy, expected Absolute Volume Change (EAVC)).
MVP: - Returns first N candidates (stub)
Full WPPM mode: - Requires posterior.sample() (Laplace/MCMC). - For each candidate: * Draw posterior samples. * Compute predictive distribution of responses. * Compute expected entropy or EAVC. * Rank candidates by information gain.
Classes:
Name | Description |
---|---|
InfoGainPlacement |
Information-gain adaptive placement. |
InfoGainPlacement
¶
Bases: TrialPlacement
Information-gain adaptive placement.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
candidate_pool
|
list of (ref, probe)
|
Candidate stimuli. |
required |
Methods:
Name | Description |
---|---|
propose |
Propose trials that maximize information gain. |
Attributes:
Name | Type | Description |
---|---|---|
pool |
|
Source code in src/psyphy/trial_placement/info_gain.py
propose
¶
propose(posterior, batch_size: int) -> TrialBatch
Propose trials that maximize information gain.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
posterior
|
Posterior
|
Posterior object. Must support sample(). |
required |
batch_size
|
int
|
Number of trials to propose. |
required |
Returns:
Type | Description |
---|---|
TrialBatch
|
Selected trials. |
Notes
MVP: Returns first N candidates. Full WPPM mode: - Score all candidates with _score_candidate(). - Rank candidates by score. - Select top-N.