Configuration System#
The TACTICS package uses Pydantic v2 for robust configuration management with automatic
validation and type checking. The configuration system uses SynthesisPipeline as the
single source of truth for reactions and reagents.
Configuration Hierarchy#
Quick Start#
Modern approach (recommended):
from TACTICS.library_enumeration import SynthesisPipeline
from TACTICS.library_enumeration.smarts_toolkit import ReactionConfig, ReactionDef
from TACTICS.thompson_sampling.config import ThompsonSamplingConfig
from TACTICS.thompson_sampling.strategies.config import RouletteWheelConfig
from TACTICS.thompson_sampling.warmup.config import BalancedWarmupConfig
from TACTICS.thompson_sampling.core.evaluator_config import LookupEvaluatorConfig
# Create synthesis pipeline (single source of truth)
rxn_config = ReactionConfig(
reactions=[ReactionDef(
reaction_smarts="[C:1](=O)[OH].[NH2:2]>>[C:1](=O)[NH:2]",
step_index=0
)],
reagent_file_list=["acids.smi", "amines.smi"]
)
pipeline = SynthesisPipeline(rxn_config)
# Create Thompson Sampling config
config = ThompsonSamplingConfig(
synthesis_pipeline=pipeline,
num_ts_iterations=1000,
strategy_config=RouletteWheelConfig(mode="maximize", alpha=0.1),
warmup_config=BalancedWarmupConfig(observations_per_reagent=3),
evaluator_config=LookupEvaluatorConfig(ref_filename="scores.csv"),
batch_size=10
)
Using presets:
from TACTICS.library_enumeration import SynthesisPipeline
from TACTICS.library_enumeration.smarts_toolkit import ReactionConfig, ReactionDef
from TACTICS.thompson_sampling import get_preset
from TACTICS.thompson_sampling.core.evaluator_config import LookupEvaluatorConfig
# Create synthesis pipeline
rxn_config = ReactionConfig(
reactions=[ReactionDef(
reaction_smarts="[C:1](=O)[OH].[NH2:2]>>[C:1](=O)[NH:2]",
step_index=0
)],
reagent_file_list=["acids.smi", "amines.smi"]
)
pipeline = SynthesisPipeline(rxn_config)
# Get preset configuration
config = get_preset(
"fast_exploration",
synthesis_pipeline=pipeline,
evaluator_config=LookupEvaluatorConfig(ref_filename="scores.csv"),
num_iterations=1000
)
ThompsonSamplingConfig#
The main configuration class for Thompson Sampling optimization.
Dependencies
Accepts these nested config objects:
SynthesisPipeline - via
synthesis_pipeline(required)Strategy Configs - via
strategy_configWarmup Configs - via
warmup_configEvaluator Configs - via
evaluator_config
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Yes |
Single source of truth for reactions and reagents. |
|
|
Yes |
Maximum sampling cycles. |
|
|
No |
Warmup trials per reagent. Default: 3. |
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Yes* |
Selection strategy configuration. |
|
|
No |
Warmup strategy. Default: BalancedWarmupConfig. |
|
|
Yes* |
Evaluator configuration. |
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
No |
Compounds to sample per cycle. Default: 1. |
|
|
No |
CPU cores for parallel evaluation. Default: 1. |
|
|
No |
Min compounds per core before batch evaluation. Default: 10. |
|
|
No |
Stop after this many consecutive duplicates. |
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
No |
Output CSV path. Default: |
|
|
No |
Log file path. |
|
|
No |
Hide progress bars. Default: False. |
|
|
No |
Legacy RWS Boltzmann updates. Default: False. |
|
|
No |
Auto-detect reagent SMARTS compatibility. Default: False. |
|
|
No |
Apply deprotection during detection. Default: False. |
|
|
No |
Apply desalting during detection. Default: False. |
Strategy Configurations#
All strategy configs are used with ThompsonSamplingConfig.strategy_config.
GreedyConfig#
Configuration for greedy (argmax/argmin) selection.
Creates: GreedySelection
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
No |
|
RouletteWheelConfig#
Configuration for roulette wheel selection with thermal cycling and CATS.
Creates: RouletteWheelSelection
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
No |
|
|
|
No |
Base temperature for heated component. Default: 0.1. |
|
|
No |
Base temperature for cooled components. Default: 0.05. |
|
|
No |
Fraction before CATS starts [0, 1]. Default: 0.20. |
|
|
No |
Fraction when CATS fully applied [0, 1]. Default: 0.60. |
|
|
No |
Min observations for criticality trust. Default: 5. |
UCBConfig#
Configuration for Upper Confidence Bound selection.
Creates: UCBSelection
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
No |
|
|
|
No |
Exploration parameter. Higher = more exploration. Default: 2.0. |
EpsilonGreedyConfig#
Configuration for epsilon-greedy selection with decay.
Creates: EpsilonGreedySelection
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
No |
|
|
|
No |
Initial exploration probability [0, 1]. Default: 0.1. |
|
|
No |
Decay rate per iteration (0, 1]. Default: 0.995. |
BayesUCBConfig#
Configuration for Bayesian UCB with CATS integration.
Creates: BayesUCBSelection
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
No |
|
|
|
No |
Percentile for heated component [0.5, 0.999]. Default: 0.90. |
|
|
No |
Percentile for cooled components [0.5, 0.999]. Default: 0.60. |
|
|
No |
Fraction before CATS starts. Default: 0.20. |
|
|
No |
Fraction when CATS fully applied. Default: 0.60. |
|
|
No |
Min observations for criticality. Default: 5. |
Warmup Configurations#
All warmup configs are used with ThompsonSamplingConfig.warmup_config.
BalancedWarmupConfig (Recommended)#
Configuration for balanced warmup with per-reagent variance estimation.
Creates: BalancedWarmup
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
No |
Observations per reagent. Default: 3. |
|
|
No |
Use per-reagent variance estimation. Default: True. |
|
|
No |
James-Stein shrinkage strength. Default: 3.0. |
|
|
No |
Random seed for reproducibility. |
StandardWarmupConfig#
Configuration for standard warmup with random partners.
Creates: StandardWarmup
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
No |
Random seed for reproducibility. |
EnhancedWarmupConfig#
Configuration for legacy enhanced warmup (stochastic parallel pairing).
Creates: EnhancedWarmup
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
No |
Random seed for reproducibility. |
Evaluator Configurations#
All evaluator configs are used with ThompsonSamplingConfig.evaluator_config.
LookupEvaluatorConfig#
Configuration for CSV-based score lookup.
Creates: LookupEvaluator
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
Yes |
Path to CSV file with scores. |
|
|
No |
Score column name. Default: |
|
|
No |
Compound ID column. Default: |
DBEvaluatorConfig#
Configuration for SQLite database lookup.
Creates: DBEvaluator
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
Yes |
Path to SQLite database. |
|
|
No |
Key prefix for lookups. Default: |
FPEvaluatorConfig#
Configuration for fingerprint similarity evaluation.
Creates: FPEvaluator
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
Yes |
Reference molecule SMILES. |
|
|
No |
Morgan fingerprint radius. Default: 2. |
|
|
No |
Fingerprint bit length. Default: 2048. |
ROCSEvaluatorConfig#
Configuration for 3D shape similarity (requires OpenEye).
Creates: ROCSEvaluator
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
Yes |
Path to reference structure (.sdf). |
|
|
No |
Max conformers to generate. Default: 50. |
FredEvaluatorConfig#
Configuration for molecular docking (requires OpenEye).
Creates: FredEvaluator
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
Yes |
Path to receptor file (.oedu). |
|
|
No |
Max conformers to generate. Default: 100. |
MLClassifierEvaluatorConfig#
Configuration for ML model-based evaluation.
Creates: MLClassifierEvaluator
Parameter |
Type |
Required |
Description |
|---|---|---|---|
|
|
Auto |
Set automatically. |
|
|
Yes |
Path to pickled sklearn model. |
Configuration Presets#
TACTICS provides pre-configured setups for common use cases via get_preset().
Dependencies
Returns fully configured ThompsonSamplingConfig objects with preset strategy, warmup, and evaluator configurations.
Available Presets:
Preset Name |
Description |
|---|---|
|
Quick screening with epsilon-greedy (epsilon=0.2, decay=0.995). |
|
Batch processing for slow evaluators with RouletteWheel. |
|
Hit optimization with greedy strategy. |
|
General-purpose with UCB (c=2.0). |
|
Maximum diversity with high-temperature RouletteWheel. |
|
Original RWS algorithm for maximize mode. |
|
Original RWS algorithm for minimize mode (docking). |
Example usage:
from TACTICS.library_enumeration import SynthesisPipeline
from TACTICS.library_enumeration.smarts_toolkit import ReactionConfig, ReactionDef
from TACTICS.thompson_sampling import get_preset
from TACTICS.thompson_sampling.core.evaluator_config import LookupEvaluatorConfig
# Create synthesis pipeline
rxn_config = ReactionConfig(
reactions=[ReactionDef(
reaction_smarts="[C:1](=O)[OH].[NH2:2]>>[C:1](=O)[NH:2]",
step_index=0
)],
reagent_file_list=["acids.smi", "amines.smi"]
)
pipeline = SynthesisPipeline(rxn_config)
# Fast exploration for initial screening
config = get_preset(
"fast_exploration",
synthesis_pipeline=pipeline,
evaluator_config=LookupEvaluatorConfig(ref_filename="scores.csv"),
num_iterations=1000
)
# Parallel batch for docking
from TACTICS.thompson_sampling.core.evaluator_config import FredEvaluatorConfig
config = get_preset(
"parallel_batch",
synthesis_pipeline=pipeline,
evaluator_config=FredEvaluatorConfig(design_unit_file="receptor.oedu"),
mode="minimize",
batch_size=100
)
Factory Functions#
Factory functions create component instances from configurations.
Dependencies
create_strategy()- takes Strategy Configscreate_warmup()- takes Warmup Configscreate_evaluator()- takes Evaluator Configs
Function |
Description |
|---|---|
|
Create SelectionStrategy from config. |
|
Create WarmupStrategy from config. |
|
Create Evaluator from config. |
Example:
from TACTICS.thompson_sampling.factories import (
create_strategy,
create_warmup,
create_evaluator
)
from TACTICS.thompson_sampling.strategies.config import RouletteWheelConfig
from TACTICS.thompson_sampling.warmup.config import BalancedWarmupConfig
from TACTICS.thompson_sampling.core.evaluator_config import LookupEvaluatorConfig
strategy = create_strategy(RouletteWheelConfig(mode="maximize", alpha=0.1))
warmup = create_warmup(BalancedWarmupConfig(observations_per_reagent=5))
evaluator = create_evaluator(LookupEvaluatorConfig(ref_filename="scores.csv"))
JSON/YAML Configuration#
Note
ThompsonSamplingConfig requires a SynthesisPipeline object which cannot be
serialized directly to JSON. For reproducibility, serialize the ReactionConfig
and evaluator/strategy configs separately.
Save ReactionConfig to JSON:
import json
from TACTICS.library_enumeration.smarts_toolkit import ReactionConfig, ReactionDef
rxn_config = ReactionConfig(
reactions=[ReactionDef(
reaction_smarts="[C:1](=O)[OH].[NH2:2]>>[C:1](=O)[NH:2]",
step_index=0
)],
reagent_file_list=["acids.smi", "amines.smi"]
)
with open("reaction_config.json", "w") as f:
json.dump(rxn_config.model_dump(), f, indent=2)
Load and create pipeline:
import json
from TACTICS.library_enumeration import SynthesisPipeline
from TACTICS.library_enumeration.smarts_toolkit import ReactionConfig
with open("reaction_config.json", "r") as f:
data = json.load(f)
rxn_config = ReactionConfig.model_validate(data)
pipeline = SynthesisPipeline(rxn_config)
Example ReactionConfig JSON:
{
"reactions": [
{
"reaction_smarts": "[C:1](=O)[OH].[NH2:2]>>[C:1](=O)[NH:2]",
"step_index": 0,
"pattern_id": null,
"description": null,
"deprotections": []
}
],
"reagent_file_list": ["acids.smi", "amines.smi"],
"step_inputs": null,
"step_modes": null,
"protecting_groups": null
}
Validation Examples#
Type validation:
from TACTICS.library_enumeration import SynthesisPipeline
from TACTICS.library_enumeration.smarts_toolkit import ReactionConfig, ReactionDef
from TACTICS.thompson_sampling.config import ThompsonSamplingConfig
from TACTICS.thompson_sampling.strategies.config import GreedyConfig
from TACTICS.thompson_sampling.core.evaluator_config import LookupEvaluatorConfig
from pydantic import ValidationError
# Create pipeline
rxn_config = ReactionConfig(
reactions=[ReactionDef(reaction_smarts="[C:1](=O)[OH].[NH2:2]>>[C:1](=O)[NH:2]", step_index=0)],
reagent_file_list=["acids.smi", "amines.smi"]
)
pipeline = SynthesisPipeline(rxn_config)
try:
config = ThompsonSamplingConfig(
synthesis_pipeline=pipeline,
num_ts_iterations="not_an_integer", # Invalid!
strategy_config=GreedyConfig(),
evaluator_config=LookupEvaluatorConfig(ref_filename="scores.csv")
)
except ValidationError as e:
print(f"Validation error: {e}")
Constraint validation:
from TACTICS.thompson_sampling.strategies.config import RouletteWheelConfig
from pydantic import ValidationError
try:
config = RouletteWheelConfig(
mode="maximize",
alpha=-0.1, # Invalid: must be > 0
)
except ValidationError as e:
print(f"Constraint error: {e}")
Best Practices#
Use SynthesisPipeline - Single source of truth for reactions and reagents
Use presets - Start with presets and customize as needed
Validate early - Pydantic catches errors before expensive computations
Save ReactionConfig - JSON export for reproducibility
Use BalancedWarmup - Recommended for most use cases
Choose evaluator wisely - Use
processes=1for fast evaluators (Lookup, DB)