diff --git a/qiskit/.ipynb_checkpoints/1_start_here-checkpoint.ipynb b/qiskit/.ipynb_checkpoints/1_start_here-checkpoint.ipynb
deleted file mode 100644
index b6e0b039a..000000000
--- a/qiskit/.ipynb_checkpoints/1_start_here-checkpoint.ipynb
+++ /dev/null
@@ -1,215 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- " Trusted Notebook\" align=\"middle\">"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Qiskit Tutorials\n",
- "\n",
- "***\n",
- "\n",
- "\n",
- "Welcome Qiskitters.\n",
- "\n",
- "\n",
- "These tutorials aim to explain how to use Qiskit. We assume you have installed Qiskit; if not, please look at [qiskit.org](http://www.qiskit.org) or the install [documentation](https://qiskit.org/documentation/install.html). \n",
- "\n",
- "\n",
- "We've collected a core reference set of notebooks in this section outlining the features of Qiskit. We will be keeping them up to date with the latest Qiskit version, currently 0.12. The focus of these notebooks is not on learning quantum computing. Instead we will be focused on how to use Qiskit, and will go into details only when needed. For those interested in learning about quantum computing we recommend the awesome [educational material](https://quantum-computing.ibm.com/support) we and the community have put together.\n",
- "\n",
- "\n",
- "Qiskit is made up of four elements: Terra, Aer, Ignis, and Aqua. Each element has its own goal, and together they make the full Qiskit framework. \n",
- "\n",
- "## Getting started with Qiskit\n",
- "\n",
- "This section gives you the tools to make your first circuits, run them on real quantum systems and simulators, and view the data.\n",
- "\n",
- "1. [Getting started with Qiskit](fundamentals/1_getting_started_with_qiskit.ipynb) - How to use Qiskit.\n",
- "\n",
- "2. [Plotting data in Qiskit](fundamentals/2_plotting_data_in_qiskit.ipynb) - Illustrates the different ways of plotting data in Qiskit.\n",
- " \n",
- "3. [The IBM Q Account](fundamentals/3_the_ibmq_account.ipynb) - Understanding the IBM Q account.\n",
- "\n",
- "4. [Circuit Properties](fundamentals/4_quantum_circuit_properties.ipynb) - Important properties of quantum circuits.\n",
- " \n",
- "5. [Using the Transpiler](fundamentals/5_using_the_transpiler.ipynb) - Mapping and optimizing circuits using the Qiskit transpiler.\n",
- "\n",
- "6. [Jupyter Tools](fundamentals/6_qiskit_jupyter_tools.ipynb) - Qiskit functionality for Jupyter notebooks.\n",
- "\n",
- "7. [Summary of quantum operations](fundamentals/7_summary_of_quantum_operations.ipynb) - List of quantum operations (gates, reset, measurements) in Qiskit Terra\n",
- " \n",
- " \n",
- "## 2 Qiskit Terra\n",
- "\n",
- "Terra, the ‘earth’ element, is the foundation on which the rest of the software lies. Terra provides a bedrock for composing quantum programs at the level of circuits and pulses, to optimize them for the constraints of a particular device, and to manage the execution of batches of experiments on remote-access devices. Terra defines the interfaces for a desirable end-user experience, as well as the efficient handling of layers of optimization, pulse scheduling and backend communication.\n",
- "\n",
- "1. [Advanced circuits](advanced/terra/1_advanced_circuits.ipynb) - Circuit building tools added including registerless declarations, composite gate updates and parameterized circuits.\n",
- "2. [Operators overview](advanced/terra/2_operators_overview.ipynb) - Gives a summary of the features and uses of the Operator class.\n",
- "3. [Advanced circuit visualization](advanced/terra/3_advanced_circuit_visualization.ipynb) - Details on drawing your quantum circuits.\n",
- "4. [Transpiler passes and passmanager](advanced/terra/4_transpiler_passes_and_passmanager.ipynb) - How to use the transpiler passes, passmanger, and extend the transpiler with a new pass.\n",
- "5. [Pulse schedules](advanced/terra/5_pulse_schedules.ipynb) - An introduction to working with pulse schedules.\n",
- "6. [Creating a new provider](advanced/terra/6_creating_a_provider.ipynb) - A guide to integration of a new provider with Qiskit structures and interfaces\n",
- "\n",
- "\n",
- "\n",
- "## 3 Qiskit Aer\n",
- "\n",
- "Aer, the ‘air’ element, permeates all Qiskit elements. To really speed up development of quantum computers, we need better simulators with the ability to model realistic noise processes that occur during computation on actual devices. Aer provides a high-performance simulator framework for studying quantum computing algorithms and applications in the noisy intermediate-scale quantum regime. \n",
- "1. [Aer provider](advanced/aer/1_aer_provider.ipynb) - Gives a summary of the Qiskit Aer provider containing the Qasm, statevector, and unitary simulator\n",
- "2. [Device noise simulation](advanced/aer/2_device_noise_simulation.ipynb) - Shows how to use the Qiskit Aer noise module to automatically generate a basic noise model for simulating hardware backends\n",
- "3. [Building noise models](advanced/aer/3_building_noise_models.ipynb) - Shows how to use Qiskit Aer noise module to construct custom noise models for noisy simulations\n",
- "4. [Custom gate noise](advanced/aer/4_custom_gate_noise.ipynb) - Shows to implement simulations using custom noisy gates.\n",
- "5. [Noise transformations](advanced/aer/5_noise_transformation.ipynb) - Demonstrates the noise approximation utility functions to construct approximate Clifford noise models out of a general noise model\n",
- "6. [Extended stabilizer tutorial](advanced/aer/6_extended_stabilizer_tutorial.ipynb) - Gives an overview of the *extended stabilizer* Qasm Simulator method\n",
- "7. [Matrix Product State simulator](advanced/aer/7_matrix_product_state_method.ipynb) - Gives an overview of the *matrix product state* Simulator method\n",
- " \n",
- "## 4 Qiskit Ignis\n",
- "Ignis, the ‘fire’ element, is dedicated to fighting noise and errors and to forging a new path. This includes better characterization of errors, improving gates, and computing in the presence of noise. Ignis is meant for those who want to design quantum error correction codes, or who wish to study ways to characterize errors through methods such as tomography and randomized benchmarking, or even to find a better way for using gates by exploring dynamical decoupling and optimal control. Ignis tutorials are found [here](advanced/ignis/) and include:\n",
- " 1. [Calibrating a qubit](advanced/ignis/1_calibrating_a_qubit.ipynb) - Using pulse to calibrate a \"pi-pulse\" gate by fitting a Rabi oscillation on a qubit. Using the \"pi-pulse\" measure the single-shot analog voltages that are returned by an experiment.\n",
- " 2. [Hamiltonian and gate characterizations](advanced/ignis/2_hamiltonian_and_gate_characterization.ipynb) - Sequences to measure ZZ rates between qubits and to measure rotation and angle errors in the gates.\n",
- " 3. [Relaxation and decoherence](advanced/ignis/3_relaxation_and_decoherence.ipynb) - How to measure coherence times on the real quantum hardware\n",
- " 4. [Measurement error mitigation](advanced/ignis/4_measurement_error_mitigation.ipynb) - How to peform calibration experiments for measurement errors and fed those calibrations into a \"filter\" that can be utilized to mitigate errors in subsequent experiments.\n",
- " 5. Randomized Benchmarking:\n",
- " * a. [Randomized benchmarking](advanced/ignis/5a_randomized_benchmarking.ipynb) - Randomized benchmarking (RB) is a technique used to measure the average gate error by measuring the outcomes of random Clifford circuits. This is used internally to report gate errors on our systems. \n",
- " * b. [Interleaved RB](advanced/ignis/5b_interleaved_rb.ipynb) - A variant of RB used to measure the error of a specific gate.\n",
- " * c. [Purity RB](advanced/ignis/5c_purity_rb.ipynb) - A variant of RB used to measure the *incoherent* error per gate.\n",
- " 6. Tomography:\n",
- " * a. [Quantum state tomography](advanced/ignis/6a_state_tomography.ipynb) - How to identify a quantum state using state tomography, in which the state is prepared repeatedly and measured in different bases. \n",
- " * b. [Quantum process tomography](advanced/ignis/6b_process_tomography.ipynb) - A method to reconstruct the quantum process matrix by preparing certain states, applying a gate, and then measuring the outcome in different bases. \n",
- " 7. [Quantum volume](advanced/ignis/7_quantum_volume.ipynb) - How to run quantum volume measurements on the quantum hardware.\n",
- " 8. [Repetition Code](advanced/ignis/8_repetition_code.ipynb) - How to run a simple error correction code, known as the repetition code. This can be used to characterize bit flip errors in the hardware.\n",
- " 9. [Logging](advanced/ignis/9_ignis_logging.ipynb) - An introduction to some of the logging features in Ignis, intended to be used to track characterization parameters.\n",
- " \n",
- "\n",
- "## 5 Qiskit Aqua\n",
- "Aqua, the ‘water’ element, is the element of life. To make quantum computing live up to its expectations, we need to find real-world applications. Aqua is where algorithms for NISQ computers are built. These algorithms can be used to build applications for quantum computing.\n",
- " * [Amplitude Estimation](advanced/aqua/amplitude_estimation.ipynb) - Illustrates amplitude estimation, for a simple case, where the (assumed to be unknown) success probability *p* of a Bernoulli random variable is estimated\n",
- " * [HHL](advanced/aqua/linear_systems_of_equations.ipynb) - Solving linear systems of equations with the HHL algorithm\n",
- " * [Creating an Aqua algorithm](advanced/aqua/Aqua_how_to_build_a_pluggable_algorithm_components.ipynb) - Building an algorithm within the framework of Aqua\n",
- "\n",
- "Aqua is accessible to domain experts in *Artificial Intelligence*, *Chemistry*, *Finance* or *Optimization*, who want to explore the benefits of using quantum computers as accelerators for specific computational tasks, without needing to worry about how to translate the problem into the language of quantum machines:\n",
- "\n",
- "### 5.1 Qiskit Artificial Intelligence\n",
- "[Qiskit AI](advanced/aqua/artificial_intelligence/index.ipynb) demonstates using quantum computers to tackle problems in the artificial intelliegence domain. These include using a quantum-enhanced support vector machine to experiment with classification problems on a quantum computer\n",
- "\n",
- "### 5.2 Qiskit Chemistry\n",
- "[Qiskit Chemistry](advanced/aqua/chemistry/index.ipynb) - applications in the domain of quantum chemistry on quantum computers, including ground state energy, dipole moments and dissociation plots\n",
- "\n",
- "### 5.3 Qiskit Finance\n",
- "[Qiskit Finance](advanced/aqua/finance/index.ipynb) - provides a collection of applications of quantum algorithms to use cases relevant in finance. This includes use cases like portfolio management, derivative pricing, or credit risk analysis.\n",
- " \n",
- "### 5.4 Qiskit Optimization\n",
- "[Qiskit Optimization](advanced/aqua/optimization/index.ipynb) - using VQE (Variational Quantum Eigensolver) to experiment with optimization problems (max-cut and traveling salesman problem) on a quantum computer. Includes optimization problem modelling, using docplex, which can be automatically translated to input suitable for VQE.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2019-08-09T15:31:26.743124Z",
- "start_time": "2019-08-09T15:31:26.732618Z"
- }
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
}
],
"metadata": {
@@ -337,7 +386,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.3"
+ "version": "3.7.4"
},
"varInspector": {
"cols": {
diff --git a/qiskit/advanced/aqua/chemistry/declarative_approach.ipynb b/qiskit/advanced/aqua/chemistry/declarative_approach.ipynb
index 5e1d21d3a..fc41d74d6 100644
--- a/qiskit/advanced/aqua/chemistry/declarative_approach.ipynb
+++ b/qiskit/advanced/aqua/chemistry/declarative_approach.ipynb
@@ -22,11 +22,6 @@
"- [1]IBMQ"
]
},
- {
- "cell_type": "raw",
- "metadata": {},
- "source": []
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -204,6 +199,48 @@
"This was a very simple example showing how to get started. There are more elaborate notebooks here as well documentation describing the various components and their configurations to help you to experiment with quantum computing and its application to solving chemistry problems."
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2019-08-22T01:50:03.559587Z",
+ "start_time": "2019-08-22T01:50:03.549101Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
@@ -411,7 +453,36 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.6.8"
+ "version": "3.7.4"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
}
},
"nbformat": 4,
diff --git a/qiskit/advanced/aqua/finance/data_providers/.ipynb_checkpoints/time_series-checkpoint.ipynb b/qiskit/advanced/aqua/finance/data_providers/.ipynb_checkpoints/time_series-checkpoint.ipynb
new file mode 100644
index 000000000..0a17f4411
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/data_providers/.ipynb_checkpoints/time_series-checkpoint.ipynb
@@ -0,0 +1,502 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: Loading and Processing Stock-Market Time-Series Data*_\n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/qiskit/qiskit-tutorial.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Jakub Marecek[1]\n",
+ "\n",
+ "### Affiliation\n",
+ "- [1]IBMQ"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Introduction\n",
+ "\n",
+ "Across many problems in finance, one starts with time series. Here, we showcase how to generate pseudo-random time-series, download actual stock-market time series from a number of common providers, and how to compute time-series similarity measures."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "%matplotlib inline\n",
+ "from qiskit.aqua.translators.data_providers import *\n",
+ "import warnings\n",
+ "warnings.filterwarnings(\"ignore\", category=DeprecationWarning)\n",
+ "import datetime\n",
+ "import matplotlib.pyplot as plt\n",
+ "from pandas.plotting import register_matplotlib_converters\n",
+ "register_matplotlib_converters()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "data = RandomDataProvider(tickers=[\"TICKER1\", \"TICKER2\"],\n",
+ " start = datetime.datetime(2016, 1, 1),\n",
+ " end = datetime.datetime(2016, 1, 30),\n",
+ " seed = 1)\n",
+ "data.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Once the data are loaded, you can run a variety of algorithms on those to aggregate the data. Notably, you can compute the covariance matrix or a variant, which would consider alternative time-series similarity measures based on dynamic time warping (DTW). In DTW, changes that vary in speed, e.g., one stock's price following another stock's price with a small delay, can be accommodated."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Means:\n",
+ "[16.66722941 72.03026566]\n",
+ "A time-series similarity measure:\n",
+ "[[1.0000000e+00 6.2284804e-04]\n",
+ " [6.2284804e-04 1.0000000e+00]]\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "data = RandomDataProvider(tickers=[\"CompanyA\", \"CompanyB\", \"CompanyC\"],\n",
+ " start = datetime.datetime(2015, 1, 1),\n",
+ " end = datetime.datetime(2016, 1, 30),\n",
+ " seed = 1)\n",
+ "data.run()\n",
+ "for (cnt, s) in enumerate(data._tickers):\n",
+ " plt.plot(data._data[cnt], label=s)\n",
+ "plt.legend()\n",
+ "plt.xticks(rotation=90)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Access to closing-price time-series\n",
+ "\n",
+ "While the access to real-time data usually requires a payment, it is possible \n",
+ "to access historical (adjusted) closing prices via Wikipedia and Quandl\n",
+ "free of charge, following registration at:\n",
+ "https://www.quandl.com/?modal=register\n",
+ "In the code below, one needs to specify actual tickers of actual NASDAQ\n",
+ "issues and the access token you obtain from Quandl; by running the code below, you agree to the Quandl terms and \n",
+ "conditions, including a liability waiver.\n",
+ "Notice that at least two tickers are required for the computation\n",
+ "of covariance and time-series matrices, but hundreds of tickers may go \n",
+ "beyond the fair usage limits of Quandl."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "stocks = [\"REPLACEME1\", \"REPLACEME2\"]\n",
+ "wiki = WikipediaDataProvider(\n",
+ " token = \"REPLACEME\",\n",
+ " tickers = stocks,\n",
+ " stockmarket = StockMarket.NASDAQ,\n",
+ " start = datetime.datetime(2016,1,1),\n",
+ " end = datetime.datetime(2016,1,30))\n",
+ "wiki.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Once the data are loaded, you can again compute the covariance matrix or its DTW variants."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if wiki._n <= 1: \n",
+ " raise Exception(\"Not enough data to plot covariance or time-series similarity. Please use at least two tickers.\")\n",
+ "\n",
+ "rho = wiki.get_similarity_matrix()\n",
+ "print(\"A time-series similarity measure:\")\n",
+ "print(rho)\n",
+ "plt.imshow(rho)\n",
+ "plt.show()\n",
+ "\n",
+ "cov = wiki.get_covariance_matrix()\n",
+ "print(\"A covariance matrix:\")\n",
+ "print(cov)\n",
+ "plt.imshow(cov)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "If you wish, you can look into the underlying time-series using:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(\"The underlying evolution of stock prices:\")\n",
+ "for (cnt, s) in enumerate(stocks):\n",
+ " plt.plot(wiki._data[cnt], label=s)\n",
+ "plt.legend()\n",
+ "plt.xticks(rotation=90)\n",
+ "plt.show()\n",
+ "\n",
+ "for (cnt, s) in enumerate(stocks):\n",
+ " print(s)\n",
+ " print(wiki._data[cnt])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### [Optional] Setup token to access recent, fine-grained time-series\n",
+ "\n",
+ "If you would like to download professional data, you will have to set-up a token with one of the major providers. Let us now illustrate the data with NASDAQ Data on Demand, which can supply bid and ask prices in arbitrary resolution, as well as aggregates such as daily adjusted closing prices, for NASDAQ and NYSE issues.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "If you don't have NASDAQ Data on Demand license, you can contact NASDAQ (cf. https://business.nasdaq.com/intel/GIS/Nasdaq-Data-on-Demand.html) to obtain a trial or paid license.\n",
+ "\n",
+ "If and when you have access to NASDAQ Data on Demand using your own token, you should replace REPLACE-ME below with the token. \n",
+ "To assure the security of the connection, you should also have your own means of validating NASDAQ's certificates. DataOnDemandProvider constructor has an optional argument verify, which can be None or a string or a boolean. If it is None, certifi certificates will be used (default). If verify is a string, it should be poiting to a cerfificate for the HTTPS connection to NASDAQ (dataondemand.nasdaq.com), either in the form of a CA_BUNDLE file or a directory wherein to look.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from qiskit.aqua.translators.data_providers.data_on_demand_provider import StockMarket\n",
+ "try:\n",
+ " nasdaq = DataOnDemandProvider(token = \"REPLACE-ME\",\n",
+ " tickers = stocks,\n",
+ " stockmarket = StockMarket.NASDAQ,\n",
+ " start = datetime.datetime(2016,1,1),\n",
+ " end = datetime.datetime(2016,1,2))\n",
+ " nasdaq.run()\n",
+ " nasdaq.plot()\n",
+ "except QiskitFinanceError as e:\n",
+ " print(e)\n",
+ " print(\"You need to replace REPLACE-ME with a valid token.\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Another major vendor of stock market data is Exchange Data International (EDI), whose API can be used to query over 100 emerging and frontier markets that are Africa, Asia, Far East, Latin America and Middle East, as well as the more established ones. See:\n",
+ "https://www.exchange-data.com/pricing-data/adjusted-prices.php#exchange-coverage\n",
+ "for an overview of the coverage.\n",
+ "\n",
+ "The access again requires a valid access token to replace REPLACE-ME below. The token can be obtained on a trial or paid-for basis at:\n",
+ "https://www.quandl.com/\n",
+ "\n",
+ "In the following example, you need to replace TICKER1 and TICKER2 with valid tickers at the London Stock Exchange. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from qiskit.aqua.translators.data_providers.exchangedataprovider import StockMarket\n",
+ "try:\n",
+ " lse = ExchangeDataProvider(token = \"REPLACE-ME\",\n",
+ " tickers = [\"TICKER1\", \"TICKER2\"],\n",
+ " stockmarket = StockMarket.LONDON,\n",
+ " start = datetime.datetime(2019,1,1),\n",
+ " end = datetime.datetime(2019,1,30))\n",
+ " lse.run()\n",
+ " lse.plot()\n",
+ "except QiskitFinanceError as e: \n",
+ " print(e)\n",
+ " print(\"You need to replace REPLACE-ME with a valid token.\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For the actual use of the data, please see the portfolio_optimization or portfolio_diversification notebooks. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2019-08-22T01:53:39.420765Z",
+ "start_time": "2019-08-22T01:53:39.409542Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
}
],
"metadata": {
@@ -416,7 +465,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.3"
+ "version": "3.7.4"
},
"varInspector": {
"cols": {
diff --git a/qiskit/advanced/aqua/finance/machine_learning/.ipynb_checkpoints/qgan_option_pricing-checkpoint.ipynb b/qiskit/advanced/aqua/finance/machine_learning/.ipynb_checkpoints/qgan_option_pricing-checkpoint.ipynb
new file mode 100644
index 000000000..29057daf4
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/machine_learning/.ipynb_checkpoints/qgan_option_pricing-checkpoint.ipynb
@@ -0,0 +1,351 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: qGAN Option Pricing*_ \n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/Qiskit/qiskit-tutorials.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Christa Zoufal[1,2], Stefan Woerner[1]\n",
+ "### Affliation\n",
+ "- [1]IBMQ\n",
+ "- [2]ETH Zurich\n",
+ "\n",
+ "### Introduction\n",
+ "In this notebook, we discuss how a Quantum Machine Learning Algorithm, namely a quantum Generative Adversarial Network (qGAN), can facilitate the pricing of a European call option. More specifically, a qGAN can be trained such that a quantum circuit models the spot price of an asset underlying a European call option. The resulting model can then be integrated into a Quantum Amplitude Estimation based algorithm to evaluate the expected payoff - see [European Call Option Pricing](../simulation/european_call_option_pricing.ipynb). \n",
+ "For further details on learning and loading random distributions by training a qGAN please refer to Quantum Generative Adversarial Networks for Learning and Loading Random Distributions. Zoufal, Lucchi, Woerner. 2019."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "import numpy as np\n",
+ "from qiskit.aqua.algorithms import AmplitudeEstimation\n",
+ "from qiskit.aqua.components.uncertainty_problems import EuropeanCallExpectedValue\n",
+ "from qiskit.aqua.components.uncertainty_models import UnivariateVariationalDistribution, NormalDistribution\n",
+ "from qiskit.aqua.components.variational_forms import RY\n",
+ "from qiskit import QuantumRegister, QuantumCircuit\n",
+ "from qiskit.aqua.components.initial_states import Custom\n",
+ "\n",
+ "from qiskit.aqua import aqua_globals, QuantumInstance\n",
+ "\n",
+ "from qiskit import BasicAer"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Uncertainty Model\n",
+ "\n",
+ "The Black-Scholes model assumes that the spot price at maturity $S_T$ for a European call option is log-normally distributed. Thus, we can train a qGAN on samples from a log-normal distribution and use the result as uncertainty model underlying the option. A notebook that explains the implementation of a qGAN to learn and load a random distribution is presented in [qGANs for Loading Random Distributions](../../aqua/artificial_intelligence/qgans_for_loading_random_distributions.ipynb). \n",
+ "In the following, we construct a quantum circuit that loads the uncertainty model. The circuit output reads \n",
+ "\n",
+ "$$ \\big| g_{\\theta}\\rangle = \\sum_{j=0}^{2^n-1}\\sqrt{p_{\\theta}^{j}} \\big| j \\rangle , $$\n",
+ "\n",
+ "where the probabilites $p_{\\theta}^{j}$, for $j\\in \\left\\{0, \\ldots, {2^n-1} \\right\\}$, represent a model of the target distribution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Set upper and lower data values\n",
+ "bounds = np.array([0.,7.])\n",
+ "# Set number of qubits used in the uncertainty model\n",
+ "num_qubits = [3]\n",
+ "\n",
+ "# Set entangler map\n",
+ "entangler_map = []\n",
+ "for i in range(sum(num_qubits)):\n",
+ " entangler_map.append([i, int(np.mod(i+1, sum(num_qubits)))])\n",
+ "\n",
+ "# Load the trained circuit parameters\n",
+ "g_params = [0.29399714, 0.38853322, 0.9557694, 0.07245791, 6.02626428, 0.13537225]\n",
+ "# Set an initial state for the generator circuit\n",
+ "init_dist = NormalDistribution(int(sum(num_qubits)), mu=1., sigma=1., low=bounds[0], high=bounds[1])\n",
+ "init_distribution = np.sqrt(init_dist.probabilities)\n",
+ "init_distribution = Custom(num_qubits=sum(num_qubits), state_vector=init_distribution)\n",
+ "# Set variational form\n",
+ "var_form = RY(int(np.sum(num_qubits)), depth=1, initial_state=init_distribution,\n",
+ " entangler_map=entangler_map, entanglement_gate='cz')\n",
+ "# Set generator circuit\n",
+ "g_circuit = UnivariateVariationalDistribution(int(sum(num_qubits)), var_form, g_params,\n",
+ " low=bounds[0], high=bounds[1])\n",
+ "# construct circuit factory for uncertainty model\n",
+ "uncertainty_model = g_circuit\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Evaluate Expected Payoff\n",
+ "Now, the trained uncertainty model can be used to evaluate the expectation value of the option's payoff function with Quantum Amplitude Estimation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set the strike price (should be within the low and the high value of the uncertainty)\n",
+ "strike_price = 2\n",
+ "\n",
+ "# set the approximation scaling for the payoff function\n",
+ "c_approx = 0.25\n",
+ "\n",
+ "# construct circuit factory for payoff function\n",
+ "european_call = EuropeanCallExpectedValue(\n",
+ " uncertainty_model,\n",
+ " strike_price=strike_price,\n",
+ " c_approx=c_approx\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Plot the probability distribution\n",
+ "Next, we plot the trained probability distribution and, for reasons of comparison, also the target probability distribution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAESCAYAAAC7NAEnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xl8VOX1+PHPSQgkYQk7yr4oO8guCrKIRcUqoiL+0CJ111ptVVpLreJS61KX2mr52motrYpacataFSEgsskSlR2RHRUIBAhJIGHO749nEiY3k2QmmWRmyHm/XnnB3Ln3zpkQcubZziOqijHGGFPdEqIdgDHGmJrJEpAxxpiosARkjDEmKiwBGWOMiQpLQMYYY6LCEpAxxpiosARkjDEmKiwBGWOMiYqoJyAR6S4in4pIjojsEpEHRCSxnGt6iMj//OcfEZFtIvJ3ETk5yLljReRrEckTkTUiMqHq3o0xxphQ1Yrmi4tII2A2sAYYC3QCnsAlxnvKuDQN2AzMAHYBHYD7gP4iMlBVC/z3Hwq8CTwH3AaMAV4Vkf2q+nF58TVt2lTbt29fsTfncfjwYerWrRuRe1WleIkT4idWizOy4iVOiJ9YIxnn8uXL96pqs5BOVtWofQG/AfYDDQKO/QrICTwW4r1+BCjQL+DYR8Acz3kfAAtCuWf//v01UubOnRuxe1WleIlTNX5itTgjK17iVI2fWCMZJ7BMQ/y9He0uuPOBj1T1YMCxmUAKMDzMe2X6/6wNICJ1gJHA657zZgJniEha+OEaY4yJlGgnoK7AusADqroN1wLqWt7FIpIgIrVFpAvwCPAFsNT/dCcgyXt/YC3ufXeuXOjGGGMqQzSK1bBFJB+YoqpPe47vAGao6tRyrv8fcK7/4XJgjKru9j83BFgA9FXVjIBrTgE2AudqkHEgEbkBuAGgRYsW/WfOnFnRt1dMdnY29erVi8i9qlK8xAnxE6vFGVnxEifET6yRjHPkyJHLVXVAKOdGdRJCBPwcaAycipu08KGIDFHVvIreUFWfB54HGDBggI4YMSIScZKenk6k7lWV4iVOiJ9YT6Q48/Pz2bFjB3l5Ff4vVmlpaWkkJydH7fXDES+xViTO5ORkWrduTVJSUoVfN9oJaD9uRptXI/9zZVLVjf6/LhGRz3Az4yYCLwZc771/o4DXNsaEYceOHdSvX5/27dsjIlGJ4dChQ9SvXz8qrx2ueIk13DhVlczMTHbs2EGHDh0q/LrRHgNah2esR0TaAKmUHLspk6puBfYBHf2HNgH53vv7H/uADRWI15gaLS8vjyZNmpSbfFRhyUEYvxrqzoeEdPfn5ath6UH3vIlfIkKTJk0q3RKOdgL6EDhXRAJT7wQgF5gXzo38ExGa4FpBqOoRYC4w3nPqBGCRqh6oaNDG1GTlJZ98H0xcC2dnwKw9kONz6yNyfPDmHnd84lp3nolfkWgBR7sLbjpugegsEXkU13qZBjwZODVbRL4B5qnqtf7HfwQKgCVAFtANt35oE26adaEHgXQReRp4G7cQdQxwXtW+LWNqJlWYtA7e3esSjpcPOOyDd/a6817pBlHqyTMxIKotIFXdD4wCEoH3gPuBp3BVDQLV8p9TaBlwFvAC8D4uib0JDFbVwwH3XwBcBpyDW5R6ETAx2Oy3mursW7YV+9qw7WiJY8aEaukheK+U5BMo1+fO++JQePfPysrib3/7W8UDDEN6ejoLFy4M6dz27duzd+9eAM4888wyz3344YfLfH7MmDFkZWWxZcsWevbsGVqwft6Yp0+fzowZM8K6R3WKdgsIVV0DnF3OOe09j2dSvKVT1rVv41o/xpgIkfTK3+OwD05fEfw5HRH8eFZWFn//+9+54447Qn6dolX3CeF93k5PT6devXrlJhSv8pLWww8/zNSpJVeYFMb5wQcfAO69hssb80033RT2PapTtMeAjDEmZHfffTebN2+mT58+TJkyhezsbEaNGkW/fv3o1asX77zzDgBbtmyhS5cuTJo0iZ49e7J9+3ZeeOEFOnfuzKBBg7j++uu59dZbAdizZw+XXnopAwcOZODAgXz++eds2bKF6dOn89RTT9GnTx8+++yzYnFkZmYyevRoevTowXXXXUfgesrC9TTfffcd5513Hn369KFnz5589tln3H333eTm5tKnTx+uvPLKoHEGtqYKCgq48sor6datG5dddhk5OTlA8RbXsmXLGDFiRNCYp02bxh//+EcAMjIyGDx4ML1792bcuHHs3+8mAo8YMYJ7772XQYMG0blz5xLvtSpZAjLGxI1HHnmEDh06kJGRweOPP05ycjJvvfUWK1asYO7cudx5551FyWDjxo3ccsstrF69mqSkJB588EEWL17M559/zrp1xyfZ3n777fzyl7/kiy++4M033+S6666jffv23HTTTfzyl78kIyODs846q1gc999/P0OHDmX16tWMGzeObdtKdlW/8sorjBo1ioyMDL788kv69OnDI488QkpKChkZGbz88ssl4mzXrl2xe6xfv55bbrmFtWvX0qBBA5577rlSvzflxTxp0iQeffRRvvrqK3r16sX9999f9FxBQQFLly7l6aefLna8qkW9C84YYypKVZk6dSrz588nISGBnTt38sMPPwDQrl07Bg8eDMDSpUsZPnw4jRs3BmD8+PFs2OBWYsyePZs1a9YU3fPgwYNkZ2eX+brz589n1qxZAFxwwQU0atSoxDkDBw5k8uTJJCQkcPHFF9OnT5+g9wqM06tNmzYMGTIEgKuuuopnnnmGu+66q8zYgjlw4ABZWVkMH+5KbF599dWMH398gvBFF10EQP/+/dmyZUvY968oS0DGmLCVNkZz+Wo31TqUGdYJwGXN4LUeFY/j5ZdfZs+ePSxfvpykpCTat29ftDYl1O0FfD4fixcvjnjFgmHDhvG///2PefPmMXnyZO644w4mTZpU4ryy4vROdS58XKtWLXw+912ORFWK2rVrA5CYmEhBQUGl7xcq64Kr4RQ40Lg2q85oyrxLWnNjmx8x75LWrBrchIONa2PrBU047mwDKSH+VklOcOeHo379+sVaJwcOHKB58+YkJSUxd+5ctm7dGvS6gQMHMm/ePPbv309BQQFvvvlm0XOjR4/mz3/+c9HjjIyMotc6dCj4NL1hw4bxyiuvAPDhhx8WjacE2rp1K82bN+f666/nuuuuY8UKN+MiKSmJ/Pz8kN7vtm3bWLRoEeC69IYOHQq47rbly5cDFHsvpcWclpZGo0aNisZ3/vWvfxW1hqLJElANlu+DNac3IWNEc/a0SsFXKwFE8NVKYE/rVFaOaM6a05vYgkETskH14cKm5SehlAS4qCkMDLNKTZMmTTj99NPp2bMnU6ZM4corr2TZsmX06tWLGTNm0LVr8CL6rVq1YurUqQwaNIghQ4bQvn170tJcla5nnnmGZcuW0bt3b7p378706dMBuPDCC3nrrbeCTkK47777mD9/Pj169GDWrFm0bdu2xGump6dz5pln0rdvX1577TVuv/12AG644QZ69+7NlVdeWe777dKlC88++yzdunVj//793HzzzUWvf/vttzNgwAASE4+vUCkr5n/+859MmTKF3r17k5GRwb333lvu61e1qFbDjnUDBgzQZcuWReResVaQUtWtRn99l88lnlIkFPi4vGVCTC4YjLXvaWlOpDjXrl1Lt27dyjwn3+cWmb631633Cfz8koBr+VzUFGZ0haQKfASuaH21worPBQUFjBs3jmuuuYZx48aFH0AYTtRacIWC/TyISMjVsK0FVEMVLhgsK/mAe74iCwZNzZWU4CoczOkDlzaDugnuF03dBDfmk94HXu1eseRTGdOmTSuaEt2hQwcuvvji6g3AlGCTEGqoJ7a7T6ehyPW58yszWGxqFhEY1ABej6GfmcL1MCZ2WAuohno/M7SZSuDOez+z3NOMMSYsloBqqFBbPxU93xhjymMJqIYKdapsRc83xpjy2K+VGuqCJuH94w9rWGWhGGNqKJuEUEPd2QY+yHQViUMxP8uNA13QpGrjMvEl0tt1zHmu5HqaQFlZWbz44othVcMuNGbMGF555RUaNqz8p6l69eqVW65n2rRpJCUl8dvf/pZ7772XYcOGcc455wQ99+2336Zz585079496PPTp08nNTWVSZMmMWLECP74xz8yYEBIM53JysrilVde4ZZbbgFg165d3HbbbfznP/8J6fqqZC2gGqpwwWBCQWgZ6LAPLvwaHtoCPls6ZqKkcDuGYMorIfPBBx9EJPlUxAMPPFBq8gGXgALr0QUqKCjgpptuClrGJxRZWVnFipi2bNkyJpIPWAKqsUTcQsBGP5RSR8qnJTKNAr/bAuNXw6HqKxdlTBHvdgzp6emcddZZXHTRRUWth4svvpj+/fvTo0cPnn/++aJrC7cw2LJlC926deP666+nR48ejB49mtzcXAA2bdrEeeedR//+/TnrrLOKqmZv3ryZM844g169enHPPfeUGt/vf/97OnfuzNChQ1m/fn3R8cmTJxf90r/77rvp3r07vXv35q677mLhwoW8++67TJkyhT59+rBp0yZGjBjBL37xCwYMGMCf/vSnYtsqgCulU7imaenSpQAlzunZsydbtmzh7rvvZtOmTUXfs8CN7vLy8vjpT3/K4MGD6du3L3PnzgXgpZde4pJLLuG8887j1FNP5Ve/+lXF/9HKYF1wNVhSAjT+Po/MVqnHD6qScExpsiuXNusPcbBpHTb3bcSxgOtm7YX1K+DtnnBKaonbGlNlHnnk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\n",
+ "text/plain": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
@@ -272,7 +314,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.3"
+ "version": "3.7.4"
},
"varInspector": {
"cols": {
diff --git a/qiskit/advanced/aqua/finance/optimization/.ipynb_checkpoints/portfolio_diversification-checkpoint.ipynb b/qiskit/advanced/aqua/finance/optimization/.ipynb_checkpoints/portfolio_diversification-checkpoint.ipynb
new file mode 100644
index 000000000..bd7f2b3ac
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/optimization/.ipynb_checkpoints/portfolio_diversification-checkpoint.ipynb
@@ -0,0 +1,783 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: Portfolio diversification*_\n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/qiskit/qiskit-tutorial.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Andrea Simonetto[1], Jakub Marecek[1], Martin Mevissen[1]\n",
+ "\n",
+ "### Affiliation\n",
+ "- [1]IBMQ\n",
+ "\n",
+ "\n",
+ "## Introduction \n",
+ "\n",
+ "In asset management, there are broadly two approaches: active and passive investment management. Within passive investment management, there are index-tracking funds and there are approaches based on portfolio diversification, which aim at representing a portfolio with large number of assets by a smaller number of representative stocks.\n",
+ "This notebook illustrates a portfolio diversification problem, which has recently become popular for two reasons:\n",
+ "1. it makes it possible to mimick the performance of an index (or a similarly large set of assets) with a limited budget, at limited transaction costs. That is: traditional index-tracking may purchase all assets in the index, ideally with the same weights as in the index. This may be impractical for a number of reasons: the total of even a single round lot per asset may amount to more than the assets under management, the large scale of the index-tracking problem with integrality constraints may render the optimisation problem difficult, and the transaction costs of the frequent rebalancing to adjust the positions to the weights in the index may render the approach expensive. Thus, a popular approach is to select a portfolio of $q$ assets that represent the market with $n$ assets, where $q$ is significantly smaller than $n$, but where the portfolio replicates the behaviour of the underlying market. To determine how to group assets into $q$ clusters and how to determine which $q$ assets should represent the $q$ clusters amounts to solving a large-scale optimization problem. In the following we describe the mathematical model for the portfolio diversification problem as introduced in [Cornuejols & Tutuncu, 2006] \n",
+ "2. it allows for similarity measures between time-series beyond the covariance matrix. Notice that traditionally, modern portfolio theory considers the covariance matrix as measure of similarity between the assets. As such, however, covariance matrix is imperfect. Consider, for instance, a company listed both in London and New York. Although both listings should be very similar, only parts of the time series of the prices of the two listings will overlap, because of the partial overlap of the times the markets open. Instead of covariance, one can consider, for example, dynamic time warping of [Berndt and Clifford, 1994] as a measure of similarity between two time series, which allows for the fact that for some time periods, the data are captured by only one of the time series, while for others, both time series exhibit the similarity due to the parallel evolution of the stock price.\n",
+ "\n",
+ "The overall workflow we demonstrate comprises:\n",
+ "\n",
+ "1. pick the ground set of assets. In our case, this is a small number of US stocks.\n",
+ "\n",
+ "2. load the time series capturing the evolution of the prices of assets. In our case, this is an simplistic load of adjusted daily closing price data from Wikipedia or Nasdaq or LSE or EuroNext, whereas in a real asset management, a much higher frequency may be considered.\n",
+ "\n",
+ "3. compute the pair-wise similarity among the time series. In our case, we run a linear-time approximation of the dynamic time warping, still on the classical computer.\n",
+ "\n",
+ "4. compute the actual portfolio of $q$ representative assets, based on the similarity measure. This step is run twice, actually. First, we obtain a reference value by a run of an IBM solver (IBM ILOG CPLEX or the Exact Eigensolver) on the classical computer. Second, we run an alternative, hybrid algorithm partly on the quantum computer.\n",
+ "\n",
+ "5. visualisation of the results. In our case, this is again a simplistic plot.\n",
+ "\n",
+ "In the following, we first explain the model used in (4) above, before we proceed with the installation of the pre-requisites and the data loading.\n",
+ "\n",
+ "\n",
+ "## The Model\n",
+ "\n",
+ "As discussed in [Cornuejols & Tutuncu, 2006], we describe a mathematical model that clusters assets into groups of similar ones and selects one representative asset from each group to be included in the index fund portfolio. The model is based on the following data, which we will discuss in more detail later:\n",
+ "\n",
+ "$$\n",
+ "\\rho_{ij} = \\textrm{similarity}\\, \\textrm{between}\\, \\textrm{stock}\\, i \\, \\textrm{and}\\, \\textrm{stock}\\, j.\n",
+ "$$\n",
+ "\n",
+ "For example, $\\rho_{ii} = 1$, $\\rho_{ij} \\leq 1$ for $i \\neq j$ and $\\rho_{ij}$ is larger for more similar stocks. An example of this is the correlation between the returns of stocks $i$ and $j$. But one could choose other similarity indices $\\rho_{ij}$.\n",
+ "\n",
+ "The problem that we are interested in solving is:\n",
+ "\n",
+ "$$\n",
+ "(M) \\quad f = \\max_{x_{ij}, y_{j}} \\,\\, \\sum_{i=1}^n \\sum_{j=1}^n \\rho_{ij} x_{ij}\n",
+ "$$\n",
+ "\n",
+ "subject to the clustering constraint:\n",
+ "\n",
+ "$$\n",
+ "\\sum_{j=1}^n y_j = q,\n",
+ "$$\n",
+ "\n",
+ "to consistency constraints:\n",
+ "\n",
+ "$$\n",
+ "\\sum_{j=1}^n x_{ij} = 1, \\,\\textrm{ for }\\, i = 1,\\ldots, n,\n",
+ "\\quad x_{ij} \\leq y_j,\\,\\textrm{ for }\\, i = 1,\\ldots, n; \\, j = 1,\\ldots, n,\n",
+ "\\quad x_{jj} = y_j,\\,\\textrm{ for }\\, j = 1,\\ldots, n,\n",
+ "$$\n",
+ "\n",
+ "and integral constraints:\n",
+ "\n",
+ "$$\n",
+ "\\quad x_{ij}, y_j \\in\\{0,1\\}, \\,\\textrm{ for }\\, i = 1,\\ldots, n; \\, j = 1,\\ldots, n.\n",
+ "$$\n",
+ "\n",
+ "The variables $y_j$ describe which stocks $j$ are in the index fund ($y_j = 1$ if $j$ is selected in the fund, $0$ otherwise). For each stock $i = 1,\\dots,n$, the variable $x_{ij}$ indicates which stock $j$ in the index fund is most similar to $i$ ($x_{ij} = 1$ if $j$ is the most similar stock in the index fund, $0$ otherwise).\n",
+ "\n",
+ "The first constraint selects $q$ stocks in the fund. The second constraint imposes that each stock $i$ has exactly one representative stock $j$ in the fund. The third and fourth constraints guarantee that stock $i$ can be represented by stock $j$ only if $j$ is in the fund. The objective of the model maximizes the similarity between the $n$ stocks and their representatives in the fund. Different cost functions can also be considered. \n",
+ "\n",
+ "Let us concatenate the decision variables in one vector \n",
+ "\n",
+ "$$\n",
+ "{\\bf z} = [x_{11},x_{12},\\ldots,x_{11}, x_{22},\\ldots,x_{nn}, y_{1},\\ldots,y_{n}],\n",
+ "$$\n",
+ "\n",
+ "whose dimension is ${\\bf z} \\in \\{0,1\\}^N$, with $N = n (n+1)$ and denote the optimal solution with ${\\bf z}^*$, and the optimal cost $f^*$. \n",
+ "\n",
+ "\n",
+ "## A Hybrid Approach\n",
+ "\n",
+ "Here, we demonstrate an approach that combines classical and quantum computing steps, following the quantum approximate optimization approach of Farhi, Goldstone, and Gutman (2014). \n",
+ "\n",
+ "### Construct a binary polynomial optimization\n",
+ "\n",
+ "From $(M)$ one can construct a binary polynomial optimization with equality constraints only, by substituting the $x_{ij} \\leq y_j$ inequality constraints with the equivalent equality constraints $x_{ij} (1- y_j) = 0$. Then the problem becomes:\n",
+ "\n",
+ "$$\n",
+ "(BPO) \\quad f = \\max_{x_{ij}, y_{j}} \\,\\, \\sum_{i=1}^n \\sum_{j=1}^n \\rho_{ij} x_{ij}\n",
+ "$$\n",
+ "\n",
+ "subject to the clustering constrain, the integral constraints, and the following modified consistency constraints:\n",
+ "\n",
+ "$$\\sum_{j=1}^n x_{ij} = 1, \\,\\textrm{ for }\\, i = 1,\\ldots, n,$$\n",
+ "$$\\quad x_{ij} (1- y_j) = 0,\\,\\textrm{ for }\\, i = 1,\\ldots, n; \\, j = 1,\\ldots, n,$$\n",
+ "$$\\quad x_{jj} = y_j,\\,\\textrm{ for }\\, j = 1,\\ldots, n.$$\n",
+ "\n",
+ "### Construct the Ising Hamiltonian\n",
+ "\n",
+ "We can now construct the Ising Hamiltonian (QUBO) by penalty methods (introducting a penalty coefficient $A$ for each equality constraint) as\n",
+ "\n",
+ "$$\n",
+ "(IH) \\quad H = \\sum_{i=1}^n \\sum_{j=1}^n \\rho_{ij} x_{ij} + A\\Big( \\sum_{j=1}^n y_j - q\\Big)^2 + \\sum_{i=1}^n A\\Big( \\sum_{j=1}^n x_{ij} - 1\\Big)^2 + \\sum_{j=1}^n A (x_{jj}-y_j)^2 +\\sum_{i=1}^n \\sum_{j=1}^n A \\left(x_{ij} (1- y_j)\\right).\n",
+ "$$\n",
+ "\n",
+ "### From Hamiltonian to Quadratic Programming (QP) formulation \n",
+ "\n",
+ "In the vector ${\\bf z}$, the Ising Hamiltonian elements can be rewritten as follows,\n",
+ "\n",
+ "First term:\n",
+ "\n",
+ "$$\n",
+ "\\sum_{i=1}^n \\sum_{j=1}^n \\rho_{ij} x_{ij} = [\\rho_{11},\\rho_{12},\\ldots,\\rho_{11}, \\rho_{22},\\ldots,\\rho_{nn}|{\\bf 0}_n ]{\\bf z} =: {\\bf c}_0^T {\\bf z}\n",
+ "$$\n",
+ "\n",
+ "Second term:\n",
+ "\n",
+ "$$\n",
+ "A\\Big( \\sum_{j=1}^n y_j - q\\Big)^2 = A \\Big(\\sum_{j=1}^n y_j\\Big)^2 - 2 A \\sum_{j=1}^n y_j + A q^2 = A {\\bf z}^T \\left[\\begin{array}{c}{\\bf 0}_{n^2} \\\\ \\hline {\\bf 1}_n \\end{array}\\right]\\left[\\begin{array}{cc}{\\bf 0}_{n^2} | {\\bf 1}_n \\end{array}\\right]{\\bf z} - 2 A q [{\\bf 0}_{n^2}|{\\bf 1}_n]{\\bf z} + A q^2 =: {\\bf z}^T {\\bf Q}_0 {\\bf z} + {\\bf c}_1^T {\\bf z} + r_0\n",
+ "$$\n",
+ "\n",
+ "Third term:\n",
+ "\n",
+ "$$\n",
+ "\\sum_{i=1}^n A\\Big( \\sum_{j=1}^n x_{ij} - 1\\Big)^2 = A\\sum_{i=1}^n \\Big(\\sum_{j=1}^n x_{ij}\\Big)^2 - 2 A \\sum_{i=1}^n\\sum_{j=1}^n x_{ij} + n A = \\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad $$\n",
+ "\n",
+ "which is equivalent to: \n",
+ "\n",
+ "$$\n",
+ "\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad\\qquad = A {\\bf z}^T \\left(\\sum_{i=1}^n \\left[\\begin{array}{c}{\\bf 0}_{n(i-1)} \\\\ {\\bf 1}_n \\\\ {\\bf 0}_{n(n-i)} \\\\ \\hline {\\bf 0}_{n} \\end{array}\\right]\\left[\\begin{array}{cccc}{\\bf 0}_{n(i-1)} & {\\bf 1}_n & {\\bf 0}_{n(n-i)} & | {\\bf 0}_{n} \\end{array}\\right]\\right){\\bf z} - 2 A [{\\bf 1}_{n^2}|{\\bf 0}_n]{\\bf z} + n A =: {\\bf z}^T {\\bf Q}_1 {\\bf z} + {\\bf c}_2^T {\\bf z} + r_1\n",
+ "$$\n",
+ "\n",
+ "Fourth term:\n",
+ "\n",
+ "$$\n",
+ "A \\sum_{j=1}^n (x_{jj}-y_j)^2 = A {\\bf z}^T \\left(\\sum_{j=0}^{n-1} \\left[\\begin{array}{c}{\\bf 0}_{nj + j} \\\\ 1 \\\\ {\\bf 0}_{n^2-(nj+j+1)} \\\\ \\hline {\\bf 0}_{j} \\\\ -1 \\\\ {\\bf 0}_{n-j-1} \\end{array}\\right]\\left[\\begin{array}{cccccc}{\\bf 0}_{nj + j} & 1 & {\\bf 0}_{n^2-(nj+j+1)} & | {\\bf 0}_{j} & -1 & {\\bf 0}_{n-j-1} \\end{array}\\right]\\right){\\bf z} = A {\\bf z}^T {\\bf Q}_2 {\\bf z}\n",
+ "$$\n",
+ "\n",
+ "Fifth term:\n",
+ "\n",
+ "$$\n",
+ "\\sum_{i=1}^n \\sum_{j=1}^n A \\left(x_{ij} (1- y_j)\\right) = A [{\\bf 1}_{n^2}|{\\bf 0}_n]{\\bf z} + A {\\bf z}^T \\left( \\sum_{i=1}^n \\sum_{j=1}^n \\left[\\begin{array}{ccc|c} & & & \\\\ & {\\bf 0}_{n^2\\times n^2} & & -1/2_{(ij,j)} \\\\ & & & \\\\ \\hline & -1/2_{(j, ij)} & & {\\bf 0}_{n} \\end{array}\\right] \\right) {\\bf z} =: {\\bf z}^T {\\bf Q}_3 {\\bf z} + {\\bf c}_3^T {\\bf z}\n",
+ "$$\n",
+ "\n",
+ "Therefore, the formulation becomes,\n",
+ "\n",
+ "$$\n",
+ "(IH-QP)\\quad \\max_{{\\bf z}\\in\\{0,1\\}^{n(n+1)}} \\, {\\bf z}^T ({\\bf Q}_0+{\\bf Q}_1+ {\\bf Q}_2 + {\\bf Q}_3 ){\\bf z} + ({\\bf c}_0+{\\bf c}_1+{\\bf c}_2+{\\bf c}_3)^T {\\bf z} +r_0+r_1+r_2$$\n",
+ "\n",
+ "which can be passed to variational quantum eigensolver. \n",
+ "\n",
+ "\n",
+ "\n",
+ "## References\n",
+ "\n",
+ "[1] G. Cornuejols, M. L. Fisher, and G. L. Nemhauser, *Location of bank accounts to optimize float: an analytical study of exact and approximate algorithms*, Management Science, vol. 23(8), 1997\n",
+ "\n",
+ "[2] E. Farhi, J. Goldstone, S. Gutmann e-print arXiv 1411.4028, 2014\n",
+ "\n",
+ "[3] G. Cornuejols and R. Tutuncu, *Optimization methods in finance*, 2006\n",
+ "\n",
+ "[4] DJ. Berndt and J. Clifford, *Using dynamic time warping to find patterns in time series*. In KDD workshop 1994 (Vol. 10, No. 16, pp. 359-370).\n",
+ "\n",
+ "[5] https://github.com/Qiskit/qiskit-tutorial/blob/master/qiskit/aqua/optimization/maxcut_and_tsp.ipynb"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## The Implementation\n",
+ "\n",
+ "First, we import the requisite modules."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Import requisite modules\n",
+ "import math\n",
+ "import operator\n",
+ "import logging\n",
+ "import traceback\n",
+ "import datetime\n",
+ "import sys\n",
+ "import warnings\n",
+ "warnings.filterwarnings(\"error\") \n",
+ "warnings.filterwarnings(\"ignore\", category=DeprecationWarning)\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Import Qiskit packages\n",
+ "warnings.filterwarnings('ignore')\n",
+ "import qiskit \n",
+ "from qiskit import BasicAer\n",
+ "from qiskit.aqua import QuantumInstance\n",
+ "from qiskit.aqua import Operator, run_algorithm\n",
+ "from qiskit.aqua.input import EnergyInput\n",
+ "from qiskit.aqua.algorithms import VQE, QAOA, ExactEigensolver\n",
+ "from qiskit.aqua.components.optimizers import COBYLA\n",
+ "from qiskit.aqua.components.variational_forms import RY\n",
+ "# setup aqua logging\n",
+ "from qiskit.aqua._logging import set_logging_config, build_logging_config\n",
+ "# set_logging_config(build_logging_config(logging.DEBUG)) # choose INFO, DEBUG to see the log\n",
+ "\n",
+ "# The data providers of stock-market data\n",
+ "from qiskit.aqua.translators.data_providers import *\n",
+ "from qiskit.aqua.translators.ising import portfolio_diversification"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Next, we download price data for two stocks and compute their pair-wise similarity matrix (dynamic time warping distance normalised to (0,1] by taking the reciprocal). If this fails, e.g., due to your being offline or exeeding the daily limit for accesses to the stock-market data, we consider a constant matrix instead."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "# Generate a pairwise time-series similarity matrix\n",
+ "stocks = [\"TICKER1\", \"TICKER2\"]\n",
+ "n = len(stocks)\n",
+ "rho = np.ones((n,n))\n",
+ "rho[0,1] = 0.8\n",
+ "rho[1,0] = 0.8\n",
+ "\n",
+ "data = RandomDataProvider(tickers = stocks,\n",
+ " start = datetime.datetime(2016,1,1),\n",
+ " end = datetime.datetime(2016,1,30))\n",
+ "data.run()\n",
+ "rho = data.get_similarity_matrix()\n",
+ "\n",
+ "# Actually, we consider the additive inverse to invert the direction of optimisation. \n",
+ "rho = -1 * rho"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we decide on the number of clusters. This has to be smaller than the number of stocks we have loaded."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "q = 1 # q less or equal than n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Classical solution using IBM ILOG CPLEX\n",
+ "\n",
+ "For a classical solution, we use IBM CPLEX. CPLEX is able to find the exact solution of this problem. We first define a ClassicalOptimizer class that encodes the problem in a way that CPLEX can solve, and then instantiate the class and solve it. \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "class ClassicalOptimizer:\n",
+ " def __init__(self, rho, n, q):\n",
+ "\n",
+ " self.rho = rho\n",
+ " self.n = n # number of inner variables\n",
+ " self.q = q # number of required selection\n",
+ "\n",
+ " def compute_allowed_combinations(self):\n",
+ " f = math.factorial\n",
+ " return int(f(self.n) / f(self.q) / f(self.n - self.q))\n",
+ "\n",
+ " def cplex_solution(self):\n",
+ "\n",
+ " # refactoring\n",
+ " rho = self.rho\n",
+ " n = self.n\n",
+ " q = self.q\n",
+ "\n",
+ " my_obj = list(rho.reshape(1, n ** 2)[0]) + [0. for x in range(0, n)]\n",
+ " my_ub = [1 for x in range(0, n ** 2 + n)]\n",
+ " my_lb = [0 for x in range(0, n ** 2 + n)]\n",
+ " my_ctype = \"\".join(['I' for x in range(0, n ** 2 + n)])\n",
+ "\n",
+ " my_rhs = [q] + [1 for x in range (0, n)] +[0 for x in range (0, n)] + [0.1 for x in range(0, n ** 2)]\n",
+ " my_sense = \"\".join(['E' for x in range(0, 1+n)]) + \"\".join(['E' for x in range(0, n)]) + \"\".join(\n",
+ " ['L' for x in range(0, n ** 2)])\n",
+ "\n",
+ " try:\n",
+ " my_prob = cplex.Cplex()\n",
+ " self.populatebyrow(my_prob, my_obj, my_ub, my_lb, my_ctype, my_sense, my_rhs)\n",
+ "\n",
+ " my_prob.solve()\n",
+ "\n",
+ " except CplexError as exc:\n",
+ " print(exc)\n",
+ " return\n",
+ "\n",
+ " x = my_prob.solution.get_values()\n",
+ " x = np.array(x)\n",
+ " cost = my_prob.solution.get_objective_value()\n",
+ "\n",
+ " return x, cost\n",
+ "\n",
+ " def populatebyrow(self, prob, my_obj, my_ub, my_lb, my_ctype, my_sense, my_rhs):\n",
+ "\n",
+ " n = self.n\n",
+ "\n",
+ " prob.objective.set_sense(prob.objective.sense.minimize)\n",
+ " prob.variables.add(obj=my_obj, lb=my_lb, ub=my_ub, types=my_ctype)\n",
+ "\n",
+ " prob.set_log_stream(None)\n",
+ " prob.set_error_stream(None)\n",
+ " prob.set_warning_stream(None)\n",
+ " prob.set_results_stream(None)\n",
+ "\n",
+ " rows = []\n",
+ " col = [x for x in range(n**2, n**2+n)]\n",
+ " coef = [1 for x in range(0, n)]\n",
+ " rows.append([col, coef])\n",
+ "\n",
+ " for ii in range(0, n):\n",
+ " col = [x for x in range(0+n*ii, n+n*ii)]\n",
+ " coef = [1 for x in range(0, n)]\n",
+ "\n",
+ " rows.append([col, coef])\n",
+ "\n",
+ " for ii in range(0, n):\n",
+ " col = [ii * n + ii, n ** 2 + ii]\n",
+ " coef = [1, -1]\n",
+ " rows.append([col, coef])\n",
+ "\n",
+ " for ii in range(0, n):\n",
+ " for jj in range(0, n):\n",
+ " col = [ii*n + jj, n ** 2 + jj]\n",
+ " coef = [1, -1]\n",
+ "\n",
+ " rows.append([col, coef])\n",
+ " \n",
+ " prob.linear_constraints.add(lin_expr=rows, senses=my_sense, rhs=my_rhs)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Number of feasible combinations= 2\n",
+ "Total number of combinations= 64\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Instantiate the classical optimizer class\n",
+ "classical_optimizer = ClassicalOptimizer(rho, n, q)\n",
+ "\n",
+ "# Compute the number of feasible solutions:\n",
+ "print('Number of feasible combinations= ' + str(classical_optimizer.compute_allowed_combinations()))\n",
+ "\n",
+ "# Compute the total number of possible combinations (feasible + unfeasible)\n",
+ "print('Total number of combinations= ' + str(2 ** (n*(n+1))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Visualize the solution\n",
+ "def visualize_solution(xc, yc, x, C, n, K, title_str):\n",
+ " plt.figure()\n",
+ " plt.scatter(xc, yc, s=200)\n",
+ " for i in range(len(xc)):\n",
+ " plt.annotate(i, (xc[i] + 0.015, yc[i]), size=16, color='r')\n",
+ " \n",
+ " plt.grid()\n",
+ "\n",
+ " for ii in range(n ** 2, n **2 + n):\n",
+ "\n",
+ " if x[ii] > 0:\n",
+ " plt.plot(xc[ii-n**2], yc[ii-n**2], 'r*', ms=20)\n",
+ "\n",
+ " for ii in range(0, n ** 2):\n",
+ "\n",
+ " if x[ii] > 0:\n",
+ " iy = ii // n\n",
+ " ix = ii % n\n",
+ " plt.plot([xc[ix], xc[iy]], [yc[ix], yc[iy]], 'C2')\n",
+ "\n",
+ " plt.title(title_str +' cost = ' + str(int(C * 100) / 100.))\n",
+ " plt.show() "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Solution shows the selected stocks via the stars and in green the links (via similarities) with other stocks that are represented in the fund by the linked stock. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Quantum Computing with IBM Q\n",
+ "\n",
+ "For the quantum solution, we use Qiskit. We first define a class QuantumOptimizer that encodes the quantum approach to solve the problem and then we instantiate it and solve it. We define the following methods inside the class:\n",
+ "\n",
+ "- `exact_solution` : to make sure that the Ising Hamiltonian is correctly encoded in the $Z$ basis, we can compute its eigendecomposition classicaly, i.e., considering a symmetric matrix of dimension $2^N \\times 2^N$. For the problem at hand $n=3$, that is $N = 12$ seems the limit for many laptops; \n",
+ "- `vqe_solution` : solves the problem $(M)$ via the variational quantum eigensolver (VQE);\n",
+ "- `qaoa_solution` : solves the problem $(M)$ via a Quantum Approximate Optimization Algorithm (QAOA)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "class QuantumOptimizer:\n",
+ "\n",
+ " def __init__(self, rho, n, q):\n",
+ "\n",
+ " self.rho = rho\n",
+ " self.n = n\n",
+ " self.q = q\n",
+ "\n",
+ " # Obtains the least eigenvalue of the Hamiltonian classically\n",
+ " def exact_solution(self):\n",
+ " qubitOp = portfolio_diversification.get_portfoliodiversification_qubitops(self.rho, self.n, self.q)\n",
+ " algo_input = EnergyInput(qubitOp)\n",
+ " algorithm_cfg = {\n",
+ " 'name': 'ExactEigensolver',\n",
+ " }\n",
+ " params = {\n",
+ " 'problem': {'name': 'ising'},\n",
+ " 'algorithm': algorithm_cfg\n",
+ " }\n",
+ " result = run_algorithm(params, algo_input)\n",
+ " return self.decode_result(result)\n",
+ "\n",
+ " def vqe_solution(self):\n",
+ " qubitOp = portfolio_diversification.get_portfoliodiversification_qubitops(self.rho, self.n, self.q)\n",
+ " backend = BasicAer.get_backend('statevector_simulator')\n",
+ " seed = 50\n",
+ " cobyla = COBYLA()\n",
+ " cobyla.set_options(maxiter=250)\n",
+ " ry = RY(qubitOp.num_qubits, depth=5, entanglement='full')\n",
+ " vqe = VQE(qubitOp, ry, cobyla, 'matrix')\n",
+ " vqe.random_seed = seed\n",
+ " quantum_instance = QuantumInstance(backend=backend, seed_simulator=seed, seed_transpiler=seed)\n",
+ " result = vqe.run(quantum_instance)\n",
+ " return self.decode_result(result)\n",
+ " \n",
+ " def qaoa_solution(self):\n",
+ " qubitOp = portfolio_diversification.get_portfoliodiversification_qubitops(self.rho, self.n, self.q)\n",
+ " backend = BasicAer.get_backend('statevector_simulator')\n",
+ " seed = 50\n",
+ " cobyla = COBYLA()\n",
+ " cobyla.set_options(maxiter=250)\n",
+ " qaoa = QAOA(qubitOp, cobyla, 3, 'matrix')\n",
+ " qaoa.random_seed = seed\n",
+ " quantum_instance = QuantumInstance(backend=backend, seed_simulator=seed, seed_transpiler=seed)\n",
+ " result = qaoa.run(quantum_instance)\n",
+ " return self.decode_result(result)\n",
+ "\n",
+ " def decode_result(self, result, offset = 0):\n",
+ " quantum_solution = portfolio_diversification.get_portfoliodiversification_solution(self.rho, self.n, self.q, result)\n",
+ " ground_level = portfolio_diversification.get_portfoliodiversification_value(self.rho, self.n, self.q, quantum_solution)\n",
+ " return quantum_solution, ground_level\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 1\n",
+ "\n",
+ "Instantiate the quantum optimizer class with parameters: \n",
+ "- the similarity matrix `rho`;\n",
+ "- the number of assets and clusters `n` and `q`;"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Instantiate the quantum optimizer class with parameters: \n",
+ "quantum_optimizer = QuantumOptimizer(rho, n, q)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 2\n",
+ "\n",
+ "Encode the problem as a binary formulation (IH-QP).\n",
+ "\n",
+ "Sanity check: make sure that the binary formulation in the quantum optimizer is correct (i.e., yields the same cost given the same solution)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Check if the binary representation is correct. This requires CPLEX\n",
+ "try: \n",
+ " import cplex\n",
+ " warnings.filterwarnings('ignore')\n",
+ " quantum_solution, quantum_cost = quantum_optimizer.exact_solution()\n",
+ " classical_solution, classical_cost = classical_optimizer.cplex_solution()\n",
+ " print(quantum_cost, classical_cost)\n",
+ " if np.abs(quantum_cost - classical_cost) < 0.01:\n",
+ " print('Binary formulation is correct')\n",
+ " else: print('Error in the formulation of the Hamiltonian')\n",
+ "except: None"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 3\n",
+ "\n",
+ "Encode the problem as an Ising Hamiltonian in the Z basis. \n",
+ "\n",
+ "Sanity check: make sure that the formulation is correct (i.e., yields the same cost given the same solution)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[0 1 0 1 0 1]\n"
+ ]
+ }
+ ],
+ "source": [
+ "ground_state, ground_level = quantum_optimizer.exact_solution()\n",
+ "print(ground_state)\n",
+ "\n",
+ "try:\n",
+ " if np.abs(ground_level - classical_cost)<0.01:\n",
+ " print('Ising Hamiltonian in Z basis is correct')\n",
+ " else: print('Error in the Ising Hamiltonian formulation')\n",
+ "except: None"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 4\n",
+ "\n",
+ "Solve the problem via VQE. Notice that depending on the number of qubits, this can take a while: for 6 qubits it takes 15 minutes on a 2015 Macbook Pro, for 12 qubits it takes more than 12 hours. For longer runs, logging may be useful to observe the workings; otherwise, you just have to wait until the solution is printed."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1 0 1 0 1 0]\n",
+ "VQE does not produce the same solution as the exact eigensolver, but that is to be expected.\n"
+ ]
+ }
+ ],
+ "source": [
+ "warnings.filterwarnings('ignore')\n",
+ "vqe_state, vqe_level = quantum_optimizer.vqe_solution()\n",
+ "print(vqe_state)\n",
+ "\n",
+ "try:\n",
+ " if np.linalg.norm(ground_state - vqe_state)<0.01:\n",
+ " print('VQE produces the same solution as the exact eigensolver.')\n",
+ " else: print('VQE does not produce the same solution as the exact eigensolver, but that is to be expected.')\n",
+ "except: None"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Step 5\n",
+ "Visualize the solution"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "xc, yc = data.get_coordinates()\n",
+ "visualize_solution(xc, yc, ground_state, ground_level, n, q, 'Classical')\n",
+ "visualize_solution(xc, yc, vqe_state, vqe_level, n, q, 'VQE')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Solution shows the selected stocks via the stars and in green the links (via similarities) with other stocks that are represented in the fund by the linked stock. Keep in mind that VQE is an heuristic working on the QP formulation of the Ising Hamiltonian, though. For suitable choices of A, local optima of the QP formulation will be feasible solutions to the ILP. While for some small instances, as above, we can find optimal solutions of the QP formulation which coincide with optima of the ILP, finding optimal solutions of the ILP is harder than finding local optima of the QP formulation, in general. Even within the VQE, one may provide stronger guarantees, for specific variational forms (trial wave functions). "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2019-08-22T01:54:27.014553Z",
+ "start_time": "2019-08-22T01:54:27.005205Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/qiskit/advanced/aqua/finance/optimization/.ipynb_checkpoints/portfolio_optimization-checkpoint.ipynb b/qiskit/advanced/aqua/finance/optimization/.ipynb_checkpoints/portfolio_optimization-checkpoint.ipynb
new file mode 100644
index 000000000..d7d7dfb5b
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/optimization/.ipynb_checkpoints/portfolio_optimization-checkpoint.ipynb
@@ -0,0 +1,503 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "# _*Qiskit Finance: Portfolio Optimization*_ \n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/Qiskit/qiskit-tutorials.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Stefan Woerner[1], Daniel Egger[1], Shaohan Hu[1], Stephen Wood[1], Marco Pistoia[1]\n",
+ "### Affliation\n",
+ "- [1]IBMQ"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Introduction\n",
+ "\n",
+ "This tutorial shows how to solve the following mean-variance portfolio optimization problem for $n$ assets:\n",
+ "\n",
+ "$\\begin{aligned}\n",
+ "\\min_{x \\in \\{0, 1\\}^n} q x^T \\Sigma x - \\mu^T x\\\\\n",
+ "\\text{subject to: } 1^T x = B\n",
+ "\\end{aligned}$\n",
+ "\n",
+ "where we use the following notation:\n",
+ "\n",
+ "- $x \\in \\{0, 1\\}^n$ denotes the vector of binary decision variables, which indicate which assets to pick ($x[i] = 1$) and which not to pick ($x[i] = 0$),\n",
+ "- $\\mu \\in \\mathbb{R}^n$ defines the expected returns for the assets,\n",
+ "- $\\Sigma \\in \\mathbb{R}^{n \\times n}$ specifies the covariances between the assets,\n",
+ "- $q > 0$ controls the risk appetite of the decision maker,\n",
+ "- and $B$ denotes the budget, i.e. the number of assets to be selected out of $n$.\n",
+ "\n",
+ "We assume the following simplifications:\n",
+ "- all assets have the same price (normalized to 1),\n",
+ "- the full budget $B$ has to be spent, i.e. one has to select exactly $B$ assets.\n",
+ "\n",
+ "The equality constraint $1^T x = B$ is mapped to a penalty term $(1^T x - B)^2$ which is scaled by a parameter and subtracted from the objective function. \n",
+ "The resulting problem can be mapped to a Hamiltonian whose groundstate corresponds to the optimal solution.\n",
+ "This notebook shows how to use the Variational Quantum Eigensolver (VQE) or the Quantum Approximate Optimization Algorithm (QAOA) to find the optimal solution for a given set of parameters.\n",
+ "\n",
+ "Experiments on real quantum hardware for this problem are reported for instance in the following paper:\n",
+ " \n",
+ "Improving Variational Quantum Optimization using CVaR. Barkoutsos et al. 2019."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from qiskit import BasicAer\n",
+ "from qiskit.aqua import QuantumInstance\n",
+ "from qiskit.aqua import Operator, run_algorithm\n",
+ "from qiskit.aqua.input import EnergyInput\n",
+ "from qiskit.aqua.translators.ising import portfolio\n",
+ "from qiskit.aqua.translators.data_providers import RandomDataProvider\n",
+ "from qiskit.aqua.algorithms import VQE, QAOA, ExactEigensolver\n",
+ "from qiskit.aqua.components.optimizers import COBYLA\n",
+ "from qiskit.aqua.components.variational_forms import RY\n",
+ "import numpy as np\n",
+ "import datetime"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### [Optional] Setup token to run the experiment on a real device\n",
+ "If you would like to run the experiement on a real device, you need to setup your account first.\n",
+ "\n",
+ "Note: If you do not store your token yet, use `IBMQ.save_account('MY_API_TOKEN')` to store it first."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from qiskit import IBMQ\n",
+ "provider = IBMQ.load_account()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Define problem instance\n",
+ "\n",
+ "Here an Operator instance is created for our Hamiltonian. In this case the paulis are from an Ising Hamiltonian translated from the portfolio problem. We use a random portfolio problem for this notebook. It is straight-forward to extend this to using real financial data as illustrated here: \n",
+ "[Loading and Processing Stock-Market Time-Series Data](../data_providers/time_series.ipynb)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set number of assets (= number of qubits)\n",
+ "num_assets = 4\n",
+ "\n",
+ "# Generate expected return and covariance matrix from (random) time-series\n",
+ "stocks = [(\"TICKER%s\" % i) for i in range(num_assets)]\n",
+ "data = RandomDataProvider(tickers=stocks,\n",
+ " start=datetime.datetime(2016,1,1),\n",
+ " end=datetime.datetime(2016,1,30))\n",
+ "data.run()\n",
+ "mu = data.get_period_return_mean_vector()\n",
+ "sigma = data.get_period_return_covariance_matrix()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "q = 0.5 # set risk factor\n",
+ "budget = int(num_assets / 2) # set budget\n",
+ "penalty = num_assets # set parameter to scale the budget penalty term\n",
+ "\n",
+ "qubitOp, offset = portfolio.get_portfolio_qubitops(mu, sigma, q, budget, penalty)\n",
+ "algo_input = EnergyInput(qubitOp)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We define some utility methods to print the results in a nice format."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def index_to_selection(i, num_assets):\n",
+ " s = \"{0:b}\".format(i).rjust(num_assets)\n",
+ " x = np.array([1 if s[i]=='1' else 0 for i in reversed(range(num_assets))])\n",
+ " return x\n",
+ "\n",
+ "def print_result(result):\n",
+ " selection = portfolio.sample_most_likely(result['eigvecs'][0])\n",
+ " value = portfolio.portfolio_value(selection, mu, sigma, q, budget, penalty)\n",
+ " print('Optimal: selection {}, value {:.4f}'.format(selection, value))\n",
+ "\n",
+ " probabilities = np.abs(result['eigvecs'][0])**2\n",
+ " i_sorted = reversed(np.argsort(probabilities))\n",
+ " print('\\n----------------- Full result ---------------------')\n",
+ " print('selection\\tvalue\\t\\tprobability')\n",
+ " print('---------------------------------------------------')\n",
+ " for i in i_sorted:\n",
+ " x = index_to_selection(i, num_assets)\n",
+ " value = portfolio.portfolio_value(x, mu, sigma, q, budget, penalty) \n",
+ " probability = probabilities[i]\n",
+ " print('%10s\\t%.4f\\t\\t%.4f' %(x, value, probability))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### ExactEigensolver (as a classical reference)\n",
+ "Lets solve the problem. First classically...\n",
+ "\n",
+ "We can now use the Operator we built above without regard to the specifics of how it was created. To run an algorithm we need to prepare a configuration params dictionary. We set the algorithm for the ExactEigensolver so we can have a classical reference. The problem is set for 'ising'. Backend is not required since this is computed classically not using quantum computation. The params, along with the algo input containing the operator, are now passed to the algorithm to be run. The result is returned as a dictionary."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Optimal: selection [1 1 0 0], value -0.0068\n",
+ "\n",
+ "----------------- Full result ---------------------\n",
+ "selection\tvalue\t\tprobability\n",
+ "---------------------------------------------------\n",
+ " [1 1 0 0]\t-0.0068\t\t1.0000\n",
+ " [1 1 1 1]\t15.9945\t\t0.0000\n",
+ " [0 1 1 1]\t3.9954\t\t0.0000\n",
+ " [1 0 1 1]\t4.0000\t\t0.0000\n",
+ " [0 0 1 1]\t0.0010\t\t0.0000\n",
+ " [1 1 0 1]\t3.9926\t\t0.0000\n",
+ " [0 1 0 1]\t-0.0065\t\t0.0000\n",
+ " [1 0 0 1]\t-0.0017\t\t0.0000\n",
+ " [0 0 0 1]\t3.9993\t\t0.0000\n",
+ " [1 1 1 0]\t3.9951\t\t0.0000\n",
+ " [0 1 1 0]\t-0.0039\t\t0.0000\n",
+ " [1 0 1 0]\t0.0007\t\t0.0000\n",
+ " [0 0 1 0]\t4.0017\t\t0.0000\n",
+ " [0 1 0 0]\t3.9942\t\t0.0000\n",
+ " [1 0 0 0]\t3.9990\t\t0.0000\n",
+ " [0 0 0 0]\t16.0000\t\t0.0000\n"
+ ]
+ }
+ ],
+ "source": [
+ "exact_eigensolver = ExactEigensolver(qubitOp, k=1)\n",
+ "result = exact_eigensolver.run()\n",
+ "\n",
+ "\"\"\" the equivalent if using declarative approach\n",
+ "algorithm_cfg = {\n",
+ " 'name': 'ExactEigensolver'\n",
+ "}\n",
+ "\n",
+ "params = {\n",
+ " 'problem': {'name': 'ising'},\n",
+ " 'algorithm': algorithm_cfg\n",
+ "}\n",
+ "result = run_algorithm(params, algo_input)\n",
+ "\"\"\"\n",
+ "\n",
+ "print_result(result)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Solution using VQE\n",
+ "We can now use the Variational Quantum Eigensolver (VQE) to solve the problem. We will specify the optimizer and variational form to be used.\n",
+ "\n",
+ "Note: You can switch to different backends by providing the name of backend."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Optimal: selection [0 1 1 0], value -0.0039\n",
+ "\n",
+ "----------------- Full result ---------------------\n",
+ "selection\tvalue\t\tprobability\n",
+ "---------------------------------------------------\n",
+ " [0 1 1 0]\t-0.0039\t\t0.8805\n",
+ " [0 0 1 1]\t0.0010\t\t0.1186\n",
+ " [1 1 0 0]\t-0.0068\t\t0.0008\n",
+ " [1 0 0 1]\t-0.0017\t\t0.0001\n",
+ " [1 0 1 0]\t0.0007\t\t0.0001\n",
+ " [0 1 0 1]\t-0.0065\t\t0.0000\n",
+ " [0 0 0 1]\t3.9993\t\t0.0000\n",
+ " [1 1 0 1]\t3.9926\t\t0.0000\n",
+ " [0 1 0 0]\t3.9942\t\t0.0000\n",
+ " [1 0 1 1]\t4.0000\t\t0.0000\n",
+ " [1 1 1 1]\t15.9945\t\t0.0000\n",
+ " [1 0 0 0]\t3.9990\t\t0.0000\n",
+ " [0 0 1 0]\t4.0017\t\t0.0000\n",
+ " [0 1 1 1]\t3.9954\t\t0.0000\n",
+ " [0 0 0 0]\t16.0000\t\t0.0000\n",
+ " [1 1 1 0]\t3.9951\t\t0.0000\n"
+ ]
+ }
+ ],
+ "source": [
+ "backend = BasicAer.get_backend('statevector_simulator')\n",
+ "seed = 50\n",
+ "\n",
+ "cobyla = COBYLA()\n",
+ "cobyla.set_options(maxiter=500)\n",
+ "ry = RY(qubitOp.num_qubits, depth=3, entanglement='full')\n",
+ "vqe = VQE(qubitOp, ry, cobyla)\n",
+ "vqe.random_seed = seed\n",
+ "\n",
+ "quantum_instance = QuantumInstance(backend=backend, seed_simulator=seed, seed_transpiler=seed)\n",
+ "\n",
+ "result = vqe.run(quantum_instance)\n",
+ "\n",
+ "\"\"\"declarative approach\n",
+ "algorithm_cfg = {\n",
+ " 'name': 'VQE',\n",
+ " 'operator_mode': 'matrix'\n",
+ "}\n",
+ "\n",
+ "optimizer_cfg = {\n",
+ " 'name': 'COBYLA',\n",
+ " 'maxiter': 500\n",
+ "}\n",
+ "\n",
+ "var_form_cfg = {\n",
+ " 'name': 'RY',\n",
+ " 'depth': 3,\n",
+ " 'entanglement': 'full'\n",
+ "}\n",
+ "\n",
+ "params = {\n",
+ " 'problem': {'name': 'ising', 'random_seed': seed},\n",
+ " 'algorithm': algorithm_cfg,\n",
+ " 'optimizer': optimizer_cfg,\n",
+ " 'variational_form': var_form_cfg\n",
+ "}\n",
+ "result = run_algorithm(params, algo_input, backend=backend)\n",
+ "\"\"\"\n",
+ "print_result(result)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Solution using QAOA\n",
+ "\n",
+ "We also show here a result using the Quantum Approximate Optimization Algorithm (QAOA). This is another variational algorithm and it uses an internal variational form that is created based on the problem."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Optimal: selection [0 0 1 1], value 0.0010\n",
+ "\n",
+ "----------------- Full result ---------------------\n",
+ "selection\tvalue\t\tprobability\n",
+ "---------------------------------------------------\n",
+ " [0 0 1 1]\t0.0010\t\t0.1668\n",
+ " [1 0 1 0]\t0.0007\t\t0.1668\n",
+ " [1 0 0 1]\t-0.0017\t\t0.1667\n",
+ " [0 1 1 0]\t-0.0039\t\t0.1666\n",
+ " [0 1 0 1]\t-0.0065\t\t0.1665\n",
+ " [1 1 0 0]\t-0.0068\t\t0.1665\n",
+ " [0 0 1 0]\t4.0017\t\t0.0000\n",
+ " [1 0 1 1]\t4.0000\t\t0.0000\n",
+ " [1 1 1 1]\t15.9945\t\t0.0000\n",
+ " [0 0 0 1]\t3.9993\t\t0.0000\n",
+ " [1 0 0 0]\t3.9990\t\t0.0000\n",
+ " [0 1 0 0]\t3.9942\t\t0.0000\n",
+ " [1 1 0 1]\t3.9926\t\t0.0000\n",
+ " [0 1 1 1]\t3.9954\t\t0.0000\n",
+ " [1 1 1 0]\t3.9951\t\t0.0000\n",
+ " [0 0 0 0]\t16.0000\t\t0.0000\n"
+ ]
+ }
+ ],
+ "source": [
+ "backend = BasicAer.get_backend('statevector_simulator')\n",
+ "seed = 50\n",
+ "\n",
+ "cobyla = COBYLA()\n",
+ "cobyla.set_options(maxiter=250)\n",
+ "qaoa = QAOA(qubitOp, cobyla, 3)\n",
+ "\n",
+ "qaoa.random_seed = seed\n",
+ "\n",
+ "quantum_instance = QuantumInstance(backend=backend, seed_simulator=seed, seed_transpiler=seed)\n",
+ "\n",
+ "result = qaoa.run(quantum_instance)\n",
+ "\n",
+ "\"\"\"declarative approach\n",
+ "algorithm_cfg = {\n",
+ " 'name': 'QAOA.Variational',\n",
+ " 'p': 3,\n",
+ " 'operator_mode': 'matrix'\n",
+ "}\n",
+ "\n",
+ "optimizer_cfg = {\n",
+ " 'name': 'COBYLA',\n",
+ " 'maxiter': 250\n",
+ "}\n",
+ "\n",
+ "params = {\n",
+ " 'problem': {'name': 'ising', 'random_seed': seed},\n",
+ " 'algorithm': algorithm_cfg,\n",
+ " 'optimizer': optimizer_cfg\n",
+ "}\n",
+ "result = run_algorithm(params, algo_input, backend=backend)\n",
+ "\"\"\"\n",
+ "print_result(result)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2019-08-22T01:54:45.323683Z",
+ "start_time": "2019-08-22T01:54:45.313579Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/qiskit/advanced/aqua/finance/optimization/portfolio_diversification.ipynb b/qiskit/advanced/aqua/finance/optimization/portfolio_diversification.ipynb
index 36bb3db54..bd7f2b3ac 100644
--- a/qiskit/advanced/aqua/finance/optimization/portfolio_diversification.ipynb
+++ b/qiskit/advanced/aqua/finance/optimization/portfolio_diversification.ipynb
@@ -679,6 +679,55 @@
"source": [
"Solution shows the selected stocks via the stars and in green the links (via similarities) with other stocks that are represented in the fund by the linked stock. Keep in mind that VQE is an heuristic working on the QP formulation of the Ising Hamiltonian, though. For suitable choices of A, local optima of the QP formulation will be feasible solutions to the ILP. While for some small instances, as above, we can find optimal solutions of the QP formulation which coincide with optima of the ILP, finding optimal solutions of the ILP is harder than finding local optima of the QP formulation, in general. Even within the VQE, one may provide stronger guarantees, for specific variational forms (trial wave functions). "
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2019-08-22T01:54:27.014553Z",
+ "start_time": "2019-08-22T01:54:27.005205Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
@@ -424,7 +466,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.3"
+ "version": "3.7.4"
},
"varInspector": {
"cols": {
diff --git a/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/asian_barrier_spread_pricing-checkpoint.ipynb b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/asian_barrier_spread_pricing-checkpoint.ipynb
new file mode 100644
index 000000000..18246869f
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/asian_barrier_spread_pricing-checkpoint.ipynb
@@ -0,0 +1,659 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: Pricing Asian Barrier Spreads*_ \n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/Qiskit/qiskit-tutorials.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Stefan Woerner[1], Daniel Egger[1]\n",
+ "### Affliation\n",
+ "- [1]IBMQ"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Introduction\n",
+ " \n",
+ "An Asian barrier spread is a combination of 3 different option types, and as such, combines multiple possible features that the Qiskit Finance option pricing framework supports::\n",
+ "\n",
+ "- Asian option: The payoff depends on the average price over the considered time horizon.\n",
+ "- Barrier Option: The payoff is zero if a certain threshold is exceeded at any time within the considered time horizon.\n",
+ "- (Bull) Spread: The payoff follows a piecewise linear function (depending on the average price) starting at zero, increasing linear, staying constant.\n",
+ "\n",
+ "Suppose strike prices $K_1 < K_2$ and time periods $t=1,2$, with corresponding spot prices $(S_1, S_2)$ following a given multivariate distribution (e.g. generated by some stochastic process), and a barrier threshold $B>0$.\n",
+ "The corresponding payoff function is defined as:\n",
+ " \n",
+ " \n",
+ "$$\n",
+ "P(S_1, S_2) =\n",
+ "\\begin{cases}\n",
+ "\\min\\left\\{\\max\\left\\{\\frac{1}{2}(S_1 + S_2) - K_1, 0\\right\\}, K_2 - K_1\\right\\}, & \\text{ if } S_1, S_2 \\leq B \\\\\n",
+ "0, & \\text{otherwise.}\n",
+ "\\end{cases}\n",
+ "$$\n",
+ "\n",
+ " \n",
+ "In the following, a quantum algorithm based on amplitude estimation is used to estimate the expected payoff, i.e., the fair price before discounting, for the option:\n",
+ " \n",
+ " \n",
+ "$$\\mathbb{E}\\left[ P(S_1, S_2) \\right].$$\n",
+ " \n",
+ "The approximation of the objective function and a general introduction to option pricing and risk analysis on quantum computers are given in the following papers:\n",
+ "\n",
+ "- Quantum Risk Analysis. Woerner, Egger. 2018.\n",
+ "- Option Pricing using Quantum Computers. Stamatopoulos et al. 2019."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "from mpl_toolkits.mplot3d import Axes3D\n",
+ "from scipy.interpolate import griddata\n",
+ "%matplotlib inline\n",
+ "import numpy as np\n",
+ "\n",
+ "from qiskit import QuantumRegister, QuantumCircuit, BasicAer, execute\n",
+ "from qiskit.aqua.algorithms import AmplitudeEstimation\n",
+ "from qiskit.aqua.circuits import WeightedSumOperator, FixedValueComparator as Comparator\n",
+ "from qiskit.aqua.components.uncertainty_problems import UnivariatePiecewiseLinearObjective as PwlObjective\n",
+ "from qiskit.aqua.components.uncertainty_problems import MultivariateProblem\n",
+ "from qiskit.aqua.components.uncertainty_models import MultivariateLogNormalDistribution"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Uncertainty Model\n",
+ "\n",
+ "We construct a circuit factory to load a multivariate log-normal random distribution into a quantum state on $n$ qubits.\n",
+ "For every dimension $j = 1,\\ldots,d$, the distribution is truncated to a given interval $[low_j, high_j]$ and discretized using $2^{n_j}$ grid points, where $n_j$ denotes the number of qubits used to represent dimension $j$, i.e., $n_1+\\ldots+n_d = n$.\n",
+ "The unitary operator corresponding to the circuit factory implements the following: \n",
+ "$$\\big|0\\rangle_{n} \\mapsto \\big|\\psi\\rangle_{n} = \\sum_{i_1,\\ldots,i_d} \\sqrt{p_{i_1\\ldots i_d}}\\big|i_1\\rangle_{n_1}\\ldots\\big|i_d\\rangle_{n_d},$$\n",
+ "where $p_{i_1\\ldots i_d}$ denote the probabilities corresponding to the truncated and discretized distribution and where $i_j$ is mapped to the right interval using the affine map:\n",
+ "$$ \\{0, \\ldots, 2^{n_j}-1\\} \\ni i_j \\mapsto \\frac{high_j - low_j}{2^{n_j} - 1} * i_j + low_j \\in [low_j, high_j].$$\n",
+ "\n",
+ "For simplicity, we assume both stock prices are independent and indentically distributed.\n",
+ "This assumption just simplifies the parametrization below and can be easily relaxed to more complex and also correlated multivariate distributions.\n",
+ "The only important assumption for the current implementation is that the discretization grid of the different dimensions has the same step size."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# number of qubits per dimension to represent the uncertainty \n",
+ "num_uncertainty_qubits = 2\n",
+ "\n",
+ "# parameters for considered random distribution\n",
+ "S = 2.0 # initial spot price\n",
+ "vol = 0.4 # volatility of 40%\n",
+ "r = 0.05 # annual interest rate of 4%\n",
+ "T = 40 / 365 # 40 days to maturity\n",
+ "\n",
+ "# resulting parameters for log-normal distribution\n",
+ "mu = ((r - 0.5 * vol**2) * T + np.log(S))\n",
+ "sigma = vol * np.sqrt(T)\n",
+ "mean = np.exp(mu + sigma**2/2)\n",
+ "variance = (np.exp(sigma**2) - 1) * np.exp(2*mu + sigma**2)\n",
+ "stddev = np.sqrt(variance)\n",
+ "\n",
+ "# lowest and highest value considered for the spot price; in between, an equidistant discretization is considered.\n",
+ "low = np.maximum(0, mean - 3*stddev)\n",
+ "high = mean + 3*stddev\n",
+ "\n",
+ "# map to higher dimensional distribution\n",
+ "# for simplicity assuming dimensions are independent and identically distributed)\n",
+ "dimension = 2\n",
+ "num_qubits=[num_uncertainty_qubits]*dimension\n",
+ "low=low*np.ones(dimension)\n",
+ "high=high*np.ones(dimension)\n",
+ "mu=mu*np.ones(dimension)\n",
+ "cov=sigma**2*np.eye(dimension)\n",
+ "\n",
+ "# construct circuit factory\n",
+ "u = MultivariateLogNormalDistribution(num_qubits=num_qubits, low=low, high=high, mu=mu, cov=cov)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# plot PDF of uncertainty model\n",
+ "x = [ v[0] for v in u.values ]\n",
+ "y = [ v[1] for v in u.values ]\n",
+ "z = u.probabilities\n",
+ "#z = map(float, z)\n",
+ "#z = list(map(float, z))\n",
+ "resolution = np.array([2**n for n in num_qubits])*1j\n",
+ "grid_x, grid_y = np.mgrid[min(x):max(x):resolution[0], min(y):max(y):resolution[1]]\n",
+ "grid_z = griddata((x, y), z, (grid_x, grid_y))\n",
+ "fig = plt.figure(figsize=(10, 8))\n",
+ "ax = fig.gca(projection='3d')\n",
+ "ax.plot_surface(grid_x, grid_y, grid_z, cmap=plt.cm.Spectral)\n",
+ "ax.set_xlabel('Spot Price $S_1$ (\\$)', size=15)\n",
+ "ax.set_ylabel('Spot Price $S_2$ (\\$)', size=15)\n",
+ "ax.set_zlabel('Probability (\\%)', size=15)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Payoff Function\n",
+ "\n",
+ "For simplicity, we consider the sum of the spot prices instead of their average.\n",
+ "The result can be transformed to the average by just dividing it by 2.\n",
+ "\n",
+ "The payoff function equals zero as long as the sum of the spot prices $(S_1 + S_2)$ is less than the strike price $K_1$ and then increases linearly until the sum of the spot prices reaches $K_2$.\n",
+ "Then payoff stays constant to $K_2 - K_1$ unless any of the two spot prices exceeds the barrier threshold $B$, then the payoff goes immediately down to zero.\n",
+ "The implementation first uses a weighted sum operator to compute the sum of the spot prices into an ancilla register, and then uses a comparator, that flips an ancilla qubit from $\\big|0\\rangle$ to $\\big|1\\rangle$ if $(S_1 + S_2) \\geq K_1$ and another comparator/ancilla to capture the case that $(S_1 + S_2) \\geq K_2$.\n",
+ "These ancillas are used to control the linear part of the payoff function.\n",
+ "\n",
+ "In addition, we add another ancilla variable for each time step and use additional comparators to check whether $S_1$, respectively $S_2$, exceed the barrier threshold $B$. The payoff function is only applied if $S_1, S_2 \\leq B$.\n",
+ "\n",
+ "The linear part itself is approximated as follows.\n",
+ "We exploit the fact that $\\sin^2(y + \\pi/4) \\approx y + 1/2$ for small $|y|$.\n",
+ "Thus, for a given approximation scaling factor $c_{approx} \\in [0, 1]$ and $x \\in [0, 1]$ we consider\n",
+ "$$ \\sin^2( \\pi/2 * c_{approx} * ( x - 1/2 ) + \\pi/4) \\approx \\pi/2 * c_{approx} * ( x - 1/2 ) + 1/2 $$ for small $c_{approx}$.\n",
+ "\n",
+ "We can easily construct an operator that acts as \n",
+ "$$\\big|x\\rangle \\big|0\\rangle \\mapsto \\big|x\\rangle \\left( \\cos(a*x+b) \\big|0\\rangle + \\sin(a*x+b) \\big|1\\rangle \\right),$$\n",
+ "using controlled Y-rotations.\n",
+ "\n",
+ "Eventually, we are interested in the probability of measuring $\\big|1\\rangle$ in the last qubit, which corresponds to\n",
+ "$\\sin^2(a*x+b)$.\n",
+ "Together with the approximation above, this allows to approximate the values of interest.\n",
+ "The smaller we choose $c_{approx}$, the better the approximation.\n",
+ "However, since we are then estimating a property scaled by $c_{approx}$, the number of evaluation qubits $m$ needs to be adjusted accordingly.\n",
+ "\n",
+ "For more details on the approximation, we refer to:\n",
+ "Quantum Risk Analysis. Woerner, Egger. 2018.\n",
+ "\n",
+ "Since the weighted sum operator (in its current implementation) can only sum up integers, we need to map from the original ranges to the representable range to estimate the result, and reverse this mapping before interpreting the result. The mapping essentially corresponds to the affine mapping described in the context of the uncertainty model above."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# determine number of qubits required to represent total loss\n",
+ "weights = []\n",
+ "for n in num_qubits:\n",
+ " for i in range(n):\n",
+ " weights += [2**i]\n",
+ "n_s = WeightedSumOperator.get_required_sum_qubits(weights)\n",
+ "\n",
+ "# create circuit factory\n",
+ "agg = WeightedSumOperator(sum(num_qubits), weights)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set the strike price (should be within the low and the high value of the uncertainty)\n",
+ "strike_price_1 = 3\n",
+ "strike_price_2 = 4\n",
+ "\n",
+ "# set the barrier threshold\n",
+ "barrier = 2.5\n",
+ "\n",
+ "# map strike prices and barrier threshold from [low, high] to {0, ..., 2^n-1}\n",
+ "max_value = 2**n_s - 1\n",
+ "low_ = low[0]\n",
+ "high_ = high[0]\n",
+ "\n",
+ "mapped_strike_price_1 = (strike_price_1 - dimension*low_) / (high_ - low_) * (2**num_uncertainty_qubits - 1)\n",
+ "mapped_strike_price_2 = (strike_price_2 - dimension*low_) / (high_ - low_) * (2**num_uncertainty_qubits - 1)\n",
+ "mapped_barrier = (barrier - low) / (high - low) * (2**num_uncertainty_qubits - 1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# condition and condition result\n",
+ "conditions = []\n",
+ "barrier_thresholds = [2]*dimension\n",
+ "for i in range(dimension):\n",
+ " # target dimension of random distribution and corresponding condition (which is required to be True)\n",
+ " conditions += [(i, Comparator(num_qubits[i], mapped_barrier[i] + 1, geq=False))]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set the approximation scaling for the payoff function\n",
+ "c_approx = 0.25\n",
+ "\n",
+ "# setup piecewise linear objective fcuntion\n",
+ "breakpoints = [0, mapped_strike_price_1, mapped_strike_price_2]\n",
+ "slopes = [0, 1, 0]\n",
+ "offsets = [0, 0, mapped_strike_price_2 - mapped_strike_price_1]\n",
+ "f_min = 0\n",
+ "f_max = mapped_strike_price_2 - mapped_strike_price_1\n",
+ "bull_spread_objective = PwlObjective(\n",
+ " n_s,\n",
+ " 0,\n",
+ " max_value,\n",
+ " breakpoints,\n",
+ " slopes,\n",
+ " offsets,\n",
+ " f_min,\n",
+ " f_max,\n",
+ " c_approx\n",
+ ")\n",
+ "\n",
+ "# define overall multivariate problem\n",
+ "asian_barrier_spread = MultivariateProblem(u, agg, bull_spread_objective, conditions=conditions)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# plot exact payoff function\n",
+ "plt.figure(figsize=(15,5))\n",
+ "plt.subplot(1,2,1)\n",
+ "x = np.linspace(sum(low), sum(high))\n",
+ "y = (x <= 5)*np.minimum(np.maximum(0, x - strike_price_1), strike_price_2 - strike_price_1)\n",
+ "plt.plot(x, y, 'r-')\n",
+ "plt.grid()\n",
+ "plt.title('Payoff Function (for $S_1 = S_2$)', size=15)\n",
+ "plt.xlabel('Sum of Spot Prices ($S_1 + S_2)$', size=15)\n",
+ "plt.ylabel('Payoff', size=15)\n",
+ "plt.xticks(size=15, rotation=90)\n",
+ "plt.yticks(size=15)\n",
+ "\n",
+ "# plot contour of payoff function with respect to both time steps, including barrier\n",
+ "plt.subplot(1,2,2)\n",
+ "z = np.zeros((17, 17))\n",
+ "x = np.linspace(low[0], high[0], 17)\n",
+ "y = np.linspace(low[1], high[1], 17)\n",
+ "for i, x_ in enumerate(x):\n",
+ " for j, y_ in enumerate(y):\n",
+ " z[i, j] = np.minimum(np.maximum(0, x_ + y_ - strike_price_1), strike_price_2 - strike_price_1)\n",
+ " if x_ > barrier or y_ > barrier:\n",
+ " z[i, j] = 0\n",
+ " \n",
+ "plt.title('Payoff Function', size =15)\n",
+ "plt.contourf(x, y, z)\n",
+ "plt.colorbar()\n",
+ "plt.xlabel('Spot Price $S_1$', size=15)\n",
+ "plt.ylabel('Spot Price $S_2$', size=15)\n",
+ "plt.xticks(size=15)\n",
+ "plt.yticks(size=15)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "exact expected value:\t0.8023\n"
+ ]
+ }
+ ],
+ "source": [
+ "# evaluate exact expected value\n",
+ "sum_values = np.sum(u.values, axis=1)\n",
+ "payoff = np.minimum(np.maximum(sum_values - strike_price_1, 0), strike_price_2 - strike_price_1)\n",
+ "leq_barrier = [ np.max(v) <= barrier for v in u.values ]\n",
+ "exact_value = np.dot(u.probabilities[leq_barrier], payoff[leq_barrier])\n",
+ "print('exact expected value:\\t%.4f' % exact_value)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Evaluate Expected Payoff\n",
+ "\n",
+ "We first verify the quantum circuit by simulating it and analyzing the resulting probability to measure the $|1\\rangle$ state in the objective qubit"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "state qubits: 5\n",
+ "circuit width: 15\n",
+ "circuit depth: 1068\n"
+ ]
+ }
+ ],
+ "source": [
+ "num_req_qubits = asian_barrier_spread.num_target_qubits\n",
+ "num_req_ancillas = asian_barrier_spread.required_ancillas()\n",
+ "\n",
+ "q = QuantumRegister(num_req_qubits, name='q')\n",
+ "q_a = QuantumRegister(num_req_ancillas, name='q_a')\n",
+ "qc = QuantumCircuit(q, q_a)\n",
+ "\n",
+ "asian_barrier_spread.build(qc, q, q_a)\n",
+ "print('state qubits: ', num_req_qubits)\n",
+ "print('circuit width:', qc.width())\n",
+ "print('circuit depth:', qc.depth())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "job = execute(qc, backend=BasicAer.get_backend('statevector_simulator'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Exact Operator Value: 0.6303\n",
+ "Mapped Operator value: 0.8319\n",
+ "Exact Expected Payoff: 0.8023\n"
+ ]
+ }
+ ],
+ "source": [
+ "# evaluate resulting statevector\n",
+ "value = 0\n",
+ "for i, a in enumerate(job.result().get_statevector()):\n",
+ " b = ('{0:0%sb}' % asian_barrier_spread.num_target_qubits).format(i)[-asian_barrier_spread.num_target_qubits:]\n",
+ " prob = np.abs(a)**2\n",
+ " if prob > 1e-4 and b[0] == '1':\n",
+ " value += prob\n",
+ " # all other states should have zero probability due to ancilla qubits\n",
+ " if i > 2**num_req_qubits:\n",
+ " break\n",
+ "\n",
+ "# map value to original range\n",
+ "mapped_value = asian_barrier_spread.value_to_estimation(value) / (2**num_uncertainty_qubits - 1) * (high_ - low_)\n",
+ "print('Exact Operator Value: %.4f' % value)\n",
+ "print('Mapped Operator value: %.4f' % mapped_value)\n",
+ "print('Exact Expected Payoff: %.4f' % exact_value) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Next we use amplitude estimation to estimate the expected payoff.\n",
+ "Note that this can take a while since we are simulating a large number of qubits. The way we designed the operator (asian_barrier_spread) impliesthat the number of actual state qubits is significantly smaller, thus, helping to reduce the overall simulation time a bit."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set number of evaluation qubits (=log(samples))\n",
+ "m = 3\n",
+ "\n",
+ "# construct amplitude estimation \n",
+ "ae = AmplitudeEstimation(m, asian_barrier_spread)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# result = ae.run(quantum_instance=BasicAer.get_backend('qasm_simulator'), shots=100)\n",
+ "result = ae.run(quantum_instance=BasicAer.get_backend('statevector_simulator'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Exact value: \t0.8023\n",
+ "Estimated value:\t0.5000\n",
+ "Probability: \t0.6958\n"
+ ]
+ }
+ ],
+ "source": [
+ "print('Exact value: \\t%.4f' % exact_value)\n",
+ "print('Estimated value:\\t%.4f' % (result['estimation'] / (2**num_uncertainty_qubits - 1) * (high_ - low_)))\n",
+ "print('Probability: \\t%.4f' % result['max_probability'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/basket_option_pricing-checkpoint.ipynb b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/basket_option_pricing-checkpoint.ipynb
new file mode 100644
index 000000000..0a1731d50
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/basket_option_pricing-checkpoint.ipynb
@@ -0,0 +1,587 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: Pricing Basket Options*_ \n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/Qiskit/qiskit-tutorials.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Stefan Woerner[1], Daniel Egger[1]\n",
+ "### Affliation\n",
+ "- [1]IBMQ"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Introduction\n",
+ " \n",
+ "Suppose a basket option with strike price $K$ and two underlying assets whose spot pricse at maturity $S_T^1$, $S_T^2$ follow given random distributions.\n",
+ "The corresponding payoff function is defined as:\n",
+ " \n",
+ " \n",
+ "$$\\max\\{S_T^1 + S_T^2 - K, 0\\}$$\n",
+ " \n",
+ "In the following, a quantum algorithm based on amplitude estimation is used to estimate the expected payoff, i.e., the fair price before discounting, for the option:\n",
+ " \n",
+ " \n",
+ "$$\\mathbb{E}\\left[ \\max\\{S_T^1 + S_T^2 - K, 0\\} \\right].$$\n",
+ " \n",
+ "The approximation of the objective function and a general introduction to option pricing and risk analysis on quantum computers are given in the following papers:\n",
+ "\n",
+ "- Quantum Risk Analysis. Woerner, Egger. 2018.\n",
+ "- Option Pricing using Quantum Computers. Stamatopoulos et al. 2019."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "from mpl_toolkits.mplot3d import Axes3D\n",
+ "from scipy.interpolate import griddata\n",
+ "%matplotlib inline\n",
+ "import numpy as np\n",
+ "\n",
+ "from qiskit import BasicAer, QuantumRegister, QuantumCircuit, execute\n",
+ "from qiskit.aqua.algorithms import AmplitudeEstimation\n",
+ "from qiskit.aqua.components.uncertainty_problems import MultivariateProblem\n",
+ "from qiskit.aqua.components.uncertainty_problems import UnivariatePiecewiseLinearObjective as PwlObjective\n",
+ "from qiskit.aqua.components.uncertainty_models import MultivariateLogNormalDistribution\n",
+ "from qiskit.aqua.circuits import WeightedSumOperator"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Uncertainty Model\n",
+ "\n",
+ "We construct a circuit factory to load a multivariate log-normal random distribution into a quantum state on $n$ qubits.\n",
+ "For every dimension $j = 1,\\ldots,d$, the distribution is truncated to a given interval $[low_j, high_j]$ and discretized using $2^{n_j}$ grid points, where $n_j$ denotes the number of qubits used to represent dimension $j$, i.e., $n_1+\\ldots+n_d = n$.\n",
+ "The unitary operator corresponding to the circuit factory implements the following: \n",
+ "$$\\big|0\\rangle_{n} \\mapsto \\big|\\psi\\rangle_{n} = \\sum_{i_1,\\ldots,i_d} \\sqrt{p_{i_1\\ldots i_d}}\\big|i_1\\rangle_{n_1}\\ldots\\big|i_d\\rangle_{n_d},$$\n",
+ "where $p_{i_1\\ldots i_d}$ denote the probabilities corresponding to the truncated and discretized distribution and where $i_j$ is mapped to the right interval using the affine map:\n",
+ "$$ \\{0, \\ldots, 2^{n_j}-1\\} \\ni i_j \\mapsto \\frac{high_j - low_j}{2^{n_j} - 1} * i_j + low_j \\in [low_j, high_j].$$\n",
+ "\n",
+ "For simplicity, we assume both stock prices are independent and indentically distributed.\n",
+ "This assumption just simplifies the parametrization below and can be easily relaxed to more complex and also correlated multivariate distributions.\n",
+ "The only important assumption for the current implementation is that the discretization grid of the different dimensions has the same step size."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# number of qubits per dimension to represent the uncertainty \n",
+ "num_uncertainty_qubits = 2\n",
+ "\n",
+ "# parameters for considered random distribution\n",
+ "S = 2.0 # initial spot price\n",
+ "vol = 0.4 # volatility of 40%\n",
+ "r = 0.05 # annual interest rate of 4%\n",
+ "T = 40 / 365 # 40 days to maturity\n",
+ "\n",
+ "# resulting parameters for log-normal distribution\n",
+ "mu = ((r - 0.5 * vol**2) * T + np.log(S))\n",
+ "sigma = vol * np.sqrt(T)\n",
+ "mean = np.exp(mu + sigma**2/2)\n",
+ "variance = (np.exp(sigma**2) - 1) * np.exp(2*mu + sigma**2)\n",
+ "stddev = np.sqrt(variance)\n",
+ "\n",
+ "# lowest and highest value considered for the spot price; in between, an equidistant discretization is considered.\n",
+ "low = np.maximum(0, mean - 3*stddev)\n",
+ "high = mean + 3*stddev\n",
+ "\n",
+ "# map to higher dimensional distribution\n",
+ "# for simplicity assuming dimensions are independent and identically distributed)\n",
+ "dimension = 2\n",
+ "num_qubits=[num_uncertainty_qubits]*dimension\n",
+ "low=low*np.ones(dimension)\n",
+ "high=high*np.ones(dimension)\n",
+ "mu=mu*np.ones(dimension)\n",
+ "cov=sigma**2*np.eye(dimension)\n",
+ "\n",
+ "# construct circuit factory\n",
+ "u = MultivariateLogNormalDistribution(num_qubits=num_qubits, low=low, high=high, mu=mu, cov=cov)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# plot PDF of uncertainty model\n",
+ "x = [ v[0] for v in u.values ]\n",
+ "y = [ v[1] for v in u.values ]\n",
+ "z = u.probabilities\n",
+ "#z = map(float, z)\n",
+ "#z = list(map(float, z))\n",
+ "resolution = np.array([2**n for n in num_qubits])*1j\n",
+ "grid_x, grid_y = np.mgrid[min(x):max(x):resolution[0], min(y):max(y):resolution[1]]\n",
+ "grid_z = griddata((x, y), z, (grid_x, grid_y))\n",
+ "fig = plt.figure(figsize=(10, 8))\n",
+ "ax = fig.gca(projection='3d')\n",
+ "ax.plot_surface(grid_x, grid_y, grid_z, cmap=plt.cm.Spectral)\n",
+ "ax.set_xlabel('Spot Price $S_T^1$ (\\$)', size=15)\n",
+ "ax.set_ylabel('Spot Price $S_T^2$ (\\$)', size=15)\n",
+ "ax.set_zlabel('Probability (\\%)', size=15)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Payoff Function\n",
+ "\n",
+ "The payoff function equals zero as long as the sum of the spot prices at maturity $(S_T^1 + S_T^2)$ is less than the strike price $K$ and then increases linearly.\n",
+ "The implementation first uses a weighted sum operator to compute the sum of the spot prices into an ancilla register, and then uses a comparator, that flips an ancilla qubit from $\\big|0\\rangle$ to $\\big|1\\rangle$ if $(S_T^1 + S_T^2) \\geq K$.\n",
+ "This ancilla is used to control the linear part of the payoff function.\n",
+ "\n",
+ "The linear part itself is approximated as follows.\n",
+ "We exploit the fact that $\\sin^2(y + \\pi/4) \\approx y + 1/2$ for small $|y|$.\n",
+ "Thus, for a given approximation scaling factor $c_{approx} \\in [0, 1]$ and $x \\in [0, 1]$ we consider\n",
+ "$$ \\sin^2( \\pi/2 * c_{approx} * ( x - 1/2 ) + \\pi/4) \\approx \\pi/2 * c_{approx} * ( x - 1/2 ) + 1/2 $$ for small $c_{approx}$.\n",
+ "\n",
+ "We can easily construct an operator that acts as \n",
+ "$$\\big|x\\rangle \\big|0\\rangle \\mapsto \\big|x\\rangle \\left( \\cos(a*x+b) \\big|0\\rangle + \\sin(a*x+b) \\big|1\\rangle \\right),$$\n",
+ "using controlled Y-rotations.\n",
+ "\n",
+ "Eventually, we are interested in the probability of measuring $\\big|1\\rangle$ in the last qubit, which corresponds to\n",
+ "$\\sin^2(a*x+b)$.\n",
+ "Together with the approximation above, this allows to approximate the values of interest.\n",
+ "The smaller we choose $c_{approx}$, the better the approximation.\n",
+ "However, since we are then estimating a property scaled by $c_{approx}$, the number of evaluation qubits $m$ needs to be adjusted accordingly.\n",
+ "\n",
+ "For more details on the approximation, we refer to:\n",
+ "Quantum Risk Analysis. Woerner, Egger. 2018.\n",
+ "\n",
+ "Since the weighted sum operator (in its current implementation) can only sum up integers, we need to map from the original ranges to the representable range to estimate the result, and reverse this mapping before interpreting the result. The mapping essentially corresponds to the affine mapping described in the context of the uncertainty model above."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# determine number of qubits required to represent total loss\n",
+ "weights = []\n",
+ "for n in num_qubits:\n",
+ " for i in range(n):\n",
+ " weights += [2**i]\n",
+ "n_s = WeightedSumOperator.get_required_sum_qubits(weights)\n",
+ "\n",
+ "# create circuit factory\n",
+ "agg = WeightedSumOperator(sum(num_qubits), weights)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set the strike price (should be within the low and the high value of the uncertainty)\n",
+ "strike_price = 3.5\n",
+ "\n",
+ "# map strike price from [low, high] to {0, ..., 2^n-1}\n",
+ "max_value = 2**n_s - 1\n",
+ "low_ = low[0]\n",
+ "high_ = high[0]\n",
+ "mapped_strike_price = (strike_price - dimension*low_) / (high_ - low_) * (2**num_uncertainty_qubits - 1)\n",
+ "\n",
+ "# set the approximation scaling for the payoff function\n",
+ "c_approx = 0.25\n",
+ "\n",
+ "# setup piecewise linear objective fcuntion\n",
+ "breakpoints = [0, mapped_strike_price]\n",
+ "slopes = [0, 1]\n",
+ "offsets = [0, 0]\n",
+ "f_min = 0\n",
+ "f_max = 2*(2**num_uncertainty_qubits - 1) - mapped_strike_price\n",
+ "basket_objective = PwlObjective(\n",
+ " n_s,\n",
+ " 0,\n",
+ " max_value,\n",
+ " breakpoints,\n",
+ " slopes,\n",
+ " offsets,\n",
+ " f_min,\n",
+ " f_max,\n",
+ " c_approx\n",
+ ")\n",
+ "\n",
+ "# define overall multivariate problem\n",
+ "basket_option = MultivariateProblem(u, agg, basket_objective)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEzCAYAAADJko/pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd5wTdf7H8ddHiiiggAgWVGxnLyfY9VjEigqKWM9eUE9PxXJ6ej/Fgnf2cvYGKiqIXURAcBe7AnYFPU8RsSG9I+Xz++M7e8aQ3U2WTSaTfT8fjzyymcxM3glhPpnvfOc75u6IiIjkYqW4A4iISPKoeIiISM5UPEREJGcqHiIikjMVDxERyZmKh4iI5EzFQ4qWmfUxM0+5/WBmT5vZxjFm2t3M3jezhWbm0bSmZjbQzKZFOU+sYtn+ae+n8vZAQd/Eb3l6mdkhGaZPNLMb48gkydEw7gAiNZgF7B/9vRFwNTDKzLZy93kx5LkXmALsByyKpp0JHAwcD3wP/Lea5ScAJ6VNm1LHGbPVC/gUeC5t+qHAtMLHkSRR8ZBit8Td34n+fsfMJgGvA12BwTHk2Ry4z91Hp037wt2fzmL5eSnvpyi5+wdxZ5Dip2YrSZpx0X17ADPb1cxeiJq05pnZh2b258qZzaxV1MR0QupKLPjGzG5OmbaXmb0bzf+zmd1lZs2i58qiZqoGwG1Rc1N/M5sInAL8sbIZqrZvrPI1zGzrtOkVZvZUyuP+ZjbWzPYxs4+j9/2GmW2VtlwDM/u7mX1pZovMbLKZ9a9cJ9ABOCGl+ezE6Lnlmq3M7Agz+yRaz3dm1tfMGqY8f2K0jm3M7JUo0wQz61Hbz0OKm4qHJE376P6n6H4D4E3gVELT0dNAPzM7GsDdpwPPsnxTUVm0rn4AZrYlMAyYChwGXAEcA1RutN8Hdo3+vin6+2pCE89QQnPUrinzVMnMGqbesnrXy1sfuAHoCxwNtAGeNDNLmede4ErgSeAg4AKgafTcX6LMQ1Nyv1RF3n2BQYTPoDvwb+BC4I4Msz8OvED4XP4DDDSzdrV8j1LE1GwlRS9lA7sRcBcwBxgJ4O4DU+Yz4DWgHXAa8ET01IPACDPbyN2/jqadBIxz90+ix5cD3wLd3H1ptL7pwCAz29Xd3yY0mwFMTG16MrNfgLZZNkd1ABanvb9N3f2rLJZN1QrY3d3/E61jJUKR3AyYYGabE/aIznX321OWGwTg7p+b2TzglyxyXwVUuHvl3tuw6HP4p5ld4+6TU+a9xd0fijKNA34mFK57cnx/UuS05yHFbg3CxnYx8AWhgBzp7j8CmFlLM7vdzL5Nma8X8IeUdYwiFIYTomWaAz2I9joiOwHPVhaOyNPAEmCPOnw/44Ed027f1WI9EysLR+Tz6L7yV37n6L5/Ldb9P2bWANiB5Y8vDSJsP9L3tEZU/uHu0widAbTnUYK05yHFbhawN+CEpqof/PdDQfcHdiE0IX0OzCb0fupeOYO7u5n1A042sz7AEYTv/uMp61mb8CuZlOWWmtk0wq/8ujLf3cfWwXpmpj3+NbpvEt2vQTg4P3sFX6c10Ii0zyblcfpnkylXE6TkqHhIsVtS1cbWzJoABwJnu/s9KdMz7VH3IxzH6AycCDzn7jNSnv+RcNwgdf0NCBvh6SvyBnKwMLpvnDa9FeFYTC6mAU3NbLUVLCBTCXtzbdKmt43uC/XZSJFRs5Uk2cqE3k+V51tUNkl1S5/R3b8jNKlcSWiG6pc2y7vAoVHBqNSD8APrjbqNXaXKYwdbVE4ws/UIxzFy9Wp0f3w189S4VxA1440DDk976ghgGfB2LbJJCdCehySWu88yszHA5WY2m7Axu4TQ1LVahkUeJLTdTwZeSXvuGuAD4Dkzu5vQTn8dMDw6WJ537j45ej9Xm9l8wo+7S6nFr3t3/8LM7gNuMrM2hI4ELYCe7n5UNNsEYD8z24+wp/JNdJwi3RXA8KjpbyCwDaGZ8P60g+VSj2jPQ5LuGOAb4BHgNsJB7keqmHcI4QD4w+6+LPUJd/8MOIDQPPMMoZg8AfTMT+wqHQNMAgYA1xJ6On1Ry3X9hbCndSyhS+6twIKU568hHMB/EhhD6Oq8HHcfARwFdAReBM4jdFc+u5a5pASYLkMr9YWZdSUUkD/UomusiKRQ8ZCSZ2brAJsSTm6b5O4HxRxJJPHUbCX1QS/CuR4Lgb/GnEWkJGjPQ0REcqY9DxERyVm96KrbunVrb9++fV7WPW/ePJo2bVrzjEUqyfmVPT5Jzp/k7FDY/OPGjZvq7mtmeq5eFI/27dszdmxdjAixvIqKCsrKyvKy7kJIcn5lj0+S8yc5OxQ2fzRmXEZqthIRkZypeIiISM5UPEREJGcqHiIikjMVDxERyZmKh4iI5EzFQ0REcqbiISJSihYuhJNPhi9qO6J/9VQ8RERKzYIF0L079OsH776bl5eoF2eYi4jUG/PmQbduUF4ODz0Ex1d3JeLaU/EQESkVc+fCgQfCG2/Aww/Dccfl7aVUPERESsHs2dC1K7zzDgwYAEcfndeXU/EQEUm6WbNg//1h7Fh44gk4/PC8v6SKh4hIks2YAfvuCx99BIMHwyGHFORlVTxERJJq2jTYe2/4/HN45hk46KCCvXRBu+qa2eFm9oKZfW9mc81snJnV2DBnZiub2U1mNsXM5pnZS2bWPv+JRUSK1C+/QOfOMH48PPdcQQsHFP48j/OBuUBvoBtQDjxuZn+tYbnbgROBC4GeQGvgFTNrkr+oIiJF6uefQ+H46isYMgQOOKDgEQrdbHWwu09Nefyqma1DKCr/zrSAmbUDTgFOdvdHomkfA98AxwIP5DeyiEjxaDx1KpSVwaRJMHRo+DsGBd3zSCsclT4A2lSz2L7R/TMp6/keeAMofLkVEYnL5Mls37s3TJ4Mw4bFVjigOIYn2Q34vJrnNwcmu/vctOnjo+dERErft99Cp040nj4dhg+HPfeMNY65e3wvbtYFeIXQJNW/innuB3Z09+3Tpl8TLbdOFcv1AnoBtG3btsPAgQPrMvr/zJ07l2bNmuVl3YWQ5PzKHp8k509i9iY//sj2vXvTcO5c3rnqKpbssENBXrdz587j3L1jxifdPZYb0B74GXi2hvnuBz7IML0v8H02r9WhQwfPl/Ly8rytuxCSnF/Z45Pk/InL/p//uK+3nnvLlu5jxxY0PzDWq9iuxtJsZWatgJeBSYSD3tWZAbTIML0FMLOOo4mIFI8vv4ROnWD+/DDQYYcOcSf6n4IXDzNbFRgCNAYOdPd5NSwyAVjPzJqmTd88ek5EpPSMHx8Kx+LFoXBst13ciX6n0CcJNgQGA5sCB7j7lCwWGxHdH5qynnWAPQl7LyIipeXTT3/rSVVRAdtsE2eajAp9nsddQFfgXKCVme2S8twH7r7IzEYBuHuX6H6ymT0I3GpmBvwC9AG+BQYUMryISN599FEYcqRxY3j1Vdhss7gTZVTo4lF5zsZtGZ7bEJgINMjw3DnAPOBmYFVgNHC0uy/MQ0YRkXi8/z7ssw80bRoKxyabxJ2oSgUtHu7ePot5yjJMW0Q4C/38uk8lIlIExowJo+Ouvno4xrHhhnEnqlYxnCQoIlK/vf12aKpq1QpGjy76wgEqHiIi8Xr99bDH0bZtKBwbbBB3oqyoeIiIxKWiIlwBsF278He7dnEnypqKh4hIHEaODNccb98+FI51Mo60VLRUPERECm3YsHDxpk02CYWjbdu4E+VMxUNEpJCGDIHu3WGLLUJ33DXXjDtRrah4iIgUynPPQY8e4YzxUaOgdeu4E9WaioeISCE89RQcfjjssEM43tGqVdyJVoiKh4hIvg0aBEcdBTvtBCNGQItMA4Uni4qHiEg+DRgAxxwDu+8ergC42mpxJ6oTKh4iIvnSvz8cf3wYIXfoUEjYFQyro+IhIpIP998PJ58chh158cUw2GEJUfEQEalrd90FvXqFs8dfeAFWXTXuRHVOxUNEpC7dfjucdRYcfDA8+yw0aRJ3orxQ8RARqSs33QTnnguHHhq65q68ctyJ8kbFQ0SkLvzrX3DhheFcjkGDwpUAS5iKh4jIirr6avj73+Hoo+Hxx6FRo7gT5Z2Kh4hIbbnD5ZeH23HHwaOPQsNCX907HioeIiK14Q6XXhr2Ok4+Gfr1gwYN4k5VMPWjRIqI1CV3uOiicID89NND19yV6tdvcRUPEZFcuEPv3nDbbaFL7r//DWZxpyq4+lUqRURWxLJlcPbZoXCcd169LRyg4iEikp1ly+DMM0MT1d/+BjffXG8LB6jZSkSkZkuXwqmnhoEOL70UrrmmXhcOUPEQEanekiVw0klhaPU+fUK33HpeOEDFQ0SkakuWhPM3Bg4MexuXXRZ3oqKh4iEiksnixeGM8aefhuuvD11z5X9UPERE0i1aBEceCc8/Hw6M9+4dd6Kio+IhIpJq4ULo2RNeeil0xT377LgTFSUVDxGRSgsWhOHUhw+He+4JZ49LRioeIiIA8+dD9+4wahQ8+GAYr0qqpOIhIjJ3brjy32uvhXM5jj8+7kRFT8VDROq3OXOga1d4660wpPoxx8SdKBEKPjyJmW1iZvea2UdmttTMKrJYpr2ZeYbbwAJEFpFSNWsW7LsvvP12OJdDhSNrcex5bAV0Bd4Bcr1O44XAmymPp9ZVKBGpZ2bMgP32gw8/hMGDw4FyyVocxeNFd38ewMyeAlrnsOwX7v5OfmKJSL0xbRrssw989lk4CfDgg+NOlDgFLx7uvqzQrykiUqnRzJmw117wxRfw3HNwwAFxR0qkpA3J3i86TvKjmd1sZqvEHUhEEuTnn9m+d2/48kt44QUVjhVg7h7fi0fNVu5eVsN8awOXASOA2UAZcDEwwt27V7FML6AXQNu2bTsMHJifY+tz586lWbNmeVl3ISQ5v7LHJ4n5G0+bxnbnn8/KP//Mp9dey8wddog7Uq0U8rPv3LnzOHfvmPFJd4/tBjwFVNRy2TMBB7avad4OHTp4vpSXl+dt3YWQ5PzKHp/E5f/uO/dNN3Vv2tTfv/XWuNOskEJ+9sBYr2K7mrRmq1RPRffJ/PkgIoUxaRKUlcFPP8Hw4czabru4E5WEJBcPT7sXEfm9iROhUyeYOhVGjIDdd487UclI8hnmPaP7cbGmEJHi9N//QufOYeiRkSOhY+ame6mdghcPM1uVcJIgwLrAamZWWQiGuvt8M/sKGO3up0TL9AGaE04QnA38CbgIeMbdPy5kfhFJgC+/DN1xFy4MAx3+8Y9xJyo5cex5tAEGp02rfLwhMJGQq0HK8xMIZ5efCqwCTAJuAPrmM6iIJNCECaFwLF4Mr74K224bd6KSFMdJghOBaq8e7+7t0x4PBDSOlYhU77PPQuEwg4oK2GqruBOVrCQfMBcR+c3HH4deVQ0aqHAUgIqHiCTf+++Hg+MrrwyjR8Pmm8edqOSpeIhIso0ZA126QLNm4WJOm24ad6J6QcVDRJLrnXdg772hZcuwx7HRRnEnqjdUPEQkmd54I1zIac01Q+Fo3z7uRPWKioeIJM/o0bD//rD22uHv9daLO1G9o+IhIskyalQYSn399UPhWHfduBPVSyoeIpIcw4fDQQfBxhuH7rhrrRV3onpLxUNEkmHoUOjWDTbbDMrLoU2buBPVayoeIlL8XngBDjkEtt46DDnSunXcieo9FQ8RKW7PPAOHHRYGNxw1Clq1ijuRoOIhIsVs0CA44gjYccdwPY4WLeJOJJEai4eZHW9maxQijIjI/zz+OBxzDOy2WzhQvvrqcSeSFNnsefQDNgYws6VmtlN+I4lIvffww3DssfCnP8HLL0Pz5nEnkjTZFI8ZwDrR34Yu+yoi+fTgg3DSSWG8qpdegqZN404kGWRzPY+RwKNm9gWhcPQ3s3lVzezu2jMRkdq55x4488xw9vgzz8Aqq8SdSKqQTfE4GfgLsBmwA/AN8Es+Q4lIPXTHHfDXv4aTAAcPhiZN4k4k1aixeLj7fOBGADPbG7jM3T/KdzARqUduuQXOPz+cyzFoEDRuHHciqUE2va2WmtmO0cMKYHZeE4lI/XL99aFw9OwJTz6pwpEQ2Rww/xVYOfr7eGDN/MURkXqlb1+4+GI46ih44glo1CjuRJKlbI55fA70MbPnCL2teppZxyrmdXe/u87SiUhpcocrrwy3Y4+Ffv2gYTabIykW2fxr/RW4F7iF0NvqwmrmdUDFQ0Sq5g7/+Adce23oknv//dCgQdypJEc1Nlu5+1vuvo27NyLseezi7itVcdM3QESq5h6aqa69Fnr1ggceUOFIqFzHtupMaMYSEcmNezgwfsMNcNZZcPfdsJKG10uqnBoZ3X00gJntDOwBtAKmA2+4+7t1H09ESoI7nHNOOJfjvPPg5pvBLO5UsgJyKh5m1hQYDOwHLAWmAWsADcxsGHB4dF6IiEiwbFk4a/y+++Cii+C661Q4SkCu+4zXA7sCRwFN3H1toEn0eFfgurqNJyKJtnQpnHZaKByXXqrCUUJyLR6HARe7+2B3Xwbg7svcfTBwCXB4XQcUkYRaujT0pnroIbjiCrjmGhWOEpJrx+rVge+qeO47YLUViyMiJWHJEjjuOBg4MBSNyy6LO5HUsVz3PD4CzjT7/c+H6PGZ0fMiUp8tXgxHHx0Kx3XXqXCUqFz3PC4FXgYmmNmzwM9AG+BQoD1wQJ2mE5Fk+fXXMNTIs8+GHlW9e8edSPIk1666r5rZH4HLCcc31gZ+BN4Feri7zgERqa8WLQqDGw4ZArffHoZXl5KV82AyUYE4Kg9ZRCSpFiyAHj1g2DC4667QNVdKWk7HPMzsRjPbMl9hRCSB5s+Hbt1g+PAwTpUKR71Qm666n5jZe2Z2hpmtnusLmtkmZnavmX0UXSukIsvlVjezfmY2w8xmmdljZrZGrq8vInVo3rxw5b9Ro8LIuKeeGnciKZCcioe7bwjsDUwAbgB+NLPHoysMZmsroCvwZXTL1iCgDDgVOBHYEXguh+VFpC7NmQMHHACjR8OAAXDCCXEnkgKqzTGPcqDczJoBRwInAMPNbDLQH3jY3b+uZhUvuvvzAGb2FNC6ptc0s10JQ6J0cvfXomnfA++a2d7uPjLX9yEitddg7lzYbz94771wEacjjog7khRYrYe0dPe57v4gcAXwJrAe8HfgSzN73sw2qGK5ZbV4uQOAnysLR7Se94BvUPdgkcKaOZPtLroIxowJ1xtX4aiXalU8zKy9mV1hZl8DI4C5hK67zYFuhHM+BtZVSGBzQlNZuvHRcyJSCNOnQ5cuNPvqK3j6aTjssLgTSUzM3bOf2ew44CTgT8AkoB/Qz90np83XCRgZXUCquvU9BbR297Ia5nsFmOfuh6RNHwBs5O67ZVimF9ALoG3bth0GDqzLWvabuXPn0qxZs7ysuxCSnF/ZC6vRrFlsd8EFrDppEmMvvZT5ZWVxR6qVJH72qQqZv3PnzuPcPeNlx3M95nEf8Cywn7uPqma+L4Frclx3TTJVOatiOu5+HyEvHTt29LI8fdErKirI17oLIcn5lb2ApkyBvfeG77+HIUOY37hxsvKnSNxnn6ZY8udaPNZx9xk1zeTuPwJX1i5SRjOANTNMbwHMrMPXEZF0P/0EXbrAN9+Es8e7dIGKirhTScxy7apbY+HIkwlkPrZR1bEQEakLP/wAZWXw7bfw8suhcIhQiwPmZnakmY00s0lmNiX9lo+QhMEY1zKzPVJydAQ2ip4Tkbr23XfQqVNoqho2LPwtEsl1eJJjgIeBr4B2wAvAkGg9s4E7sljHqmbW08x6AusCa1Y+NrNVo3m+MrMHK5dx97eB4cAjZtbDzA4BHiNcO13neIjUtYkTQ7GYMgVGjIA99qhxEalfcj3mcRFwNfAvQk+mu9z9fTNrDrwCZHP98jaE66Cnqny8ITAxytUgbZ6jgFuAhwjFaghwTo75RaQmX38NnTvD7NkwciTsuGPciaQI5Vo8NgXedPelZraU6MqB7j7HzK4jbNxvrG4F7j6R0EuqunnaZ5g2k9BN+KQcM4tItv7zH9hrrzDY4ahRsMMOcSeSIpXrMY9ZwMrR398DW6Q8Z4AGKhRJqgkTQlPVwoXw6qsqHFKtXPc8xgLbEo4/vABcbmZLgF8JF4h6t27jiUhBfPZZ6EnlDuXlsPXWcSeSIpdr8fgnUDlm1eXR33cRjk+MITqjW0QS5JNPQuFo2DDscWyuEX+kZlkVDzNbhTCMenvgJzNr6+4/A93NbGVgZXefnb+YIpIXH34Yzhxv0iQUjj/8Ie5EkhA1Fg8z2wgYSSgclWab2RHuPsLdFwGL8pRPRPJl3DjYZx9o3jwUjo03jjuRJEg2B8yvB5YBewKrEi7m9AFwbx5ziUg+vftuaKpaffVwMScVDslRNsVjV+Af7v6muy909/HA6cD6ZrZ2fuOJSJ17662wx9G6dSgc7dvHnUgSKJvisTaQfmXA/xK65q5V54lEJH9efz1cAXCttULhWH/9uBNJQmV7nkf2F/0QkeJUXg777w/t2oXCse66cSeSBMu2q+7w6HyOdKPSp7t7mxWPJSJ16pVXoFu3cGxj1Cho2zbuRJJw2RSPurwuh4gU2ssvw6GHwmabhbGq1sx0aRyR3NRYPNxdxUMkqV58EXr2hK22Cnsfa2gEIakbOV/PQ0QS4tln4bDDYNttQ1OVCofUIRUPkVI0eDAcfjh06BCaqlq2jDuRlBgVD5FS88QTcPTRsMsuMHx4OBFQpI6peIiUkkcfhWOPhd13D5eOXW21uBNJiVLxECkVDz0EJ5wAZWUwdCg0axZ3IilhKh4ipeC+++CUU8KwI0OGQNOmcSeSEqfiIZJ0d94Jp58OBx4Izz8Pq6wSdyKpB1Q8RJLs1lvh7LOhe3d4+ulwXQ6RAlDxEEmqG2+E3r3DuRyDB8PKK8edSOoRFQ+RJLr2WrjoIjjyyNA1t1GjuBNJPaPiIZIk7nDllXDZZfDnP8OAASocEotsR9UVkbi5w//9H/TtCyeeCA88AA0axJ1K6ikVD5EkcIdLLoHrr4fTToN77oGV1HAg8VHxECl27nD++aFn1Zlnwh13qHBI7PQNFClm7nDOOaFwnHNOOKdDhUOKgL6FIsVq2bLf9jQq9zzM4k4lAqh4iBSnZcugVy+4995wrOPGG1U4pKioeIgUm6VL4aST4MEHQ++qa69V4ZCiowPmIsVkyRI4/vhw4t9VV4XiIVKEVDxEisXixeHEv8GD4Z//DM1VIkVKxUOkGPz6a7j63zPPhOMbF1wQdyKRahX8mIeZbWlmo8xsvpn9YGZXmVm1p8maWXsz8wy3gYXKLZI3ixZBz56hcNx6qwqHJEJB9zzMrCUwEvgc6A5sDNxEKGL/yGIVFwJvpjyeWtcZRQpq4cIwKu7QoeEcjr/8Je5EIlkpdLPVGcAqQA93nw28YmarAX3M7PpoWnW+cPd38p5SpBDmz4dDDoGRI8OVAE87Le5EIlkrdLPVAcDwtCIxkFBQOhU4i0hsVlqwAA46KBSOhx5S4ZDEKXTx2ByYkDrB3ScB86PnatLPzJaa2Y9mdrOZ6Xqbkjxz5rDtJZfA6NHwyCNhhFyRhDF3L9yLmS0GLnL3W9OmTwYecfdLq1hubeAyYAQwGygDLgZGuHv3KpbpBfQCaNu2bYeBA/NzbH3u3Lk0a9YsL+suhCTnT2L2BvPmse3FF9N8/HgmXHYZU/baK+5ItZLEz75SkrNDYfN37tx5nLt3zPikuxfsBiwGzs0w/Xugb47rOhNwYPua5u3QoYPnS3l5ed7WXQhJzp+47DNmuO+8s3vDhv5pnz5xp1khifvsUyQ5u3th8wNjvYrtaqGbrWYALTJMXx2YmeO6norud1ihRCKFMH067LMPvP8+DB7ML510iE+SrdDFYwJpxzbMbD2gKWnHQrLgafcixWnqVOjSBT7+OJzLccghcScSWWGFLh4vA/uZWfOUaUcCC4DROa6rZ3Q/ri6CieTFlCmw114wfjw8/3zoYSVSAgp9nsc9wDnAM2Z2HbAR0Ae42VO675rZV8Bodz8letwHaE44QXA28CfgIuAZd/+4kG9AJGs//RT2OL75BoYMgb33jjuRSJ0paPFw9xlm1gW4A3iRcJzjFkIBSc+VOmTJBMLZ5acSzgmZBNwA9M1zZJHa+eGHsMfx3Xfh7PGysrgTidSpgg+M6O6fA9X2T3T39mmPBxJOJhQpfpMnh8Lx448wbBjsuWfciUTqnEbVFalL334bCsfUqTBiBOy6a9yJRPJCxUOkrnzzDXTuDLNmwSuvwE47xZ1IJG9UPETqwldfhT2OuXNh1CjYQacfSWlT8RBZUV9+GfY4Fi2C8nLYbru4E4nknYqHyIoYPz7scSxdGgrHNtvEnUikIAp+JUGRkvHpp6ELrjtUVKhwSL2i4iFSGx99FApHw4ZhaPUtt4w7kUhBqXiI5Or990NT1aqrhsKx2WZxJxIpOBUPkVyMGROGHGnePBSOTTaJO5FILFQ8RLL19tthfKpWrULh2HDDuBOJxEbFQyQbr78O++4LbduGwrHBBnEnEomViodITSoqYP/9oV278He7dnEnEomdiodIdUaOhK5dQxNVRQWss07ciUSKgoqHSFWGD4eDD4ZNNw0nALZtG3cikaKh4iGSyUsvQbdusMUW8OqrsOaacScSKSoqHiLpnn8eDj0Utt02DHK4xhpxJxIpOioeIqmefhp69gyj4r7yCrRsGXcikaKk4iFSadAgOPJI2HnncCGnFi3iTiRStFQ8RAAGDIBjjoHddw+Xjl1ttbgTiRQ1FQ+R/v3h+OPDQIdDh0KzZnEnEil6Kh5Sv91/P5x0EuyzDwwZAk2bxp1IJBFUPKT+uusu6NUrnAT4/POwyipxJxJJDBUPqZ9uuw3OOiucy/HMM9CkSdyJRBJFxUPqn5tugvPOgx49YPBgWHnluBOJJI6Kh9Qv//wnXHghHHEEDBwIjRvHnUgkkVQ8pP646iq49NLQJfexx6BRo7gTiSSWioeUPne4/HK44go44QR45JFw7XERqTX9D5LS5h72Nv71LzjlFLjvPlhJv5lEVpSKh5Qu93B84+ab4Ywz4M47VThE6oiKh5Qm99Cj6vbb4eyzw71Z3JI2LxcAABKoSURBVKlESoZ+hknpWbYsnMNx++3Qu7cKh0geqHhIaVm2DE4/He6+G/72t3BOhwqHSJ1T8ZDSsXRpOCj+wAPwj3+Eg+QqHCJ5oWMeUhqWLAkDHA4YAFdeGbrmikjeFHzPw8y2NLNRZjbfzH4ws6vMrEEWy61uZv3MbIaZzTKzx8xM1wcVWLwYjjsuFI6+fVU4RAqgoMXDzFoCIwEHugNXARcAV2ax+CCgDDgVOBHYEXguHzklQcaMgQMPDEON3HBDOKdDRPKu0M1WZwCrAD3cfTbwipmtBvQxs+ujacsxs12B/YBO7v5aNO174F0z29vdRxYovxQDdxg2jO0uvRQ+/BBWXz0Mr37mmXEnE6k3Ct1sdQAwPK1IDCQUlE41LPdzZeEAcPf3gG+i56Q++PXXMLTItttC166sOnky3HgjTJqkwiFSYIXe89gceDV1grtPMrP50XMvVrPchAzTx0fP5cedd4bB9Kqx2+LFiR5gL1H5FyyAOXNgq63g4Yd5Z+216bTPPnGnEqmXCl08WgIzM0yfET1Xm+U2yrSAmfUCegG0bduWioqKnIICtJw/n9a77FLtPIsXL6ZRUja+GSQqvxnTdtmF6TvvDGbMnTu3Vv+uxSDJ2SHZ+ZOcHYoov7sX7AYsBs7NMP17oG81y70CPJth+mPAmzW9bocOHTxfysvL87buQkhyfmWPT5LzJzm7e2HzA2O9iu1qoY95zABaZJi+Opn3LGparkUNy4mISB4UunhMIO0YhZmtBzQl8zGNKpeLVHUsRERE8qjQxeNlYD8za54y7UhgATC6huXWMrM9KieYWUfC8Y6X8xFURESqVujicQ+wCHjGzPaODmr3AW72lO67ZvaVmT1Y+djd3waGA4+YWQ8zO4RwvOMN1zkeIiIFV9Di4e4zgC5AA0K33CuBW4Ar0mZtGM2T6ijC3slDwCPAOODQfOYVEZHMCj4wort/DuxVwzztM0ybCZwU3UREJEYakl1ERHKm4iEiIjmzcB5IaTOzX4Bv87T61sDUPK27EJKcX9njk+T8Sc4Ohc2/gbuvmemJelE88snMxrp7x7hz1FaS8yt7fJKcP8nZoXjyq9lKRERypuIhIiI5U/FYcffFHWAFJTm/sscnyfmTnB2KJL+OeYiISM605yEiIjlT8RARkZypeIiISM5UPEREJGcFHxhRpL4xs72AAwgXL2sJOOEKmBOAoe5eHmO8nJjZtsAOhPcwzt0/jTmSxES9reqJUtqAQTI2YmbWCngW2BP4BhhPuKSyES6hvDnhgmavAT3cfXpMUZdjZo8D/3D3r6PHTYAngG6E/BA++6eBP7v74liC1qCUvvfF9p1X8aglMzPgYH77xxxL+DIW1Qea5A0YJHsjZmYDgB2BY919TBXzdAQGAGPc/bhC5quOmS0DdnH396LHNwFnAucDTxE+88OBm4Hr3P3KuLJmkuTvfWK+8+6uWw034C1gi5THLYExwDJgdnRbFs3XPO68adkHAF8AO1YzT0fCL7FH486bIdsyYKeUxzcB84EzCAPErRH9PR+4Iu68adlnAt2zmO8QYGbceWv43H8ALs8w31XAl3HnzZArsd/7pHznY/+gknDL8I/5IDAd2D9l2v6EXza3xJ03LXtiN2BVfPaJ2YhF35FDspjvUGB63Hlr+NyXAH/KMF8XYGHceTPkSuz3PinfefW2qp1uwFXuPqxyQvR3X6BHbKkyW8Zvu7rVsWjeYtcGqMgwfTSwfmGj1Oh54CYz272qGcxsN+AGQhNLsdnNzLqaWVdgGrBahnlWAxYUNlZWSul7X5TfefW2qp0WhGMc6cYBaxU4S00qN2C/uPubmWYo8g0YhI1Y6+jvJG3EzgWeBF43s58ITSQzCe3Vle3uawEjgN5xhazGzWmP9wWGpE3bHfhPYeLkJOnf+6L/zqt4ZO+w6OAmhOapTBdIaU04/lFMkr4Bg4RuxNx9NrC/me1KaNas7PED4WI+DwAvu/s7MUWszoYZpi3KMG0OoU2+2CT9e1/033n1tspC1PMkXX93PzltvnuBLd19z8Iky14VG7AZhP9UxboBw8w2yDB5kbv/lDbfFcAEdx9UmGSSBEn83iflO6/iUYfM7DTgv+7+atxZRETyScVDJGZmdj+wkrufEneWXCU5u6wYHfMQIPkbgYTn70xyx5lLcvZEf2/izq49jzpkZiMJn2mXuLPkysy+InwRN4o7S20kPb/EI8nfm7izJ/YXQ5EyEvqZuvsmSfwPVClp+c2siZndZ2abxp0lV0nOni5p35tUcWfXnkc9ZmYbErpkfuPu38SdJ1fFnt/MVq3m6RbAd4RB+94AcPf5hciVjSRnr4mZtQfc3b+NOUrOiil7In8lFysza2RmRXWWc5TpdjObbmZzzez6aPqdwFfASOArM3vMzBrEGjaDhOefU83tO8Ke6ssp04pJkrNjZr1STrKrnHaumf0C/Bf42sx+NrO/xJOwaknJrgPmWTKzswgjirYBPgfucPdH02bbgTA4YjFtxP4GnEo46Wg68FczW5Mwps+JwPvAHsCNwOnAXfHErFKS8y8gnDR6I+Es4VRNgTuA6wnnHBSbJGcHuBv4kHAyJmbWC7iFcOLgU9E8PYF/m9lMd388lpSZJSN73IOAJeEGHEUY/+Yx4ELCcAZLCf+Qq6TMtzOwNO68adknABelPN4jei/npc13JTA27ryllB9YB3icsBH4K9Ag5bnVo/ex3GCDxXBLcvYoY/rgghMIJ/amz/coYTj82DMnLbuarbJzIXCju//Z3W9090MJwwXsAZSb2RrxxqvWBsB7KY/HRffvpc33BuH6BsUmsfnd/Qd3P4Ywau7JwCdmtl/MsbKS5OxV2JhwTYx0A4EtC5wlV0WZXcUjO5sBQ1MnuPsoYBfCr7C3zWzjOIJlYR7hAGelRdEt/QBnA4qzGTPp+XH314EOwJ3A42Y2hPCdKnpJzg40MbNVo4P/0witBemWEsa7KjZFn13FIzuzCIMe/o67TwR2I+zav0W4alyx+YJw0RsA3H2Zu6/i7h+mzbcVMLGQwbKU9PzA/3LfCfwBmAy8TnFutJaT4Ozl/HZAvw2wU4Z5tiV0ACg2RZ+9KH+pFaFxhAO0T6U/4e4zzKxL9NztFN9/qpsJVx6ryd4U59DUSc//O+4+DTjDzG4HNgWK7trrVUlY9pMyTPsxw7SdCJdzLSaJyK7zPLJgZocThm0+yKu41nHUTfRuYB93zzSctYhIyVDxEBGRnOmYh4iI5EzFQ0REcqbiISIiOVPxEJG8M7O7zex7M4v9IKuZrWdmo8xsvJl9ZmbXm5nFnStpVDxEpBCeIIz9VgyWABe7+xbAHwnDCvWIN1LyqHjUA2Z2opmNM7M5ZjbDzD4ws5vjzpUNM7s8+sW6zMz6VzNfwd6jmR1hZidmOW8fM/OU2w9m9nQ2IxKYWX8zG7vCgeuABR+Z2Qlp01cys7Ojz3uBmc2Ofs3fnvpr3t1fc/efC5S12kzu/qO7j41y/Qp8DKyXsvydZvZgIbImmbrqljgz+ztwNWEE1HKgCWG4iWPdfZM4s9XEzDoCY4BLgQpgirv/N8N8BX2PZvYU0Nrdy7KYtw9wHrB/NGmjKGsDYCt3n1fNshsTBt6M/WQ8MzsSuAHY2N0Xp0x/kjDO203AO0AzwqgLnd29Y4b1uLvntYkol0zRuHQfAvu6+/hoWnvCYIRbu/tX+cyaaHGPIKlbfm/A98CdGaZb3NmyyH4s4Yz91YrpPRJGE6jIct4+wNS0aXtE7+vwKpZpADSO+/NPy/Qm0Ddt2gHR+zgg288+bHJyet2yXJbJJROwMuHHxgUZ5h0J3BT3517MNzVblb4WwE/pEz36HwJgZhXRr2lSppVFzSxbp0zrb2ZjzexAM/vczOab2Utm1srMNjGzcjObF82zbU3BouafT8xskZl9Z2Z9zaxh5WsRhpwGmBVlKavte0zLf4iZTTCzhWb2hpltmTZfTbkOAzqlNEX1qem9pqkcGbh9hlyfAQuBnTM1W5nZn6LPea6ZzYr+7f6YNs8eZjY6+veZZmb3m1nzlOe3MrNhFi6wNc/CgeOzqgprZpsQfrmnD8/TKbp/NX2Z9M++gLLKZGFEiMeAD9z9pgzreRr4s5lpG1kFfTCl733CBZROsLoZOn594CrgH0AvwkblPsLw0AMJF6lpCAxMbfNOZ2b7AoOifN2BfxOGvr8jmuVq4Jro772AXaN5M8nlPW5AGC/rauAYwqjIw82sSQ65yoEPoky7Ag/U8Jrp2kf3P6VNux74J9AVWO6yulHxHAUsBk4AjiQMUrhuyjy7R/P8RPi3OC9aX7+UVb1AGJH1WKBb9B6bU7UuhNGNP0qbXtnkdoOZbVDN8oWUbaZ7CYMOXlDF828BbYFt6jBbaYl710e3/N4II29+TdiVXwZ8Rtj4r5YyTwXwVNpyZdEyW6dM60/oqbJxyrTro/mOT5nWNZq2RTW53gHK06b9jbBRaxc9PjFaT7MVfY8p+R3YLWXaBtF7OiOHXDk3WxEKakPCyLTlhKv0rZ2Wa/sMecemPH4bGEs1zXGEYpKef6/Kf0vC6NAObJPDd+g+Mlx0CFiLcLDZo9unhONTy/17EQrs5Gi+ycADVbyWpXxWDQmFy9OmNawma42ZgN2j5z4hHO/4EDgnbT0No+/FaXH8v03CTXseJc7dPwa2IPzCvIvwn/P/gLFm1qwWq5zovz9oXXlA8dUM09Ylg6jJYAdgcNpTgwh7w7vmEijH9zjF3d9KWfZbQjPSTnWdK8UahL2FxYQh5jcCjnT31JFSv/flh5n/HzNrSuhS+rBHW7cM86waZXzSzBpW3ggXylpM6EQwnTCM9z1mdqSZtcki/1pEl0RN5e4/Ebq67kcYFLQF0Bd4y8wap817qru3c3eL7k+t4rVO4LfPajHh2ANp0xZnXjS7TO7+ZpRjG3ffPrrdnraeJcDM6L1LBioe9YC7L3L3F939bHffknBN8E2BU2qxuplpj3/NML1yWpMq1tEaaASkd92sfNwq11A5vMcpGRafAqydj1yRWYRrvXQE2gHt3f3lKl6jKi0JRTHT0Nyp8zQgFNDUDe0iwvtaz92XEXoi/QQ8BPxkZq+nHzdJ0yRax3Lcfam7j3D3vxCaNPsRmnpqW2hfJHxWlbczouk7pt2qVIeZFlH1d7je0/U86iF3f9DMrgc2jyYtBBqnzVbbDWU2phI2aum/ettG9xmHvc9FhvdYKdMv7TaEpq585Vri0XkF1ajpAPMMQpPc2tXMMzNaTx/SrnwZ+QHA3ScAh5lZI2BP4DrgJTNrFxWXdNPJ4he4uy8zsxGE61HUaqPr4Zoh0yofV+45ZvH55SNTC+rgu1iqtOdR4jI1S5jZmoQDxZW/diez/EZ2n3xlcvelhKaiw9OeOoKwgXw7l/Vl+R4rtTGz3VLmW5/QVPVeDrl+pcC/SD2cD/IucHxVHRGied4BNnP3sRluP6TNv9jdXyV0IFib31/uN9UXwO+uUWNmbauYtxvhEsHvRvOdaGYfRrdFUS+3Dy2c0Nkou3efnWwyZZsn+v6sCnxZlxlLifY8St8nZvY8MILQPLMBoffQfODhaJ5ngVPM7BbgJaAzoc04n64g9HLqR+iltQ2hJ9P97j45x3Vl8x4rTQUeNbP/AxYQDqxPIRyczjbXBKC7mR1CKLw/pG+Y8+QSwjGAl83sPkLPol0JB9WHRPP8DRhlZssIB/bnEJpuDgQuIxS9GwnHcb4mNHVdDHzkVVzojHCOx+Vmtqa7/xJNe9LM5gBPEi7/2wb4M6GH2mnuPhPA3fsD/aMur3OA3aO9i3zIJlO2eToS9uLeyvCcgHpblfoNOIuwUf2B0Dw1EXgc2Dxtvr8TDqTOAQYQfq1l6m01Nm25E0nrEUXoduqEKy9Wl+1IQo+XXwkb4b6k9KTJtO4VfI/9Cb2VehB+US4ibBi3zjFXa0LBnR7l61NNtj6knSSYYZ7lPtdqPu9OwGuEwjiT0HMrvZfWzsAwQo+uecDnhL2L1Qkb1EcJhWMh4djHE8D61eRrTGhKOi5l2snRa0yOPqfphB8eZVWsYzNgci2+v2VkeZJgLplqygPcRlqvNd1+f9PwJFJvRCf4be0Zhs2Q6pnZbcAm7n5gLZc/AjihtsvXteryRL3uvgUucfcBBQ+XEDrmISLZuAEoM7M/1HL57QjnXxSL6vIcTmjSHFi4OMmj4iEiNfJwvOcUqu/tVZ1tWf4M9ThVl8eAUzyc6yFVULOViOSdmU0C9vNo5Nq4FVueJFLxEJG8MrOWhM4MzTx0h1aeEqDiISIiOdMxDxERyZmKh4iI5EzFQ0REcqbiISIiOVPxEBGRnKl4iIhIzlQ8REQkZyoeIiKSs/8HeWdfG5FOq/QAAAAASUVORK5CYII=\n",
+ "text/plain": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/bull_spread_pricing-checkpoint.ipynb b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/bull_spread_pricing-checkpoint.ipynb
new file mode 100644
index 000000000..72a113a53
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/bull_spread_pricing-checkpoint.ipynb
@@ -0,0 +1,589 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: Pricing Bull Spreads*_ \n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/Qiskit/qiskit-tutorials.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Stefan Woerner[1], Daniel Egger[1]\n",
+ "### Affliation\n",
+ "- [1]IBMQ"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Introduction\n",
+ " \n",
+ "Suppose a bull spread with strike prices $K_1 < K_2$ and an underlying asset whose spot price at maturity $S_T$ follows a given random distribution.\n",
+ "The corresponding payoff function is defined as:\n",
+ " \n",
+ " \n",
+ "$$\\min\\{\\max\\{S_T - K_1, 0\\}, K_2 - K_1\\}$$\n",
+ " \n",
+ "In the following, a quantum algorithm based on amplitude estimation is used to estimate the expected payoff, i.e., the fair price before discounting, for the option:\n",
+ " \n",
+ " \n",
+ "$$\\mathbb{E}\\left[ \\min\\{\\max\\{S_T - K_1, 0\\}, K_2 - K_1\\} \\right]$$\n",
+ " \n",
+ "as well as the corresponding $\\Delta$, i.e., the derivative of the option price with respect to the spot price, defined as:\n",
+ " \n",
+ " \n",
+ "$$\n",
+ "\\Delta = \\mathbb{P}\\left[K_1 \\leq S \\leq K_2\\right]\n",
+ "$$\n",
+ " \n",
+ "The approximation of the objective function and a general introduction to option pricing and risk analysis on quantum computers are given in the following papers:\n",
+ "\n",
+ "- Quantum Risk Analysis. Woerner, Egger. 2018.\n",
+ "- Option Pricing using Quantum Computers. Stamatopoulos et al. 2019."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "import numpy as np\n",
+ "\n",
+ "from qiskit import BasicAer\n",
+ "from qiskit.aqua.algorithms import AmplitudeEstimation\n",
+ "from qiskit.aqua.components.uncertainty_models import LogNormalDistribution\n",
+ "from qiskit.aqua.components.uncertainty_problems import UnivariateProblem\n",
+ "from qiskit.aqua.components.uncertainty_problems import UnivariatePiecewiseLinearObjective as PwlObjective"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Uncertainty Model\n",
+ "\n",
+ "We construct a circuit factory to load a log-normal random distribution into a quantum state.\n",
+ "The distribution is truncated to a given interval $[low, high]$ and discretized using $2^n$ grid points, where $n$ denotes the number of qubits used.\n",
+ "The unitary operator corresponding to the circuit factory implements the following: \n",
+ "$$\\big|0\\rangle_{n} \\mapsto \\big|\\psi\\rangle_{n} = \\sum_{i=0}^{2^n-1} \\sqrt{p_i}\\big|i\\rangle_{n},$$\n",
+ "where $p_i$ denote the probabilities corresponding to the truncated and discretized distribution and where $i$ is mapped to the right interval using the affine map:\n",
+ "$$ \\{0, \\ldots, 2^n-1\\} \\ni i \\mapsto \\frac{high - low}{2^n - 1} * i + low \\in [low, high].$$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# number of qubits to represent the uncertainty\n",
+ "num_uncertainty_qubits = 3\n",
+ "\n",
+ "# parameters for considered random distribution\n",
+ "S = 2.0 # initial spot price\n",
+ "vol = 0.4 # volatility of 40%\n",
+ "r = 0.05 # annual interest rate of 4%\n",
+ "T = 40 / 365 # 40 days to maturity\n",
+ "\n",
+ "# resulting parameters for log-normal distribution\n",
+ "mu = ((r - 0.5 * vol**2) * T + np.log(S))\n",
+ "sigma = vol * np.sqrt(T)\n",
+ "mean = np.exp(mu + sigma**2/2)\n",
+ "variance = (np.exp(sigma**2) - 1) * np.exp(2*mu + sigma**2)\n",
+ "stddev = np.sqrt(variance)\n",
+ "\n",
+ "# lowest and highest value considered for the spot price; in between, an equidistant discretization is considered.\n",
+ "low = np.maximum(0, mean - 3*stddev)\n",
+ "high = mean + 3*stddev\n",
+ "\n",
+ "# construct circuit factory for uncertainty model\n",
+ "uncertainty_model = LogNormalDistribution(num_uncertainty_qubits, mu=mu, sigma=sigma, low=low, high=high)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# plot probability distribution\n",
+ "x = uncertainty_model.values\n",
+ "y = uncertainty_model.probabilities\n",
+ "plt.bar(x, y, width=0.2)\n",
+ "plt.xticks(x, size=15, rotation=90)\n",
+ "plt.yticks(size=15)\n",
+ "plt.grid()\n",
+ "plt.xlabel('Spot Price at Maturity $S_T$ (\\$)', size=15)\n",
+ "plt.ylabel('Probability ($\\%$)', size=15)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Payoff Function\n",
+ "\n",
+ "The payoff function equals zero as long as the spot price at maturity $S_T$ is less than the strike price $K_1$, then increases linearly, and is bounded by $K_2$.\n",
+ "The implementation uses two comparators, that flip an ancilla qubit each from $\\big|0\\rangle$ to $\\big|1\\rangle$ if $S_T \\geq K_1$ and $S_T \\leq K_2, and these ancillas are used to control the linear part of the payoff function.\n",
+ "\n",
+ "The linear part itself is then approximated as follows.\n",
+ "We exploit the fact that $\\sin^2(y + \\pi/4) \\approx y + 1/2$ for small $|y|$.\n",
+ "Thus, for a given approximation scaling factor $c_{approx} \\in [0, 1]$ and $x \\in [0, 1]$ we consider\n",
+ "$$ \\sin^2( \\pi/2 * c_{approx} * ( x - 1/2 ) + \\pi/4) \\approx \\pi/2 * c_{approx} * ( x - 1/2 ) + 1/2 $$ for small $c_{approx}$.\n",
+ "\n",
+ "We can easily construct an operator that acts as \n",
+ "$$\\big|x\\rangle \\big|0\\rangle \\mapsto \\big|x\\rangle \\left( \\cos(a*x+b) \\big|0\\rangle + \\sin(a*x+b) \\big|1\\rangle \\right),$$\n",
+ "using controlled Y-rotations.\n",
+ "\n",
+ "Eventually, we are interested in the probability of measuring $\\big|1\\rangle$ in the last qubit, which corresponds to\n",
+ "$\\sin^2(a*x+b)$.\n",
+ "Together with the approximation above, this allows to approximate the values of interest.\n",
+ "The smaller we choose $c_{approx}$, the better the approximation.\n",
+ "However, since we are then estimating a property scaled by $c_{approx}$, the number of evaluation qubits $m$ needs to be adjusted accordingly.\n",
+ "\n",
+ "For more details on the approximation, we refer to:\n",
+ "Quantum Risk Analysis. Woerner, Egger. 2018."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set the strike price (should be within the low and the high value of the uncertainty)\n",
+ "strike_price_1 = 1.438\n",
+ "strike_price_2 = 2.584\n",
+ "\n",
+ "# set the approximation scaling for the payoff function\n",
+ "c_approx = 0.25\n",
+ "\n",
+ "# setup piecewise linear objective fcuntion\n",
+ "breakpoints = [uncertainty_model.low, strike_price_1, strike_price_2]\n",
+ "slopes = [0, 1, 0]\n",
+ "offsets = [0, 0, strike_price_2 - strike_price_1]\n",
+ "f_min = 0\n",
+ "f_max = strike_price_2 - strike_price_1\n",
+ "bull_spread_objective = PwlObjective(\n",
+ " uncertainty_model.num_target_qubits, \n",
+ " uncertainty_model.low, \n",
+ " uncertainty_model.high,\n",
+ " breakpoints,\n",
+ " slopes,\n",
+ " offsets,\n",
+ " f_min,\n",
+ " f_max,\n",
+ " c_approx\n",
+ ")\n",
+ "\n",
+ "# construct circuit factory for payoff function\n",
+ "bull_spread = UnivariateProblem(\n",
+ " uncertainty_model,\n",
+ " bull_spread_objective\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/credit_risk_analysis-checkpoint.ipynb b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/credit_risk_analysis-checkpoint.ipynb
new file mode 100644
index 000000000..9c2485029
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/credit_risk_analysis-checkpoint.ipynb
@@ -0,0 +1,1469 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: Credit Risk Analysis*_ \n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/Qiskit/qiskit-tutorials.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Stefan Woerner[1], Daniel Egger[1]\n",
+ "\n",
+ "### Affliation\n",
+ "- [1]IBMQ"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Introduction\n",
+ "This tutorial shows how quantum algorithms can be used for credit risk analysis.\n",
+ "More precisecly, how Quantum Amplitude Estimation (QAE) can be used to estimate risk measures with a quadratic speed-up over classical Monte Carlo simulation.\n",
+ "The tutorial is based on the following papers:\n",
+ "- Quantum Risk Analysis. Stefan Woerner, Daniel J. Egger. [Woerner2019]\n",
+ "- Credit Risk Analysis using Quantum Computers. Egger et al. (2019) [Egger2019]\n",
+ "\n",
+ "A general introduction to QAE can be found in the following paper and tutorial:\n",
+ "- Quantum Amplitude Amplification and Estimation. Gilles Brassard et al.\n",
+ "- Qiskit Tutorial on Quantum Amplitude Estimation\n",
+ "\n",
+ "The structure of the tutorial is as follows:\n",
+ "1. [Problem Definition](#Problem-Definition)\n",
+ "2. [Uncertainty Model](#Uncertainty-Model)\n",
+ "3. [Expected Loss](#Expected-Loss)\n",
+ "4. [Cumulative Distribution Function](#Cumulative-Distribution-Function)\n",
+ "5. [Value at Risk](#Value-at-Risk)\n",
+ "6. [Conditional Value at Risk](#Conditional-Value-at-Risk)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from qiskit import QuantumRegister, QuantumCircuit, BasicAer, execute\n",
+ "\n",
+ "from qiskit.aqua.components.uncertainty_models import GaussianConditionalIndependenceModel as GCI\n",
+ "from qiskit.aqua.components.uncertainty_problems import UnivariatePiecewiseLinearObjective as PwlObjective\n",
+ "from qiskit.aqua.components.uncertainty_problems import MultivariateProblem\n",
+ "from qiskit.aqua.circuits import WeightedSumOperator\n",
+ "from qiskit.aqua.circuits import FixedValueComparator as Comparator\n",
+ "from qiskit.aqua.algorithms import AmplitudeEstimation\n",
+ "\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# define backend to be used\n",
+ "backend = BasicAer.get_backend('statevector_simulator')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem Definition\n",
+ "\n",
+ "In this tutorial we want to analyze the credit risk of a portfolio of $K$ assets.\n",
+ "The default probability of every asset $k$ follows a *Gaussian Conditional Independence* model, i.e., given a value $z$ sampled from a latent random variable $Z$ following a standard normal distribution, the default probability of asset $k$ is given by\n",
+ "\n",
+ "$$p_k(z) = F\\left( \\frac{F^{-1}(p_k^0) - \\sqrt{\\rho_k}z}{\\sqrt{1 - \\rho_k}} \\right) $$\n",
+ "\n",
+ "where $F$ denotes the cummulative distribution function of $Z$, $p_k^0$ is the default probability of asset $k$ for $z=0$ and $\\rho_k$ is the sensitivity of the default probability of asset $k$ with respect to $Z$. Thus, given a concrete realization of $Z$ the individual default events are assumed to be independent from each other.\n",
+ "\n",
+ "We are interested in analyzing risk measures of the total loss\n",
+ "\n",
+ "$$ L = \\sum_{k=1}^K \\lambda_k X_k(Z) $$\n",
+ "\n",
+ "where $\\lambda_k$ denotes the \\emph{loss given default} of asset $k$, and given $Z$, $X_k(Z)$ denotes a Bernoulli variable representing the default event of asset $k$. More precisely, we are interested in the expected value $\\mathbb{E}[L]$, the Value at Risk (VaR) of $L$ and the Conditional Value at Risk of $L$ (also called Expected Shortfall). Where VaR and CVaR are defined as\n",
+ "\n",
+ "$$ \\text{VaR}_{\\alpha}(L) = \\inf \\{ x \\mid \\mathbb{P}[L <= x] \\geq 1 - \\alpha \\}$$\n",
+ "\n",
+ "with confidence level $\\alpha \\in [0, 1]$, and\n",
+ "\n",
+ "$$ \\text{CVaR}_{\\alpha}(L) = \\mathbb{E}[ L \\mid L \\geq \\text{VaR}_{\\alpha}(L) ].$$\n",
+ "\n",
+ "For more details on the considered model, see, e.g., \n",
+ "Regulatory Capital Modelling for Credit Risk. Marek Rutkowski, Silvio Tarca\n",
+ "\n",
+ "\n",
+ "\n",
+ "The problem is defined by the following parameters:\n",
+ "- number of qubits used to represent $Z$, denoted by $n_z$\n",
+ "- trunaction value for $Z$, denoted by $z_{\\text{max}}$, i.e., Z is assumed to take $2^{n_z}$ equidistant values in $\\{-z_{max}, ..., +z_{max}\\}$ \n",
+ "- the base default probabilities for each asset $p_0^k \\in (0, 1)$, $k=1, ..., K$\n",
+ "- sensitivities of the default probabilities with respect to $Z$, denoted by $\\rho_k \\in [0, 1)$\n",
+ "- loss given default for asset $k$, denoted by $\\lambda_k$\n",
+ "- confidence level for VaR / CVaR $\\alpha \\in [0, 1]$."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set problem parameters\n",
+ "n_z = 2\n",
+ "z_max = 2\n",
+ "z_values = np.linspace(-z_max, z_max, 2**n_z)\n",
+ "p_zeros = [0.15, 0.25]\n",
+ "rhos = [0.1, 0.05]\n",
+ "lgd = [1, 2]\n",
+ "K = len(p_zeros)\n",
+ "alpha = 0.05"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Uncertainty Model\n",
+ "\n",
+ "We now construct a circuit that loads the uncertainty model. This can be achieved by creating a quantum state in a register of $n_z$ qubits that represents $Z$ following a standard normal distribution. This state is then used to control single qubit Y-rotations on a second qubit register of $K$ qubits, where a $|1\\rangle$ state of qubit $k$ represent the default event of asset $k$. The resulting quantum state can be written as\n",
+ "\n",
+ "$$ |\\Psi\\rangle = \\sum_{i=0}^{2^{n_z}-1} \\sqrt{p_z^i} |z_i \\rangle \\bigotimes_{k=1}^K \n",
+ "\\left( \\sqrt{1 - p_k(z_i)}|0\\rangle + \\sqrt{p_k(z_i)}|1\\rangle\\right),$$\n",
+ "\n",
+ "where we denote by $z_i$ the $i$-th value of the discretized and trucated $Z$ [Egger2019]."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# construct circuit factory for uncertainty model (Gaussian Conditional Independence model)\n",
+ "u = GCI(n_z, z_max, p_zeros, rhos)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# determine the number of qubits required to represent the uncertainty model\n",
+ "num_qubits = u.num_target_qubits\n",
+ "\n",
+ "# initialize quantum register and circuit\n",
+ "q = QuantumRegister(num_qubits, name='q')\n",
+ "qc = QuantumCircuit(q)\n",
+ "\n",
+ "# construct circuit\n",
+ "u.build(qc, q)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We now use the simulator to validate the circuit that constructs $|\\Psi\\rangle$ and compute the corresponding exact values for\n",
+ "- expected loss $\\mathbb{E}[L]$\n",
+ "- PDF and CDF of $L$ \n",
+ "- value at risk $VaR(L)$ and corresponding probability\n",
+ "- conditional value at risk $CVaR(L)$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# run the circuit and analyze the results\n",
+ "job = execute(qc, backend=BasicAer.get_backend('statevector_simulator'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# analyze uncertainty circuit and determine exact solutions\n",
+ "p_z = np.zeros(2**n_z)\n",
+ "p_default = np.zeros(K)\n",
+ "values = []\n",
+ "probabilities = []\n",
+ "for i, a in enumerate(job.result().get_statevector()):\n",
+ " \n",
+ " # get binary representation\n",
+ " b = ('{0:0%sb}' % num_qubits).format(i)\n",
+ " prob = np.abs(a)**2\n",
+ "\n",
+ " # extract value of Z and corresponding probability \n",
+ " i_normal = int(b[-n_z:], 2)\n",
+ " p_z[i_normal] += prob\n",
+ "\n",
+ " # determine overall default probability for k \n",
+ " loss = 0\n",
+ " for k in range(K):\n",
+ " if b[K - k - 1] == '1':\n",
+ " p_default[k] += prob\n",
+ " loss += lgd[k]\n",
+ " values += [loss]\n",
+ " probabilities += [prob] \n",
+ "\n",
+ "values = np.array(values)\n",
+ "probabilities = np.array(probabilities)\n",
+ " \n",
+ "expected_loss = np.dot(values, probabilities)\n",
+ "\n",
+ "losses = np.sort(np.unique(values))\n",
+ "pdf = np.zeros(len(losses))\n",
+ "for i, v in enumerate(losses):\n",
+ " pdf[i] += sum(probabilities[values == v])\n",
+ "cdf = np.cumsum(pdf)\n",
+ "\n",
+ "i_var = np.argmax(cdf >= 1-alpha)\n",
+ "exact_var = losses[i_var]\n",
+ "exact_cvar = np.dot(pdf[(i_var+1):], losses[(i_var+1):])/sum(pdf[(i_var+1):])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Expected Loss E[L]: 0.6409\n",
+ "Value at Risk VaR[L]: 2.0000\n",
+ "P[L <= VaR[L]]: 0.9591\n",
+ "Conditional Value at Risk CVaR[L]: 3.0000\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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84AXgSdE5AIR+SXwErALeDjID2CMMaasQAsTVd0A9ALycI8Bj8Z1Rrw1atPq3jaRzgNeAO4DnsMVJD29fRpjjAlR4E9zqernuGFQ4m1TECNtC3CZtxhjjKlEbD4TY4wxabNBEk1gnj776bBDMMnqYtcsLa1bhx1BYKwwMYFpUT93JgqqMvaza5aWmjXDjiAwdpvLBGbyp5OZ/OnksMMwyfh2sltMar7/3i05wAoTE5hH5z3Ko/MeDTsMk4wvH3VLFdOvXz+OOuqoctdfccUVNGzYkJ07dybc1+7duxGR0qVOnTp06NCBe+65h90rV8Latftsv2XLFpo2bcrs2bNL0w455BBuuOGGco9xySWXcMkll/j4ZOGxwsQYk3OGDx/Op59+ymeffVZm3Z49e3juuecYMGAAtWrV8r3P6667jrlz5/Lqq69y2mmncd1113Hv3/5WZru//OUvtGvXjm7duiW176eeeiozUwlXECtMjDE558wzzyQ/P5/i4uIy6/71r3+xevVqhg8fntQ+W7duTefOnenZsyf3338/vXr14u8vvrjPNnv27OGRRx7hoosuSmrfhx56KJ07d+axxx5LKl+QrDAxxuScunXr0q9fPyZPLtseVFxczIEHHsgpp5zCihUruPDCC2ndujV16tShbdu23HrrrezatSvhMY455hiWRU3b+9Zbb7F69WrOPvvspGMeOHAgTz/9dMLRisNiT3MZYzJnRo+yaS2HQNvLYfc2mNm37Po2hW7ZsQ7+Pajs+sMug1ZDYesymHt+2fXtr05p7LDhw4czZcoU5s+fz3HHHQfArl27eP755zn33HPJy8tj7dq1NGnShPvvv58GDRqwaNEiRo8ezbp163j44fgjOS1dupTWhxyyT9rbb7/N4YcfToMGsQZPj69r166sXLmSzz//nCOOOCLp/BXNChMTmOeGPBd2CCZZv6i616xPnz40aNCA4uLi0sLkjTfe4Pvvvy+9xdWxY0c6duxYmqdbt27UqVOHSy+9lL/85S/7jCS8d+9edu/ezbZt23jppZd48cUXmfTUU9CmTek28+fP58gURxA+6qijEBE++OADK0xMbmuS3yTsEEyyaid5zXrPLH9d9fz462s3ib9+vxbx1yepVq1anH322UyZMoW7774bEWHy5Mm0atWKzp07A66AGDduHBMmTGDJkiX7TNG7fPly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\n",
+ "text/plain": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/european_put_option_pricing-checkpoint.ipynb b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/european_put_option_pricing-checkpoint.ipynb
new file mode 100644
index 000000000..e968d4129
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/european_put_option_pricing-checkpoint.ipynb
@@ -0,0 +1,588 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: Pricing European Put Options*_ \n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/Qiskit/qiskit-tutorials.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Stefan Woerner[1], Daniel Egger[1], Shaohan Hu[1], Stephen Wood[1], Marco Pistoia[1]\n",
+ "### Affliation\n",
+ "- [1]IBMQ"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Introduction\n",
+ " \n",
+ "Suppose a European put option with strike price $K$ and an underlying asset whose spot price at maturity $S_T$ follows a given random distribution.\n",
+ "The corresponding payoff function is defined as:\n",
+ " \n",
+ " \n",
+ "$$\\max\\{K - S_T, 0\\}$$\n",
+ " \n",
+ "In the following, a quantum algorithm based on amplitude estimation is used to estimate the expected payoff, i.e., the fair price before discounting, for the option:\n",
+ " \n",
+ " \n",
+ "$$\\mathbb{E}\\left[ \\max\\{K - S_T, 0\\} \\right]$$\n",
+ " \n",
+ "as well as the corresponding $\\Delta$, i.e., the derivative of the option price with respect to the spot price, defined as:\n",
+ " \n",
+ " \n",
+ "$$\n",
+ "\\Delta = -\\mathbb{P}\\left[S_T \\leq K\\right]\n",
+ "$$\n",
+ " \n",
+ "The approximation of the objective function and a general introduction to option pricing and risk analysis on quantum computers are given in the following papers:\n",
+ "\n",
+ "- Quantum Risk Analysis. Woerner, Egger. 2018.\n",
+ "- Option Pricing using Quantum Computers. Stamatopoulos et al. 2019."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "import numpy as np\n",
+ "\n",
+ "from qiskit import BasicAer\n",
+ "from qiskit.aqua.algorithms import AmplitudeEstimation\n",
+ "from qiskit.aqua.components.uncertainty_models import LogNormalDistribution\n",
+ "from qiskit.aqua.components.uncertainty_problems import UnivariateProblem\n",
+ "from qiskit.aqua.components.uncertainty_problems import UnivariatePiecewiseLinearObjective as PwlObjective"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Uncertainty Model\n",
+ "\n",
+ "We construct a circuit factory to load a log-normal random distribution into a quantum state.\n",
+ "The distribution is truncated to a given interval $[low, high]$ and discretized using $2^n$ grid points, where $n$ denotes the number of qubits used.\n",
+ "The unitary operator corresponding to the circuit factory implements the following: \n",
+ "$$\\big|0\\rangle_{n} \\mapsto \\big|\\psi\\rangle_{n} = \\sum_{i=0}^{2^n-1} \\sqrt{p_i}\\big|i\\rangle_{n},$$\n",
+ "where $p_i$ denote the probabilities corresponding to the truncated and discretized distribution and where $i$ is mapped to the right interval using the affine map:\n",
+ "$$ \\{0, \\ldots, 2^n-1\\} \\ni i \\mapsto \\frac{high - low}{2^n - 1} * i + low \\in [low, high].$$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# number of qubits to represent the uncertainty\n",
+ "num_uncertainty_qubits = 3\n",
+ "\n",
+ "# parameters for considered random distribution\n",
+ "S = 2.0 # initial spot price\n",
+ "vol = 0.4 # volatility of 40%\n",
+ "r = 0.05 # annual interest rate of 4%\n",
+ "T = 40 / 365 # 40 days to maturity\n",
+ "\n",
+ "# resulting parameters for log-normal distribution\n",
+ "mu = ((r - 0.5 * vol**2) * T + np.log(S))\n",
+ "sigma = vol * np.sqrt(T)\n",
+ "mean = np.exp(mu + sigma**2/2)\n",
+ "variance = (np.exp(sigma**2) - 1) * np.exp(2*mu + sigma**2)\n",
+ "stddev = np.sqrt(variance)\n",
+ "\n",
+ "# lowest and highest value considered for the spot price; in between, an equidistant discretization is considered.\n",
+ "low = np.maximum(0, mean - 3*stddev)\n",
+ "high = mean + 3*stddev\n",
+ "\n",
+ "# construct circuit factory for uncertainty model\n",
+ "uncertainty_model = LogNormalDistribution(num_uncertainty_qubits, mu=mu, sigma=sigma, low=low, high=high)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# plot probability distribution\n",
+ "x = uncertainty_model.values\n",
+ "y = uncertainty_model.probabilities\n",
+ "plt.bar(x, y, width=0.2)\n",
+ "plt.xticks(x, size=15, rotation=90)\n",
+ "plt.yticks(size=15)\n",
+ "plt.grid()\n",
+ "plt.xlabel('Spot Price at Maturity $S_T$ (\\$)', size=15)\n",
+ "plt.ylabel('Probability ($\\%$)', size=15)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Payoff Function\n",
+ "\n",
+ "The payoff function decreases linearly with an increasing spot price at maturity $S_T$ until it reaches zero for a spot price equal to the strike price $K$, it stays constant to zero for larger spot prices.\n",
+ "The implementation uses a comparator, that flips an ancilla qubit from $\\big|0\\rangle$ to $\\big|1\\rangle$ if $S_T \\leq K$, and this ancilla is used to control the linear part of the payoff function.\n",
+ "\n",
+ "The linear part itself is then approximated as follows.\n",
+ "We exploit the fact that $\\sin^2(y + \\pi/4) \\approx y + 1/2$ for small $|y|$.\n",
+ "Thus, for a given approximation scaling factor $c_{approx} \\in [0, 1]$ and $x \\in [0, 1]$ we consider\n",
+ "$$ \\sin^2( \\pi/2 * c_{approx} * ( x - 1/2 ) + \\pi/4) \\approx \\pi/2 * c_{approx} * ( x - 1/2 ) + 1/2 $$ for small $c_{approx}$.\n",
+ "\n",
+ "We can easily construct an operator that acts as \n",
+ "$$\\big|x\\rangle \\big|0\\rangle \\mapsto \\big|x\\rangle \\left( \\cos(a*x+b) \\big|0\\rangle + \\sin(a*x+b) \\big|1\\rangle \\right),$$\n",
+ "using controlled Y-rotations.\n",
+ "\n",
+ "Eventually, we are interested in the probability of measuring $\\big|1\\rangle$ in the last qubit, which corresponds to\n",
+ "$\\sin^2(a*x+b)$.\n",
+ "Together with the approximation above, this allows to approximate the values of interest.\n",
+ "The smaller we choose $c_{approx}$, the better the approximation.\n",
+ "However, since we are then estimating a property scaled by $c_{approx}$, the number of evaluation qubits $m$ needs to be adjusted accordingly.\n",
+ "\n",
+ "For more details on the approximation, we refer to:\n",
+ "Quantum Risk Analysis. Woerner, Egger. 2018."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set the strike price (should be within the low and the high value of the uncertainty)\n",
+ "strike_price = 2.126\n",
+ "\n",
+ "# set the approximation scaling for the payoff function\n",
+ "c_approx = 0.25\n",
+ "\n",
+ "# setup piecewise linear objective fcuntion\n",
+ "breakpoints = [uncertainty_model.low, strike_price]\n",
+ "slopes = [-1, 0]\n",
+ "offsets = [strike_price - uncertainty_model.low, 0]\n",
+ "f_min = 0\n",
+ "f_max = strike_price - uncertainty_model.low\n",
+ "european_put_objective = PwlObjective(\n",
+ " uncertainty_model.num_target_qubits, \n",
+ " uncertainty_model.low, \n",
+ " uncertainty_model.high,\n",
+ " breakpoints,\n",
+ " slopes,\n",
+ " offsets,\n",
+ " f_min,\n",
+ " f_max,\n",
+ " c_approx\n",
+ ")\n",
+ "\n",
+ "# construct circuit factory for payoff function\n",
+ "european_put = UnivariateProblem(\n",
+ " uncertainty_model,\n",
+ " european_put_objective\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/fixed_income_pricing-checkpoint.ipynb b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/fixed_income_pricing-checkpoint.ipynb
new file mode 100644
index 000000000..34058acf2
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/fixed_income_pricing-checkpoint.ipynb
@@ -0,0 +1,422 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: Pricing Fixed-Income Assets*_ \n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/Qiskit/qiskit-tutorials.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Stefan Woerner[1], Daniel Egger[1], Shaohan Hu[1], Stephen Wood[1], Marco Pistoia[1]\n",
+ "### Affliation\n",
+ "- [1]IBMQ"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Introduction\n",
+ "\n",
+ "We seek to price a fixed-income asset knowing the distributions describing the relevant interest rates. The cash flows $c_t$ of the asset and the dates at which they occur are known. The total value $V$ of the asset is thus the expectation value of:\n",
+ "\n",
+ "$$V = \\sum_{t=1}^T \\frac{c_t}{(1+r_t)^t}$$\n",
+ "\n",
+ "Each cash flow is treated as a zero coupon bond with a corresponding interest rate $r_t$ that depends on its maturity. The user must specify the distribution modelling the uncertainty in each $r_t$ (possibly correlated) as well as the number of qubits he wishes to use to sample each distribution. In this example we expand the value of the asset to first order in the interest rates $r_t$. This corresponds to studying the asset in terms of its duration.\n",
+ " \n",
+ " \n",
+ "The approximation of the objective function follows the following paper: \n",
+ "Quantum Risk Analysis. Woerner, Egger. 2018."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "import numpy as np\n",
+ "from qiskit import BasicAer\n",
+ "from qiskit.aqua.algorithms.single_sample.amplitude_estimation.ae import AmplitudeEstimation\n",
+ "from qiskit.aqua.components.uncertainty_models import MultivariateNormalDistribution\n",
+ "from qiskit.aqua.components.uncertainty_problems import FixedIncomeExpectedValue"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "backend = BasicAer.get_backend('statevector_simulator')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Uncertainty Model\n",
+ "\n",
+ "We construct a circuit factory to load a multivariate normal random distribution in $d$ dimensions into a quantum state.\n",
+ "The distribution is truncated to a given box $\\otimes_{i=1}^d [low_i, high_i]$ and discretized using $2^{n_i}$ grid points, where $n_i$ denotes the number of qubits used for dimension $i = 1,\\ldots, d$.\n",
+ "The unitary operator corresponding to the circuit factory implements the following: \n",
+ "$$\\big|0\\rangle_{n_1}\\ldots\\big|0\\rangle_{n_d} \\mapsto \\big|\\psi\\rangle = \\sum_{i_1=0}^{2^n_-1}\\ldots\\sum_{i_d=0}^{2^n_-1} \\sqrt{p_{i_1,...,i_d}}\\big|i_1\\rangle_{n_1}\\ldots\\big|i_d\\rangle_{n_d},$$\n",
+ "where $p_{i_1, ..., i_d}$ denote the probabilities corresponding to the truncated and discretized distribution and where $i_j$ is mapped to the right interval $[low_j, high_j]$ using the affine map:\n",
+ "$$ \\{0, \\ldots, 2^{n_{j}}-1\\} \\ni i_j \\mapsto \\frac{high_j - low_j}{2^{n_j} - 1} * i_j + low_j \\in [low_j, high_j].$$\n",
+ "\n",
+ "In addition the the uncertainty model, we can also apply an affine map, e.g. resulting from a principal componant analyis. The interest rates used are then given by:\n",
+ "$$ \\vec{r} = A * \\vec{x} + b,$$\n",
+ "where $\\vec{x} \\in \\otimes_{i=1}^d [low_i, high_i]$ follows the given random distribution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# can be used in case a principal component analysis has been done to derive the uncertainty model, ignored in this example.\n",
+ "A = np.eye(2)\n",
+ "b = np.zeros(2) \n",
+ "\n",
+ "# specify the number of qubits that are used to represent the different dimenions of the uncertainty model\n",
+ "num_qubits = [2, 2]\n",
+ "\n",
+ "# specify the lower and upper bounds for the different dimension\n",
+ "low = [0, 0]\n",
+ "high = [0.12, 0.24]\n",
+ "mu = [0.12, 0.24]\n",
+ "sigma = 0.01*np.eye(2)\n",
+ "\n",
+ "# construct corresponding distribution\n",
+ "u = MultivariateNormalDistribution(num_qubits, low, high, mu, sigma)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# plot contour of probability density function\n",
+ "x = np.linspace(low[0], high[0], 2**num_qubits[0])\n",
+ "y = np.linspace(low[1], high[1], 2**num_qubits[1])\n",
+ "z = u.probabilities.reshape(2**num_qubits[0], 2**num_qubits[1])\n",
+ "plt.contourf(x, y, z)\n",
+ "plt.xticks(x, size=15)\n",
+ "plt.yticks(y, size=15)\n",
+ "plt.grid()\n",
+ "plt.xlabel('$r_1$ (%)', size=15)\n",
+ "plt.ylabel('$r_2$ (%)', size=15)\n",
+ "plt.colorbar()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Cash flow, payoff function, and exact expected value\n",
+ "\n",
+ "In the following we define the cash flow per period, the resulting payoff function and evaluate the exact expected value.\n",
+ "\n",
+ "For the payoff function we first use a first order approximation and then apply the same approximation technique as for the linear part of the payoff function of the [European Call Option](european_call_option_pricing.ipynb)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import qiskit.tools.jupyter\n",
+ "%qiskit_version_table\n",
+ "%qiskit_copyright"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/option_pricing-checkpoint.ipynb b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/option_pricing-checkpoint.ipynb
new file mode 100644
index 000000000..a8e0d1b22
--- /dev/null
+++ b/qiskit/advanced/aqua/finance/simulation/.ipynb_checkpoints/option_pricing-checkpoint.ipynb
@@ -0,0 +1,165 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Trusted Notebook\" align=\"middle\">"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# _*Qiskit Finance: Option Pricing*_ \n",
+ "\n",
+ "The latest version of this notebook is available on https://github.com/Qiskit/qiskit-tutorials.\n",
+ "\n",
+ "***\n",
+ "### Contributors\n",
+ "Stefan Woerner[1], Daniel Egger[1], Christa Zoufal[1], Shaohan Hu[1], Stephen Wood[1], Marco Pistoia[1]\n",
+ "\n",
+ "### Affliation\n",
+ "- [1]IBMQ"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In this notebook we provide an overview of the available Qiskit Finance tutorials on how to use Quantum Amplitude Estimation (QAE) for option pricing. We analyze different types of options with increasing complexity, featuring:\n",
+ "- single asset / multi asset (basket) options,\n",
+ "- piecewise linear payoff functions (arbitrary number of break points, possibly non-continuous), and\n",
+ "- path-dependency (sum/average, barrier, etc.).\n",
+ "\n",
+ "The basic ideas on using QAE for option pricing and risk analysis are provided here: \n",
+ "- Quantum Risk Analysis. Stefan Woerner, Daniel J. Egger (2019)\n",
+ "- Option Pricing using Quantum Computers. Stamatopoulos et al. (2019)\n",
+ "\n",
+ "A Qiskit Aqua tutorial on QAE can be found here: \n",
+ "Qiskit Tutorial on QAE\n",
+ "\n",
+ "We provide tutorials for the following types simple options:\n",
+ "\n",
+ "- European Call Option (univariate, payoff with 2 segments)\n",
+ "- European Put Option (univariate, payoff with 2 segments)\n",
+ "- Bull Spread (univariate, payoff with 3 segments)\n",
+ "\n",
+ "Note that the provided framework can cover all options of this type, i.e., options that are fully determined by a piecewise linear payoff with respect to the spot price at maturity of the underlying asset.\n",
+ "However, the framework also allows to price more complex options, for instance, options that depend on multiple assets or are path-dependent:\n",
+ "\n",
+ "- Basket Option (multivariate, payoff with 2 segments)\n",
+ "- Asian Barrier Spread (multivariate, path-dependent, payoff with 3 segments)\n",
+ "\n",
+ "More examples on option pricing with a quantum computer can be found in the [Qiskit Finance Community](https://github.com/Qiskit/qiskit-tutorials-community/tree/master/finance) section of the Qiskit Community Tutorials.\n",
+ "\n",
+ "All examples illustrate how to use the genereric Qiskit Finance framework to construct QAE-operators (uncertainty problems). The same framework can be easily adjusted to estimate risk as well, for instance, the Value at Risk (VaR) or the Conditional Value at Risk (CVaR, also known as Expected Shortfall). How to use Qiskit Finance for risk analysis is illustrated in the following tutorial:\n",
+ "Credit Risk Analysis\n",
+ "based on the paper\n",
+ "Credit Risk Analysis using Quantum Computers. Egger et al. (2019).\n",
+ "\n",
+ "An example of how quantum Generative Adversarial Networks (qGANs) can be used to learn and efficiently load generic random distributions for option pricing can be found here:\n",
+ "QGANs to learn and load random distributions for option pricing"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2019-08-22T01:57:32.797978Z",
+ "start_time": "2019-08-22T01:57:32.787666Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
"
]
@@ -441,6 +475,48 @@
"There is a substantial amount of further work needed to either certify the quality of the source of random numbers (cf. NIST SP 800-90B, Recommendation for the Entropy Sources Used for Random Bit Generation) or to use random variates within quantum algorithms (cf. uncertainty_models within Qiskit Aqua)."
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2019-08-22T01:39:36.760562Z",
+ "start_time": "2019-08-22T01:39:36.752562Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.
This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license in the LICENSE.txt file in the root directory of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this copyright notice, and modified files need to carry a notice indicating that they have been altered from the originals.