diff --git a/Power Grid Model Benchmark.ipynb b/Power Grid Model Benchmark.ipynb index a5c059a..62cd903 100644 --- a/Power Grid Model Benchmark.ipynb +++ b/Power Grid Model Benchmark.ipynb @@ -76,7 +76,14 @@ "cell_type": "code", "execution_count": 1, "id": "0267ac98", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:44.431561Z", + "iopub.status.busy": "2024-11-29T08:38:44.431043Z", + "iopub.status.idle": "2024-11-29T08:38:45.399827Z", + "shell.execute_reply": "2024-11-29T08:38:45.399154Z" + } + }, "outputs": [], "source": [ "import time\n", @@ -113,7 +120,14 @@ "cell_type": "code", "execution_count": 2, "id": "34db0eaa", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:45.401904Z", + "iopub.status.busy": "2024-11-29T08:38:45.401649Z", + "iopub.status.idle": "2024-11-29T08:38:45.405414Z", + "shell.execute_reply": "2024-11-29T08:38:45.404941Z" + } + }, "outputs": [], "source": [ "# summary\n", @@ -160,7 +174,14 @@ "cell_type": "code", "execution_count": 3, "id": "ece0138d", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:45.407480Z", + "iopub.status.busy": "2024-11-29T08:38:45.406998Z", + "iopub.status.idle": "2024-11-29T08:38:45.410196Z", + "shell.execute_reply": "2024-11-29T08:38:45.409690Z" + } + }, "outputs": [], "source": [ "# fictional grid parameters\n", @@ -186,7 +207,14 @@ "cell_type": "code", "execution_count": 4, "id": "19a1b1f3", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:45.412047Z", + "iopub.status.busy": "2024-11-29T08:38:45.411578Z", + "iopub.status.idle": "2024-11-29T08:38:45.414259Z", + "shell.execute_reply": "2024-11-29T08:38:45.413765Z" + } + }, "outputs": [], "source": [ "# override small network\n", @@ -200,7 +228,14 @@ "cell_type": "code", "execution_count": 5, "id": "8301d2a0", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:45.415710Z", + "iopub.status.busy": "2024-11-29T08:38:45.415500Z", + "iopub.status.idle": "2024-11-29T08:38:45.418018Z", + "shell.execute_reply": "2024-11-29T08:38:45.417550Z" + } + }, "outputs": [], "source": [ "# derived values\n", @@ -226,7 +261,14 @@ "cell_type": "code", "execution_count": 6, "id": "cc656c47", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:45.419834Z", + "iopub.status.busy": "2024-11-29T08:38:45.419441Z", + "iopub.status.idle": "2024-11-29T08:38:46.565651Z", + "shell.execute_reply": "2024-11-29T08:38:46.564973Z" + } + }, "outputs": [], "source": [ "fictional_dataset = generate_fictional_grid(\n", @@ -263,6 +305,12 @@ "execution_count": 7, "id": "7909cdd9", "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:46.567540Z", + "iopub.status.busy": "2024-11-29T08:38:46.567394Z", + "iopub.status.idle": "2024-11-29T08:38:47.771192Z", + "shell.execute_reply": "2024-11-29T08:38:47.770435Z" + }, "scrolled": true }, "outputs": [], @@ -291,7 +339,14 @@ "cell_type": "code", "execution_count": 8, "id": "5251e4b0", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:47.773508Z", + "iopub.status.busy": "2024-11-29T08:38:47.772895Z", + "iopub.status.idle": "2024-11-29T08:38:48.852529Z", + "shell.execute_reply": "2024-11-29T08:38:48.851742Z" + } + }, "outputs": [], "source": [ "# initialize DSS\n", @@ -312,7 +367,14 @@ "cell_type": "code", "execution_count": 9, "id": "2540d408", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:48.854511Z", + "iopub.status.busy": "2024-11-29T08:38:48.854362Z", + "iopub.status.idle": "2024-11-29T08:38:48.858304Z", + "shell.execute_reply": "2024-11-29T08:38:48.857712Z" + } + }, "outputs": [], "source": [ "def benchmark_pgm_power_flow(symmetric: bool, calculation_type: str, update_data=None, with_intialization: bool = False):\n", @@ -332,7 +394,7 @@ " symmetric=symmetric, \n", " calculation_method=method, \n", " update_data=update_data, \n", - " output_component_types=['node', 'line'])\n", + " output_component_types={'node': [\"u_pu\"], 'line': [\"loading\"]})\n", " end = time.time()\n", " summary_df.loc[calculation_type, method_dict[method]] = end - start\n", " return pgm_result" @@ -368,7 +430,14 @@ "cell_type": "code", "execution_count": 10, "id": "612d3384", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:48.860018Z", + "iopub.status.busy": "2024-11-29T08:38:48.859750Z", + "iopub.status.idle": "2024-11-29T08:38:48.873348Z", + "shell.execute_reply": "2024-11-29T08:38:48.872745Z" + } + }, "outputs": [], "source": [ "benchmark_pgm_power_flow(symmetric=True, calculation_type='Symmetric calculation with solver initialization', with_intialization=True)\n", @@ -387,7 +456,14 @@ "cell_type": "code", "execution_count": 11, "id": "75a86adc", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:48.875330Z", + "iopub.status.busy": "2024-11-29T08:38:48.874960Z", + "iopub.status.idle": "2024-11-29T08:38:48.901386Z", + "shell.execute_reply": "2024-11-29T08:38:48.900738Z" + } + }, "outputs": [], "source": [ "# first calculation with solver initialization\n", @@ -415,7 +491,14 @@ "cell_type": "code", "execution_count": 12, "id": "f532a8ed", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:48.903484Z", + "iopub.status.busy": "2024-11-29T08:38:48.903016Z", + "iopub.status.idle": "2024-11-29T08:38:48.906825Z", + "shell.execute_reply": "2024-11-29T08:38:48.906374Z" + } + }, "outputs": [], "source": [ "comparison_df.loc['Symmetric calculation', 'Deviation Voltage (p.u.)'] = \\\n", @@ -444,7 +527,14 @@ "cell_type": "code", "execution_count": 13, "id": "c76f1366", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:48.908633Z", + "iopub.status.busy": "2024-11-29T08:38:48.908491Z", + "iopub.status.idle": "2024-11-29T08:38:48.934298Z", + "shell.execute_reply": "2024-11-29T08:38:48.933655Z" + } + }, "outputs": [], "source": [ "benchmark_pgm_power_flow(symmetric=False, calculation_type='Asymmetric calculation with solver initialization', with_intialization=True)\n", @@ -463,7 +553,14 @@ "cell_type": "code", "execution_count": 14, "id": "5357e649", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:48.936284Z", + "iopub.status.busy": "2024-11-29T08:38:48.936147Z", + "iopub.status.idle": "2024-11-29T08:38:49.771629Z", + "shell.execute_reply": "2024-11-29T08:38:49.771044Z" + } + }, "outputs": [], "source": [ "# first calculation with solver initialization\n", @@ -491,7 +588,14 @@ "cell_type": "code", "execution_count": 15, "id": "44b41b82", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:49.774704Z", + "iopub.status.busy": "2024-11-29T08:38:49.773894Z", + "iopub.status.idle": "2024-11-29T08:38:49.809094Z", + "shell.execute_reply": "2024-11-29T08:38:49.808555Z" + } + }, "outputs": [], "source": [ "# first calculation with solver initialization\n", @@ -521,7 +625,14 @@ "cell_type": "code", "execution_count": 16, "id": "840e9f29", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:49.812247Z", + "iopub.status.busy": "2024-11-29T08:38:49.811483Z", + "iopub.status.idle": "2024-11-29T08:38:49.818204Z", + "shell.execute_reply": "2024-11-29T08:38:49.817739Z" + } + }, "outputs": [], "source": [ "comparison_df.loc['Asymmetric calculation', 'Deviation Voltage (p.u.)'] = \\\n", @@ -550,7 +661,14 @@ "cell_type": "code", "execution_count": 17, "id": "ab571db2", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:49.820942Z", + "iopub.status.busy": "2024-11-29T08:38:49.820216Z", + "iopub.status.idle": "2024-11-29T08:38:49.839617Z", + "shell.execute_reply": "2024-11-29T08:38:49.839001Z" + } + }, "outputs": [], "source": [ "\n", @@ -589,7 +707,14 @@ "cell_type": "code", "execution_count": 18, "id": "bae29ebf", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:49.843185Z", + "iopub.status.busy": "2024-11-29T08:38:49.842471Z", + "iopub.status.idle": "2024-11-29T08:38:50.962899Z", + "shell.execute_reply": "2024-11-29T08:38:50.962227Z" + } + }, "outputs": [], "source": [ "pgm_result = benchmark_pgm_power_flow(symmetric=True, calculation_type='Time series symmetric calculation', update_data=pgm_update_dataset)\n", @@ -608,16 +733,15 @@ "cell_type": "code", "execution_count": 19, "id": "b943bdee", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████| 1000/1000 [00:14<00:00, 70.01it/s]\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:38:50.965184Z", + "iopub.status.busy": "2024-11-29T08:38:50.965042Z", + "iopub.status.idle": "2024-11-29T08:39:03.562681Z", + "shell.execute_reply": "2024-11-29T08:39:03.562003Z" } - ], + }, + "outputs": [], "source": [ "pp.timeseries.OutputWriter(\n", " pp_net,\n", @@ -630,7 +754,8 @@ "start = time.time()\n", "pp.timeseries.run_timeseries(\n", " pp_net, run=pp.runpp, time_steps=time_steps,\n", - " calculate_voltage_angles=True, distributed_slack=True, lightsim2grid=use_lightsim2grid\n", + " calculate_voltage_angles=True, distributed_slack=True, lightsim2grid=use_lightsim2grid,\n", + " verbose=False\n", ")\n", "end = time.time()\n", "summary_df.loc['Time series symmetric calculation', 'PandaPower Newton-Raphson'] = end - start" @@ -648,7 +773,14 @@ "cell_type": "code", "execution_count": 20, "id": "75977fb6", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:39:03.564815Z", + "iopub.status.busy": "2024-11-29T08:39:03.564432Z", + "iopub.status.idle": "2024-11-29T08:39:03.573307Z", + "shell.execute_reply": "2024-11-29T08:39:03.572715Z" + } + }, "outputs": [], "source": [ "pp_u_pu = pp_net.output_writer.iloc[0, 0].output['res_bus.vm_pu'].to_numpy()\n", @@ -679,7 +811,14 @@ "cell_type": "code", "execution_count": 21, "id": "4735161f", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:39:03.575236Z", + "iopub.status.busy": "2024-11-29T08:39:03.574927Z", + "iopub.status.idle": "2024-11-29T08:39:08.175247Z", + "shell.execute_reply": "2024-11-29T08:39:08.174511Z" + } + }, "outputs": [], "source": [ "pgm_result = benchmark_pgm_power_flow(symmetric=False, calculation_type='Time series asymmetric calculation', update_data=pgm_update_dataset)\n" @@ -697,16 +836,15 @@ "cell_type": "code", "execution_count": 22, "id": "d1b2d792", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████████████████████████████████████████████████████████████| 1000/1000 [03:23<00:00, 4.92it/s]\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:39:08.177342Z", + "iopub.status.busy": "2024-11-29T08:39:08.177043Z", + "iopub.status.idle": "2024-11-29T08:44:52.536744Z", + "shell.execute_reply": "2024-11-29T08:44:52.536013Z" } - ], + }, + "outputs": [], "source": [ "del pp_net.output_writer\n", "ow = pp.timeseries.OutputWriter(pp_net)\n", @@ -723,7 +861,8 @@ " time_steps=time_steps,\n", " calculate_voltage_angles=True,\n", " distributed_slack=True, \n", - " lightsim2grid=use_lightsim2grid\n", + " lightsim2grid=use_lightsim2grid,\n", + " verbose=False\n", ")\n", "end = time.time()\n", "summary_df.loc['Time series asymmetric calculation', 'PandaPower Newton-Raphson'] = end - start" @@ -741,7 +880,14 @@ "cell_type": "code", "execution_count": 23, "id": "589779e3", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:44:52.541318Z", + "iopub.status.busy": "2024-11-29T08:44:52.540872Z", + "iopub.status.idle": "2024-11-29T08:44:54.876154Z", + "shell.execute_reply": "2024-11-29T08:44:54.875600Z" + } + }, "outputs": [], "source": [ "# first calculation with solver initialization\n", @@ -759,7 +905,14 @@ "cell_type": "code", "execution_count": 24, "id": "dd8c7169", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:44:54.878204Z", + "iopub.status.busy": "2024-11-29T08:44:54.877929Z", + "iopub.status.idle": "2024-11-29T08:44:54.904553Z", + "shell.execute_reply": "2024-11-29T08:44:54.903890Z" + } + }, "outputs": [], "source": [ "# get results\n", @@ -793,7 +946,14 @@ "cell_type": "code", "execution_count": 25, "id": "1a7f075f", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:44:54.906348Z", + "iopub.status.busy": "2024-11-29T08:44:54.906211Z", + "iopub.status.idle": "2024-11-29T08:44:54.944191Z", + "shell.execute_reply": "2024-11-29T08:44:54.943522Z" + } + }, "outputs": [], "source": [ "pp_u_pu = []\n", @@ -829,7 +989,14 @@ "cell_type": "code", "execution_count": 26, "id": "3bbe4faa", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:44:54.946579Z", + "iopub.status.busy": "2024-11-29T08:44:54.946150Z", + "iopub.status.idle": "2024-11-29T08:44:54.954672Z", + "shell.execute_reply": "2024-11-29T08:44:54.954201Z" + } + }, "outputs": [], "source": [ "# re-generate dataset\n", @@ -839,12 +1006,11 @@ "\n", "# update dataset for power grid model\n", "# disable one line per batch\n", - "pgm_line_profile = pgm.initialize_array(\"update\", \"line\", (n_line, n_line))\n", - "pgm_line_profile[\"id\"] = pgm_dataset[\"line\"][\"id\"]\n", - "pgm_line_profile[\"from_status\"] = 1\n", - "pgm_line_profile[\"to_status\"] = 1\n", - "np.fill_diagonal(pgm_line_profile[\"from_status\"], 0)\n", - "np.fill_diagonal(pgm_line_profile[\"to_status\"], 0)\n", + "pgm_line_profile = {\n", + " \"id\": pgm_dataset[\"line\"][\"id\"].reshape(-1, 1).copy(),\n", + " \"from_status\": np.zeros((n_line, 1), dtype=np.int8),\n", + " \"to_status\": np.zeros((n_line, 1), dtype=np.int8),\n", + "}\n", "pgm_update_dataset = {\"line\": pgm_line_profile}" ] }, @@ -868,7 +1034,14 @@ "cell_type": "code", "execution_count": 27, "id": "ab0c5fc2", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:44:54.956294Z", + "iopub.status.busy": "2024-11-29T08:44:54.956147Z", + "iopub.status.idle": "2024-11-29T08:44:57.160844Z", + "shell.execute_reply": "2024-11-29T08:44:57.160304Z" + } + }, "outputs": [], "source": [ "pgm_result = benchmark_pgm_power_flow(symmetric=True, calculation_type='N-1 symmetric calculation', update_data=pgm_update_dataset)\n" @@ -886,7 +1059,14 @@ "cell_type": "code", "execution_count": 28, "id": "d1a08656", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:44:57.162733Z", + "iopub.status.busy": "2024-11-29T08:44:57.162450Z", + "iopub.status.idle": "2024-11-29T08:45:07.538111Z", + "shell.execute_reply": "2024-11-29T08:45:07.537520Z" + } + }, "outputs": [], "source": [ "# prepare pandapower result dataset\n", @@ -924,7 +1104,14 @@ "cell_type": "code", "execution_count": 29, "id": "040c08a0", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:45:07.540220Z", + "iopub.status.busy": "2024-11-29T08:45:07.539987Z", + "iopub.status.idle": "2024-11-29T08:45:07.547779Z", + "shell.execute_reply": "2024-11-29T08:45:07.547271Z" + } + }, "outputs": [], "source": [ "comparison_df.loc['N-1 symmetric calculation', 'Deviation Voltage (p.u.)'] = \\\n", @@ -953,7 +1140,14 @@ "cell_type": "code", "execution_count": 30, "id": "c0e18e41", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:45:07.549688Z", + "iopub.status.busy": "2024-11-29T08:45:07.549410Z", + "iopub.status.idle": "2024-11-29T08:45:13.727396Z", + "shell.execute_reply": "2024-11-29T08:45:13.726880Z" + } + }, "outputs": [], "source": [ "pgm_result = benchmark_pgm_power_flow(symmetric=False, calculation_type='N-1 asymmetric calculation', update_data=pgm_update_dataset)\n" @@ -971,7 +1165,14 @@ "cell_type": "code", "execution_count": 31, "id": "65ecfde0", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:45:13.729245Z", + "iopub.status.busy": "2024-11-29T08:45:13.729091Z", + "iopub.status.idle": "2024-11-29T08:50:12.384705Z", + "shell.execute_reply": "2024-11-29T08:50:12.382776Z" + } + }, "outputs": [], "source": [ "%%capture\n", @@ -1011,7 +1212,14 @@ "cell_type": "code", "execution_count": 32, "id": "11accf7c", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:50:12.389336Z", + "iopub.status.busy": "2024-11-29T08:50:12.388341Z", + "iopub.status.idle": "2024-11-29T08:50:12.414752Z", + "shell.execute_reply": "2024-11-29T08:50:12.412629Z" + } + }, "outputs": [], "source": [ "comparison_df.loc['N-1 asymmetric calculation', 'Deviation Voltage (p.u.)'] = \\\n", @@ -1042,7 +1250,14 @@ "cell_type": "code", "execution_count": 33, "id": "300e650a", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2024-11-29T08:50:12.420008Z", + "iopub.status.busy": "2024-11-29T08:50:12.418763Z", + "iopub.status.idle": "2024-11-29T08:50:12.443004Z", + "shell.execute_reply": "2024-11-29T08:50:12.442420Z" + } + }, "outputs": [ { "data": { @@ -1073,38 +1288,38 @@ "
\n", "\n", - " | PGM Linear Impedance | \n", - "PGM Linear Current | \n", - "PGM Newton-Raphson | \n", - "PGM Iterative Current | \n", - "PandaPower Newton-Raphson | \n", - "OpenDSS Fix Point | \n", + "PGM Linear Impedance | \n", + "PGM Linear Current | \n", + "PGM Newton-Raphson | \n", + "PGM Iterative Current | \n", + "PandaPower Newton-Raphson | \n", + "OpenDSS Fix Point | \n", "|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Symmetric calculation with solver initialization | \n", - "28.67x | \n", - "26.55x | \n", - "22.86x | \n", - "27.17x | \n", - "1.00x | \n", - "0.00x | \n", + "Symmetric calculation with solver initialization | \n", + "20.20x | \n", + "24.30x | \n", + "14.78x | \n", + "21.08x | \n", + "1.00x | \n", + "0.00x | \n", "
Symmetric calculation without solver initialization | \n", - "68.75x | \n", - "46.12x | \n", - "23.22x | \n", - "17.65x | \n", - "1.00x | \n", - "0.00x | \n", + "Symmetric calculation without solver initialization | \n", + "32.66x | \n", + "37.40x | \n", + "19.00x | \n", + "26.34x | \n", + "1.00x | \n", + "0.00x | \n", "
Asymmetric calculation with solver initialization | \n", - "300.83x | \n", - "426.60x | \n", - "211.51x | \n", - "419.35x | \n", - "1.00x | \n", - "32.77x | \n", + "Asymmetric calculation with solver initialization | \n", + "489.55x | \n", + "538.79x | \n", + "225.60x | \n", + "448.93x | \n", + "1.00x | \n", + "23.01x | \n", "
Asymmetric calculation without solver initialization | \n", - "173.08x | \n", - "172.72x | \n", - "68.57x | \n", - "148.62x | \n", - "1.00x | \n", - "110.55x | \n", + "Asymmetric calculation without solver initialization | \n", + "244.75x | \n", + "276.59x | \n", + "84.69x | \n", + "194.65x | \n", + "1.00x | \n", + "90.91x | \n", "
Time series symmetric calculation | \n", - "74.16x | \n", - "68.49x | \n", - "29.89x | \n", - "48.90x | \n", - "1.00x | \n", - "0.00x | \n", + "Time series symmetric calculation | \n", + "65.87x | \n", + "63.75x | \n", + "29.31x | \n", + "43.30x | \n", + "1.00x | \n", + "0.00x | \n", "
Time series asymmetric calculation | \n", - "293.22x | \n", - "289.08x | \n", - "92.68x | \n", - "210.18x | \n", - "1.00x | \n", - "83.56x | \n", + "Time series asymmetric calculation | \n", + "529.06x | \n", + "522.89x | \n", + "146.86x | \n", + "369.84x | \n", + "1.00x | \n", + "147.75x | \n", "
N-1 symmetric calculation | \n", - "23.01x | \n", - "22.50x | \n", - "14.93x | \n", - "19.63x | \n", - "1.00x | \n", - "0.00x | \n", + "N-1 symmetric calculation | \n", + "22.78x | \n", + "21.81x | \n", + "14.71x | \n", + "18.57x | \n", + "1.00x | \n", + "0.00x | \n", "
N-1 asymmetric calculation | \n", - "166.28x | \n", - "156.44x | \n", - "65.80x | \n", - "138.78x | \n", - "1.00x | \n", - "0.00x | \n", + "N-1 asymmetric calculation | \n", + "281.97x | \n", + "293.48x | \n", + "108.48x | \n", + "224.00x | \n", + "1.00x | \n", + "0.00x | \n", "