Metadata-Version: 2.4
Name: qga-py
Version: 0.1.0
Summary: Quantum-inspired genetic and evolutionary algorithms for combinatorial optimization.
Author: William Zhang
License-Expression: MIT
Project-URL: Homepage, https://github.com/williamzpn/qga-py
Project-URL: Repository, https://github.com/williamzpn/qga-py
Project-URL: Issues, https://github.com/williamzpn/qga-py/issues
Keywords: genetic algorithm,optimization,quantum-inspired,qga,qea,tsp
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.22
Provides-Extra: dev
Requires-Dist: build; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: twine; extra == "dev"
Dynamic: license-file

# qga-py

Quantum-inspired genetic and evolutionary algorithms for combinatorial
optimization on classical computers.

This project does not require quantum hardware. It implements practical
quantum-inspired optimizers that maintain probability amplitudes or
probability-like distributions, sample candidate solutions, evaluate them, and
update the distributions toward better solutions.

## Installation

For local development:

```bash
pip install -e ".[dev]"
```

After publishing:

```bash
pip install qga-py
```

## Usage

Binary optimization:

```python
from qga import BinaryQGA

def fitness(bits, _):
    return bits.sum()

optimizer = BinaryQGA(
    genome_length=100,
    population_size=20,
    generations=200,
    fitness_func=fitness,
)

result = optimizer.run()
print(result.best_solution, result.best_fitness)
```

Permutation optimization:

```python
from qga import PermutationQGA

def fitness(route, distance):
    length = sum(distance[route[i - 1], route[i]] for i in range(len(route)))
    return -length

optimizer = PermutationQGA(
    n_items=20,
    population_size=40,
    generations=300,
    fitness_func=fitness,
    fitness_inputs=distance,
)

result = optimizer.run()
print(result.best_solution, result.best_fitness)
```

## Included Examples

- `examples/knapsack_demo.py`
- `examples/tsp_demo.py`

## Publishing Checklist

1. Update the project URLs in `pyproject.toml`.
2. Run tests with `pytest`.
3. Build with `python -m build`.
4. Upload to TestPyPI first with `python -m twine upload --repository testpypi dist/*`.
5. Install from TestPyPI and verify imports.
6. Upload to PyPI with `python -m twine upload dist/*`.

## License

MIT
