{ "cells": [ { "cell_type": "markdown", "id": "e235223c", "metadata": {}, "source": [ "\n", "*This notebook contains material from [CBE60499](https://ndcbe.github.io/CBE60499);\n", "content is available [on Github](git@github.com:ndcbe/CBE60499.git).*\n" ] }, { "cell_type": "markdown", "id": "682be5ed", "metadata": {}, "source": [ "\n", "< [4.6 NLP Diagnostics with Degeneracy Hunter](https://ndcbe.github.io/CBE60499/04.06-NLP-Diagnostics.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [4.8 Inertia-Corrected Netwon Method for Equality Constrained NLPs](https://ndcbe.github.io/CBE60499/04.08-Interior-Point2.html) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 1, "link": "[4.7 Simple Netwon Method for Equality Constrained NLPs](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7-Simple-Netwon-Method-for-Equality-Constrained-NLPs)", "section": "4.7 Simple Netwon Method for Equality Constrained NLPs" } }, "source": [ "# 4.7 Simple Netwon Method for Equality Constrained NLPs" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 1, "link": "[4.7 Simple Netwon Method for Equality Constrained NLPs](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7-Simple-Netwon-Method-for-Equality-Constrained-NLPs)", "section": "4.7 Simple Netwon Method for Equality Constrained NLPs" } }, "source": [ "**Reference**: Section 5.2 in Biegler (2010)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 1, "link": "[4.7 Simple Netwon Method for Equality Constrained NLPs](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7-Simple-Netwon-Method-for-Equality-Constrained-NLPs)", "section": "4.7 Simple Netwon Method for Equality Constrained NLPs" } }, "source": [ "![Alg51](figures/alg5-1.png)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[4.7.1 Helper Functions](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.1-Helper-Functions)", "section": "4.7.1 Helper Functions" } }, "source": [ "## 4.7.1 Helper Functions\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "nbpages": { "level": 2, "link": "[4.7.1 Helper Functions](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.1-Helper-Functions)", "section": "4.7.1 Helper Functions" } }, "outputs": [], "source": [ "# Load required Python libraries.\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from scipy import linalg\n", "\n", "## Check is element of array is NaN\n", "def check_nan(A):\n", " return np.sum(np.isnan(A))\n", "\n", "## Calculate gradient with central finite difference\n", "## Calculate gradient with central finite difference\n", "def my_grad_approx(x,f,eps1,verbose=False):\n", " '''\n", " Calculate gradient of function f using central difference formula\n", " \n", " Inputs:\n", " x - point for which to evaluate gradient\n", " f - function to consider\n", " eps1 - perturbation size\n", " \n", " Outputs:\n", " grad - gradient (vector)\n", " '''\n", " \n", " n = len(x)\n", " grad = np.zeros(n)\n", " \n", " if(verbose):\n", " print(\"***** my_grad_approx at x = \",x,\"*****\")\n", " \n", " for i in range(0,n):\n", " \n", " # Create vector of zeros except eps in position i\n", " e = np.zeros(n)\n", " e[i] = eps1\n", " \n", " # Finite difference formula\n", " my_f_plus = f(x + e)\n", " my_f_minus = f(x - e)\n", " \n", " # Diagnostics\n", " if(verbose):\n", " print(\"e[\",i,\"] = \",e)\n", " print(\"f(x + e[\",i,\"]) = \",my_f_plus)\n", " print(\"f(x - e[\",i,\"]) = \",my_f_minus)\n", " \n", " \n", " grad[i] = (my_f_plus - my_f_minus)/(2*eps1)\n", " \n", " if(verbose):\n", " print(\"***** Done. ***** \\n\")\n", " \n", " return grad\n", "\n", "def my_jac_approx(x,h,eps1,verbose=False):\n", " '''\n", " Calculate Jacobian of function h(x) using central difference formula\n", " \n", " Inputs:\n", " x - point for which to evaluate gradient\n", " h - vector-valued function to consider. h(x): R^n --> R^m\n", " eps1 - perturbation size\n", " \n", " Outputs:\n", " A - Jacobian (n x m matrix)\n", " '''\n", " \n", " # Check h(x) at x\n", " h_x0 = h(x)\n", " \n", " # Extract dimensions\n", " n = len(x)\n", " m = len(h_x0)\n", " \n", " # Initialize Jacobian matrix\n", " A = np.zeros((n,m))\n", " \n", " # Calculate Jacobian by row\n", " for i in range(0,n):\n", " \n", " # Create vector of zeros except eps in position i\n", " e = np.zeros(n)\n", " e[i] = eps1\n", " \n", " # Finite difference formula\n", " my_h_plus = h(x + e)\n", " my_h_minus = h(x - e)\n", " \n", " # Diagnostics\n", " if(verbose):\n", " print(\"e[\",i,\"] = \",e)\n", " print(\"h(x + e[\",i,\"]) = \",my_h_plus)\n", " print(\"h(x - e[\",i,\"]) = \",my_h_minus)\n", " \n", " \n", " A[i,:] = (my_h_plus - my_h_minus)/(2*eps1)\n", " \n", " if(verbose):\n", " print(\"***** Done. ***** \\n\")\n", " \n", " return A\n", " \n", "## Calculate gradient using central finite difference and my_hes_approx\n", "def my_hes_approx(x,grad,eps2):\n", " '''\n", " Calculate gradient of function my_f using central difference formula and my_grad\n", " \n", " Inputs:\n", " x - point for which to evaluate gradient\n", " grad - function to calculate the gradient\n", " eps2 - perturbation size (for Hessian NOT gradient approximation)\n", " \n", " Outputs:\n", " H - Hessian (matrix)\n", " '''\n", " \n", " n = len(x)\n", " H = np.zeros([n,n])\n", " \n", " for i in range(0,n):\n", " # Create vector of zeros except eps in position i\n", " e = np.zeros(n)\n", " e[i] = eps2\n", " \n", " # Evaluate gradient twice\n", " grad_plus = grad(x + e)\n", " grad_minus = grad(x - e)\n", " \n", " # Notice we are building the Hessian by column (or row)\n", " H[:,i] = (grad_plus - grad_minus)/(2*eps2)\n", "\n", " return H\n", "\n", "## Linear algebra calculation\n", "def xxT(u):\n", " '''\n", " Calculates u*u.T to circumvent limitation with SciPy\n", " \n", " Arguments:\n", " u - numpy 1D array\n", " \n", " Returns:\n", " u*u.T\n", " \n", " Assume u is a nx1 vector.\n", " Recall: NumPy does not distinguish between row or column vectors\n", " \n", " u.dot(u) returns a scalar. This functon returns an nxn matrix.\n", " '''\n", " \n", " n = len(u)\n", " A = np.zeros([n,n])\n", " for i in range(0,n):\n", " for j in range(0,n):\n", " A[i,j] = u[i]*u[j]\n", " \n", " return A\n", "\n", "## Analyze Hessian\n", "def analyze_hes(B):\n", " print(B,\"\\n\")\n", " \n", " l = linalg.eigvals(B)\n", " print(\"Eigenvalues: \",l,\"\\n\")" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[4.7.2 Algorithm 5.1](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.2-Algorithm-5.1)", "section": "4.7.2 Algorithm 5.1" } }, "source": [ "## 4.7.2 Algorithm 5.1" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "nbpages": { "level": 2, "link": "[4.7.2 Algorithm 5.1](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.2-Algorithm-5.1)", "section": "4.7.2 Algorithm 5.1" } }, "outputs": [], "source": [ "def alg51(x0,calc_f,calc_h,eps1=1E-6,eps2=1E-6,max_iter=50,verbose=False):\n", " '''\n", " Basic Full Space Newton Method for Equality Constrained NLP\n", " \n", " Input:\n", " x0 - starting point (vector)\n", " calc_f - function to calculate objective (returns scalar)\n", " calc_h - function to calculate constraints (returns vector)\n", " eps1 - tolerance for primal and dual steps\n", " eps2 - tolerance for gradient of L1\n", " \n", " Outputs:\n", " x - history of steps (primal variables)\n", " v - history of steps (dual variables)\n", " f - history of objective evaluations\n", " h - history of constraint evaluations\n", " df - history of objective gradients\n", " dL - history of Lagrange function gradients\n", " A - history of constraint Jacobians\n", " W - history of Lagrange Hessians\n", " \n", " Notes:\n", " 1. For simplicity, central finite difference is used \n", " for all gradient calculations.\n", " '''\n", " \n", " # Declare iteration histories as empty lists\n", " x = []\n", " v = []\n", " f = []\n", " L = []\n", " h = []\n", " df = []\n", " dL = []\n", " A = []\n", " W = []\n", " \n", " # Flag for iterations\n", " flag = True\n", " \n", " # Iteration counter\n", " k = 0\n", " \n", " # Copy initial point to primal variable history\n", " n = len(x0)\n", " x.append(x0)\n", " \n", " # Evaluate objective and constraints at initial point\n", " f.append(calc_f(x0))\n", " h.append(calc_h(x0))\n", " \n", " # Determine number of equality constraints\n", " m = len(h[0])\n", " \n", " # Initial dual variables with vector of ones\n", " v.append(np.ones(m))\n", " \n", " # Print header for iteration information\n", " print(\"Iter. \\tf(x) \\t\\t||h(x)|| \\t||grad_L(x)|| \\t||dx|| \\t\\t||dv||\")\n", " \n", " while(flag and k < max_iter):\n", " \n", " # STEP 1. Construct KKT matrix\n", " \n", " if(k > 0):\n", " # Evaluate objective function\n", " f.append(calc_f(x[k]))\n", " \n", " # Evaluate constraint function\n", " h.append(calc_h(x[k]))\n", " \n", " # Evaluate objective gradient\n", " df.append(my_grad_approx(x[k],calc_f,1E-6))\n", " \n", " # Evaluate constraint Jacobian\n", " A.append(my_jac_approx(x[k],calc_h,1E-6))\n", " \n", " # Evaluate gradient of Lagrange function\n", " L_func = lambda x_ : calc_f(x_) + (calc_h(x_)).dot(v[k])\n", " L_grad = lambda x_ : my_grad_approx(x_,L_func,1E-6)\n", " dL.append(L_grad(x[k]))\n", " norm_dL = linalg.norm(dL[k])\n", " \n", " # Evaluate Hessian of Lagrange function\n", " W.append(my_hes_approx(x[k],L_grad,1E-6))\n", " \n", " if(verbose):\n", " print(\"*** k =\",k,\" ***\")\n", " print(\"x_k =\",x[k])\n", " print(\"v_k =\",v[k])\n", " print(\"f_k =\",f[k])\n", " print(\"df_k =\",df[k])\n", " print(\"h_k =\",h[k])\n", " print(\"A_k =\\n\",A[k])\n", " print(\"W_k =\\n\",W[k])\n", " print(\"\\n\")\n", " \n", " # Assemble KKT matrix\n", " KKT_top = np.concatenate((W[k],A[k]),axis=1)\n", " KKT_bot = np.concatenate((A[k].T,np.zeros((m,m))),axis=1)\n", " KKT = np.concatenate((KKT_top,KKT_bot),axis=0)\n", " \n", " if(verbose):\n", " print(\"KKT matrix =\\n\",KKT,\"\\n\")\n", " \n", " # Check if KKT matrix is singular\n", " l, eigvec = linalg.eig(KKT)\n", " \n", " if(verbose):\n", " print(\"KKT matrix eigenvalues:\")\n", " print(l)\n", " \n", " zero_eigenvalues = sum(np.abs(l) <= 1E-8)\n", " \n", " if(zero_eigenvalues > 0):\n", " flag = False\n", " print(\"KKT matrix is singular. Eigenvalues:\\n\")\n", " print(l,\"\\n\")\n", " \n", " ## STEP 2. Solve linear system.\n", " \n", " if(flag):\n", " b = -np.concatenate((dL[k],h[k]),axis=0)\n", " z = linalg.solve(KKT,b)\n", " else:\n", " z = []\n", " \n", " ## STEP 3. Take step\n", " if(flag):\n", " dx = z[0:n]\n", " dv = z[n:(n+m+1)]\n", " \n", " x.append(x[k] + dx)\n", " v.append(v[k] + dv)\n", " \n", " norm_dx = linalg.norm(dx)\n", " norm_dv = linalg.norm(dv)\n", " \n", " ## Print iteration information\n", " print(k,' \\t{0: 1.4e} \\t{1:1.4e} \\t{2:1.4e}'.format(f[k],linalg.norm(h[k]),norm_dL),end='')\n", " \n", " if flag:\n", " print(' \\t{0: 1.4e} \\t{1: 1.4e}'.format(norm_dx,norm_dv),end='\\n')\n", " else:\n", " print(' \\t ------- \\t -------',end='\\n')\n", " \n", " # Increment counter\n", " k = k + 1\n", " \n", " ## Check convergence criteria\n", " if(flag):\n", " flag = norm_dx > eps1 and norm_dv > eps1 and norm_dL > eps2\n", " \n", " if (not flag) and k >= max_iter:\n", " print(\"Reached maximum number of iterations.\")\n", " \n", " return x,v,f,h,df,dL,A,W" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[4.7.3 Example Problem 1](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.3-Example-Problem-1)", "section": "4.7.3 Example Problem 1" } }, "source": [ "## 4.7.3 Example Problem 1\n", "\n", "Consider:\n", "\n", "$$\\begin{align*} \\min_{x} \\quad & x_1^2 + 2 x_2^2 - x_3 \\\\\n", "\\mathrm{s.t.} \\quad & x_1 + x_2 = 1 \\\\\n", "& x_1 + x_2 - x_3 = 5\n", "\\end{align*} $$\n", "\n", "### Define Functions" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "nbpages": { "level": 2, "link": "[4.7.3 Example Problem 1](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.3-Example-Problem-1)", "section": "4.7.3 Example Problem 1" } }, "outputs": [], "source": [ "def my_f(x):\n", " return x[0]**2 + 2*x[1]**2 - 1*x[2]\n", "\n", "def my_h(x):\n", " h = np.zeros(2)\n", " \n", " h[0] = x[0] + x[1] - 1\n", " h[1] = x[0] + x[1] - x[2] - 5\n", " \n", " return h" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[4.7.3.1 Test Finite Difference Approximations](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.3.1-Test-Finite-Difference-Approximations)", "section": "4.7.3.1 Test Finite Difference Approximations" } }, "source": [ "### 4.7.3.1 Test Finite Difference Approximations" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "nbpages": { "level": 3, "link": "[4.7.3.1 Test Finite Difference Approximations](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.3.1-Test-Finite-Difference-Approximations)", "section": "4.7.3.1 Test Finite Difference Approximations" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "f(x0) = 2 \n", "\n", "h(x0) = [ 1. -4.] \n", "\n", "df(x0) = [ 2. 4. -1.] \n", "\n", "dh(x0) =\n", " [[ 1. 1.]\n", " [ 1. 1.]\n", " [ 0. -1.]] \n", "\n" ] } ], "source": [ "## Define initial point\n", "x0 = np.array([1,1,1])\n", "\n", "## Calculate objective\n", "print(\"f(x0) =\",my_f(x0),\"\\n\")\n", "\n", "## Calculate constraints\n", "print(\"h(x0) =\",my_h(x0),\"\\n\")\n", "\n", "## Calculate objective gradient\n", "print(\"df(x0) =\",my_grad_approx(x0,my_f,1E-6),\"\\n\")\n", "\n", "## Calculate constraint Jacobian\n", "print(\"dh(x0) =\\n\",my_jac_approx(x0,my_h,1E-6),\"\\n\")" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[4.7.3.2 Test Algorithm 5.1](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.3.2-Test-Algorithm-5.1)", "section": "4.7.3.2 Test Algorithm 5.1" } }, "source": [ "### 4.7.3.2 Test Algorithm 5.1" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "nbpages": { "level": 3, "link": "[4.7.3.2 Test Algorithm 5.1](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.3.2-Test-Algorithm-5.1)", "section": "4.7.3.2 Test Algorithm 5.1" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter. \tf(x) \t\t||h(x)|| \t||grad_L(x)|| \t||dx|| \t\t||dv||\n", "0 \t 2.0000e+00 \t4.1231e+00 \t7.4833e+00 \t 5.0553e+00 \t 2.4040e+00\n", "1 \t 4.6667e+00 \t5.7632e-10 \t8.2956e-04 \t 1.5000e-04 \t 6.2903e-04\n", "2 \t 4.6667e+00 \t0.0000e+00 \t1.4762e-08 \t 1.9888e-09 \t 8.1407e-09\n", "\n", "x* = [ 0.66666667 0.33333333 -4. ]\n", "\n", "v* = [-0.33333333 -1. ]\n" ] } ], "source": [ "## Run Algorithm 5.1 on test problem\n", "results = alg51(x0,my_f,my_h)\n", "\n", "## Display results\n", "xstar = results[0][-1]\n", "print(\"\\nx* =\",xstar)\n", "\n", "## Display results\n", "vstar = results[1][-1]\n", "print(\"\\nv* =\",vstar)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[4.7.4 Example Problem 2](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.4-Example-Problem-2)", "section": "4.7.4 Example Problem 2" } }, "source": [ "## 4.7.4 Example Problem 2\n", "\n", "**Can we break Algorithm 5.1?**\n", "\n", "Probably. Let us try a model where $\\nabla h(x^k)^T$ is always rank-deficient.\n", "\n", "Consider:\n", "$$\\begin{align}\\min_x \\quad & x_1^2 + 2 x_2^2 \\\\\n", "\\mathrm{s.t.} \\quad & x_1 + x_2 = 1 \\\\\n", " & x_1 + x_2 = 1 \\end{align}$$\n", " \n", "### Test Algorithm 5.1 with the redundant constraint" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "nbpages": { "level": 2, "link": "[4.7.4 Example Problem 2](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.4-Example-Problem-2)", "section": "4.7.4 Example Problem 2" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter. \tf(x) \t\t||h(x)|| \t||grad_L(x)|| \t||dx|| \t\t||dv||\n", "KKT matrix is singular. Eigenvalues:\n", "\n", "[-1.05145076+0.j 2.51704031+0.j 4.53361158+0.j 0. +0.j] \n", "\n", "0 \t 3.0000e+00 \t1.4142e+00 \t7.2111e+00 \t ------- \t -------\n", "\n", "x* = [1 1]\n", "\n", "v* = [1. 1.]\n" ] } ], "source": [ "def my_f2(x):\n", " return x[0]**2 + 2*x[1]**2\n", "\n", "def my_h2(x):\n", " h = np.zeros(2)\n", " h[0] = x[0] + x[1] - 1\n", " h[1] = h[0]\n", " return h\n", "\n", "x0 = np.array((1,1))\n", "\n", "## Run Algorithm 5.1 on test problem\n", "results = alg51(x0,my_f2,my_h2)\n", "\n", "## Display results\n", "xstar = results[0][-1]\n", "print(\"\\nx* =\",xstar)\n", "\n", "## Display results\n", "vstar = results[1][-1]\n", "print(\"\\nv* =\",vstar)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[4.7.4.1 Trying Algorithm 5.1 again without the redundant constraint](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.4.1-Trying-Algorithm-5.1-again-without-the-redundant-constraint)", "section": "4.7.4.1 Trying Algorithm 5.1 again without the redundant constraint" } }, "source": [ "### 4.7.4.1 Trying Algorithm 5.1 again without the redundant constraint" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "nbpages": { "level": 3, "link": "[4.7.4.1 Trying Algorithm 5.1 again without the redundant constraint](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.4.1-Trying-Algorithm-5.1-again-without-the-redundant-constraint)", "section": "4.7.4.1 Trying Algorithm 5.1 again without the redundant constraint" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter. \tf(x) \t\t||h(x)|| \t||grad_L(x)|| \t||dx|| \t\t||dv||\n", "0 \t 3.0000e+00 \t1.0000e+00 \t5.8310e+00 \t 7.4537e-01 \t 2.3335e+00\n", "1 \t 6.6667e-01 \t1.3978e-10 \t2.9473e-04 \t 4.5326e-05 \t 1.5285e-04\n", "2 \t 6.6667e-01 \t0.0000e+00 \t4.5431e-09 \t 1.4393e-09 \t 2.0170e-09\n", "\n", "x* = [0.66666667 0.33333333]\n", "\n", "v* = [-1.33333333]\n" ] } ], "source": [ "def my_h2b(x):\n", " return (x[0] + x[1] - 1)*np.ones(1)\n", "\n", "x0 = np.array((1,1))\n", "\n", "## Run Algorithm 5.1 on test problem\n", "results = alg51(x0,my_f2,my_h2b)\n", "\n", "## Display results\n", "xstar = results[0][-1]\n", "print(\"\\nx* =\",xstar)\n", "\n", "## Display results\n", "vstar = results[1][-1]\n", "print(\"\\nv* =\",vstar)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 2, "link": "[4.7.5 Example Problem 3](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5-Example-Problem-3)", "section": "4.7.5 Example Problem 3" } }, "source": [ "## 4.7.5 Example Problem 3\n", "\n", "**Can we break Algorithm 5.1 in another way?**\n", "\n", "Let us try a model where $\\nabla h(x^k)^T$ is full rank but there are multiple local optima.\n", "\n", "Consider:\n", "$$\\begin{align}\\min_x \\quad & x_1^3 - x_2 -x_1 x_2 - x_2^2 \\\\\n", "\\mathrm{s.t.} \\quad & x_1^2 + x_2^2 = 1\n", "\\end{align}$$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "nbpages": { "level": 2, "link": "[4.7.5 Example Problem 3](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5-Example-Problem-3)", "section": "4.7.5 Example Problem 3" } }, "outputs": [], "source": [ "def my_f3(x):\n", " return x[0]**3 - x[1] - x[0]*x[1] - x[1]**2\n", "\n", "def my_h3(x):\n", " return (x[0]**2 + x[1]**2 - 1)*np.ones(1)" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.1 Visualize](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.1-Visualize)", "section": "4.7.5.1 Visualize" } }, "source": [ "### 4.7.5.1 Visualize" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.1 Visualize](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.1-Visualize)", "section": "4.7.5.1 Visualize" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def visualize(xk=[]):\n", " n1 = 101\n", " n2 = 101\n", " x1eval = np.linspace(-2,2,n1)\n", " x2eval = np.linspace(-2,2,n2)\n", " \n", " X, Y = np.meshgrid(x1eval, x2eval)\n", " \n", " Z = np.zeros([n2,n1])\n", " \n", " for i in range(0,n1):\n", " for j in range(0,n2):\n", " Z[j,i] = my_f3((X[j,i], Y[j,i]))\n", " \n", " fig, ax = plt.subplots(1,1)\n", " CS = ax.contour(X, Y, Z)\n", " ax.clabel(CS, inline=1, fontsize=12)\n", "\n", " # Add grid\n", " plt.grid()\n", " \n", " # Add unit circle\n", " circ = plt.Circle((0, 0), radius=1, edgecolor='b', facecolor='None')\n", " ax.add_patch(circ)\n", " \n", " # Plot iteration history\n", " if len(xk) > 0:\n", " for i in range(0,len(xk)):\n", " if i == len(xk) - 1:\n", " c = \"red\"\n", " else:\n", " c = \"black\"\n", " plt.scatter((xk[i][0]),(xk[i][1]),marker='o',color=c)\n", " \n", " plt.xlim([-2,2])\n", " plt.ylim([-2,2])\n", " \n", "visualize()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.1 Visualize](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.1-Visualize)", "section": "4.7.5.1 Visualize" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "nt = 200\n", "theta = np.linspace(0,2*np.pi,nt)\n", "obj = np.zeros(nt)\n", "\n", "\n", "for i in range(0,nt):\n", " x_ = np.cos(theta[i])\n", " y_ = np.sin(theta[i])\n", " \n", " obj[i] = my_f3((x_,y_))\n", "\n", "\n", "plt.figure()\n", "plt.plot(theta,obj)\n", "plt.xlabel('$\\\\theta$ [radians]')\n", "plt.ylabel('Objective')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.2 Starting Point Near Global Min ($\\theta_0 = 1.0$)](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.2-Starting-Point-Near-Global-Min-($\\theta_0-=-1.0$))", "section": "4.7.5.2 Starting Point Near Global Min ($\\theta_0 = 1.0$)" } }, "source": [ "### 4.7.5.2 Starting Point Near Global Min ($\\theta_0 = 1.0$)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.2 Starting Point Near Global Min ($\\theta_0 = 1.0$)](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.2-Starting-Point-Near-Global-Min-($\\theta_0-=-1.0$))", "section": "4.7.5.2 Starting Point Near Global Min ($\\theta_0 = 1.0$)" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter. \tf(x) \t\t||h(x)|| \t||grad_L(x)|| \t||dx|| \t\t||dv||\n", "0 \t-6.9105e-01 \t0.0000e+00 \t3.7501e+00 \t 1.1171e+00 \t 1.1455e+00\n", "1 \t-4.0104e+00 \t1.2480e+00 \t2.1729e+00 \t 4.2318e-01 \t 3.9672e-01\n", "2 \t-2.4216e+00 \t1.7908e-01 \t3.3575e-01 \t 8.3649e-02 \t 1.0205e-01\n", "3 \t-2.1438e+00 \t6.9971e-03 \t1.7074e-02 \t 3.5294e-03 \t 6.5710e-03\n", "4 \t-2.1324e+00 \t1.2457e-05 \t4.6327e-05 \t 6.3597e-06 \t 1.9707e-05\n", "5 \t-2.1323e+00 \t4.0446e-11 \t1.4043e-09 \t 2.8044e-10 \t 3.3891e-11\n", "\n", "x* = [0.24215301 0.97023807]\n", "\n", "v* = [1.64012795]\n", "\n", "theta* = 1.326212035697004 = 1.3262120356970035\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "theta0 = 1.0\n", "x0 = np.array((np.sin(theta0),np.cos(theta0)))\n", "\n", "## Run Algorithm 5.1 on test problem\n", "results = alg51(x0,my_f3,my_h3)\n", "\n", "## Display results\n", "xstar = results[0][-1]\n", "print(\"\\nx* =\",xstar)\n", "\n", "## Display results\n", "vstar = results[1][-1]\n", "print(\"\\nv* =\",vstar)\n", "\n", "## Convert into theta\n", "print(\"\\ntheta* =\",np.arccos(xstar[0]),\"=\",np.arcsin(xstar[1]))\n", "\n", "## Visualize\n", "visualize(results[0])" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.3 Starting Point Near Local Min ($\\theta_0 = \\pi$)](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.3-Starting-Point-Near-Local-Min-($\\theta_0-=-\\pi$))", "section": "4.7.5.3 Starting Point Near Local Min ($\\theta_0 = \\pi$)" } }, "source": [ "### 4.7.5.3 Starting Point Near Local Min ($\\theta_0 = \\pi$)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.3 Starting Point Near Local Min ($\\theta_0 = \\pi$)](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.3-Starting-Point-Near-Local-Min-($\\theta_0-=-\\pi$))", "section": "4.7.5.3 Starting Point Near Local Min ($\\theta_0 = \\pi$)" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter. \tf(x) \t\t||h(x)|| \t||grad_L(x)|| \t||dx|| \t\t||dv||\n", "0 \t 2.2204e-16 \t0.0000e+00 \t1.4142e+00 \t 5.0002e-01 \t 2.4998e-01\n", "1 \t-6.2504e-01 \t2.5002e-01 \t1.0000e+00 \t 1.5691e+00 \t 5.7493e-01\n", "2 \t 1.4168e+00 \t2.4621e+00 \t4.6902e+00 \t 8.7011e-01 \t 3.2838e-01\n", "3 \t-2.5316e-01 \t7.5709e-01 \t1.5056e+00 \t 7.9530e-01 \t 2.7969e-01\n", "4 \t-1.0868e+00 \t6.3250e-01 \t1.3374e+00 \t 8.5429e-01 \t 2.8370e-01\n", "5 \t-1.3530e-01 \t7.2981e-01 \t1.6069e+00 \t 7.2946e-01 \t 2.4685e-01\n", "6 \t-8.5883e-01 \t5.3212e-01 \t1.1571e+00 \t 1.2138e+00 \t 4.1547e-01\n", "7 \t 6.1712e-01 \t1.4732e+00 \t3.1780e+00 \t 7.4184e-01 \t 2.5345e-01\n", "8 \t-3.7711e-01 \t5.5033e-01 \t1.1886e+00 \t 1.1024e+00 \t 3.7605e-01\n", "9 \t-2.5016e+00 \t1.2153e+00 \t2.6283e+00 \t 7.1193e-01 \t 2.4266e-01\n", "10 \t-7.5418e-01 \t5.0685e-01 \t1.0966e+00 \t 1.7975e+00 \t 6.1304e-01\n", "11 \t 3.3538e+00 \t3.2310e+00 \t6.9879e+00 \t 9.7525e-01 \t 3.3253e-01\n", "12 \t 5.8930e-02 \t9.5111e-01 \t2.0572e+00 \t 6.9821e-01 \t 2.3817e-01\n", "13 \t-6.1495e-01 \t4.8750e-01 \t1.0543e+00 \t 1.4259e+01 \t 4.8624e+00\n", "14 \t 2.5068e+03 \t2.0332e+02 \t4.3978e+02 \t 7.1129e+00 \t 1.9921e+00\n", "15 \t 3.1998e+02 \t5.0594e+01 \t1.0966e+02 \t 3.5283e+00 \t 1.0103e+00\n", "16 \t 4.2333e+01 \t1.2449e+01 \t2.7524e+01 \t 1.7008e+00 \t 4.4931e-02\n", "17 \t 7.8208e+00 \t2.8927e+00 \t6.7410e+00 \t 7.3461e-01 \t 8.5778e-02\n", "18 \t 2.3007e+00 \t5.3965e-01 \t1.6085e+00 \t 2.1789e-01 \t 2.8153e-01\n", "19 \t 1.4550e+00 \t4.7477e-02 \t2.3141e-01 \t 2.3326e-02 \t 8.3222e-02\n", "20 \t 1.3796e+00 \t5.4409e-04 \t5.3572e-03 \t 2.8876e-04 \t 2.4477e-03\n", "21 \t 1.3787e+00 \t8.3383e-08 \t1.4706e-06 \t 1.0427e-07 \t 5.7736e-07\n", "\n", "x* = [ 0.92828695 -0.37186469]\n", "\n", "v* = [-1.59272661]\n", "\n", "theta* = 0.3810169551495443 (using arccos)\n", "\n", "theta* = -0.3810169551495601 (using arcsin)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "theta0 = np.pi\n", "x0 = np.array((np.sin(theta0),np.cos(theta0)))\n", "\n", "## Run Algorithm 5.1 on test problem\n", "results = alg51(x0,my_f3,my_h3)\n", "\n", "## Display results\n", "xstar = results[0][-1]\n", "print(\"\\nx* =\",xstar)\n", "\n", "## Display results\n", "vstar = results[1][-1]\n", "print(\"\\nv* =\",vstar)\n", "\n", "## Convert into theta\n", "print(\"\\ntheta* =\",np.arccos(xstar[0]),\"(using arccos)\")\n", "print(\"\\ntheta* =\",np.arcsin(xstar[1]),\"(using arcsin)\")\n", "\n", "## Visualize\n", "visualize(results[0])" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.4 Starting Point Near Global Max ($\\theta_0 = 5.5$)](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.4-Starting-Point-Near-Global-Max-($\\theta_0-=-5.5$))", "section": "4.7.5.4 Starting Point Near Global Max ($\\theta_0 = 5.5$)" } }, "source": [ "### 4.7.5.4 Starting Point Near Global Max ($\\theta_0 = 5.5$)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.4 Starting Point Near Global Max ($\\theta_0 = 5.5$)](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.4-Starting-Point-Near-Global-Max-($\\theta_0-=-5.5$))", "section": "4.7.5.4 Starting Point Near Global Max ($\\theta_0 = 5.5$)" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter. \tf(x) \t\t||h(x)|| \t||grad_L(x)|| \t||dx|| \t\t||dv||\n", "0 \t-1.0621e+00 \t0.0000e+00 \t6.9215e-01 \t 3.0715e-01 \t 5.4165e-02\n", "1 \t-1.0667e+00 \t9.4343e-02 \t1.2087e-01 \t 5.8624e-02 \t 5.2391e-02\n", "2 \t-9.6641e-01 \t3.4368e-03 \t6.8422e-03 \t 5.8274e-03 \t 6.8831e-03\n", "3 \t-9.6261e-01 \t3.3959e-05 \t8.0237e-05 \t 9.3484e-05 \t 8.7639e-05\n", "4 \t-9.6258e-01 \t8.7393e-09 \t2.1977e-08 \t 2.1636e-08 \t 2.4039e-08\n", "\n", "x* = [-0.90194813 0.43184437]\n", "\n", "v* = [1.11352685]\n", "\n", "theta* = 2.6950559970723194 (using arccos)\n", "\n", "theta* = 0.4465366565174743 (using arcsin)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "theta0 = 5.5\n", "x0 = np.array((np.sin(theta0),np.cos(theta0)))\n", "\n", "## Run Algorithm 5.1 on test problem\n", "results = alg51(x0,my_f3,my_h3)\n", "\n", "## Display results\n", "xstar = results[0][-1]\n", "print(\"\\nx* =\",xstar)\n", "\n", "## Display results\n", "vstar = results[1][-1]\n", "print(\"\\nv* =\",vstar)\n", "\n", "## Convert into theta\n", "print(\"\\ntheta* =\",np.arccos(xstar[0]),\"(using arccos)\")\n", "print(\"\\ntheta* =\",np.arcsin(xstar[1]),\"(using arcsin)\")\n", "\n", "## Visualize\n", "visualize(results[0])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "nbpages": { "level": 3, "link": "[4.7.5.4 Starting Point Near Global Max ($\\theta_0 = 5.5$)](https://ndcbe.github.io/CBE60499/04.07-Interior-Point1.html#4.7.5.4-Starting-Point-Near-Global-Max-($\\theta_0-=-5.5$))", "section": "4.7.5.4 Starting Point Near Global Max ($\\theta_0 = 5.5$)" } }, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "18917385", "metadata": {}, "source": [ "\n", "< [4.6 NLP Diagnostics with Degeneracy Hunter](https://ndcbe.github.io/CBE60499/04.06-NLP-Diagnostics.html) | [Contents](toc.html) | [Tag Index](tag_index.html) | [4.8 Inertia-Corrected Netwon Method for Equality Constrained NLPs](https://ndcbe.github.io/CBE60499/04.08-Interior-Point2.html) >

\"Open

\"Download\"" ] } ], "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.8.6" } }, "nbformat": 4, "nbformat_minor": 2 }