Metadata-Version: 2.4
Name: dlr-sc-quark
Version: 1.2
Summary: This is a software package to support the mapping of combinatorial optimization problems to quantum computing interfaces via QUBO and Ising problems.
Home-page: https://gitlab.com/quantum-computing-software/quark/
Author: DLR-SC
Author-email: DLR-SC <qc-software@dlr.de>, Elisabeth Lobe <elisabeth.lobe@dlr.de>, Lukas Windgätter <lukas.windgaetter@dlr.de>
License-Expression: Apache-2.0
Project-URL: Homepage, https://gitlab.com/quantum-computing-software/quark
Project-URL: Issues, https://gitlab.com/quantum-computing-software/quark/-/issues
Keywords: Combinatorial Optimization,QUBO,Ising Problem,Quantum Computing,Quantum Annealing
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: h5py
Requires-Dist: scip
Requires-Dist: pyscipopt
Requires-Dist: numpy<=1.26
Requires-Dist: pytest
Requires-Dist: networkx
Requires-Dist: bidict
Requires-Dist: matplotlib
Requires-Dist: jupyter
Dynamic: author
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-python

# quark - QUantum Application Reformulation Kernel

[![pipeline status](https://gitlab.com/quantum-computing-software/quark//badges/development/pipeline.svg)](https://gitlab.com/quantum-computing-software/quark/-/commits/development)

This is a software package to support the mapping of combinatorial optimization problems to quantum computing interfaces via QUBO and Ising problems.

## Documentation

The full documentation can be found [here](https://quantum-computing-software.gitlab.io/quark/).

## Description of the Basic Ideas

The combinatorial optimization problem is rewritten as a single (quadratic unconstrained binary) objective function.
The usual way to build it up is to use the following structure:
In the **`Instance`** we describe the problem defining parameters.
From the instance, we construct the **`ObjectiveTerms`**,
containing the different contributions to the objective function,
in particular the ones derived from problem constraints.
The objective terms can be implemented directly or derived from a **`ConstrainedObjective`**,
which contains the objective function and multiple constraints, implemented as **`ConstraintBinary`**.
The objective terms can now be used to create the **`Objective`**
by summing up the single terms weighted with a certain so-called penalty weight.

All objective objects contain **`Polynomials`** representing the functions.
There are special polynomials, **`PolyBinary`** and **`PolyIsing`**,
which take advantage of the restriction to either binary (0 or 1) or spin (-1 or 1) variables.

The **`ScipModel`** is an interface to the classical MILP solver [SCIP](https://scip.zib.de/),
which can solve a **`ConstrainedObjective`** or a (small enough) **`Objective`** for comparison.
In **`Solution`**, we store not only the optimal variable assignment but also further information,
like runtime etc., which are obtained during the solving process.

Furthermore, we have the **`HardwareAdjacency`** and the **`Embedding`**,
which are useful when dealing with actual hardware.

All mentioned objects also provide methods to store and load their information in and from hdf5 files.

## License

This project is [Apache-2.0](https://gitlab.com/quantum-computing-software/quark/-/blob/development/LICENSE) licensed.

Copyright © 2025 German Aerospace Center (DLR) - Institute of Software Technology (SC). 

Please find the individual contributors [here](https://gitlab.com/quantum-computing-software/quark/-/blob/development/CONTRIBUTORS) 
and information for citing this package [here](https://gitlab.com/quantum-computing-software/quark/-/blob/development/CITATION.cff).
