def test_conditional_value_at_risk(self, simulator): """ conditional value at risk test """ # define backend to be used backend = BasicAer.get_backend(simulator) # set problem parameters n_z = 2 z_max = 2 # z_values = np.linspace(-z_max, z_max, 2 ** n_z) p_zeros = [0.15, 0.25] rhos = [0.1, 0.05] lgd = [1, 2] k_l = len(p_zeros) # alpha = 0.05 # set var value var = 2 var_prob = 0.961940 # determine number of qubits required to represent total loss # n_s = WeightedSumOperator.get_required_sum_qubits(lgd) # create circuit factory (add Z qubits with weight/loss 0) agg = WeightedSumOperator(n_z + k_l, [0] * n_z + lgd) # define linear objective breakpoints = [0, var] slopes = [0, 1] offsets = [0, 0] # subtract VaR and add it later to the estimate f_min = 0 f_max = 3 - var c_approx = 0.25 # construct circuit factory for uncertainty model (Gaussian Conditional Independence model) gci = GCI(n_z, z_max, p_zeros, rhos) cvar_objective = PwlObjective( agg.num_sum_qubits, 0, 2**agg.num_sum_qubits - 1, # max value that can be reached by the qubit register breakpoints, slopes, offsets, f_min, f_max, c_approx) multivariate_cvar = MultivariateProblem(gci, agg, cvar_objective) num_qubits = multivariate_cvar.num_target_qubits num_ancillas = multivariate_cvar.required_ancillas() q = QuantumRegister(num_qubits, name='q') q_a = QuantumRegister(num_ancillas, name='q_a') qc = QuantumCircuit(q, q_a) multivariate_cvar.build(qc, q, q_a) job = execute(qc, backend=backend) # evaluate resulting statevector value = 0 for i, a_i in enumerate(job.result().get_statevector()): b = ('{0:0%sb}' % multivariate_cvar.num_target_qubits).\ format(i)[-multivariate_cvar.num_target_qubits:] a_m = np.round(np.real(a_i), decimals=4) if np.abs(a_m) > 1e-6 and b[0] == '1': value += a_m**2 # normalize and add VaR to estimate value = multivariate_cvar.value_to_estimation(value) normalized_value = value / (1.0 - var_prob) + var # compare to precomputed solution self.assertEqual(0.0, np.round(normalized_value - 3.3796, decimals=4))
# In[3]: # set the model parameters n_z = 2 z_max = 2 z_values = np.linspace(-z_max, z_max, 2**n_z) p_zeros = [0.15, 0.25] rhos = [0.1, 0.05] lgd = [1, 2] K = len(p_zeros) alpha = 0.05 # In[4]: # construct circuit factory for uncertainty model (Gaussian Conditional Independence model) u = GCI(n_z, z_max, p_zeros, rhos) # In[5]: # determine the number of qubits required to represent the uncertainty model num_qubits = u.num_target_qubits # initialize quantum register and circuit q = QuantumRegister(num_qubits, name='q') qc = QuantumCircuit(q) # construct circuit u.build(qc, q) # In[6]: