diff --git a/AgentPPO/DRL__plots/Evoluation Information.svg b/AgentPPO/DRL__plots/Evoluation Information.svg deleted file mode 100644 index 0490b5f..0000000 --- a/AgentPPO/DRL__plots/Evoluation Information.svg +++ /dev/null @@ -1,4438 +0,0 @@ - - - - - - - - 2024-06-25T14:44:22.922664 - image/svg+xml - - - Matplotlib v3.8.0, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AgentPPO/DRL__plots/evaluation_information.svg b/AgentPPO/DRL__plots/evaluation_information.svg index ed34ff7..6faca41 100644 --- a/AgentPPO/DRL__plots/evaluation_information.svg +++ b/AgentPPO/DRL__plots/evaluation_information.svg @@ -1,12 +1,12 @@ - + - 2024-06-25T14:48:15.468627 + 2024-06-26T15:08:26.034934 image/svg+xml @@ -22,31 +22,31 @@ - - + - + - + - + - + - + - + - + @@ -167,13 +167,13 @@ L 264.631188 7.2 - + - + - + - + - + - + - + - + @@ -262,13 +262,13 @@ L 388.283846 113.646589 - + - + @@ -277,13 +277,13 @@ L 388.283846 67.70247 - + - + - + - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p4548ab29ad)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - - - - - - + - - + - - + - + - + - + - + - + @@ -1226,13 +1226,13 @@ L 765.479102 7.2 - + - + @@ -1240,13 +1240,13 @@ L 830.828246 7.2 - + - + @@ -1254,7 +1254,7 @@ L 896.17739 7.2 - + - + - - + - + - + - + - + - + - + - + - + - + - + @@ -1543,18 +1543,18 @@ L 950.417179 117.436753 - + - + - + @@ -1563,18 +1563,18 @@ L 950.417179 89.161858 - + - + - + @@ -1583,18 +1583,18 @@ L 950.417179 60.886963 - + - + - + @@ -1603,7 +1603,7 @@ L 950.417179 32.612067 - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - +" clip-path="url(#p646306555f)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - - + + - - - - - - - + + - + - + @@ -3482,16 +3519,16 @@ L 299.23515 304.22087 - - + - + - - + - + - - + - + - +" style="fill: url(#h69ef14aad6); stroke: #ffffff; stroke-linejoin: miter"/> - + - + @@ -3615,16 +3652,16 @@ z - +" style="fill: url(#h3f4f4ee78e); stroke: #ffffff; stroke-linejoin: miter"/> - + - + @@ -3640,16 +3677,16 @@ z - - + - + @@ -3663,16 +3700,16 @@ z - - + - + @@ -3689,77 +3726,77 @@ z - - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + @@ -3767,58 +3804,461 @@ L 892.443153 289.22087 - - - + + + - + - + - - - + + + - - - + + + - + + + + + + + + + + + + + + - - + + - - - - + + + + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - + - - - + + + - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + - + - - + + - - - - - - - - - - - - - - - - - - - + + - - + + - - + + - - + + - + - + - + - 2024-06-25T14:48:14.551011 + 2024-06-26T15:08:25.294732 image/svg+xml @@ -22,8 +22,8 @@ @@ -42,7 +42,7 @@ z +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -78,7 +78,7 @@ z +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -121,7 +121,7 @@ z +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -155,7 +155,7 @@ z +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -169,7 +169,7 @@ L 265.828893 7.2 +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -324,7 +324,7 @@ z +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -337,7 +337,7 @@ L 386.955453 224.13913 +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -352,7 +352,7 @@ L 386.955453 192.222523 +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -367,7 +367,7 @@ L 386.955453 160.305916 +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -412,7 +412,7 @@ z +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -455,7 +455,7 @@ z +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -470,7 +470,7 @@ L 386.955453 64.556094 +" clip-path="url(#p52ce6278e0)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -588,7 +588,7 @@ L 81.423495 224.13913 L 81.423495 48.317943 L 71.319089 48.317943 z -" clip-path="url(#pde6d94f6dd)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p52ce6278e0)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -822,7 +822,7 @@ L 633.452423 7.2 +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -835,7 +835,7 @@ L 698.801566 7.2 +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -849,7 +849,7 @@ L 764.15071 7.2 +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -863,7 +863,7 @@ L 829.499854 7.2 +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> @@ -891,16 +891,16 @@ L 894.848997 7.2 +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - - + @@ -925,11 +925,11 @@ z +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -945,11 +945,11 @@ L 949.088786 173.986536 +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -995,11 +995,11 @@ z +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1015,11 +1015,11 @@ L 949.088786 117.436746 +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1035,11 +1035,11 @@ L 949.088786 89.161851 +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1055,11 +1055,11 @@ L 949.088786 60.886957 +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1175,7 +1175,7 @@ L 914.45374 145.287518 L 927.523569 145.287518 L 927.523569 214.278261 L 934.058483 214.278261 -" clip-path="url(#p7f4bfa6feb)" style="fill: none; stroke: #ffc0cb; stroke-width: 1.5; stroke-linecap: round"/> +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #ffc0cb; stroke-width: 1.5; stroke-linecap: round"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1209,12 +1283,12 @@ z - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1222,12 +1296,12 @@ L 76.371292 289.22087 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1235,12 +1309,12 @@ L 139.523826 289.22087 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1249,12 +1323,12 @@ L 202.67636 289.22087 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1263,12 +1337,12 @@ L 265.828893 289.22087 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1276,7 +1350,7 @@ L 328.981427 289.22087 - + @@ -1291,12 +1365,12 @@ L 328.981427 289.22087 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1318,12 +1392,12 @@ z - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1333,12 +1407,12 @@ L 386.955453 480.977596 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1346,12 +1420,12 @@ L 386.955453 455.795191 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1360,12 +1434,12 @@ L 386.955453 430.612787 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1375,12 +1449,12 @@ L 386.955453 405.430382 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1390,12 +1464,12 @@ L 386.955453 380.247978 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1405,12 +1479,12 @@ L 386.955453 355.065573 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1420,12 +1494,12 @@ L 386.955453 329.883169 - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -1434,23 +1508,10 @@ L 386.955453 304.700764 - + - +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #4c72b0; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #dd8452; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #55a868; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #8172b3; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> +" clip-path="url(#p1f6690d133)" style="fill: #937860; stroke: #ffffff; stroke-linejoin: miter"/> - + +" clip-path="url(#p1f6690d133)" style="fill: none; stroke: #4c72b0; stroke-opacity: 0.7; stroke-width: 1.5; stroke-linecap: round"/> - - - + + - + - + - - + - + - - + - + - - + - + - +" style="fill: url(#he89d14e410); stroke: #ffffff; stroke-linejoin: miter"/> - + - + - - +" style="fill: url(#h188a3c2859); stroke: #ffffff; stroke-linejoin: miter"/> - + - + @@ -3362,16 +3402,16 @@ z - - + - + @@ -3385,16 +3425,16 @@ z - - + - + - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3454,12 +3494,12 @@ L 651.488786 289.22087 - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3471,12 +3511,12 @@ L 717.62212 289.22087 - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3487,12 +3527,12 @@ L 783.755453 289.22087 - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3503,12 +3543,12 @@ L 849.888786 289.22087 - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3521,12 +3561,12 @@ L 916.02212 289.22087 - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3538,12 +3578,12 @@ L 949.088786 484.466087 - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3555,12 +3595,12 @@ L 949.088786 441.078261 - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3571,12 +3611,12 @@ L 949.088786 397.690435 - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3587,12 +3627,12 @@ L 949.088786 354.302609 - + +" clip-path="url(#p7985daa1f5)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + @@ -3627,22 +3667,22 @@ L 949.088786 289.22087 - + +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + - - + - + @@ -3652,17 +3692,17 @@ L 6 0 - + +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + - + - + @@ -3672,17 +3712,17 @@ L 949.088786 181.408696 - + +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + - + - + @@ -3692,17 +3732,17 @@ L 949.088786 148.53913 - + +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + - + - + @@ -3712,17 +3752,17 @@ L 949.088786 115.669565 - + +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + - + - + @@ -3732,17 +3772,17 @@ L 949.088786 82.8 - + +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + - + - + @@ -3773,17 +3813,17 @@ z - + +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> - + - + - + @@ -3792,7 +3832,7 @@ L 949.088786 17.06087 - + @@ -3801,7 +3841,7 @@ L 949.088786 17.06087 - + +" clip-path="url(#pa9e895386e)" style="fill: none; stroke: #808080; stroke-width: 1.5; stroke-linecap: round"/> - - - - - - - - - - - - - - + - + - + - + - + - + = 0)) else "cpu") + self.action_dim = action_dim self.trajectory_list = list() - # choose whether to use gae or not + self.get_reward_sum = self.get_reward_sum_gae if if_use_gae else self.get_reward_sum_raw self.cri = self.ClassCri(net_dim, state_dim, action_dim, layer_norm).to(self.device) @@ -121,32 +123,50 @@ class AgentPPO: self.cri_optim = torch.optim.Adam(self.cri.parameters(), learning_rate) self.act_optim = torch.optim.Adam(self.act.parameters(), learning_rate) if self.ClassAct else self.cri + # def select_action(self, state): + # states = torch.as_tensor((state,), dtype=torch.float32, device=self.device) + # actions, noises = self.act.get_action(states) + # return actions[0].detach().cpu().numpy(), noises[0].detach().cpu().numpy() + def select_action(self, state): states = torch.as_tensor((state,), dtype=torch.float32, device=self.device) - actions, noises = self.act.get_action(states) - return actions[0].detach().cpu().numpy(), noises[0].detach().cpu().numpy() + action_rl, noise = self.act.get_action(states[0]) + action_rl = action_rl.detach().cpu().numpy().flatten() + noises = noise.detach().cpu().numpy().flatten() + # print(f"Action from RL model: {action_rl}") + # print(f"Noise: {noise}") + # print(f"Expected action dimension: {self.action_dim}") + index = self.current_step % len(self.llm_actions) + self.current_step += 1 + action_llm = self.llm_actions[index] + action_llm = np.array(action_llm, dtype=np.float32) + # print(f"Action from LLM: {action_llm}") + action_combined = 0.5 * action_rl + 0.5 * action_llm + if action_combined.shape[0] != self.action_dim: + raise ValueError("Combined action dimension mismatch. Check the action generation process.") + return action_combined, noises @staticmethod - def get_llm_action(index): + def load_llm_actions(): with open('data/llm_action.json', 'r') as file: - data = json.load(file) - data_tensor = torch.tensor(data, dtype=torch.float32) - normalized_index = index % len(data_tensor) - action = data_tensor[normalized_index].detach().cpu().numpy() - return action + llm_actions = json.load(file) + return llm_actions def explore_env(self, env, target_step): state = self.state # sent state to agent and then agent sent state to method trajectory_temp = list() last_done = 0 for i in range(target_step): - # action = self.get_llm_action(i) - # noise = 0 action, noise = self.select_action(state) - state, next_state, reward, done, = env.step(np.tanh(action)) # make action between -1 & 1 + action = np.tanh(action) # make action between -1 & 1 + # print(f"Action at step {i}: {action}") + if len(action) < 2: + raise ValueError("Action dimension is less than expected. Check the action generation process.") + state, next_state, reward, done, = env.step(action) trajectory_temp.append((state, reward, done, action, noise)) if done: state = env.reset() + self.current_step = 0 last_done = i else: state = next_state diff --git a/module.py b/module.py index af21cb6..0dbb70c 100644 --- a/module.py +++ b/module.py @@ -53,8 +53,9 @@ class Battery: def step(self, action_battery): energy = action_battery * self.max_charge - updated_capacity = max(self.min_soc, - min(self.max_soc, (self.current_capacity * self.capacity + energy) / self.capacity)) + updated_capacity = np.maximum(self.min_soc, + np.minimum(self.max_soc, + (self.current_capacity * self.capacity + energy) / self.capacity)) # if charge, positive, if discharge, negative self.energy_change = (updated_capacity - self.current_capacity) * self.capacity self.current_capacity = updated_capacity # update capacity to current codition @@ -72,6 +73,7 @@ class Battery: class Solar: """simulate a solar panel""" + def __init__(self, parameters): self.current_power = None self.base_voltage = parameters['V_b'] @@ -108,6 +110,7 @@ class Solar: class Wind: """simulate a wind turbine""" + def __init__(self, parameters): self.current_power = None self.cutin_speed = parameters['cutin_speed'] @@ -140,6 +143,7 @@ class Wind: class Grid: """simulate a grid""" + def __init__(self): self.on = True self.delta = 1 diff --git a/plotDRL.py b/plotDRL.py index 224c7b9..20b9fb7 100644 --- a/plotDRL.py +++ b/plotDRL.py @@ -18,35 +18,39 @@ def plot_optimization_result(datasource, directory): # data source is dataframe plt.autoscale(tight=True) T = np.array([i for i in range(24)]) - # plot step cost in ax[0] + # 绘制步长成本 in ax[0] axs[0, 0].cla() axs[0, 0].set_ylabel('Costs') axs[0, 0].set_xlabel('Time(h)') axs[0, 0].bar(T, datasource['step_cost']) # axs[0,0].set_xticks([i for i in range(24)],[i for i in range(1,25)]) - # plot soc and price in ax[1] + # 绘制soc和价格 in ax[1] axs[0, 1].cla() + # 设置第一个 y 轴 axs[0, 1].set_ylabel('Price') axs[0, 1].set_xlabel('Time(h)') + line1, = axs[0, 1].plot(T, datasource['price'], drawstyle='steps-mid', label='Price', color='pink') + # 创建第二个 y 轴 + ax2 = axs[0, 1].twinx() + ax2.set_ylabel('SOC') + line2, = ax2.plot(T, datasource['soc'], drawstyle='steps-mid', label='SOC', color='grey') + # 为每个轴分别创建图例 + lines = [line1, line2] + labels = [line.get_label() for line in lines] + axs[0, 1].legend(lines, labels, loc='upper right', bbox_to_anchor=(1.4, 1), + fontsize=12, frameon=False, labelspacing=0.3) - axs[0, 1].plot(T, datasource['price'], drawstyle='steps-mid', label='Price', color='pink') - axs[0, 1] = axs[0, 1].twinx() - - axs[0, 1].set_ylabel('SOC') - axs[0, 1].plot(T, datasource['soc'], drawstyle='steps-mid', label='SOC', color='grey') - # axs[0,1].set_xticks([i for i in range(24)],[i for i in range(1,25)]) - axs[0, 1].legend(loc='upper right', fontsize=12, frameon=False, labelspacing=0.3) - - # plot accumulated generation and consumption in ax[2] + # 绘制累计发电量和消耗量 in ax[2] axs[1, 0].cla() axs[1, 0].set_ylabel('Outputs of DGs and Battery') axs[1, 0].set_xlabel('Time(h)') + # 处理电池充放电数据 battery_positive = np.array(datasource['battery_energy_change']) battery_negative = np.array(datasource['battery_energy_change']) - battery_negative = np.minimum(battery_negative, 0) # discharge battery_positive = np.maximum(battery_positive, 0) # charge - # deal with power exchange within the figure + battery_negative = np.minimum(battery_negative, 0) # discharge + # 处理电网进出口数据 imported_from_grid = np.array(datasource['grid_import']) exported_2_grid = np.array(datasource['grid_export']) axs[1, 0].bar(T, datasource['gen1'], label='Gen1') @@ -55,13 +59,14 @@ def plot_optimization_result(datasource, directory): # data source is dataframe axs[1, 0].bar(T, -battery_positive, color='blue', hatch='/', label='ESS charge') axs[1, 0].bar(T, -battery_negative, hatch='/', label='ESS discharge', bottom=datasource['gen3'] + datasource['gen2'] + datasource['gen1']) - # import as generate + # 生成即进口 axs[1, 0].bar(T, imported_from_grid, label='Grid import', bottom=-battery_negative + datasource['gen3'] + datasource['gen2'] + datasource['gen1']) - # export as load + # 负载即出口 axs[1, 0].bar(T, -exported_2_grid, label='Grid export', bottom=-battery_positive) + # 绘制净负载曲线 axs[1, 0].plot(T, datasource['netload'], label='Netload', drawstyle='steps-mid', alpha=0.7) - axs[1, 0].legend(loc='upper right', fontsize=12, frameon=False, labelspacing=0.3) + axs[1, 0].legend(loc='upper right', bbox_to_anchor=(1.4, 1), fontsize=12, frameon=False, labelspacing=0.3) # axs[1,0].set_xticks([i for i in range(24)],[i for i in range(1,25)]) fig.savefig(f"{directory}/optimization_information.svg", format='svg', dpi=600, bbox_inches='tight') @@ -72,38 +77,40 @@ def plot_evaluation_information(datasource, directory): sns.set_theme(style='whitegrid') with open(datasource, 'rb') as tf: test_data = pickle.load(tf) - # plot unbalance, and reward of each step by bar figures + # 用条形图表示每一步的不平衡和奖励 plt.rcParams["figure.figsize"] = (16, 9) fig, axs = plt.subplots(2, 2) plt.subplots_adjust(wspace=0.7, hspace=0.3) plt.autoscale(tight=True) - # prepare data for evaluation the environment here + # 为评估环境准备数据 eval_data = pd.DataFrame(test_data['system_info']) eval_data.columns = ['time_step', 'price', 'netload', 'action', 'real_action', 'soc', 'battery', 'gen1', 'gen2', 'gen3', 'temperature', 'irradiance', 'unbalance', 'operation_cost'] - # plot unbalance in axs[0] + # 绘制不平衡度 in axs[0] axs[0, 0].cla() axs[0, 0].set_ylabel('Unbalance of Generation and Load') axs[0, 0].bar(eval_data['time_step'], eval_data['unbalance'], label='Exchange with Grid', width=0.4) axs[0, 0].bar(eval_data['time_step'] + 0.4, eval_data['netload'], label='Netload', width=0.4) - axs[0, 0].legend(loc='upper right', fontsize=12, frameon=False, labelspacing=0.5) + axs[0, 0].legend(loc='upper right', bbox_to_anchor=(1.4, 1), fontsize=12, frameon=False, labelspacing=0.5) # axs[0,0].set_xticks([i for i in range(24)],[i for i in range(1,25)]) - # plot energy charge/discharge with price in ax[1] + # 绘制能源充/放电与价格关系图 in ax[1] axs[0, 1].cla() axs[0, 1].set_ylabel('Price') axs[0, 1].set_xlabel('Time Steps') + line1, = axs[0, 1].plot(eval_data['time_step'], eval_data['price'], drawstyle='steps-mid', label='Price', + color='pink') + ax2 = axs[0, 1].twinx() + ax2.set_ylabel('SOC') + line2, = ax2.plot(eval_data['time_step'], eval_data['soc'], drawstyle='steps-mid', label='SOC', color='grey') + lines = [line1, line2] + labels = [line.get_label() for line in lines] + axs[0, 1].legend(lines, labels, loc='upper right', bbox_to_anchor=(1.4, 1), + fontsize=12, frameon=False, labelspacing=0.3) - axs[0, 1].plot(eval_data['time_step'], eval_data['price'], drawstyle='steps-mid', label='Price', color='pink') - axs[0, 1] = axs[0, 1].twinx() - axs[0, 1].set_ylabel('SOC') - # axs[0,1].set_xticks([i for i in range(24)], [i for i in range(1, 25)]) - axs[0, 1].plot(eval_data['time_step'], eval_data['soc'], drawstyle='steps-mid', label='SOC', color='grey') - axs[0, 1].legend(loc='upper right', fontsize=12, frameon=False, labelspacing=0.3) - - # plot generation and netload in ax[2] + # 绘制发电量和负载量 in ax[2] axs[1, 0].cla() axs[1, 0].set_ylabel('Outputs of Units and Netload (kWh)') # axs[1,0].set_xticks([i for i in range(24)], [i for i in range(1, 25)]) @@ -112,7 +119,6 @@ def plot_evaluation_information(datasource, directory): battery_positive = np.maximum(battery_positive, 0) # charge battery_negative = np.minimum(battery_negative, 0) # discharge - # deal with power exchange within the figure imported_from_grid = np.minimum(np.array(eval_data['unbalance']), 0) exported_2_grid = np.maximum(np.array(eval_data['unbalance']), 0) x = eval_data['time_step'] @@ -127,9 +133,9 @@ def plot_evaluation_information(datasource, directory): axs[1, 0].bar(x, -exported_2_grid, label='Grid export', bottom=-battery_positive) axs[1, 0].plot(x, eval_data['netload'], drawstyle='steps-mid', label='Netload') - axs[1, 0].legend(loc='upper right', fontsize=12, frameon=False, labelspacing=0.3) + axs[1, 0].legend(loc='upper right', bbox_to_anchor=(1.4, 1), fontsize=12, frameon=False, labelspacing=0.3) - # plot reward in axs[3] + # 绘制奖励 in axs[3] axs[1, 1].cla() axs[1, 1].set_ylabel('Costs') axs[1, 1].bar(eval_data['time_step'], eval_data['operation_cost'])