generative-design

Use when designing or evaluating generative models for de novo drug/molecule design. Covers molecular generation theory and evaluation (MOSES/GuacaMol), SELFIES + language models, RL-based optimization with REINVENT 4, JT-VAE and graph-based generation, and structure-based 3D generation (DiffSBDD, Pocket2Mol, DiffLinker).

Generative Molecular Design

De novo design of novel molecules with desired properties using generative models — the core ML capability for lead generation and scaffold hopping in drug discovery.

When to Use This Skill

  • Generate molecules with target properties (QED, LogP, SA, docking score)
  • Explore chemical space around a hit/lead (analogue generation, scaffold hopping)
  • Design molecules conditioned on a protein pocket (SBDD)
  • Optimize multi-property objectives (Pareto front: potency + selectivity + ADMET)
  • Benchmark or compare generative models (MOSES / GuacaMol suites)
  • Build a RL-based focused library generator (REINVENT 4)
  • Design linkers or grow fragments (fragment-based generative design)

Generation Paradigms

ParadigmMethodStrengthWeakness
Language modelSMILES/SELFIES GPT, LSTMFast, scalable, fine-tunableSMILES can be invalid; needs SELFIES
VAEJT-VAE, MolVAESmooth latent space, BO-readyMode collapse; slow tree encode
GNN flow/GANGraphAF, GCPN, JunctionGANGraph-native; no linearityTraining instability
RL optimizationREINVENT 4, REINFORCEProperty-guided; no new arch neededReward hacking; mode collapse
3D diffusionDiffSBDD, TargetDiffPocket-conditioned; 3D geometrySlow, needs structure
Fragment-basedDeLinker, DiffLinkerFragment growing, FBDDLimited to provided fragments

Evaluation Metrics (Know These)

MetricWhat it measuresTarget
Validity% chemically valid~100% (SELFIES) / 85-99% (SMILES LM)
Uniqueness% unique in generated set>99%
Novelty% not in training set>99%
FCDFréchet ChemNet Distance (distribution)Lower = closer to drug-like distribution
KL divergenceProperty distributions vs. referenceLower
Scaffold diversity# unique Murcko scaffolds / NHigher
IntDivInternal diversity (mean pairwise 1-Tc)> 0.85
SNNSimilarity to nearest neighbor in training< 0.6 (novel)

Quick Start — SELFIES + GPT sampling

import selfies as sf
from rdkit import Chem

# Encode/decode SELFIES (guaranteed valid)
smiles = "CC(=O)Oc1ccccc1C(=O)O"  # aspirin
selfies_str = sf.encoder(smiles)
decoded_smiles = sf.decoder(selfies_str)
mol = Chem.MolFromSmiles(decoded_smiles)  # always valid

# Get SELFIES alphabet for tokenization
alphabet = sf.get_semantic_robust_alphabet()

# Decode a random generated SELFIES token sequence (always valid):
generated_tokens = ["[C]", "[Branch1]", "[C]", "[=O]", "[N]", "[H]"]
generated_smiles = sf.decoder("".join(generated_tokens))

Quick Start — REINVENT 4 scoring component

# Install: pip install reinvent
# REINVENT 4 uses TOML config for staged learning

import toml

config = {
    "run_type": "reinforcement_learning",
    "device": "cuda",
    "tb_logdir": "tb_logs",
    "json_out_config": "run_config.json",
    "parameters": {
        "use_checkpoint": False,
        "prior_file": "path/to/prior.prior",
        "agent_file": "path/to/prior.prior",
        "batch_size": 128,
        "n_steps": 1000,
    },
    "scoring": {
        "type": "custom_product",
        "parallel": False,
        "components": [
            {"type": "qed", "name": "QED", "weight": 1.0},
            {"type": "sa_score", "name": "SA", "weight": 1.0,
             "transform": {"type": "reverse_sigmoid", "low": 1.0, "high": 6.0, "k": 0.5}},
        ],
        "diversity_filter": {
            "type": "IdenticalMurckoScaffold",
            "minscore": 0.4,
            "bucket_size": 25,
        }
    }
}
with open("rl_config.toml", "w") as f:
    toml.dump(config, f)
# Run: reinvent -l rl_run.log rl_config.toml

Router — What to Read

TaskReference
Theory: molecular space, SMILES/SELFIES/graphs, metrics, MOSES/GuacaMol benchmarksreferences/generation-theory.md
SELFIES grammar, SMILES LM (GPT/LSTM), HuggingFace fine-tuning, sampling strategiesreferences/selfies-lm.md
REINVENT 4: RL optimization, multi-component scoring, diversity filters, oraclesreferences/rl-reinvent.md
JT-VAE: tree decomposition, latent BO; TorchDrug graph generative models overviewreferences/vae-jtvae.md
Structure-based 3D generation: DiffSBDD, TargetDiff, Pocket2Mol, linker designreferences/sbdd-diffusion.md

Software Stack

PackageInstallRole
selfiespip install selfiesAlways-valid molecular grammar
reinventpip install reinventRL de novo design (AZ REINVENT 4)
guacamolpip install guacamolBenchmark suite (17 goal-directed + distributional)
mosespip install molsetsMOSES benchmark (6 metrics)
transformerspip install transformersGPT/LSTM LMs (HuggingFace)
torchdrugpip install torchdrugGCPN, GraphAF, JT-VAE (graph-native)
DiffSBDDGitHub: arneschneuing/DiffSBDD3D pocket-conditioned diffusion
DiffLinkerGitHub: igashov/DiffLinkerLinker design in 3D

Key Pitfalls

  • SMILES LMs can generate 10-50% invalid → use SELFIES; or add validity filter post-hoc
  • Reward hacking in RL: model learns degenerate structures that maximize score — add diversity filter + SA penalty
  • FCD is not computed from structure: requires ChemNet embeddings (guacamol includes this)
  • Novelty ≠ synthesizability: always check SA score ≤ 4, run retrosynthesis (ASKCOS/AiZynthFinder)
  • 3D diffusion needs pocket quality: must use properly prepared protein (see homology-modeling → structure-prep)
  • Mode collapse in VAE: monitor KL weight β; schedule β-VAE warmup

Related Skills

  • torchdrug — GCPN, GraphAF, GraphDF, JT-VAE implementation
  • rdkit — validity checks, property scoring oracles (QED, SA, fingerprints)
  • docking — docking oracle for RL scoring (Vina/Gnina scoring function)
  • pharmacophore — pharmacophore constraints for conditional generation
  • homology-modelingstructure-prep — pocket preparation for SBDD
  • scientific-skills:zinc-database — training/reference sets (ZINC20)
  • mmpa (upcoming) — matched molecular pair analysis on generated series