NeurOptimiser
NeurOptimiser is a neuromorphic optimisation framework in which metaheuristic search emerges from asynchronous spiking dynamics. It defines optimisation as a decentralised process executed by interconnected Neuromorphic Heuristic Units (NHUs), each embedding a spiking neuron model and a spike-triggered heuristic rule.
This framework enables fully event-driven, low-power optimisation by integrating spiking computation with local heuristic adaptation. It supports multiple neuron models, perturbation operators, and network topologies.
✨ Key Features
- Modular and extensible architecture using Intel’s Lava.
- Supports linear and Izhikevich neuron dynamics.
- Implements random, fixed, directional, and Differential Evolution operators as spike-triggered perturbations.
- Includes asynchronous neighbourhood management, tensor contraction layers, and greedy selectors.
- Compatible with BBOB (COCO) suite.
- Designed for scalability, reusability, and future deployment on Loihi-class neuromorphic hardware.
📖 Documentation
For detailed documentation, examples, and API reference, please visit the Neuroptimiser Documentation.
📦 Installation
Requirements
- Python 3.10 (tested and recommended version)
- Lava-NC environment configured
Install with pip
# After cloning the repository and navigating to the project directory
pip install -e .
# or just install from PyPI
pip install neuroptimiser
Install with uv
# After cloning the repository and navigating to the project directory
uv pip install -e .
# or just install from PyPI
uv pip install neuroptimiser
You can also use the provided Makefile for additional installation options and commands.
Known Issues
"Too many open files" error: On some systems, you may encounter this error during execution. To fix it:
Unix/Linux/macOS:
ulimit -n 65536
Windows (PowerShell):
# No direct equivalent - typically not needed on Windows
# If issues persist, check system file handle limits via registry
Windows (Command Prompt):
REM Windows typically has higher default limits
REM If needed, adjust via Registry Editor or contact system administrator
🚀 Example Usage
from neuroptimiser import NeurOptimiser
import numpy as np
problem_function = lambda x: np.linalg.norm(x)
problem_bounds = np.array([[-5.0, 5.0], [-5.0, 5.0]])
optimiser = NeurOptimiser()
optimiser.solve(
obj_func=problem_function,
search_space=problem_bounds,
debug_mode=True,
num_iterations=1000,
)
For more examples, please, visit Neuroptimiser Usage
📊 Benchmarking
Neuroptimiser has been validated over the BBOB suite, showing:
- Competitive convergence versus Random Search
- Consistent results across function types and dimensions
- Linear runtime scaling with number of units and problem size
🔬 Citation
@misc{neuroptimiser2025,
author={Cruz-Duarte, Jorge M. and Talbi, El-Ghazali},
title = {Neuroptimiser: A neuromorphic optimisation framework},
year = {2025},
url = {https://github.com/neuroptimiser/neuroptimiser},
note = {Version 1.0.X, accessed on 20XX-XX-XX}
}
🔗 Resources
- 📘 Documentation
- 📜 Paper
- 🧠 Intel Lava-NC
- 🧪 COCO Platform
🛠️ License
BSD-3-Clause License — see LICENSE
🧑💻 Authors
- Jorge M. Cruz-Duarte — University of Lille
- El-Ghazali Talbi — University of Lille
Metadata
Release files for neuroptimiser 1.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| neuroptimiser-1.0.4.tar.gz | 42.3 kB | Without provenance | Details for neuroptimiser-1.0.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| neuroptimiser-1.0.4-py3-none-any.whl | Python 3 | none | any | Details for neuroptimiser-1.0.4-py3-none-any.whl |
Total release size: 80.2 kB
Release files / neuroptimiser-1.0.4.tar.gz
| Download URL | neuroptimiser-1.0.4.tar.gz |
|---|---|
| Size | 42.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d6e635887f29f4dda7ae368db3384ab0f453aa8cc6ac8f940015e96b90bc6041
|
|
BLAKE2b-256 checksum How to use checksums |
9dd6a6ab6c021c61a049127715af24fd6d5d1d678a84befb89c5c7342fbf6956
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.14
|
Release files / neuroptimiser-1.0.4-py3-none-any.whl
| Download URL | neuroptimiser-1.0.4-py3-none-any.whl |
|---|---|
| Size | 37.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
31c48928d6d315596b5cf93d553fa00b50a18e2b311a28bf4cb908da836b56a1
|
|
BLAKE2b-256 checksum How to use checksums |
13aa75ef9bd695b775af6fddd1c045c6283638248b2b9c9bc4099d460be35772
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.14
|
Security for neuroptimiser 1.0.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.