Evaluates de novo molecular generation models on the ZINC-250k dataset across three tasks: unconditional generation from a Gaussian prior, unconstrained property optimization (maximizing penalized logP and QED), and constrained optimization (modifying molecules to improve logP while preserving structural similarity). Use when the user wants to benchmark on ZINC-250k, or asks about evaluating this task. Reports Top-3 Penalized logP.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add qhjqhj00/research-skills-pool --skill zinc250k-mol-gen-eval --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Zinc250k Mol Gen Eval?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/qhjqhj00-zinc250k-mol-gen-eval)More formats (shields.io, HTML) on the badges page.
---
name: zinc250k-mol-gen-eval
description: Evaluates de novo molecular generation models on the ZINC-250k dataset across three tasks: unconditional generation from a Gaussian prior, unconstrained property optimization (maximizing penalized logP and QED), and constrained optimization (modifying molecules to improve logP while preserving structural similarity). Use when the user wants to benchmark on ZINC-250k, or asks about evaluating this task. Reports Top-3 Penalized logP.
metadata:
skill_kind: dataset_eval
source_arxiv: 2205.01592
bibtex_key: richards2022conditional
confidence: high
---
# zinc250k-mol-gen-eval
> Conditional $\beta$-VAE for De Novo Molecular Generation — Richards et al. (2022) (arXiv:2205.01592, 2022)
## What this evaluates
Evaluates de novo molecular generation models on the ZINC-250k dataset across three tasks: unconditional generation from a Gaussian prior, unconstrained property optimization (maximizing penalized logP and QED), and constrained optimization (modifying molecules to improve logP while preserving structural similarity).
## Datasets
- **ZINC-250k** — total 250000; splits: train (-1), test (-1)
## Metrics
- `% Validity` — range: percent
- Percentage of generated SMILES strings that represent chemically valid molecules.
- `% Validity w/o check` — range: percent
- Validity computed without using the partial SMILES parser for intermediate decoding corrections.
- `% Uniqueness` — range: percent
- Percentage of generated molecules that are unique and chemically valid.
- `% Novelty` — range: percent
- Percentage of valid molecules that do not appear in the training dataset.
- `% N.U.V.` — range: percent
- Percentage of molecules that are simultaneously novel, unique, and valid.
- `Top-3 Penalized logP` **(primary)** — range: other
- The three highest penalized logP scores achieved during unconstrained optimization using MSO.
- `Top-3 QED` — range: other
- The three highest Quantitative Estimate of Drug-likeness scores achieved during unconstrained optimization.
- `Improvement (pLogP)` — range: other
- Increase in penalized logP score between the best modified molecule and the original starting molecule.
- `Similarity (Tanimoto)` — range: [0, 1]
- Tanimoto similarity computed using RDKit fingerprints between the original and modified molecules.
- `Success` — range: percent
- Percentage of constrained optimization runs where the modified molecule's pLogP score exceeds the original.
## Input / output format
**Input**: SMILES strings representing molecules from the ZINC-250k dataset, optionally conditioned on standardized property scores (penalized logP or QED). For optimization tasks, initial molecules or their encoded latent vectors are provided.
**Output**: Generated SMILES sequences and their corresponding property scores (penalized logP, QED). For optimization, modified SMILES and their scores.
## Scoring recipe
```python
def compute_metrics(generated_smiles, train_set, original_smiles, modified_smiles):
valid = [is_chemically_valid(m) for m in generated_smiles]
valid_mols = [m for m, v in zip(generated_smiles, valid) if v]
validity = sum(valid) / len(generated_smiles)
uniqueness = len(set(valid_mols)) / len(generated_smiles)
novelty = len([m for m in valid_mols if m not in train_set]) / len(generated_smiles)
nuv = novelty * uniqueness
improvements = [max(p_logp(mod)) - p_logp(orig) for orig, mod in zip(original_smiles, modified_smiles)]
similarities = [tanimoto(orig, mod) for orig, mod in zip(original_smiles, modified_smiles)]
success = sum(1 for imp in improvements if imp > 0) / len(improvements)
return validity, uniqueness, novelty, nuv, improvements, similarities, success
```
## Common pitfalls
- "Validity w/o check" must be computed without the partial SMILES parser guidance, unlike standard validity which uses it during decoding.
- QED scores require quantile normalization to a Gaussian prior, whereas pLogP uses simple linear standardization; mixing these causes poor optimization.
- Constrained optimization disables conditional sampling to preserve semantic proximity in latent space; using conditioning degrades similarity constraints.
## Evidence (verbatim from paper)
> Improvement is measured by finding the increase in pLogP scores between the modification with the highest score and the respective original molecule. Similarity is measured by computing the Tanimoto similarity between each modification the respective starting molecule. Success is measured by the percent of successful modification, i.e. the percent of modifications that have exceeded the scores of their respective starting molecules.
## Citation
```bibtex
@misc{richards2022conditional,
title={Conditional $\beta$-VAE for De Novo Molecular Generation},
author={Richards et al. (2022)},
year={2022},
note={arXiv:2205.01592}
}
```
- arXiv: 2205.01592
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!