{ "cells": [ { "cell_type": "markdown", "source": [ "# Minimal Robust Positively Invariant Set" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "### Introduction" ], "metadata": {} }, { "cell_type": "markdown", "source": [ "In this example, we implement the method presented in [RKKM05] to compute a robust positively invariant polytope of a linear system under a disturbance bounded by a polytopic set.\n", "\n", "We consider the example given in equation (15) of [RKKM05]:\n", "$$\n", "x^+ =\n", "\\begin{bmatrix}\n", " 1 & 1\\\\\n", " 0 & 1\n", "\\end{bmatrix}x +\n", "\\begin{bmatrix}\n", " 1\\\\\n", " 1\n", "\\end{bmatrix} u\n", "+ w\n", "$$\n", "with the state feedback control $u(x) = -\\begin{bmatrix}1.17 & 1.03\\end{bmatrix} x$.\n", "The controlled system is therefore\n", "$$\n", "x^+ =\n", "\\left(\\begin{bmatrix}\n", " 1 & 1\\\\\n", " 0 & 1\n", "\\end{bmatrix} -\n", "\\begin{bmatrix}\n", " 1\\\\\n", " 1\n", "\\end{bmatrix}\n", "\\begin{bmatrix}1.17 & 1.03\\end{bmatrix}\\right)x\n", "+ w =\n", "\\begin{bmatrix}\n", " -0.17 & -0.03\\\\\n", " -1.17 & -0.03\n", "\\end{bmatrix}x\n", "+ w.\n", "$$\n", "\n", "[RKKM05] Sasa V. Rakovic, Eric C. Kerrigan, Konstantinos I. Kouramas, David Q. Mayne *Invariant approximations of the minimal robust positively Invariant set*. IEEE Transactions on Automatic Control 50 (**2005**): 406-410." ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "2×2 Array{Float64,2}:\n -0.17 -0.03\n -1.17 -0.03" }, "metadata": {}, "execution_count": 1 } ], "cell_type": "code", "source": [ "A = [1 1; 0 1] - [1; 1] * [1.17 1.03]" ], "metadata": {}, "execution_count": 1 }, { "cell_type": "markdown", "source": [ "The set of disturbance is the unit ball of the infinity norm." ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "V-representation Polyhedra.PointsHull{Float64,Array{Float64,1},Int64}:\n4-element iterator of Array{Float64,1}:\n [-1.0, -1.0]\n [-1.0, 1.0]\n [1.0, -1.0]\n [1.0, 1.0]" }, "metadata": {}, "execution_count": 2 } ], "cell_type": "code", "source": [ "using Polyhedra\n", "Wv = vrep([[x, y] for x in [-1.0, 1.0] for y in [-1.0, 1.0]])" ], "metadata": {}, "execution_count": 2 }, { "cell_type": "markdown", "source": [ "We will use the default library for this example but feel free to pick any other library from [this list of available libraries](https://juliapolyhedra.github.io/) such as [CDDLib](https://github.com/JuliaPolyhedra/CDDLib.jl).\n", "The LP solver used to detect redundant points in the V-representation is [GLPK](https://github.com/JuliaOpt/GLPK.jl). Again, you can replace it with any other solver listed [here](http://jump.dev/JuMP.jl/dev/installation/#Getting-Solvers-1) that supports LP." ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Polyhedron DefaultPolyhedron{Float64,Polyhedra.Intersection{Float64,Array{Float64,1},Int64},Polyhedra.Hull{Float64,Array{Float64,1},Int64}}:\n4-element iterator of Array{Float64,1}:\n [-1.0, -1.0]\n [-1.0, 1.0]\n [1.0, -1.0]\n [1.0, 1.0]" }, "metadata": {}, "execution_count": 3 } ], "cell_type": "code", "source": [ "using GLPK\n", "using JuMP\n", "lib = DefaultLibrary{Float64}(GLPK.Optimizer)\n", "W = polyhedron(Wv, lib)" ], "metadata": {}, "execution_count": 3 }, { "cell_type": "markdown", "source": [ "The $F_s$ function of equation (2) of [RKKM05] can be implemented as follows." ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Fs (generic function with 2 methods)" }, "metadata": {}, "execution_count": 4 } ], "cell_type": "code", "source": [ "function Fs(s::Integer, verbose=1)\n", " @assert s ≥ 1\n", " F = W\n", " A_W = W\n", " for i in 1:(s-1)\n", " A_W = A * A_W\n", " F += A_W\n", " if verbose ≥ 1\n", " println(\"Number of points after adding A^$i * W: \", npoints(F))\n", " end\n", " removevredundancy!(F)\n", " if verbose ≥ 1\n", " println(\"Number of points after removing redundant ones: \", npoints(F))\n", " end\n", " end\n", " return F\n", "end" ], "metadata": {}, "execution_count": 4 }, { "cell_type": "markdown", "source": [ "We can see below that only the V-representation is computed. In fact, no H-representation was ever computed during `Fs`. Computing $AW$ is done by multiplying all the points by $A$ and doing the Minkowski sum is done by summing each pair of points. The redundancy removal is carried out by CDD's internal LP solver." ], "metadata": {} }, { "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of points after adding A^1 * W: 16\n", "Number of points after removing redundant ones: 8\n", "Number of points after adding A^2 * W: 32\n", "Number of points after removing redundant ones: 12\n", "Number of points after adding A^3 * W: 48\n", "Number of points after removing redundant ones: 16\n", " 9.059260 seconds (32.94 M allocations: 1.741 GiB, 10.65% gc time)\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "Polyhedron DefaultPolyhedron{Float64,Polyhedra.Intersection{Float64,Array{Float64,1},Int64},Polyhedra.Hull{Float64,Array{Float64,1},Int64}}:\n16-element iterator of Array{Float64,1}:\n [-1.29, -2.56]\n [-0.71, 2.56]\n [-0.95, 1.78]\n [-0.898, 2.032]\n [-0.9022, 2.0158]\n [-0.938, 1.852]\n [-0.77, 2.5]\n [-1.29, -0.56]\n [1.29, 0.56]\n [0.77, -2.5]\n [0.938, -1.852]\n [0.9022, -2.0158]\n [0.898, -2.032]\n [0.95, -1.78]\n [0.71, -2.56]\n [1.29, 2.56]" }, "metadata": {}, "execution_count": 5 } ], "cell_type": "code", "source": [ "@time Fs(4)" ], "metadata": {}, "execution_count": 5 }, { "cell_type": "markdown", "source": [ "The Figure 1 of [RKKM05] can be reproduced as follows:" ], "metadata": {} }, { "outputs": [], "cell_type": "code", "source": [ "using Plots\n", "plot()\n", "for i in 10:-1:1\n", " plot!(Fs(i, 0))\n", "end" ], "metadata": {}, "execution_count": 6 }, { "cell_type": "markdown", "source": [ "The cell needs to return the plot for it to be displayed\n", "but the `for` loop returns `nothing` so we add this dummy `plot!` that returns the plot" ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=10}", "image/png": "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", "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ], "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "execution_count": 7 } ], "cell_type": "code", "source": [ "plot!()" ], "metadata": {}, "execution_count": 7 }, { "cell_type": "markdown", "source": [ "Now, suppose we want to compute an invariant set by scaling $F_s$ by the appropriate $\\alpha$.\n", "In equation (11) of [RKKM05], we want to check whether $A^s W \\subseteq \\alpha W$ which is equivalent to $W \\subseteq \\alpha A^{-s} W$.\n", "Note that `A^s \\ W` triggers the computation of the H-representation of `W` and `A_W` is H-represented." ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "αo (generic function with 1 method)" }, "metadata": {}, "execution_count": 8 } ], "cell_type": "code", "source": [ "function αo(s)\n", " A_W = A^s \\ W\n", " hashyperplanes(A_W) && error(\"HyperPlanes not supported\")\n", " return maximum([Polyhedra.support_function(h.a, W) / h.β for h in halfspaces(A_W)])\n", "end" ], "metadata": {}, "execution_count": 8 }, { "cell_type": "markdown", "source": [ "We obtain $\\alpha \\approx 1.9 \\cdot 10^{-5}$ like in [RKKM05]." ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "1.919070000000001e-5" }, "metadata": {}, "execution_count": 9 } ], "cell_type": "code", "source": [ "α = αo(10)" ], "metadata": {}, "execution_count": 9 }, { "cell_type": "markdown", "source": [ "The scaled set is is the following:" ], "metadata": {} }, { "outputs": [ { "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=1}", "image/png": "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", "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ], "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "execution_count": 10 } ], "cell_type": "code", "source": [ "using Plots\n", "plot((1 - α)^(-1) * Fs(10, 0))" ], "metadata": {}, "execution_count": 10 }, { "cell_type": "markdown", "source": [ "---\n", "\n", "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*" ], "metadata": {} } ], "nbformat_minor": 3, "metadata": { "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.0.5" }, "kernelspec": { "name": "julia-1.0", "display_name": "Julia 1.0.5", "language": "julia" } }, "nbformat": 4 }