| --- |
| title: Neuromorphic Molecular Constraint Solver |
| emoji: 𧬠|
| colorFrom: blue |
| colorTo: green |
| sdk: streamlit |
| sdk_version: 1.27.2 |
| app_file: app.py |
| pinned: false |
| license: mit |
| --- |
|
|
| # 𧬠Neuromorphic Molecular Constraint Solver |
|
|
| **An experimental system that generates molecular graphs by solving massive Boolean SAT problems with phase oscillators.** |
|
|
| --- |
|
|
| ## π― What This Demo Does |
|
|
| You set chemical constraints (aromatic rings, molecular weight, forbidden groups) β System encodes them as a 40,000-clause 3-SAT problem β Neuromorphic solver finds a solution β You get a molecular graph. |
|
|
| **Result:** 99%+ constraint satisfaction, but the molecules are... *weird*. |
|
|
| --- |
|
|
| ## β‘ Quick Start |
|
|
| ### 1. Set Constraints (Sidebar) |
| - **Aromatic Rings:** 0-5 |
| - **Max Molecular Weight:** 200-700 Da |
| - **β οΈ Min Atoms: SET TO 10-15** (or you'll get single atoms) |
| - **Forbidden Groups:** nitro, azide, peroxide |
|
|
| ### 2. Click "Generate Molecules" |
| Wait ~30 seconds (encoding + solving is slow) |
|
|
| ### 3. View Results |
| - **Satisfaction:** 99%+ means solver succeeded |
| - **Graph View:** Shows atom connectivity |
| - **Details:** Raw atom/bond data in JSON |
|
|
| --- |
|
|
| ## β οΈ Important Disclaimers |
|
|
| ### This Is NOT a Drug Discovery Tool |
| The outputs look like this: |
| - **Molecule 1:** Single nitrogen atom (N) |
| - **Molecule 2:** Sulfur-fluorine triangle (S-F-F) |
| - **Molecule 3:** A connected graph of 15 carbons that satisfies your constraints but looks nothing like a real molecule |
|
|
| **Why?** SAT solvers don't "know" chemistryβthey only know Boolean logic. |
|
|
| ### What's Actually Happening |
| 1. **Encoding:** Chemical rules β ~40,000 Boolean clauses |
| - "Carbon needs 4 bonds" β dozens of clauses |
| - "Molecule must be connected" β graph connectivity clauses |
| - "MW < 500" β threshold comparison clauses |
|
|
| 2. **Solving:** Phase oscillators find a satisfying assignment |
| - Not traditional search (DPLL/CDCL) |
| - Uses Kuramoto dynamics + Hebbian learning |
| - Relaxes into stable states |
|
|
| 3. **Decoding:** Boolean assignment β molecular graph |
| - Variables map to atoms/bonds |
| - Graph is *valid* (mathematically) |
| - But not necessarily *realistic* (chemically) |
|
|
| --- |
|
|
| ## π€ What's Interesting About This |
|
|
| ### β
What Works |
| - **High satisfaction rates:** 99%+ on 40,000-clause problems |
| - **Constraint composition:** Add new rules without retraining |
| - **Neuromorphic:** Could run on Intel Loihi at 1mW |
| - **No training data:** Pure logical constraint satisfaction |
|
|
| ### β What Doesn't |
| - **Chemical realism:** Outputs are graphs, not molecules |
| - **Trivial solutions:** Single atoms count as "molecules" |
| - **Speed:** 30s per molecule (encoding is slow) |
| - **Bond orders:** No single/double/triple distinction |
|
|
| --- |
|
|
| ## π¬ Technical Details |
|
|
| ### Problem Size |
| For a 30-atom molecule with full constraints: |
| - **Variables:** ~15,000 |
| - **Clauses:** ~40,000 |
| - **Encoding time:** ~5 seconds |
| - **Solving time:** ~25 seconds |
|
|
| ### Solver Algorithm |
| ```python |
| # Simplified |
| for step in range(300): |
| # Drive unsatisfied clauses |
| stamp_variables_toward_satisfaction() |
| |
| # Kuramoto coupling |
| couple_phase_oscillators() |
| |
| # Hebbian growth/pruning |
| strengthen_coherent_connections() |
| prune_weak_connections() |
| ``` |
|
|
| It's a **gradient-free, heuristic** method inspired by cortical dynamics. |
|
|
| --- |
|
|
| ## π¨ Use Cases |
|
|
| ### β
What This IS Good For |
| 1. **SAT Solver Benchmarking** |
| - Test on large constraint problems |
| - Compare neuromorphic vs. traditional solvers |
|
|
| 2. **Constraint-Based Graph Generation** |
| - Generate connected graphs with properties |
| - Educational tool for SAT encoding |
|
|
| 3. **Neuromorphic Computing Demo** |
| - Show phase-based computation |
| - Demonstrate sparse solver scaling |
|
|
| ### β What This Is NOT Good For |
| 1. **Drug Discovery** (molecules are weird) |
| 2. **Chemical Synthesis** (graphs β real molecules) |
| 3. **Production Systems** (too slow, too experimental) |
|
|
| --- |
|
|
| ## π Example Results |
|
|
| ### Constraint Set: |
| ``` |
| aromatic_rings == 3 |
| molecular_weight < 500 |
| min_atoms >= 15 |
| NOT nitro |
| NOT azide |
| synthesizable |
| ``` |
|
|
| ### Output (Molecule 1): |
| ``` |
| Satisfaction: 99.8% |
| Atoms: 18 |
| Bonds: 22 |
| Aromatic rings: 3 β
|
| MW: 450 Da β
|
| Forbidden groups: None β
|
|
|
| Graph: |
| 00:C β 1, 5, 17 |
| 01:C β 0, 2, 6 |
| 02:N β 1, 3 |
| ... |
| ``` |
|
|
| **Interpretation:** |
| - Satisfies all constraints β
|
| - Forms a connected graph β
|
| - Looks chemically plausible... *if you squint* π€¨ |
|
|
| --- |
|
|
| ## π Educational Value |
|
|
| ### What You Can Learn |
| 1. **How to encode chemistry as SAT** |
| - Valence rules β cardinality constraints |
| - Connectivity β graph reachability |
| - Properties β threshold comparisons |
|
|
| 2. **Neuromorphic computing principles** |
| - Phase oscillators for optimization |
| - Hebbian learning for structure |
| - Sparse representations for scaling |
|
|
| 3. **Limits of pure logic** |
| - Why neural nets exist (learn distributions) |
| - Why constraints alone aren't enough |
| - The gap between "valid" and "realistic" |
|
|
| --- |
|
|
| ## π Try It Yourself |
|
|
| ### Experiment 1: Trivial Solutions |
| Set `min_atoms = 1` and see what happens. |
| **Result:** Single atoms everywhere. |
| **Lesson:** Constraints must be explicit. |
|
|
| ### Experiment 2: Conflict Resolution |
| Set conflicting constraints: |
| ``` |
| aromatic_rings == 5 |
| molecular_weight < 200 # Impossible! |
| ``` |
| **Result:** ~85% satisfaction (solver gives up on impossible clauses) |
| **Lesson:** Heuristic solvers "satisfice" instead of failing. |
|
|
| ### Experiment 3: Extreme Constraints |
| Set 10+ constraints and watch the solver work. |
| **Result:** Takes longer, but still finds 95%+ solutions. |
| **Lesson:** Neuromorphic scaling is decent. |
|
|
|
|
| ## π Credits |
|
|
| **Inspired by:** |
| - P-KAS (Phase-Keyed Associative Storage) |
| - Kuramoto model of synchronization |
| - Dendritic computation |
|
|
| **Built with:** |
| - Python, NumPy, Streamlit |
| - RDKit (for visualization attempts) |
|
|
| --- |
|
|
| ## βοΈ License & Disclaimer |
|
|
| **License:** MIT |
| **Warranty:** None |
| **Chemical Validity:** Questionable |
| **Should You Synthesize These?** Absolutely not |
|
|
| **Status:** Research prototype / Educational tool / "Interesting Failure"β’ |
|
|
| --- |
|
|
| ## π¬ Feedback |
|
|
| Found a bug? (There are many.) |
| Have ideas? (Please share.) |
| Confused why molecules are weird? (Join the club.) |
|
|
|
|
| *"It's not a bug, it's an undiscovered feature in Boolean constraint satisfaction."* |
| β The developers, probably |