:py:mod:`nonlocal_games.quantum_hedging` ======================================== .. py:module:: nonlocal_games.quantum_hedging .. autoapi-nested-parse:: Semidefinite programs for obtaining values of quantum hedging scenarios. Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: nonlocal_games.quantum_hedging.QuantumHedging .. py:class:: QuantumHedging(q_a, num_reps) Calculate optimal winning probabilities for hedging scenarios. Calculate the maximal and minimal winning probabilities for quantum hedging to occur in certain two-party scenarios :cite:`Arunachalam_2017_QuantumHedging, Molina_2012_Hedging`. .. rubric:: Examples This example illustrates the initial example of perfect hedging when Alice and Bob play two repetitions of the game where Alice prepares the maximally entangled state: .. math:: u = \frac{1}{\sqrt{2}}|00\rangle + \frac{1}{\sqrt{2}}|11\rangle, and Alice applies the measurement operator defined by vector .. math:: v = \cos(\pi/8)|00\rangle + \sin(\pi/8)|11\rangle. As was illustrated in :cite:`Molina_2012_Hedging`, the hedging value of the above scenario is :math:`\cos(\pi/8)^2 \approx 0.8536` >>> from numpy import kron, cos, sin, pi, sqrt, isclose >>> from toqito.states import basis >>> from toqito.nonlocal_games.quantum_hedging import QuantumHedging >>> >>> e_0, e_1 = basis(2, 0), basis(2, 1) >>> e_00, e_01 = kron(e_0, e_0), kron(e_0, e_1) >>> e_10, e_11 = kron(e_1, e_0), kron(e_1, e_1) >>> >>> alpha = 1 / sqrt(2) >>> theta = pi / 8 >>> w_var = alpha * cos(theta) * e_00 + sqrt(1 - alpha ** 2) * sin(theta) * e_11 >>> >>> l_1 = -alpha * sin(theta) * e_00 + sqrt(1 - alpha ** 2) * cos(theta) * e_11 >>> l_2 = alpha * sin(theta) * e_10 >>> l_3 = sqrt(1 - alpha ** 2) * cos(theta) * e_01 >>> >>> q_1 = w_var * w_var.conj().T >>> q_0 = l_1 * l_1.conj().T + l_2 * l_2.conj().T + l_3 * l_3.conj().T >>> molina_watrous = QuantumHedging(q_0, 1) >>> >>> # cos(pi/8)**2 \approx 0.8536 >>> '%.2f' % molina_watrous.max_prob_outcome_a_primal() '0.85' .. note:: You do not need to use `'%.2f' %` when you use this function. We use this to format our output such that `doctest` compares the calculated output to the expected output upto two decimal points only. The accuracy of the solvers can calculate the `float` output to a certain amount of precision such that the value deviates after a few digits of accuracy. .. rubric:: References .. bibliography:: :filter: docname in docnames .. py:method:: max_prob_outcome_a_primal() Compute the maximal probability for calculating outcome "a". The primal problem for the maximal probability of "a" is given as: .. math:: \begin{equation} \begin{aligned} \text{maximize:} \quad & \langle Q_{a_1} \otimes \ldots \otimes Q_{a_n}, X \rangle \\ \text{subject to:} \quad & \text{Tr}_{\mathcal{Y}_1 \otimes \ldots \otimes \mathcal{Y}_n}(X) = I_{\mathcal{X}_1 \otimes \ldots \otimes \mathcal{X}_n},\\ & X \in \text{Pos}(\mathcal{Y}_1 \otimes \mathcal{X}_1 \otimes \ldots \otimes \mathcal{Y}_n \otimes \mathcal{X}_n) \end{aligned} \end{equation} :return: The optimal maximal probability for obtaining outcome "a". .. py:method:: max_prob_outcome_a_dual() Compute the maximal probability for calculating outcome "a". The dual problem for the maximal probability of "a" is given as: .. math:: \begin{equation} \begin{aligned} \text{minimize:} \quad & \text{Tr}(Y) \\ \text{subject to:} \quad & \pi \left(I_{\mathcal{Y}_1 \otimes \ldots \otimes \mathcal{Y}_n} \otimes Y \right) \pi^* \geq Q_{a_1} \otimes \ldots \otimes Q_{a_n}, \\ & Y \in \text{Herm} \left(\mathcal{X} \otimes \ldots \otimes \mathcal{X}_n \right) \end{aligned} \end{equation} :return: The optimal maximal probability for obtaining outcome "a". .. py:method:: min_prob_outcome_a_primal() Compute the minimal probability for calculating outcome "a". The primal problem for the minimal probability of "a" is given as: .. math:: \begin{equation} \begin{aligned} \text{minimize:} \quad & \langle Q_{a_1} \otimes \ldots \otimes Q_{a_n}, X \rangle \\ \text{subject to:} \quad & \text{Tr}_{\mathcal{Y}_1 \otimes \ldots \otimes \mathcal{Y}_n}(X) = I_{\mathcal{X}_1 \otimes \ldots \otimes \mathcal{X}_n},\\ & X \in \text{Pos}(\mathcal{Y}_1 \otimes \mathcal{X}_1 \otimes \ldots \otimes \mathcal{Y}_n \otimes \mathcal{X}_n) \end{aligned} \end{equation} :return: The optimal minimal probability for obtaining outcome "a". .. py:method:: min_prob_outcome_a_dual() Compute the minimal probability for calculating outcome "a". The dual problem for the minimal probability of "a" is given as: .. math:: \begin{equation} \begin{aligned} \text{maximize:} \quad & \text{Tr}(Y) \\ \text{subject to:} \quad & \pi \left(I_{\mathcal{Y}_1 \otimes \ldots \otimes \mathcal{Y}_n} \otimes Y \right) \pi^* \leq Q_{a_1} \otimes \ldots \otimes Q_{a_n}, \\ & Y \in \text{Herm} \left(\mathcal{X} \otimes \ldots \otimes \mathcal{X}_n \right) \end{aligned} \end{equation} :return: The optimal minimal probability for obtaining outcome "a".