Entropic Quantities¶
- qnetvo.shannon_entropy_cost_fn(ansatz, **qnode_kwargs)[source]¶
Constructs an ansatz-specific Shannon entropy cost function
The Shannon entropy characterizes the amount of randomness, or similarly, the amount of information is present in a random variable. Formally, let \(X\) be a discrete random variable, then the Shannon entropy is defined by the expression:
\[H(X) = -\sum_{x} P(x) \log_{2} P(x)\]In the case of a quantum network, the Shannon entropy is defined on the measurement outcome of the network ansatz.
- Parameters:
ansatz (NetworkAnsatz) – The ansatz circuit on which the Shannon entropy is evalutated.
qnode_kwargs (dictionary) – Keyword arguments passed to the execute qnodes.
- Returns:
A cost function
shannon_entropy(*network_settings)
parameterized by the ansatz-specific network settings.- Return type:
Function
- qnetvo.mutual_info_cost_fn(ansatz, priors, postmap=tensor([], dtype=float64, requires_grad=True), **qnode_kwargs)[source]¶
Constructs an ansatz-specific mutual information cost function.
The mutual information quantifies the information shared by two distributions \(X\) and \(Y\). This entropic quantity is expressed as
\[I(Y;X) = H(Y) + H(X) - H(XY)\]where \(H(X) = -\sum_{i}P(X_i)\log_2(P(X_i))\) is the Shannon entropy (see
qnetvo.shannon_entropy()
).The mutual information can be used to quantify the amount of communication between a sender and receiver. In a quantum prepare and measure network, we evaluate the mutual information between the collections of preparation and measurement nodes.
- Parameters:
ansatz (NetworkAnsatz) – The ansatz circuit on which the mutual information is evaluated.
priors (list[np.array]) – A list of prior distributions for the inputs of each preparation node.
postmap (np.array) – The post-processing matrix mapping the bitstring output from the quantum device into the measurement node outputs.
qnode_kwargs (dictionary) – Keyword arguments passed to the execute qnodes.
- Returns:
A cost function
mutual_info_cost(*network_settings)
parameterized by the ansatz-specific scenario settings.- Return type:
Function
Helper Functions¶
- qnetvo.behavior_fn(network_ansatz, postmap=tensor([], dtype=float64, requires_grad=True), qnode_kwargs={})[source]¶
Creates an ansatz-specific function for constructing the behavior matrix.
A behavior function is created as
P_Net = behavior(network_ansatz)
and called asP_Net(ansatz_settings)
. The network behaviorP_Net
is a column stochastic matrix containing the conditional probabilities,\[\mathbf{P}_{Net} = \sum_{\{x_i\}_i,y}P(y|\{x_i\}_i)|y\rangle\langle \{x_i\}_i|,\]where \(P(y|\{x_i\}_i)\) is evaluated by a qnode for each set of inputs \(\{x_i\}_i\). The number of outputs \(y\) is \(2^N\) where \(N\) is the number of qubits.
A post-processing map \(\mathbf{L}\) may optionally be applied as \(\mathbf{L}\mathbf{P}_{Net}\) where
\[\mathbf{L} = \sum_{z,y}P(z|y)|z\rangle\langle y|.\]In the above expression, \(z\) is a new output drawn from a new alphabet.
- Parameters:
network_ansatz (NetworkAnsatz) – A class describing the particular quantum network.
postmap (optional np.ndarray) – A post-processing map applied to the bitstrings output from the quantum circuit. The
postmap
matrix is column stochastic, that is, each column sums to one and contains only positive values.
- Returns:
A function
P_Net(network_settings)
that evaluates the behavior matrix for a given set of settings.- Return type:
function