{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "66d116d6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-02T14:41:05.146753Z",
     "iopub.status.busy": "2026-10-02T14:41:05.146555Z",
     "iopub.status.idle": "2026-10-02T14:41:05.150743Z",
     "shell.execute_reply": "2026-10-02T14:41:05.150148Z"
    },
    "hide_input": true,
    "papermill": {
     "duration": 0.006584,
     "end_time": "2026-10-02T14:41:05.151396+00:00",
     "exception": false,
     "start_time": "2026-10-02T14:41:05.144812+00:00",
     "status": "completed"
    },
    "tags": [
     "active-ipynb",
     "remove-input",
     "remove-output"
    ]
   },
   "outputs": [],
   "source": [
    "try:\n",
    "    from openmdao.utils.notebook_utils import notebook_mode  # noqa: F401\n",
    "except ImportError:\n",
    "    !python -m pip install openmdao[notebooks]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8361d97d",
   "metadata": {
    "papermill": {
     "duration": 0.000947,
     "end_time": "2026-10-02T14:41:05.153603+00:00",
     "exception": false,
     "start_time": "2026-10-02T14:41:05.152656+00:00",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Optimizing a Paraboloid – The TL;DR Version"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3b90855c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-02T14:41:05.204996Z",
     "iopub.status.busy": "2026-10-02T14:41:05.204802Z",
     "iopub.status.idle": "2026-10-02T14:41:07.823755Z",
     "shell.execute_reply": "2026-10-02T14:41:07.822584Z"
    },
    "papermill": {
     "duration": 2.669723,
     "end_time": "2026-10-02T14:41:07.824301+00:00",
     "exception": false,
     "start_time": "2026-10-02T14:41:05.154578+00:00",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1790952067.782862] [runnervm8df0l:6288 :0]        ib_iface.c:1269 UCX  ERROR mana_0: iface 0x561647ad10c0 failed to create UD QP TX wr:256 sge:6 inl:64 resp:0 RX wr:4096 sge:1 resp:0 failed: Operation not supported\n",
      "[1790952067.783112] [runnervm8df0l:6288 :0]      ucp_worker.c:1412 UCX  ERROR uct_iface_open(ud_verbs/mana_0:1) failed: Input/output error\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization terminated successfully    (Exit mode 0)\n",
      "            Current function value: -27.33333333333333\n",
      "            Iterations: 5\n",
      "            Function evaluations: 6\n",
      "            Gradient evaluations: 5\n",
      "Optimization Complete\n",
      "-----------------------------------\n",
      "[-27.33333333]\n",
      "[6.66666667]\n",
      "[-7.33333333]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[runnervm8df0l:06288] pml_ucx.c:313  Error: Failed to create UCP worker\n"
     ]
    }
   ],
   "source": [
    "import openmdao.api as om\n",
    "\n",
    "# build the model\n",
    "prob = om.Problem()\n",
    "\n",
    "prob.model.add_subsystem('paraboloid', om.ExecComp('f = (x-3)**2 + x*y + (y+4)**2 - 3'))\n",
    "\n",
    "# setup the optimization\n",
    "prob.driver = om.ScipyOptimizeDriver()\n",
    "prob.driver.options['optimizer'] = 'SLSQP'\n",
    "\n",
    "prob.model.add_design_var('paraboloid.x', lower=-50, upper=50)\n",
    "prob.model.add_design_var('paraboloid.y', lower=-50, upper=50)\n",
    "prob.model.add_objective('paraboloid.f')\n",
    "\n",
    "prob.setup()\n",
    "\n",
    "# Set initial values.\n",
    "prob.set_val('paraboloid.x', 3.0)\n",
    "prob.set_val('paraboloid.y', -4.0)\n",
    "\n",
    "# run the optimization\n",
    "prob.run_driver()\n",
    "\n",
    "# minimum value\n",
    "print(prob.get_val('paraboloid.f'))\n",
    "\n",
    "# location of the minimum\n",
    "print(prob.get_val('paraboloid.x'))\n",
    "print(prob.get_val('paraboloid.y'))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "20ad68dd",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-02T14:41:07.826943Z",
     "iopub.status.busy": "2026-10-02T14:41:07.826721Z",
     "iopub.status.idle": "2026-10-02T14:41:07.831524Z",
     "shell.execute_reply": "2026-10-02T14:41:07.831058Z"
    },
    "papermill": {
     "duration": 0.006632,
     "end_time": "2026-10-02T14:41:07.831939+00:00",
     "exception": false,
     "start_time": "2026-10-02T14:41:07.825307+00:00",
     "status": "completed"
    },
    "tags": [
     "remove-input",
     "remove-output"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(4.545456612206542e-07)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from openmdao.utils.assert_utils import assert_near_equal\n",
    "\n",
    "assert_near_equal(prob.get_val('paraboloid.f'), -27.33333, 1e-6)\n",
    "\n",
    "assert_near_equal(prob.get_val('paraboloid.x'), 6.6667, 1e-4)\n",
    "assert_near_equal(prob.get_val('paraboloid.y'), -7.33333, 1e-4)"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "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.13.14"
  },
  "papermill": {
   "default_parameters": {},
   "duration": 3.865944,
   "end_time": "2026-10-02T14:41:08.365980+00:00",
   "environment_variables": {},
   "exception": null,
   "input_path": "/home/runner/work/OpenMDAO/OpenMDAO/openmdao/docs/openmdao_book/examples/tldr_paraboloid.ipynb",
   "output_path": "/home/runner/work/OpenMDAO/OpenMDAO/openmdao/docs/_executed_book/examples/tldr_paraboloid.ipynb",
   "parameters": {},
   "start_time": "2026-10-02T14:41:04.500036+00:00",
   "version": "2.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}