From dfdbe8cdb97a5758a17cf4a0eb68afac72aa6d50 Mon Sep 17 00:00:00 2001 From: Bo Tang Date: Wed, 24 Apr 2024 20:08:49 -0400 Subject: [PATCH 1/3] Add portfolio data --- notebooks/02 Optimization Dataset.ipynb | 250 +++++++++++++++++++----- 1 file changed, 198 insertions(+), 52 deletions(-) diff --git a/notebooks/02 Optimization Dataset.ipynb b/notebooks/02 Optimization Dataset.ipynb index d973ab83..0fee4d8f 100644 --- a/notebooks/02 Optimization Dataset.ipynb +++ b/notebooks/02 Optimization Dataset.ipynb @@ -19,7 +19,7 @@ "base_uri": "https://localhost:8080/" }, "id": "2d749094", - "outputId": "0ad25b13-d7e0-43a9-c0b1-f393002d886a" + "outputId": "4b3af4f9-64d9-4390-b1ba-35b6233130cb" }, "outputs": [ { @@ -27,49 +27,73 @@ "name": "stdout", "text": [ "Collecting pyepo\n", - " Downloading pyepo-0.3.6-py3-none-any.whl (41 kB)\n", - "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/41.6 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m41.6/41.6 kB\u001b[0m \u001b[31m2.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + " Downloading pyepo-0.3.8-py3-none-any.whl (43 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m43.7/43.7 kB\u001b[0m \u001b[31m581.5 kB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from pyepo) (1.25.2)\n", "Requirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from pyepo) (1.11.4)\n", "Collecting pathos (from pyepo)\n", " Downloading pathos-0.3.2-py3-none-any.whl (82 kB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m82.1/82.1 kB\u001b[0m \u001b[31m5.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m82.1/82.1 kB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from pyepo) (4.66.2)\n", "Collecting Pyomo>=6.1.2 (from pyepo)\n", - " Downloading Pyomo-6.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.5 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.5/12.5 MB\u001b[0m \u001b[31m42.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + " Downloading Pyomo-6.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.7/12.7 MB\u001b[0m \u001b[31m13.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting gurobipy>=9.1.2 (from pyepo)\n", - " Downloading gurobipy-11.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (13.4 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.4/13.4 MB\u001b[0m \u001b[31m43.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + " Downloading gurobipy-11.0.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (13.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.4/13.4 MB\u001b[0m \u001b[31m20.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: scikit-learn in /usr/local/lib/python3.10/dist-packages (from pyepo) (1.2.2)\n", - "Requirement already satisfied: torch>=1.13.1 in /usr/local/lib/python3.10/dist-packages (from pyepo) (2.1.0+cu121)\n", + "Requirement already satisfied: torch>=1.13.1 in /usr/local/lib/python3.10/dist-packages (from pyepo) (2.2.1+cu121)\n", "Collecting ply (from Pyomo>=6.1.2->pyepo)\n", " Downloading ply-3.11-py2.py3-none-any.whl (49 kB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.6/49.6 kB\u001b[0m \u001b[31m6.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (3.13.1)\n", - "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (4.9.0)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.6/49.6 kB\u001b[0m \u001b[31m2.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (3.13.4)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (4.11.0)\n", "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (1.12)\n", - "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (3.2.1)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (3.3)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (3.1.3)\n", "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (2023.6.0)\n", - "Requirement already satisfied: triton==2.1.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (2.1.0)\n", + "Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", + "Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", + "Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", + "Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", + "Collecting nvidia-cublas-cu12==12.1.3.1 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", + "Collecting nvidia-cufft-cu12==11.0.2.54 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", + "Collecting nvidia-curand-cu12==10.3.2.106 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", + "Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", + "Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", + "Collecting nvidia-nccl-cu12==2.19.3 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl (166.0 MB)\n", + "Collecting nvidia-nvtx-cu12==12.1.105 (from torch>=1.13.1->pyepo)\n", + " Using cached nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", + "Requirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.1->pyepo) (2.2.0)\n", + "Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.13.1->pyepo)\n", + " Using cached nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", "Collecting ppft>=1.7.6.8 (from pathos->pyepo)\n", " Downloading ppft-1.7.6.8-py3-none-any.whl (56 kB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.8/56.8 kB\u001b[0m \u001b[31m5.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.8/56.8 kB\u001b[0m \u001b[31m4.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting dill>=0.3.8 (from pathos->pyepo)\n", " Downloading dill-0.3.8-py3-none-any.whl (116 kB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m116.3/116.3 kB\u001b[0m \u001b[31m7.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m116.3/116.3 kB\u001b[0m \u001b[31m12.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting pox>=0.3.4 (from pathos->pyepo)\n", " Downloading pox-0.3.4-py3-none-any.whl (29 kB)\n", "Collecting multiprocess>=0.70.16 (from pathos->pyepo)\n", " Downloading multiprocess-0.70.16-py310-none-any.whl (134 kB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m134.8/134.8 kB\u001b[0m \u001b[31m12.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->pyepo) (1.3.2)\n", - "Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->pyepo) (3.2.0)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m134.8/134.8 kB\u001b[0m \u001b[31m14.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->pyepo) (1.4.0)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->pyepo) (3.4.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.13.1->pyepo) (2.1.5)\n", "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.13.1->pyepo) (1.3.0)\n", - "Installing collected packages: ply, gurobipy, Pyomo, ppft, pox, dill, multiprocess, pathos, pyepo\n", - "Successfully installed Pyomo-6.7.0 dill-0.3.8 gurobipy-11.0.0 multiprocess-0.70.16 pathos-0.3.2 ply-3.11 pox-0.3.4 ppft-1.7.6.8 pyepo-0.3.6\n" + "Installing collected packages: ply, gurobipy, Pyomo, ppft, pox, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, dill, nvidia-cusparse-cu12, nvidia-cudnn-cu12, multiprocess, pathos, nvidia-cusolver-cu12, pyepo\n", + "Successfully installed Pyomo-6.7.1 dill-0.3.8 gurobipy-11.0.1 multiprocess-0.70.16 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.1.105 pathos-0.3.2 ply-3.11 pox-0.3.4 ppft-1.7.6.8 pyepo-0.3.8\n" ] } ], @@ -166,7 +190,7 @@ "base_uri": "https://localhost:8080/" }, "id": "f49f3ae8", - "outputId": "326e7172-7edf-4953-9e48-73af632a3004" + "outputId": "2dd4df8a-1312-4277-95b9-bd40bb69be70" }, "outputs": [ { @@ -209,7 +233,7 @@ "base_uri": "https://localhost:8080/" }, "id": "2a001df7", - "outputId": "ee622c5d-c2e0-40e9-998a-2af3d33bbea3" + "outputId": "79854ba9-2919-470a-b42c-0923ac40c6ec" }, "outputs": [ { @@ -309,7 +333,7 @@ "base_uri": "https://localhost:8080/" }, "id": "68b22b30", - "outputId": "3a4d32a3-e768-4648-b023-fb5148d6426f" + "outputId": "42e672b7-cc48-4a73-9b99-b6b19ab7d08f" }, "outputs": [ { @@ -382,7 +406,7 @@ "outputs": [], "source": [ "import pyepo\n", - "m = 20 # number of items\n", + "m = 20 # number of nodes\n", "n = 1000 # number of data\n", "p = 5 # feature dimention\n", "deg = 4 # polynomial degree\n", @@ -399,7 +423,7 @@ "outputs": [], "source": [ "feats, costs = pyepo.data.tsp.genData(num_data=n+1000, num_features=p, num_nodes=m,\n", - " deg=deg, noise_width=e, seed=42)" + " deg=deg, noise_width=e, seed=42)" ] }, { @@ -411,7 +435,7 @@ "base_uri": "https://localhost:8080/" }, "id": "6ed1c3f5", - "outputId": "968d156e-b0fe-4d50-fa6f-a2652ebf8bc6" + "outputId": "975ff772-5c15-4a64-f534-2f6435c561a9" }, "outputs": [ { @@ -455,6 +479,128 @@ "print(costs[0])" ] }, + { + "cell_type": "markdown", + "source": [ + "### 1.4 Portfolio" + ], + "metadata": { + "id": "gry3b3FNg_yF" + }, + "id": "gry3b3FNg_yF" + }, + { + "cell_type": "markdown", + "source": [ + "Let $\\bar{r}_{ij} = (\\frac{0.05}{\\sqrt{p}}(\\mathcal{B} \\mathbf{x}_i)_j + {0.1}^{\\frac{1}{deg}})^{deg}$.\n", + "\n", + "The expected return of the assets is defined as $\\bar{\\mathbf{r}}_i + \\mathbf{L} \\mathbf{f} + 0.01 \\tau \\mathbf{\\epsilon}$ and the covariance matrix is expressed $\\mathbf{L} \\mathbf{L}^{\\intercal} + (0.01 \\tau)^2 \\mathbf{I}$, where $\\mathcal{B}$, $\\mathbf{L}$, and $\\mathbf{f}$ and $\\mathbf{\\epsilon}$ are random variables." + ], + "metadata": { + "id": "JtJ8HPnwhIGE" + }, + "id": "JtJ8HPnwhIGE" + }, + { + "cell_type": "code", + "source": [ + "import pyepo\n", + "m = 50 # number of assets\n", + "n = 1000 # number of data\n", + "p = 4 # feature dimention\n", + "deg = 4 # polynomial degree\n", + "e = 1 # noise level" + ], + "metadata": { + "id": "8zjp-Asziy8D" + }, + "id": "8zjp-Asziy8D", + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "cov, feats, revs = pyepo.data.portfolio.genData(num_data=n+1000, num_features=p, num_assets=m,\n", + " deg=deg, noise_level=e, seed=42)" + ], + "metadata": { + "id": "V9phXd3ti7Cz" + }, + "id": "V9phXd3ti7Cz", + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# covariance\n", + "print(\"Covariance:\")\n", + "print(cov)\n", + "# features\n", + "print(\"Features:\")\n", + "print(feats[0])\n", + "# Revenue\n", + "print(\"Revenues:\")\n", + "print(costs[0])" + ], + "metadata": { + "id": "hm-LtIgVjKVE", + "outputId": "d3d67473-6211-4a81-c46e-a133fa468450", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "id": "hm-LtIgVjKVE", + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Covariance:\n", + "[[ 1.00116613e-02 1.04809132e-05 3.26874944e-06 ... -7.32011315e-06\n", + " 2.31052654e-06 2.42490156e-06]\n", + " [ 1.04809132e-05 1.00109443e-02 3.14384952e-06 ... -8.34225311e-06\n", + " -3.85284665e-07 3.65860588e-07]\n", + " [ 3.26874944e-06 3.14384952e-06 1.00099803e-02 ... -5.52447038e-06\n", + " 1.11220326e-06 -2.30590331e-06]\n", + " ...\n", + " [-7.32011315e-06 -8.34225311e-06 -5.52447038e-06 ... 1.00101297e-02\n", + " -1.57470787e-06 4.22118562e-06]\n", + " [ 2.31052654e-06 -3.85284665e-07 1.11220326e-06 ... -1.57470787e-06\n", + " 1.00075920e-02 1.05277517e-07]\n", + " [ 2.42490156e-06 3.65860588e-07 -2.30590331e-06 ... 4.22118562e-06\n", + " 1.05277517e-07 1.00065307e-02]]\n", + "Features:\n", + "[ 1.30547881 0.02100384 0.68195297 -0.31026676]\n", + "Revenues:\n", + "[ 3.7469 3.5177 3.5663 3.2863 20.8808 3.5013 4.6786 3.663 9.4076\n", + " 1.6293 8.884 2.8502 5.8908 4.8622 18.5146 5.7186 0.5103 3.1516\n", + " 8.1697 6.4878 10.9322 0.766 12.8021 7.2463 16.3108 3.0362 11.5717\n", + " 9.5445 3.901 4.9748 2.0201 2.4792 5.3137 26.4226 19.2363 2.3725\n", + " 1.9566 6.9787 6.7527 6.1478 9.8816 4.8733 4.8745 2.1084 6.8356\n", + " 7.9441 6.6348 3.2901 10.0526 4.4324 3.8492 6.6119 8.6355 22.0806\n", + " 5.5779 1.3496 8.7577 5.0559 6.8631 6.8527 3.5512 3.4764 4.0971\n", + " 4.0949 4.0859 7.7309 7.4587 1.2292 34.8099 4.9677 17.7628 3.1806\n", + " 6.3381 3.5345 18.8379 6.9102 6.5611 3.818 4.2513 16.7784 4.5815\n", + " 5.3674 3.3281 13.4974 2.304 4.8323 3.4517 7.0979 5.5551 10.3592\n", + " 3.6593 15.9906 5.1407 4.9056 2.8864 5.8821 4.7064 16.2864 8.4832\n", + " 6.8939 3.0092 6.5853 3.5005 6.8579 4.3257 2.9691 5.9071 4.8555\n", + " 4.6766 4.2926 3.0147 4.5696 1.5417 2.2904 5.9068 13.253 7.2816\n", + " 3.7608 2.6785 5.1225 12.4957 6.5661 3.4804 4.7496 5.1713 4.0051\n", + " 10.6108 2.366 3.8686 2.858 2.1941 2.9987 5.616 4.2036 2.8274\n", + " 1.7951 3.1929 1.9771 3.7794 7.1023 2.589 5.9645 3.5209 3.5754\n", + " 23.3991 3.6 3.2637 4.7308 3.0393 3.0881 32.1364 6.1012 2.3523\n", + " 10.6854 3.7003 1.3595 7.6433 5.9098 5.0089 4.3011 40.8034 4.4646\n", + " 5.603 3.6141 6.6556 5.9318 13.4098 2.204 11.5992 1.972 5.4251\n", + " 3.4477 4.9676 0.5672 4.2034 2.9343 4.3879 2.1213 1.4663 8.2608\n", + " 1.6514 23.8687 5.0414 3.1683 3.1189 12.3226 19.7905 4.2913 35.3521\n", + " 2.9655]\n" + ] + } + ] + }, { "cell_type": "markdown", "id": "35d5ee2d", @@ -501,7 +647,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "id": "8c8abdcb", "metadata": { "id": "8c8abdcb" @@ -514,7 +660,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "id": "448296e5", "metadata": { "id": "448296e5" @@ -563,14 +709,14 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "id": "19fd4e0d", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "19fd4e0d", - "outputId": "5ffe089a-c40d-4c1a-9f8e-5f6955e015a0" + "outputId": "207008f6-8079-47cf-d97e-70917baaa91e" }, "outputs": [ { @@ -609,7 +755,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 17, "id": "c0c1b954", "metadata": { "id": "c0c1b954" @@ -643,14 +789,14 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 18, "id": "56ce885b", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "56ce885b", - "outputId": "75ea8432-1cba-4299-a30b-64a96659b808" + "outputId": "701dbe59-1f3f-4556-a2cd-ee266d72fdeb" }, "outputs": [ { @@ -664,7 +810,7 @@ "output_type": "stream", "name": "stderr", "text": [ - "100%|██████████| 1000/1000 [00:02<00:00, 365.55it/s]\n" + "100%|██████████| 1000/1000 [00:03<00:00, 290.63it/s]\n" ] }, { @@ -678,7 +824,7 @@ "output_type": "stream", "name": "stderr", "text": [ - "100%|██████████| 1000/1000 [00:03<00:00, 283.49it/s]\n" + "100%|██████████| 1000/1000 [00:04<00:00, 216.02it/s]\n" ] } ], @@ -710,14 +856,14 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "id": "f98646ae", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "f98646ae", - "outputId": "edb08ea5-95dc-4caf-8097-a0269c6d0db1" + "outputId": "cbae5e87-bcb2-49ec-fa73-8f7334742059" }, "outputs": [ { @@ -732,7 +878,7 @@ ] }, "metadata": {}, - "execution_count": 16 + "execution_count": 19 } ], "source": [ @@ -742,14 +888,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "id": "9d3f978e", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9d3f978e", - "outputId": "f1733693-8240-4f9b-c01c-a6bb2d8655f2" + "outputId": "03a03011-b02d-4b4b-ad29-e6645bac08b8" }, "outputs": [ { @@ -799,7 +945,7 @@ ] }, "metadata": {}, - "execution_count": 17 + "execution_count": 20 } ], "source": [ @@ -809,14 +955,14 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "id": "e3b07592", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "e3b07592", - "outputId": "538b62a6-3a48-484f-987d-9817dfc963db" + "outputId": "527cc6ad-055c-436e-86fc-45a01e5eef13" }, "outputs": [ { @@ -841,7 +987,7 @@ ] }, "metadata": {}, - "execution_count": 18 + "execution_count": 21 } ], "source": [ @@ -851,14 +997,14 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "id": "1231e1ca", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "1231e1ca", - "outputId": "cd84e536-eb27-4757-99c0-a0cac06cbc87" + "outputId": "6b2084b1-c3de-4bfe-b033-fbd143f892d3" }, "outputs": [ { @@ -873,7 +1019,7 @@ ] }, "metadata": {}, - "execution_count": 19 + "execution_count": 22 } ], "source": [ @@ -903,7 +1049,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "id": "23fb2e94", "metadata": { "id": "23fb2e94" @@ -928,14 +1074,14 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "id": "ce529f39", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ce529f39", - "outputId": "859ac781-bd0e-43ad-c423-02d11f6c913d" + "outputId": "4eabff6c-2d79-403f-8503-3345283c83c1" }, "outputs": [ { @@ -964,7 +1110,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "id": "4dc28398", "metadata": { "id": "4dc28398" From 352ef4e678be8a48f3690bd4ea30c7a7b82d8d29 Mon Sep 17 00:00:00 2001 From: Bo Tang Date: Thu, 25 Apr 2024 01:40:16 -0400 Subject: [PATCH 2/3] Bug fixed: formula --- pkg/pyepo/data/portfolio.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/pyepo/data/portfolio.py b/pkg/pyepo/data/portfolio.py index b7ffc666..d1b5f982 100644 --- a/pkg/pyepo/data/portfolio.py +++ b/pkg/pyepo/data/portfolio.py @@ -52,5 +52,5 @@ def genData(num_data, num_features, num_assets, deg=1, noise_level=1, seed=135): eps = rnd.randn(num_assets) r[i] += L @ f + 0.01 * noise_level * eps # covariance matrix of the returns - cov = L @ L.T + (1e-2 * noise_level) * np.eye(num_assets) + cov = L @ L.T + (1e-2 * noise_level) ** 2 * np.eye(num_assets) return cov, x, r From bfd55c7c857aa10a3f2f6fd1b99f7cbe1261bcb2 Mon Sep 17 00:00:00 2001 From: Bo Tang Date: Wed, 8 May 2024 20:12:04 -0400 Subject: [PATCH 3/3] Update training.rst --- docs/source/content/examples/training.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/content/examples/training.rst b/docs/source/content/examples/training.rst index c702533d..b432ec0d 100644 --- a/docs/source/content/examples/training.rst +++ b/docs/source/content/examples/training.rst @@ -178,7 +178,7 @@ The example to learn shortest path with linear model is as follows: # set optimizer optimizer = torch.optim.Adam(predmodel.parameters(), lr=1e-3) # init perturbed optimizer - ptb = pyepo.func.perturbedOpt(optmodel, n_samples=10, epsilon=0.5, processes=2) + ptb = pyepo.func.perturbedOpt(optmodel, n_samples=10, sigma=0.5, processes=2) # init loss criterion = nn.MSELoss() @@ -243,7 +243,7 @@ The example to learn shortest path with linear model is as follows: # set optimizer optimizer = torch.optim.Adam(predmodel.parameters(), lr=1e-3) # init PFY loss - pfy = pyepo.func.perturbedFenchelYoung(optmodel, n_samples=10, epsilon=0.5, processes=2) + pfy = pyepo.func.perturbedFenchelYoung(optmodel, n_samples=10, sigma=0.5, processes=2) # training num_epochs = 20