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