mqt.problemsolver.csp

Module Contents

class Constraint[source]

Bases: TypedDict

Class to store the properties of a single constraint.

constraint_type: str
operand_one: str
operand_two: str
to_be_satisfied_sum: int
class CSP[source]
solve(constraints: list[Constraint], quantum_algorithm: str = 'Grover') → tuple[int, int, int, int] | bool[source]

Method to solve the problem.

Parameters:
  • constraints – List of to be satisfied constraints.

  • quantum_algorithm – Selected quantum algorithm to solve problem.

Returns:

Solution to the problem if it exists.

print_problem(sum_s0: str | int = 's0', sum_s1: str | int = 's1', sum_s2: str | int = 's2', sum_s3: str | int = 's3', a: str | int = 'a', b: str | int = 'b', c: str | int = 'c', d: str | int = 'd') → None[source]

Method to visualize the problem.

Parameters:
  • sum_s0 – Sum to be satisfied.

  • sum_s1 – Sum to be satisfied.

  • sum_s2 – Sum to be satisfied.

  • sum_s3 – Sum to be satisfied.

  • a – Variable value satisfying the respective sums.

  • b – Variable value satisfying the respective sums.

  • c – Variable value satisfying the respective sums.

  • d – Variable value satisfying the respective sums.

check_inequality(qc: qiskit.QuantumCircuit, x: tuple[qiskit.QuantumRegister, qiskit.QuantumRegister], y: tuple[qiskit.QuantumRegister, qiskit.QuantumRegister], res_anc: qiskit.QuantumRegister) → None[source]
check_equality(qc: qiskit.QuantumCircuit, x: tuple[qiskit.QuantumRegister, qiskit.QuantumRegister, qiskit.QuantumRegister], s: str, res_anc: qiskit.QuantumRegister) → None[source]
add_two_numbers(qc: qiskit.QuantumCircuit, x: tuple[qiskit.QuantumRegister, qiskit.QuantumRegister], y: tuple[qiskit.QuantumRegister, qiskit.QuantumRegister], ancs: qiskit.QuantumRegister, res_anc_low: qiskit.QuantumRegister, res_anc_high: qiskit.QuantumRegister, anc_carry: qiskit.QuantumRegister) → tuple[qiskit.QuantumRegister, qiskit.QuantumRegister, qiskit.QuantumRegister][source]
encode_constraints(qc: qiskit.QuantumCircuit, a: qiskit.QuantumRegister, b: qiskit.QuantumRegister, c: qiskit.QuantumRegister, d: qiskit.QuantumRegister, anc: qiskit.QuantumRegister, constraints: list[Constraint]) → tuple[qiskit.QuantumCircuit, list[qiskit.QuantumRegister]][source]
create_oracle(qc: qiskit.QuantumCircuit, mct_list: list[qiskit.QuantumRegister], flag: qiskit.QuantumRegister) → Instruction[source]
init_qc() → tuple[qiskit.QuantumCircuit, qiskit.QuantumRegister, qiskit.QuantumRegister, int, int, tuple[tuple[qiskit.QuantumRegister, qiskit.QuantumRegister], tuple[qiskit.QuantumRegister, qiskit.QuantumRegister], tuple[qiskit.QuantumRegister, qiskit.QuantumRegister], tuple[qiskit.QuantumRegister, qiskit.QuantumRegister]]][source]
create_grover(oracle: Instruction, nqubits: int, nancilla: int, ninputs: int, grover_iterations: int) → qiskit.QuantumCircuit[source]
simulate(qc: qiskit.QuantumCircuit) → tuple[int, int, int, int] | None[source]
get_available_quantum_algorithms() → list[str][source]

Method to get all available quantum algorithms in a list.

get_kakuro_constraints(sum_s0: int, sum_s1: int, sum_s2: int, sum_s3: int) → list[Constraint][source]

Method to get a list of constraints for the inserted sums.