HamiltonianSimulation

Overview

// global functions

QCircuit QPanda::simulateZTerm(const std::vector<Qubit*>& qubit_vec, double coef, double t);

QCircuit QPanda::simulateOneTerm(
    const std::vector<Qubit*>& qubit_vec,
    const QTerm& hamiltonian_term,
    double coef,
    double t
    );

QCircuit QPanda::simulateHamiltonian(
    const std::vector<Qubit*>& qubit_vec,
    const QHamiltonian& hamiltonian,
    double t,
    size_t slices
    );

QCircuit QPanda::simulatePauliZHamiltonian(const std::vector<Qubit*>& qubit_vec, const QHamiltonian& hamiltonian, double t);
QCircuit QPanda::applySingleGateToAll(const std::string& gate, const std::vector<Qubit*>& qubit_vec);
void QPanda::applySingleGateToAll(const std::string& gate, const std::vector<Qubit*>& qubit_vec, QCircuit& circuit);
QCircuit QPanda::ising_model(const std::vector<Qubit*>& qubit_vec, const QGraph& graph, const vector_d& gamma);
QCircuit QPanda::pauliX_model(const std::vector<Qubit*>& qubit_vec, const vector_d& beta);

Detailed Documentation

Global Functions

QCircuit QPanda::simulateZTerm(const std::vector<Qubit*>& qubit_vec, double coef, double t)

Simulating z-only term like H=coef * (Z0..Zn-1) U=exp(-iHt)

Z-Hamiltonian spreads over the qubit_vec

Parameters:

std::vector<Qubit*>& the qubit needed to simulate the Hamiltonian
double the coefficient of hamiltonian
double time

Returns:

QCircuit

QCircuit QPanda::simulateOneTerm(
    const std::vector<Qubit*>& qubit_vec,
    const QTerm& hamiltonian_term,
    double coef,
    double t
    )

Simulate a single term of Hamilonian like “X0 Y1 Z2” with coefficient and time. U=exp(-it*coef*H)

Parameters:

std::vector<Qubit*>& the qubit needed to simulate the Hamiltonian
QTerm& hamiltonian_term: string like “X0 Y1 Z2”
double coef: the coefficient of hamiltonian
double t time

Returns:

QCircuit

QCircuit QPanda::simulateHamiltonian(
    const std::vector<Qubit*>& qubit_vec,
    const QHamiltonian& hamiltonian,
    double t,
    size_t slices
    )

Simulate a general case of hamiltonian by Trotter-Suzuki approximation. U=exp(-iHt)=(exp(-i H1 t/n)*exp(-i H2 t/n))^n.

Parameters:

std::vector<Qubit*>& qubit_vec: the qubit needed to simulate the Hamiltonian
QHamiltonian& hamiltonian: Hamiltonian
double t: time
size_t slices: the approximate slices

Returns:

QCircuit

QCircuit QPanda::simulatePauliZHamiltonian(
    const std::vector<Qubit*>& qubit_vec,
    const QHamiltonian& hamiltonian,
    double t
    )

Simulate hamiltonian consists of pauli-Z operators.

Parameters:

std::vector<Qubit*>& qubit_vec: the qubit needed to simulate the Hamiltonian
QHamiltonian& hamiltonian: Hamiltonian
double t: time

Returns:

QCircuit

QCircuit QPanda::applySingleGateToAll(
    const std::string& gate,
    const std::vector<Qubit*>& qubit_vec
    )

Apply single gates to all qubits in qubit_list.

Parameters:

std::string& gate: single gate name.
std::vector<Qubit*>& qubit_vec: qubit vector

Returns:

QCircuit

void QPanda::applySingleGateToAll(
    const std::string& gate,
    const std::vector<Qubit*>& qubit_vec,
    QCircuit& circuit
    )

Apply single gates to all qubits in qubit_list and insert into circuit.

Parameters:

std::string& gate: single gate name.
std::vector<Qubit*>& qubit_vec: qubit vector
QCircuit& circuit: operated circuit.

Returns:

QCircuit QPanda::ising_model(
    const std::vector<Qubit*>& qubit_vec,
    const QGraph& graph,
    const vector_d& gamma
    )

Ising model.

Parameters:

std::vector<Qubit*>& qubit_vec: qubit vector
QGraph& graph: the problem graph
vector_d& gamma: model para

Returns:

QCircuit

QCircuit QPanda::pauliX_model(const std::vector<Qubit*>& qubit_vec, const vector_d& beta)

pauli X model

Parameters:

std::vector<Qubit*>& qubit_vec: qubit vector
vector_d& beta: model para

Returns:

QCircuit