{ "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 }