FICO
FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browser

Python notebooks

Description

Python notebooks available in the GitHub repository python-notebooks.


pythonnotebooks.zip[download all files]

Source Files

Data Files
mc11.mps.gz[download]





markowitz_multiobj.ipynb

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **Markowitz portfolio multi-objective optimization**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "***markowitz_multiojb.ipynb***\n",
    "\n",
    "Markowitz portfolio optimization. A multi-objective quadratic programming example.\n",
    "\n",
    "In Markowitz portfolio optimization there are two objectives: to maximize reward while minimizing risk (i.e. variance). This example plots several points on the optimal frontier using a blended multi-objective approach, and shows that a point computed using a lexicographic approach also lies on this frontier.\n",
    "\n",
    "© Copyright 2025 Fair Isaac Corporation\n",
    "\n",
    "Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n",
    " \n",
    "Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n",
    "\n",
    "This example uses FICO® Xpress software. By running it, you agree to the Community License terms of the [Xpress Shrinkwrap License Agreement](https://www.fico.com/en/shrinkwrap-license-agreement-fico-xpress-optimization-suite-on-premises) with respect to the FICO® Xpress software. See the [licensing options](https://www.fico.com/en/fico-xpress-trial-and-licensing-options) overview for additional details and information about obtaining a paid license."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Install the xpress package\n",
    "%pip install -q xpress"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Problem description"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Markowitz portfolio optimization focuses on making a selection on the fraction of a budget to allocate to $S$ possible stocks to form a portfolio with two key objectives:\n",
    "\n",
    "  - Maximize expected returns: $\\max \\sum_{i \\in \\mathcal{S}} RET_i \\cdot frac_i$\n",
    "  - Minimize the portfolio variance: $\\min \\sum_{i,j \\in \\mathcal{S}} frac_i \\cdot frac_j \\cdot COV_{i,j}$ \n",
    "  \n",
    "where:\n",
    "\n",
    "  - $frac$ is the vector of portfolio stock allocations.\n",
    "  - $COV$ is the covariance matrix of asset returns.\n",
    "  - $RET$ is the returns vector.\n",
    "\n",
    "The sum of the portfolio stock allocations should be equal to 1 (fully invested portfolio): $\\sum_{i \\in \\mathcal{S}} frac_i = 1$\n",
    "\n",
    "In this example, we work with $S$ = 5 stocks, where the matrix of co-variance between each pair of stocks is given by:\n",
    "\n",
    "|   | Stock 1 | Stock 2 | Stock 3 | Stock 4 | Stock 5 |\n",
    "|---|---|---|---|---|---|\n",
    "| **Stock 1** | 0.32 | 0.70 | 0.19 | 0.52 | 0.16 |\n",
    "| **Stock 2** | 0.70 | 4.35 | -0.48 | -0.06 | -0.03 |\n",
    "| **Stock 3** | 0.19 | -0.48 | 0.98 | 1.10 | 0.10 |\n",
    "| **Stock 4** | 0.52 | -0.60 | 1.10 | 2.48 | 0.37 |\n",
    "| **Stock 5** | 0.16 | -0.30 | 0.10 | 0.37 | 0.31 |\n",
    "\n",
    "The returns of each stock are given as:\n",
    "\n",
    "|   | Returns |\n",
    "|---|---|\n",
    "| **Stock 1** | 0.31 |\n",
    "| **Stock 2** | 0.87 |\n",
    "| **Stock 3** | 0.31 |\n",
    "| **Stock 4** | 0.66 |\n",
    "| **Stock 5** | 0.24 |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data preparation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The necessary packages are imported, and returns and covariance data is created as NumPy arrays to allow the use of the [xpress.Dot()](https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/python/HTML/xpress.Dot.html) operator."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import xpress as xp\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "# The historical mean return on investment for five stocks\n",
    "RET = np.array([0.31, 0.87, 0.31, 0.66, 0.24])\n",
    "\n",
    "# The historical covariances of the five stocks\n",
    "COV = np.array([\n",
    "  [0.32,  0.70,  0.19,  0.52,  0.16],\n",
    "  [0.70,  4.35, -0.48, -0.06, -0.03],\n",
    "  [0.19, -0.48,  0.98,  1.10,  0.10],\n",
    "  [0.52, -0.6,   1.10,  2.48,  0.37],\n",
    "  [0.16, -0.3,   0.10,  0.37,  0.31]\n",
    "])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model implementation and visualization of efficient frontier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Non-negative variables represent percentage of capital to invest in each stock. In order to use Xpress' built in multi-objective handling functionality, all objectives must be linear, so we define a free variable *variance* to serve as transfer variable.\n",
    "\n",
    "A list of constraints is created and passed as an argument to [problem.addConstraint()](https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/python/HTML/problem.addConstraint.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "p = xp.problem()\n",
    "\n",
    "# Non-negative variables represent percentage of capital to invest in each stock\n",
    "frac = p.addVariables(len(RET))\n",
    "\n",
    "# All objectives must be linear, so we define a free variable for the variance\n",
    "variance = p.addVariable(lb=-xp.infinity)\n",
    "\n",
    "ctrs = [\n",
    "  xp.Sum(frac) == 1,                             # Must invest 100% of capital\n",
    "  xp.Dot(frac, COV, frac) - variance <= 0    # Set up transfer variable for variance\n",
    "]\n",
    "\n",
    "p.addConstraint(ctrs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next we define the two objectives. First, we call [problem.setObjective()](https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/python/HTML/problem.setObjective.html) to define the first objective, and the second objective is added using the [problem.addObjective()](https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/python/HTML/problem.addObjective.html) method, which is designed for the formulation of multi-objective optimization problems by adding a new objective to an optimization problem.\n",
    "\n",
    "Alternatively, the [problem.setObjective()](https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/python/HTML/problem.setObjective.html) method can be used to add a new objective to a problem, as long as an *objidx* argument is defined for each objective, as consecutive integers starting from zero."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "p.setObjective(xp.Dot(frac, RET))     # Maximize mean return\n",
    "p.addObjective(variance)              # Minimize variance\n",
    "\n",
    "# or alternatively\n",
    "#p.setObjective(xp.Dot(frac, ret), objidx=0)\n",
    "#p.setObjective(variance, objidx=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Vary the objective weights to explore the optimal frontier, with the first objective having a weight ranging from 0.05 up to 0.95, with the second objective (weight) being the complement for each instance.\n",
    "\n",
    "A loop allows iterating through each of the 100 weight cases, optimize and save the two objective values in each instance (coordinates).\n",
    "\n",
    "When using either [problem.setObjective()](https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/python/HTML/problem.setObjective.html) or [problem.addObjective()](https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/python/HTML/problem.addObjective.html), if **objectives have equal priority but different weights, a Blended (or Archimedian) approach is applied**, setting as objective function of the problem the linear combination of the added objectives and their weights."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Vary the objective weights to explore the optimal frontier\n",
    "weights = np.linspace(0.05, 0.95, 100)\n",
    "means = []\n",
    "variances = []\n",
    "\n",
    "for w in weights:\n",
    "  p.setObjective(objidx=0, weight=w,sense=xp.maximize)  # First objective defines the sense of the problem\n",
    "  p.setObjective(objidx=1, weight=w-1)                  # Reverse the sense by assigning a negative weight because we minimize variance\n",
    "  p.optimize()\n",
    "  means.append(xp.Dot(p.getSolution(frac), RET).item())\n",
    "  variances.append(p.getSolution(variance))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Draw an efficient frontier using the 20 points with *matplotlib*."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHHCAYAAABXx+fLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXCtJREFUeJzt3Qd4U+XbBvC7e9GWUUoHo1D23nuDDHEwlKFMAf/ugchwgAiCIgoOHKAsFQEVQQUB2XtToAiFlkJZLS3QTXe+63kx+ZoOaKHtybh/1xXIOU1O3pykyd132uh0Oh2IiIiIrIit1gUgIiIiKmkMQERERGR1GICIiIjI6jAAERERkdVhACIiIiKrwwBEREREVocBiIiIiKwOAxARERFZHQYgIiIisjoMQER0TzY2Nnjvvfe0LgZZGL6vSEsMQGQxlixZoj5Q9Rd7e3v4+/tj5MiRuHLlyn0d899//1Uf0BcuXCjy8lLxSE5OVq/Z9u3bYQ7Wr1/PEECkAXstHpSoOL3//vuoWrUqUlJSsH//fhWMdu/ejeDgYDg7Oxc6AE2bNg2dO3dGQEAArNXt27dVoDSXACSvmZDXzRwC0Pz5860yBJnT+4osD995ZHF69+6N5s2bq+tjxoyBl5cXPvroI/zxxx8YOHAgTEFSUhLc3NxgLgobHInyk5WVhbS0NPWe4vuKtMQmMLJ4HTp0UP+HhYUZ7T9z5gyeeOIJlC1bVn0QS2iSkKQnNUdPPvmkut6lSxdD05q+aSW//gtSUyTNbtmPI7fdsWMHXnjhBXh7e6NixYqGGor69eurmiZ5DFdXV9VsN3v27AI9t4yMDEyfPh2BgYFwcnJSj/3WW28hNTU1V5keeeQRVRPWsmVL9XyrVauGZcuWFehxcj5XuS77QkND1XMtXbo0PD09MWrUKFUDoyfPTZ5XXl+C8jzl/GffN2/ePNSrV0+Vr0KFCvjf//6HW7duGd338OHD6Nmzpwq2Li4uqrbvmWeeUT+Tpsry5cur61ILpH/N9GWXspYqVQoRERHqfMh1KYfUwIiTJ0+ia9euKpxWqVIFy5cvz1X22NhYvPbaa6hUqZI659WrV1cBW8qvJ+WQx50zZw4WLFhgeH1atGiBQ4cOGW4n5dE/dvbm2/xImeV1y0ubNm0MwV/8888/aN++vXpt5HnWqlVLvTfupjCvlzy3tm3boly5cup1aNasGX799ddc95Xn89JLL+Gnn35Sr62chw0bNuT5vrp48aL6HZGyyjHl2PI7mLMJWv87tWfPHowbN0695vKa9evXD9HR0bnK8Pfff6NTp05wd3eHh4eHeh1yvrYHDhxAr1691PtYfg/l9nJ8slwMQGTx9B+eZcqUMew7deoUWrdujdOnT2PSpEn45JNP1Ado37598fvvv6vbdOzYEa+88oq6Ll8cP/zwg7rUqVPnvsohH+wSdKZMmaIeU0++4OWDt1GjRqoctWvXxsSJE9WH9r1IDZccr2nTppg7d6760J41axYGDx6c67YSVuQL7KGHHlKPI+dDvoDlXNwvqVFLSEhQjynX5YtJ3/wkBg0ahJ07dyIyMtLofhLErl69alROCTtvvvkm2rVrh88++0yFKfnSlLCTnp6ubnP9+nX06NFDvaZyDr/44gs8/fTTqqlTyBfh119/ra7Ll6H+Nevfv7/hcTIzM1UtoQQYCZoSDuULWsour4OECAk08mU5fPhwhIeHG+4r4U7O8Y8//qh+9vnnn6vyTp48WX0R5yRfsh9//LF6bjNmzFDllrLon4/sl9dD6Msql/zI+ZTyZA9R+uAg50B/PuU1lbAkQViahOX1fuyxx+75hV6Y10teoyZNmqjjz5w5UzVlSVhZt25druNu3boVr7/+ujq+3C+/5mR5Xnv37lWPI+f2ueeew5YtW9QfCtmDtd7LL7+M48ePY+rUqXj++efx559/qtcyO3ld+/Tpg5s3b6rX6cMPP0Tjxo0NIUxfPvl9j4+PV8eS5yNBV8LwwYMH73rOyIzpiCzE4sWLdfKW3rx5sy46Olp36dIl3a+//qorX768zsnJSW3rdevWTdegQQNdSkqKYV9WVpaubdu2uho1ahj2/fLLL+qY27Zty/V4sn/q1Km59lepUkU3YsSIXOVq3769LiMjw+i2nTp1Uj9btmyZYV9qaqrOx8dHN2DAgLs+36CgIHXfMWPGGO0fP3682r9161ajMsm+nTt3GvZdv35dnZc33njjro+T13OV67LvmWeeMbpdv379dOXKlTNsh4SEqNt98cUXRrd74YUXdKVKldIlJyer7V27dqnb/fTTT0a327Bhg9H+33//XW0fOnQo37LKa5/fayOvi/xs5syZhn23bt3Subi46GxsbHQrVqww7D9z5kyu40yfPl3n5uamO3v2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jrjb6cjKAtKzstTcObIsREp6Fm6nZ+J2WiaSUjPUcHK5xN9OVx2PbyWnqcuNxDTEJKYiPsV4uHlepC+yX2kXVCtfCtW83FTAqe7tjpoVSqFcKcup7SIiIjLLADRo0CBER0erUCNhpnHjxmrCQn3H6IiICDUyTO/rr79Wo8eeeOIJo+NMnToV7733nmpSO3HihJoIUYbCSwdpmSdo+vTpmjdzLdt3ER9vDCmSYzna28Lb3Qm+ns7w9XRRYce/jAsqlXFR8+9ULOOqbkNEREQmOA+QKSqueYAW7AzDJ5vOqlmRZf0rCSjSqdjZwU5dXBxs4eZkj1JO9nB3toeHs4OaPLC0myPKujqirJujar4q7+6k9rN/DhER0f19fzMA5YETIRIREVn29zfbSIiIiMjqMAARERGR1WEAIiIiIqvDAERERERWhwGIiIiIrA4DEBEREVkdBiAiIiKyOgxAREREZHUYgIiIiMjqMAARERGR1WEAIiIiIqvDAERERERWhwGIiIiIrA4DEBEREVkde60LYIp0Op36Pz4+XuuiEBERUQHpv7f13+N3wwCUh4SEBPV/pUqVtC4KERER3cf3uKen511vY6MrSEyyMllZWbh69Src3d1hY2OjEqWEoUuXLsHDw0Pr4lkVnnvt8Nxrh+deOzz35n3eJdJI+PHz84Ot7d17+bAGKA9y0ipWrJhrv7wo/IXQBs+9dnjutcNzrx2ee/M97/eq+dFjJ2giIiKyOgxAREREZHUYgArAyckJU6dOVf9TyeK51w7PvXZ47rXDc289552doImIiMjqsAaIiIiIrA4DEBEREVkdBiAiIiKyOgxAREREZHUYgP4zf/58BAQEwNnZGa1atcLBgwfzve3q1avRvHlzlC5dGm5ubmjcuDF++OGHEi2vtZ777FasWKFm6u7bt2+xl9FSFebcL1myRJ3v7Be5H5XM+z42NhYvvvgifH191UiZmjVrYv369SVWXms99507d871vpdLnz59SrTM1vienzdvHmrVqgUXFxc1S/Trr7+OlJSUoiuQjAKzditWrNA5OjrqFi1apDt16pRu7NixutKlS+uioqLyvP22bdt0q1ev1v3777+60NBQ3bx583R2dna6DRs2lHjZre3c64WHh+v8/f11HTp00D3++OMlVl5rPveLFy/WeXh46K5du2a4REZGlni5rfHcp6am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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(means, variances)\n",
    "plt.title('Return on investment vs variance')\n",
    "plt.xlabel('Expected return')\n",
    "plt.ylabel('Variance')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Applying a lexicographic approach"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we will maximize profit alone, and then minimize variance while not sacrificing more than 10% of the maximum profit possible.\n",
    "\n",
    "When **objectives have a different priority but the same weight, a Lexicographic approach is applied**. Xpress will solve the problem once for each distinct objective priority that is defined. All objectives from previous iterations are fixed to their optimal values within the tolerances:\n",
    "  - For minimization objectives: <tt>objective <= optimal_value * (1 + reltol) + abstol</tt>\n",
    "  - For maximization objectives: <tt>objective <= optimal_value * (1 - reltol) - abstol</tt>\n",
    "\n",
    "with the parameter <tt>reltol</tt> being the relative tolerance and <tt>abstol</tt> the absolute tolerance for the objective in subsequent runs.\n",
    "\n",
    "Further calls to [problem.setObjective()](https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/python/HTML/problem.setObjective.html) allow users to configure each objective via the <tt>objidx</tt> argument, which receives the <tt>id</tt> of each objective, a counter starting with 0 in the order objectives are created. \n",
    "\n",
    "By running the code cell below, we can observe that the final soluton from the lexicographic method falls within the efficient frontier previously generated."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHHCAYAAABXx+fLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXGxJREFUeJzt3Qd4U+XbBvC7e9GWUUoHo1D23htlyRAHQxkqS8bfPRAZDhBBUETBgQrIdAEqggMB2XtToAiFlkLLaGmBbjqT73peTL5OaKHtybh/1xXIOU1O3pykyd132uj1ej2IiIiIrIit1gUgIiIiKm0MQERERGR1GICIiIjI6jAAERERkdVhACIiIiKrwwBEREREVocBiIiIiKwOAxARERFZHQYgIiIisjoMQER0VzY2Nnjvvfe0LgZZGL6vSEsMQGQxli1bpj5QDRd7e3v4+/tjxIgRuHz58j0d899//1Uf0BcuXCj28lLJSElJUa/Z9u3bYQ7Wr1/PEECkAXstHpSoJL3//vuoXr06UlNTsX//fhWMdu/ejeDgYDg7Oxc5AE2bNg2dO3dGQEAArNWtW7dUoDSXACSvmZDXzRwC0Pz5860yBJnT+4osD995ZHF69+6Nli1bquujR4+Gl5cXPvroI/z+++8YOHAgTEFycjLc3NxgLooaHIkKotPpkJ6ert5TfF+RltgERhavU6dO6v+wsLAc+8+cOYMnnngC5cuXVx/EEpokJBlIzdGTTz6prnfp0sXYtGZoWimo/4LUFEmzW/bjyG137NiBF154Ad7e3qhcubKxhqJhw4aqpkkew9XVVTXbzZ49u1DPLTMzE9OnT0dgYCCcnJzUY7/11ltIS0vLU6ZHHnlE1YS1bt1aPd8aNWpgxYoVhXqc3M9Vrsu+0NBQ9VzLli0LT09PjBw5UtXAGMhzk+eV35egPE85/9n3zZs3Dw0aNFDlq1SpEv73v//h5s2bOe57+PBh9OzZUwVbFxcXVdv37LPPqp9JU2XFihXVdakFMrxmhrJLWcuUKYOIiAh1PuS6lENqYMTJkyfRtWtXFU6rVauGH3/8MU/Z4+Li8Nprr6FKlSrqnNesWVMFbCm/gZRDHnfOnDlYuHCh8fVp1aoVDh06ZLydlMfw2NmbbwsiZZbXLT/t2rUzBn/xzz//oGPHjuq1kedZp04d9d64k6K8XvLc2rdvjwoVKqjXoUWLFvjll1/y3Feez0svvYQffvhBvbZyHjZs2JDv++rixYvqd0TKKseUY8vvYO4maMPv1J49ezBu3Dj1mstr1q9fP8TExOQpw99//40HH3wQ7u7u8PDwUK9D7tf2wIED6NWrl3ofy++h3F6OT5aLAYgsnuHDs1y5csZ9p06dQtu2bXH69GlMmjQJn3zyifoA7du3L3777Td1mwceeACvvPKKui5fHN9995261KtX757KIR/sEnSmTJmiHtNAvuDlg7dJkyaqHHXr1sXEiRPVh/bdSA2XHK958+aYO3eu+tCeNWsWBg8enOe2ElbkC+yhhx5SjyPnQ76A5VzcK6lRS0xMVI8p1+WLydD8JAYNGoSdO3ciKioqx/0kiF25ciVHOSXsvPnmm+jQoQM+++wzFabkS1PCTkZGhrrNtWvX0KNHD/Wayjn84osv8PTTT6umTiFfhF9//bW6Ll+Ghtesf//+xsfJyspStYQSYCRoSjiUL2gpu7wOEiIk0MiX5bBhwxAeHm68r4Q7Ocfff/+9+tnnn3+uyjt58mT1RZybfMl+/PHH6rnNmDFDlVvKYng+sl9eD2Eoq1wKIudTypM9RBmCg5wDw/mU11TCkgRhaRKW1/uxxx676xd6UV4veY2aNWumjj9z5kzVlCVh5a+//spz3K1bt+L1119Xx5f7FdScLM9r79696nHk3D733HPYsmWL+kMhe7A2ePnll3H8+HFMnToVzz//PP744w/1WmYnr2ufPn1w48YN9Tp9+OGHaNq0qTGEGconv+8JCQnqWPJ8JOhKGD548OAdzxmZMT2RhVi6dKle3tKbN2/Wx8TE6CMjI/W//PKLvmLFinonJye1bdCtWzd9o0aN9KmpqcZ9Op1O3759e32tWrWM+37++Wd1zG3btuV5PNk/derUPPurVaumHz58eJ5ydezYUZ+ZmZnjtg8++KD62YoVK4z70tLS9D4+PvoBAwbc8fkGBQWp+44ePTrH/vHjx6v9W7duzVEm2bdz507jvmvXrqnz8sYbb9zxcfJ7rnJd9j377LM5btevXz99hQoVjNshISHqdl988UWO273wwgv6MmXK6FNSUtT2rl271O1++OGHHLfbsGFDjv2//fab2j506FCBZZXXvqDXRl4X+dnMmTON+27evKl3cXHR29jY6FeuXGncf+bMmTzHmT59ut7NzU1/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ecHDzMKP2fYBIiIiItMIQA+bydpfuTEAERERUZGEXkvE2egkONjZoHv9SjBHDEBERERUJL8HXVH/d6pVEZ4u5tf8JRiAiIiIqNCydHr8cuT2bM/9mvnDXDEAERERUaHtCY3FlfhUVfPzkJk2fwkGICIiIiq01YdvLxfVt6kfnB3sYK4YgIiIiKhQ4lLSselUtLr+ZEvzXjicAYiIiIgKZV3QFaRn6VDf1wMN/T1hzhiAiIiIqEjNXwNbmsd6X3fCAERERER3FXw5HqeuJMDRzhaPNzXf0V8GDEBERER0V4ah7w81qIRybo4wdwxAREREdEepGVn47dhldX2gmXd+NmAAIiIiojvafDoa8bcy4OvpjI41vWAJGICIiIjojlYfvt38NaB5ZdjZ2sASMAARERFRga7E3cKuczHq+hMtzH/0lwEDEBERERXo+/0XodcDbWuUR4CXGywFAxARERHl61Z6Fn48GKGuj2hfHZaEAYiIiIjytTboMuJSMlC5nItZL3yaHwYgIiIiykOv12PpnnB1fUT7AIvp/GzAAERERER57Am9jrPRSXBztMPAVpYx9092DEBERESUh6H2R0Z+eTg7wNIwABEREVEO4bHJ2BpyTV0f3j4AlogBiIiIiHJYvveCGvreta43alQsA0vEAERERERG8SkZ+PlwpLo+soNl1v4IBiAiIiIyWro3HMnpWajr424x637lhwGIiIiIlMTUDCzZfbvz88tda8HGxrKGvmfHAERERETKin0XkZCaiZreZdC7oQ8sGQMQERERITktE9/uOq+uv9SlJmwtbOLD3BiAiIiICD8cuIibKRkIqOCKRxr7wtIxABEREVm5W+lZWLjzdt+fF7rUhL2d5ccDy3+GREREdEdL9oQjNilNLXrar5k/rAEDEBERkRW7kZyOb7aHqevje9SBgxXU/gjreJZERESUry+2nkNiWiYa+HngsSZ+sBYMQERERFYq4noKvt9/UV2f1LuuxY/8yo4BiIiIyEp9tPEMMrL06FTLC51qVYQ1YQAiIiKyQntCY/HXiauQSp/JvevB2jAAERERWZn0TB2m/n5KXR/athrq+3nA2mgagHbu3IlHH30Ufn5+ar2RtWvX3vH227dvV7fLfYmKispxu/nz5yMgIADOzs5o06YNDh48WMLPhIiIyHws2xuO0GtJqODmiHE96sAaaRqA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ZIwcOVL9XEZ2yfB26acjZNj7lClT8OOPPyIgIEDNHSTKlCmjLklJSao/z4ABA1QtkvQBmjBhAmrWrKmG12spMTUD8bcyoNMBGTqdmjtHloVIzdDhVkYWbqVnITktUw0nl0vCrQzV8fhmSrq6XE9KR2xSGhJScw43z4/0RfYr64IaFcughpebCjg1vd1Ru1IZVChjObVdREREZhmABg0ahJiYGBVqJMw0bdpUTVho6BgdERGhRoYZfP3112r02BNPPJHjOFOnTsV7772nmtROnDihJkKUofDSQVrmCZo+fbrmzVwr9l3ExxtDiuVYjva28HZ3gq+nM3w9XVTY8S/ngirlXNT8O5XLuarbEBERkQnOA2SKSmoeoIU7w/DJprNqVmRZ/0oCinQqdnawUxcXB1u4OdmjjJM93J3t4eHsoCYPLOvmiPKujijv5qiaryq6O6n97J9DRER0b9/fDED54ESIRERElv39zTYSIiIisjoMQERERGR1GICIiIjI6jAAERERkdVhACIiIiKrwwBEREREVocBiIiIiKwOAxARERFZHQYgIiIisjoMQERERGR1GICIiIjI6jAAERERkdVhACIiIiKrwwBEREREVsde6wKYIr1er/5PSEjQuihERERUSIbvbcP3+J0wAOUjMTFR/V+lShWti0JERET38D3u6el5x9vY6AsTk6yMTqfDlStX4O7uDhsbG5UoJQxFRkbCw8ND6+JZFZ577fDca4fnXjs89+Z93iXSSPjx8/ODre2de/mwBigfctIqV66cZ7+8KPyF0AbPvXZ47rXDc68dnnvzPe93q/kxYCdoIiIisjoMQERERGR1GIAKwcnJCVOnTlX/U+niudcOz712eO61w3NvPeednaCJiIjI6rAGiIiIiKwOAxARERFZHQYgIiIisjoMQERERGR1GID+M3/+fAQEBMDZ2Rlt2rTBwYMHC7ztmjVr0LJlS5QtWxZubm5o2rQpvvvuu1Itr7We++xWrlypZuru27dviZfRUhXl3C9btkyd7+wXuR+Vzvs+Li4OL774Inx9fdVImdq1a2P9+vWlVl5rPfedO3fO876XS58+fUq1zNb4np83bx7q1KkDFxcXNUv066+/jtTU1OIrkIwCs3YrV67UOzo66pcsWaI/deqUfsyYMfqyZcvqo6Oj8739tm3b9GvWrNH/+++/+tDQUP28efP0dnZ2+g0bNpR62a3t3BuEh4fr/f399Z06ddI//vjjpVZeaz73S5cu1Xt4eOivXr1qvERFRZV6ua3x3Kelpelbtmypf/jhh/W7d+9W7//t27frg4KCSr3s1nbur1+/nuM9HxwcrD7v5feBSu68//DDD3onJyf1v7zfN27cqPf19dW//vrr+uLCAKTX61u3bq1/8cUXjdtZWVl6Pz8//axZswp9jGbNmunfeeedEiqh5bqXc5+Zmalv3769/ttvv9UPHz6cAaiUzr184Ht6epZiCS1XUc/9119/ra9Ro4Y+PT29FEtpme73837u3Ll6d3d3fVJSUgmW0vK0LuJ5l9t27do1x75x48bpO3ToUGxlsvomsPT0dBw5cgTdu3fPsRaYbO/bt++u95cQuWXLFoSEhOCBBx4o4dJalns99++//z68vb0xatSoUiqp5bnXc5+UlIRq1aqp6ujHH38cp06dKqUSW/e5//3339GuXTvVBFapUiU0bNgQM2fORFZWVimW3Pzd7+e9WLx4MQYPHqy6P1DJnff27dur+xiayc6fP6+afB9++GEUF6tfDDU2NlZ9iMiHSnayfebMmQLvFx8fD39/f6SlpcHOzg5fffUVHnrooVIosXWf+927d6sPoKCgoFIqpWW6l3MvbfFLlixB48aN1ft/zpw56kNKQlB+iwdT8Z17+fDfunUrnn76afUlEBoaihdeeAEZGRlq9lwq2c97A/kyDg4OVp9BVLLn/amnnlL369ixo6poyMzMxHPPPYe33noLxcXqA9C9cnd3V1/C8hex1ACNGzcONWrUUB3mqGQkJiZi6NChWLRoEby8vLQujtWRGgi5GEj4qVevHhYsWIDp06drWjZLp9PpVK3nwoUL1R9cLVq0wOXLl/Hxxx8zAJUiCT6NGjVC69attS6Kxdu+fbuq5ZTKBekwLaH/1VdfVZ817777brE8htUHIPkilQ+U6OjoHPtl28fHp8D7SfVdzZo11XUZBXb69GnMmjWLAagEz31YWBguXLiARx99NMcXg7C3t1fNkIGBgaVQcut932fn4OCAZs2aqQ8mKtlzLyO/5HzL/QwkfEZFRanmBUdHxxIvt7W/75OTk9XIU2mCp5I/7xJy5A/e0aNHq20JnvIajB07Fm+//bb6Dr5fVt8HSD445K8pqcXJ/qUq29n/2r0buY80h1HJnfu6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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Now we will maximize profit alone, and then minimize variance while not\n",
    "# sacrificing more than 10% of the maximum profit\n",
    "p.setObjective(objidx=0, priority=1, weight=1, reltol=0.1,sense=xp.maximize)\n",
    "p.setObjective(objidx=1, priority=0, weight=-1)\n",
    "p.controls.outputlog = 0 # Turn off output log for cleaner output\n",
    "p.optimize()\n",
    "m0 = xp.Dot(p.getSolution(frac), RET).item()\n",
    "v0 = p.getSolution(variance)\n",
    "\n",
    "plt.plot(means, variances)\n",
    "plt.plot(m0, v0, c='r', marker='.')\n",
    "plt.title('Return on investment vs variance')\n",
    "plt.xlabel('Expected return')\n",
    "plt.ylabel('Variance')\n",
    "plt.show()"
   ]
  }
 ],
 "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.12.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}

Back to examples browser