{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Multi-period Scheduling Simulation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Multi-period economic dispatch (ED) and unit commitment (UC) are also available.\n",
    "\n",
    "In this case, we will show a 24-hour ED simulation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import ams"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "ams.config_logger(stream_level=20)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load Case"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Parsing input file \"/Users/jinningwang/work/ams/ams/cases/5bus/pjm5bus_demo.xlsx\"...\n",
      "Input file parsed in 0.2122 seconds.\n",
      "Zero line rates detacted in rate_b, rate_c, adjusted to 999.\n",
      "System set up in 0.0032 seconds.\n"
     ]
    }
   ],
   "source": [
    "sp = ams.load(ams.get_case('5bus/pjm5bus_demo.xlsx'),\n",
    "              setup=True,\n",
    "              no_output=True,)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Zonal Design"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The scheduling models in AMS have been developed with a zonal structure, which can be inspected in the model ``Area``.\n",
    "\n",
    "In AMS, model ``Area`` represents Balancing Authority territory, and ``Zone`` refers to loss zone.\n",
    "Typically, an ``Area`` can cover multiple ``Zone``.\n",
    "For more details about the geographical definitions used in power systems, visit <https://ps-wiki.github.io/wiki/area-zone-region/>\n",
    "\n",
    "**Note**: Since version 0.9.14, model ``Region`` is renamed to ``Zone`` for clarity."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>idx</th>\n",
       "      <th>u</th>\n",
       "      <th>name</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>uid</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     idx    u  name\n",
       "uid                \n",
       "0      1  1.0     1\n",
       "1      2  1.0     2\n",
       "2      3  1.0     3"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.Area.as_df()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In device ``Bus``, the Param ``area`` indicates the area of the bus.\n",
    "Correspondingly, the region of generator and load are determined by the bus they connected."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>idx</th>\n",
       "      <th>u</th>\n",
       "      <th>name</th>\n",
       "      <th>Vn</th>\n",
       "      <th>vmax</th>\n",
       "      <th>vmin</th>\n",
       "      <th>v0</th>\n",
       "      <th>a0</th>\n",
       "      <th>xcoord</th>\n",
       "      <th>ycoord</th>\n",
       "      <th>area</th>\n",
       "      <th>zone</th>\n",
       "      <th>owner</th>\n",
       "      <th>type</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>uid</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>A</td>\n",
       "      <td>230.0</td>\n",
       "      <td>1.1</td>\n",
       "      <td>0.9</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Zone_A</td>\n",
       "      <td>None</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>B</td>\n",
       "      <td>230.0</td>\n",
       "      <td>1.1</td>\n",
       "      <td>0.9</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Zone_B</td>\n",
       "      <td>None</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>C</td>\n",
       "      <td>230.0</td>\n",
       "      <td>1.1</td>\n",
       "      <td>0.9</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Zone_C</td>\n",
       "      <td>None</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>D</td>\n",
       "      <td>230.0</td>\n",
       "      <td>1.1</td>\n",
       "      <td>0.9</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Zone_D</td>\n",
       "      <td>None</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>E</td>\n",
       "      <td>230.0</td>\n",
       "      <td>1.1</td>\n",
       "      <td>0.9</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Zone_E</td>\n",
       "      <td>None</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     idx    u name     Vn  vmax  vmin   v0   a0  xcoord  ycoord  area    zone  \\\n",
       "uid                                                                             \n",
       "0      0  1.0    A  230.0   1.1   0.9  1.0  0.0       0       0     1  Zone_A   \n",
       "1      1  1.0    B  230.0   1.1   0.9  1.0  0.0       0       0     1  Zone_B   \n",
       "2      2  1.0    C  230.0   1.1   0.9  1.0  0.0       0       0     2  Zone_C   \n",
       "3      3  1.0    D  230.0   1.1   0.9  1.0  0.0       0       0     2  Zone_D   \n",
       "4      4  1.0    E  230.0   1.1   0.9  1.0  0.0       0       0     3  Zone_E   \n",
       "\n",
       "    owner  type  \n",
       "uid              \n",
       "0    None     1  \n",
       "1    None     1  \n",
       "2    None     1  \n",
       "3    None     1  \n",
       "4    None     1  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.Bus.as_df()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Multi-period Dispatch Base"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In AMS, multi-period dispatch involves devices in group ``Horizon``.\n",
    "This group is developed to provide time-series data for multi-period dispatch."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('EDTSlot', EDTSlot (24 devices) at 0x1158f14e0),\n",
       "             ('UCTSlot', UCTSlot (24 devices) at 0x1158f1b40)])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.Horizon.models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can get the idx of StaticGens."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['PV_1', 'PV_3', 'PV_5', 'PV_2', 'Slack_4']"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.StaticGen.get_all_idxes()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In ``EDTSlot``, Param ``sd`` refers the load factors of each region in each time slot, and Param ``ug`` represents the generator commitment status in each time slot.\n",
    "\n",
    "To be more specific, EDT1 has ``sd=0.793,0.793,0.793``, which means the load factor of each area is 0.793 in the first time slot, and 0.756 in the second time slot.\n",
    "\n",
    "Next, EDT1 has ``ug=1,1,1,1,1``, and it means the commitment status of generator PV_1, PV_3, PV_5, PV_2, and Slack_4 are all online."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>idx</th>\n",
       "      <th>u</th>\n",
       "      <th>name</th>\n",
       "      <th>sd</th>\n",
       "      <th>ug</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>uid</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>EDT1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT1</td>\n",
       "      <td>0.793,0.793,0.793</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>EDT2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT2</td>\n",
       "      <td>0.756,0.756,0.756</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>EDT3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT3</td>\n",
       "      <td>0.723,0.723,0.723</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>EDT4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT4</td>\n",
       "      <td>0.708,0.708,0.708</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>EDT5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT5</td>\n",
       "      <td>0.7,0.7,0.7</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>EDT6</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT6</td>\n",
       "      <td>0.706,0.706,0.706</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>EDT7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT7</td>\n",
       "      <td>0.75,0.75,0.75</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>EDT8</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT8</td>\n",
       "      <td>0.802,0.802,0.802</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>EDT9</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT9</td>\n",
       "      <td>0.828,0.828,0.828</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>EDT10</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT10</td>\n",
       "      <td>0.851,0.851,0.851</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>EDT11</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT11</td>\n",
       "      <td>0.874,0.874,0.874</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>EDT12</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT12</td>\n",
       "      <td>0.898,0.898,0.898</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>EDT13</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT13</td>\n",
       "      <td>0.919,0.919,0.919</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>EDT14</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT14</td>\n",
       "      <td>0.947,0.947,0.947</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>EDT15</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT15</td>\n",
       "      <td>0.97,0.97,0.97</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>EDT16</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT16</td>\n",
       "      <td>0.987,0.987,0.987</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>EDT17</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT17</td>\n",
       "      <td>1.0,1.0,1.0</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>EDT18</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT18</td>\n",
       "      <td>1.0,1.0,1.0</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>EDT19</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT19</td>\n",
       "      <td>0.991,0.991,0.991</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>EDT20</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT20</td>\n",
       "      <td>0.956,0.956,0.956</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>EDT21</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT21</td>\n",
       "      <td>0.93,0.93,0.93</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>EDT22</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT22</td>\n",
       "      <td>0.905,0.905,0.905</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>EDT23</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT23</td>\n",
       "      <td>0.849,0.849,0.849</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>EDT24</td>\n",
       "      <td>1.0</td>\n",
       "      <td>EDT24</td>\n",
       "      <td>0.784,0.784,0.784</td>\n",
       "      <td>1,1,1,1,1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       idx    u   name                 sd         ug\n",
       "uid                                                 \n",
       "0     EDT1  1.0   EDT1  0.793,0.793,0.793  1,1,1,1,1\n",
       "1     EDT2  1.0   EDT2  0.756,0.756,0.756  1,1,1,1,1\n",
       "2     EDT3  1.0   EDT3  0.723,0.723,0.723  1,1,1,1,1\n",
       "3     EDT4  1.0   EDT4  0.708,0.708,0.708  1,1,1,1,1\n",
       "4     EDT5  1.0   EDT5        0.7,0.7,0.7  1,1,1,1,1\n",
       "5     EDT6  1.0   EDT6  0.706,0.706,0.706  1,1,1,1,1\n",
       "6     EDT7  1.0   EDT7     0.75,0.75,0.75  1,1,1,1,1\n",
       "7     EDT8  1.0   EDT8  0.802,0.802,0.802  1,1,1,1,1\n",
       "8     EDT9  1.0   EDT9  0.828,0.828,0.828  1,1,1,1,1\n",
       "9    EDT10  1.0  EDT10  0.851,0.851,0.851  1,1,1,1,1\n",
       "10   EDT11  1.0  EDT11  0.874,0.874,0.874  1,1,1,1,1\n",
       "11   EDT12  1.0  EDT12  0.898,0.898,0.898  1,1,1,1,1\n",
       "12   EDT13  1.0  EDT13  0.919,0.919,0.919  1,1,1,1,1\n",
       "13   EDT14  1.0  EDT14  0.947,0.947,0.947  1,1,1,1,1\n",
       "14   EDT15  1.0  EDT15     0.97,0.97,0.97  1,1,1,1,1\n",
       "15   EDT16  1.0  EDT16  0.987,0.987,0.987  1,1,1,1,1\n",
       "16   EDT17  1.0  EDT17        1.0,1.0,1.0  1,1,1,1,1\n",
       "17   EDT18  1.0  EDT18        1.0,1.0,1.0  1,1,1,1,1\n",
       "18   EDT19  1.0  EDT19  0.991,0.991,0.991  1,1,1,1,1\n",
       "19   EDT20  1.0  EDT20  0.956,0.956,0.956  1,1,1,1,1\n",
       "20   EDT21  1.0  EDT21     0.93,0.93,0.93  1,1,1,1,1\n",
       "21   EDT22  1.0  EDT22  0.905,0.905,0.905  1,1,1,1,1\n",
       "22   EDT23  1.0  EDT23  0.849,0.849,0.849  1,1,1,1,1\n",
       "23   EDT24  1.0  EDT24  0.784,0.784,0.784  1,1,1,1,1"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.EDTSlot.as_df()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Solve and Result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building system matrices\n",
      "Parsing OModel for <ED>\n",
      "Evaluating OModel for <ED>\n",
      "Finalizing OModel for <ED>\n",
      "<ED> initialized in 0.0275 seconds.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.ED.init()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ED> solved as optimal in 0.0374 seconds, converged in 12 iterations with CLARABEL.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.ED.run(solver='CLARABEL')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "All decision variables are collected in the dict ``vars``."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('pg', Var: StaticGen.pg),\n",
       "             ('vBus', Var: Bus.vBus),\n",
       "             ('aBus', Var: Bus.aBus),\n",
       "             ('pru', Var: StaticGen.pru),\n",
       "             ('prd', Var: StaticGen.prd),\n",
       "             ('prs', Var: StaticGen.prs)])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.ED.vars"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see, the generator output ``pg`` is a 2D array, and the first dimension is the generator index, and the second dimension is the time slot."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.2   , 0.2   , 0.2   , 0.2   , 0.2   , 0.2   , 0.2   , 0.2   ,\n",
       "        0.2   , 0.2   , 0.2   , 0.2   , 0.2   , 0.2   , 0.2   , 0.2   ,\n",
       "        0.2   , 0.2   , 0.2   , 0.2   , 0.2   , 0.2   , 0.2   , 0.2   ],\n",
       "       [0.5   , 0.5   , 0.5   , 0.5   , 0.5   , 0.5   , 0.5   , 0.5   ,\n",
       "        0.5751, 0.6908, 0.8064, 0.9271, 1.0327, 1.1735, 1.2891, 1.3746,\n",
       "        1.44  , 1.44  , 1.3947, 1.2187, 1.088 , 0.9623, 0.6807, 0.5   ],\n",
       "       [0.6   , 0.6   , 0.6   , 0.6   , 0.6   , 0.6   , 0.6   , 0.6   ,\n",
       "        0.6   , 0.6   , 0.6   , 0.6   , 0.6   , 0.6   , 0.6   , 0.6   ,\n",
       "        0.6   , 0.6   , 0.6   , 0.6   , 0.6   , 0.6   , 0.6   , 0.6   ],\n",
       "       [4.8289, 4.8258, 4.8231, 4.8218, 4.8211, 4.8217, 4.8253, 4.8297,\n",
       "        4.9049, 5.0192, 5.1336, 5.2529, 5.3573, 5.4965, 5.6109, 5.6954,\n",
       "        5.76  , 5.76  , 5.7153, 5.5413, 5.412 , 5.2877, 5.0093, 4.8282],\n",
       "       [1.8011, 1.4342, 1.1069, 0.9582, 0.8789, 0.9383, 1.3747, 1.8903,\n",
       "        2.    , 2.    , 2.    , 2.    , 2.    , 2.    , 2.    , 2.    ,\n",
       "        2.    , 2.    , 2.    , 2.    , 2.    , 2.    , 2.    , 1.7118]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.ED.pg.v.round(4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Partial results can be accessed with desired time slot.\n",
    "In the retrieved result, the first dimension is the generator index, and the second dimension is the time slot."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.20000003326887592"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.ED.get(src='pg', attr='v', idx='PV_1', horizon=['EDT1'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Or, get multiple variables in mutliple time slots."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.2, 0.2, 0.2],\n",
       "       [0.5, 0.5, 0.5]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sp.ED.get(src='pg', attr='v', idx=['PV_1', 'PV_3'],\n",
    "          horizon=['EDT1', 'EDT2', 'EDT3']).round(4)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ams",
   "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.10.0"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}