{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "trymosek.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "Ueow-AI7gR0L" }, "source": [ "# MOSEK in Python online demo\n", "\n", "You can run this notebook in Google Colab (or any other environment that provides ``!pip install``) as is. There is no need to install a license or anything else.\n", "\n", "The optimization will be performed on https://solve.mosek.com/." ] }, { "cell_type": "code", "metadata": { "id": "_ZpMkdiQ_kBw" }, "source": [ "# Install MOSEK if not already installed\n", "!pip install mosek" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "d3cCd6K_ARrJ" }, "source": [ "# In this example we use the Fusion API\n", "# https://docs.mosek.com/latest/pythonfusion/index.html\n", "# One could also use the lower level Optimizer API for Python\n", "# https://docs.mosek.com/latest/pythonapi/index.html\n", "from mosek.fusion import *\n", "import sys\n", "import numpy as np\n", "\n", "# Set up a very simple linear regression problem for demonstration\n", "def mosek_least_squares(m, n, A, b, log):\n", " M = Model()\n", " x = M.variable(n)\n", " t = M.variable()\n", "\n", " # t >= ||Ax-b||_2\n", " M.constraint(Expr.vstack(t, Expr.sub(Expr.mul(A, x), b)),\n", " Domain.inQCone())\n", " \n", " M.objective(ObjectiveSense.Minimize, t)\n", "\n", " # Use the online demo optimization server\n", " M.optserverHost(\"http://solve.mosek.com:30080\") \n", " M.setLogHandler(sys.stdout if log else None)\n", " M.solve()\n", "\n", " print(\"Problem status: {prosta}\".format(prosta=M.getProblemStatus()))\n", " print(\"residual: {t}\".format(t=t.level()[0]))\n", "\n", " if M.getProblemStatus() == ProblemStatus.PrimalAndDualFeasible:\n", " return x.level()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "SoN82ezKk0rT", "outputId": "c1014dfa-1a9d-45f7-ab95-ed7d0ac91e06" }, "source": [ "# Random example\n", "m, n = 20, 15\n", "A = np.random.randn(m, n)\n", "b = np.random.randn(m)\n", "\n", "x = mosek_least_squares(m, n, A, b, False)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Problem status: ProblemStatus.PrimalAndDualFeasible\n", "residual: 1.5633248125910382\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 333 }, "id": "Fs_f-nu-lHZF", "outputId": "5e21aabf-6a0d-456a-cfa7-e639b39958b3" }, "source": [ "# 2-dimensional example with intercept\n", "m = 30\n", "X = np.random.rand(m)\n", "Y = 3 * X + 1 + 0.5*(np.random.rand(m)-0.5)\n", "\n", "a = mosek_least_squares(m, 2, np.vstack((X,np.ones(m))).transpose(), Y, False)\n", "\n", "print(\"Regression line: {0:.3f} x + {1:.3f}\".format(a[0], a[1]))\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "d = np.linspace(0, 1, 2)\n", "plt.scatter(X, Y)\n", "plt.plot(d, a[0] * d + a[1])" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Problem status: ProblemStatus.PrimalAndDualFeasible\n", "residual: 0.689564246467142\n", "Regression line: 2.902 x + 1.034\n" ], "name": "stdout" }, { "output_type": "execute_result", "data": { "text/plain": [ "[]" ] }, "metadata": { "tags": [] }, "execution_count": 4 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "JAe5oo5Bo4I4" }, "source": [ "# What now?\n", "\n", "The demo service at https://solve.mosek.com has size limitations. If you want to use MOSEK on your own grab and install a [trial](https://www.mosek.com/try/) or [academic](https://www.mosek.com/products/academic-licenses/) license and remove the call to ``M.optserverHost`` to optimize locally.\n", "\n", "Alternatively, install your own [OptServer](https://github.com/MOSEK/Dockerfiles/tree/master/optserver-demo), install a license there, and redirect to it in the ``M.optserverHost`` call." ] } ] }