Refactor manuscript title and enhance clarity in results discussion

- Updated manuscript title to reflect a focus on comparison of surrogate strategies for damage-aware optimization. - Improved clarity in the results section by refining descriptions of surrogate model performance and validation metrics. - Enhanced the discussion on the adaptive validation loop and its impact on optimization outcomes. - Clarified the interpretation of objective-function values and the implications of damage control in the optimization framework. - Added figures to illustrate the evolution of optimized window thicknesses and RBF objective surfaces during the optimization process.
parent 1ac5a43f
...@@ -22,6 +22,9 @@ Code/**/*.png ...@@ -22,6 +22,9 @@ Code/**/*.png
Code/**/*.html Code/**/*.html
Code/**/*.svg Code/**/*.svg
# Local browser used by Plotly/Kaleido static image export
.plotly_chrome/
# GiD results # GiD results
*.post.lst *.post.lst
*.post.bin *.post.bin
family,height_cm,width_cm,surrogate,iteration,source_model,window,window_index,thickness_mm,objective_surrogate
H30_B29,30,29,RBF,1,opt1,tw1,1,12.34,0.0
H30_B29,30,29,RBF,1,opt1,tw2,2,14.34,0.0
H30_B29,30,29,RBF,2,opt2,tw1,1,12.68,0.0
H30_B29,30,29,RBF,2,opt2,tw2,2,14.91,0.0
H30_B29,30,29,RBF,3,opt3,tw1,1,12.56,0.0
H30_B29,30,29,RBF,3,opt3,tw2,2,14.79,0.0
H30_B29,30,29,Supervised ML,1,opt1,tw1,1,12.6,0.0
H30_B29,30,29,Supervised ML,1,opt1,tw2,2,14.64,0.0
H30_B29,30,29,Supervised ML,2,opt2,tw1,1,12.53,0.0
H30_B29,30,29,Supervised ML,2,opt2,tw2,2,14.75,0.0
H30_B34,30,34,RBF,1,opt1,tw1,1,15.5,507.37762
H30_B34,30,34,RBF,1,opt1,tw2,2,20.0,507.37762
H30_B34,30,34,RBF,2,opt2,tw1,1,14.8,700.7361
H30_B34,30,34,RBF,2,opt2,tw2,2,18.93,700.7361
H30_B34,30,34,RBF,3,opt3,tw1,1,14.77,688.53041
H30_B34,30,34,RBF,3,opt3,tw2,2,18.95,688.53041
H30_B34,30,34,Supervised ML,1,opt1,tw1,1,15.69,541.94744
H30_B34,30,34,Supervised ML,1,opt1,tw2,2,20.0,541.94744
H30_B34,30,34,Supervised ML,2,opt2,tw1,1,15.14,830.19116
H30_B34,30,34,Supervised ML,2,opt2,tw2,2,20.0,830.19116
H30_B34,30,34,Supervised ML,3,opt3,tw1,1,15.2,796.29365
H30_B34,30,34,Supervised ML,3,opt3,tw2,2,20.0,796.29365
H45_B29,45,29,RBF,1,opt1,tw1,1,5.94,0.0
H45_B29,45,29,RBF,1,opt1,tw2,2,8.38,0.0
H45_B29,45,29,RBF,1,opt1,tw3,3,9.28,0.0
H45_B29,45,29,RBF,2,opt2,tw1,1,5.69,0.0
H45_B29,45,29,RBF,2,opt2,tw2,2,7.97,0.0
H45_B29,45,29,RBF,2,opt2,tw3,3,9.02,0.0
H45_B29,45,29,RBF,3,opt3,tw1,1,5.81,0.0
H45_B29,45,29,RBF,3,opt3,tw2,2,7.88,0.0
H45_B29,45,29,RBF,3,opt3,tw3,3,8.98,0.0
H45_B29,45,29,Supervised ML,1,opt1,tw1,1,5.96,0.0
H45_B29,45,29,Supervised ML,1,opt1,tw2,2,8.23,0.0
H45_B29,45,29,Supervised ML,1,opt1,tw3,3,9.47,0.0
H45_B29,45,29,Supervised ML,2,opt2,tw1,1,5.7,0.0
H45_B29,45,29,Supervised ML,2,opt2,tw2,2,7.9,0.0
H45_B29,45,29,Supervised ML,2,opt2,tw3,3,9.02,0.0
H45_B29,45,29,Supervised ML,3,opt3,tw1,1,5.72,0.0
H45_B29,45,29,Supervised ML,3,opt3,tw2,2,7.87,0.0
H45_B29,45,29,Supervised ML,3,opt3,tw3,3,8.96,0.0
H45_B34,45,34,RBF,1,opt1,tw1,1,7.21,0.0
H45_B34,45,34,RBF,1,opt1,tw2,2,9.27,0.0
H45_B34,45,34,RBF,1,opt1,tw3,3,9.82,0.0
H45_B34,45,34,RBF,2,opt2,tw1,1,6.81,0.0
H45_B34,45,34,RBF,2,opt2,tw2,2,9.02,0.0
H45_B34,45,34,RBF,2,opt2,tw3,3,9.65,0.0
H45_B34,45,34,Supervised ML,1,opt1,tw1,1,7.34,0.0
H45_B34,45,34,Supervised ML,1,opt1,tw2,2,9.28,0.0
H45_B34,45,34,Supervised ML,1,opt1,tw3,3,10.13,0.0
H45_B34,45,34,Supervised ML,2,opt2,tw1,1,6.87,0.0
H45_B34,45,34,Supervised ML,2,opt2,tw2,2,9.08,0.0
H45_B34,45,34,Supervised ML,2,opt2,tw3,3,9.86,0.0
H45_B34,45,34,Supervised ML,3,opt3,tw1,1,6.84,0.0
H45_B34,45,34,Supervised ML,3,opt3,tw2,2,9.05,0.0
H45_B34,45,34,Supervised ML,3,opt3,tw3,3,9.73,0.0
H60_B34,60,34,RBF,1,opt1,tw1,1,5.98,15.02082
H60_B34,60,34,RBF,1,opt1,tw2,2,7.29,15.02082
H60_B34,60,34,RBF,1,opt1,tw3,3,8.53,15.02082
H60_B34,60,34,RBF,1,opt1,tw4,4,6.73,15.02082
H60_B34,60,34,RBF,1,opt1,tw5,5,5.0,15.02082
H60_B34,60,34,RBF,2,opt2,tw1,1,5.71,16.67562
H60_B34,60,34,RBF,2,opt2,tw2,2,7.44,16.67562
H60_B34,60,34,RBF,2,opt2,tw3,3,8.51,16.67562
H60_B34,60,34,RBF,2,opt2,tw4,4,6.15,16.67562
H60_B34,60,34,RBF,2,opt2,tw5,5,5.0,16.67562
H60_B34,60,34,RBF,3,opt3,tw1,1,5.77,17.74124
H60_B34,60,34,RBF,3,opt3,tw2,2,7.38,17.74124
H60_B34,60,34,RBF,3,opt3,tw3,3,8.37,17.74124
H60_B34,60,34,RBF,3,opt3,tw4,4,6.18,17.74124
H60_B34,60,34,RBF,3,opt3,tw5,5,5.0,17.74124
H60_B34,60,34,Supervised ML,1,opt1,tw1,1,5.97,10.58275
H60_B34,60,34,Supervised ML,1,opt1,tw2,2,7.38,10.58275
H60_B34,60,34,Supervised ML,1,opt1,tw3,3,8.56,10.58275
H60_B34,60,34,Supervised ML,1,opt1,tw4,4,6.7,10.58275
H60_B34,60,34,Supervised ML,1,opt1,tw5,5,5.0,10.58275
H60_B34,60,34,Supervised ML,2,opt2,tw1,1,5.76,16.96082
H60_B34,60,34,Supervised ML,2,opt2,tw2,2,7.37,16.96082
H60_B34,60,34,Supervised ML,2,opt2,tw3,3,8.46,16.96082
H60_B34,60,34,Supervised ML,2,opt2,tw4,4,6.67,16.96082
H60_B34,60,34,Supervised ML,2,opt2,tw5,5,5.0,16.96082
H60_B34,60,34,Supervised ML,3,opt3,tw1,1,5.74,16.90444
H60_B34,60,34,Supervised ML,3,opt3,tw2,2,7.46,16.90444
H60_B34,60,34,Supervised ML,3,opt3,tw3,3,8.5,16.90444
H60_B34,60,34,Supervised ML,3,opt3,tw4,4,6.37,16.90444
H60_B34,60,34,Supervised ML,3,opt3,tw5,5,5.0,16.90444
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="713.103375pt" height="327.918pt" viewBox="0 0 713.103375 327.918" xmlns="http://www.w3.org/2000/svg" version="1.1">
<metadata>
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<cc:Work>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:date>2026-05-15T09:29:41.742607</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:creator>
<cc:Agent>
<dc:title>Matplotlib v3.10.8, https://matplotlib.org/</dc:title>
</cc:Agent>
</dc:creator>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
</defs>
<g id="figure_1">
<g id="patch_1">
<path d="M 0 327.918
L 713.103375 327.918
L 713.103375 0
L 0 0
z
" style="fill: #ffffff"/>
</g>
<g id="axes_1">
<g id="patch_2">
<path d="M 37.599375 234.18
L 705.903375 234.18
L 705.903375 7.2
L 37.599375 7.2
z
" style="fill: #ffffff"/>
</g>
<g id="line2d_1">
<path d="M 165.734827 234.18
L 165.734827 7.2
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-width: 0.7; stroke-linecap: square"/>
</g>
<g id="line2d_2">
<path d="M 303.079192 234.18
L 303.079192 7.2
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-width: 0.7; stroke-linecap: square"/>
</g>
<g id="line2d_3">
<path d="M 440.423558 234.18
L 440.423558 7.2
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-width: 0.7; stroke-linecap: square"/>
</g>
<g id="line2d_4">
<path d="M 577.767923 234.18
L 577.767923 7.2
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-width: 0.7; stroke-linecap: square"/>
</g>
<g id="matplotlib.axis_1">
<g id="xtick_1">
<g id="line2d_5"/>
<g id="text_1">
<!-- it1 -->
<g transform="translate(50.739077 244.12375) scale(0.1 -0.1)">
<defs>
<path id="TimesNewRomanPSMT-69" d="M 928 4444
Q 1059 4444 1151 4351
Q 1244 4259 1244 4128
Q 1244 3997 1151 3903
Q 1059 3809 928 3809
Q 797 3809 703 3903
Q 609 3997 609 4128
Q 609 4259 701 4351
Q 794 4444 928 4444
z
M 1188 2947
L 1188 647
Q 1188 378 1227 289
Q 1266 200 1342 156
Q 1419 113 1622 113
L 1622 0
L 231 0
L 231 113
Q 441 113 512 153
Q 584 194 626 287
Q 669 381 669 647
L 669 1750
Q 669 2216 641 2353
Q 619 2453 572 2492
Q 525 2531 444 2531
Q 356 2531 231 2484
L 188 2597
L 1050 2947
L 1188 2947
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-74" d="M 1031 3803
L 1031 2863
L 1700 2863
L 1700 2644
L 1031 2644
L 1031 788
Q 1031 509 1111 412
Q 1191 316 1316 316
Q 1419 316 1516 380
Q 1613 444 1666 569
L 1788 569
Q 1678 263 1478 108
Q 1278 -47 1066 -47
Q 922 -47 784 33
Q 647 113 581 261
Q 516 409 516 719
L 516 2644
L 63 2644
L 63 2747
Q 234 2816 414 2980
Q 594 3144 734 3369
Q 806 3488 934 3803
L 1031 3803
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-31" d="M 750 3822
L 1781 4325
L 1884 4325
L 1884 747
Q 1884 391 1914 303
Q 1944 216 2037 169
Q 2131 122 2419 116
L 2419 0
L 825 0
L 825 116
Q 1125 122 1212 167
Q 1300 213 1334 289
Q 1369 366 1369 747
L 1369 3034
Q 1369 3497 1338 3628
Q 1316 3728 1258 3775
Q 1200 3822 1119 3822
Q 1003 3822 797 3725
L 750 3822
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-31" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_2">
<g id="line2d_6"/>
<g id="text_2">
<!-- it2 -->
<g transform="translate(91.784519 244.12375) scale(0.1 -0.1)">
<defs>
<path id="TimesNewRomanPSMT-32" d="M 2934 816
L 2638 0
L 138 0
L 138 116
Q 1241 1122 1691 1759
Q 2141 2397 2141 2925
Q 2141 3328 1894 3587
Q 1647 3847 1303 3847
Q 991 3847 742 3664
Q 494 3481 375 3128
L 259 3128
Q 338 3706 661 4015
Q 984 4325 1469 4325
Q 1984 4325 2329 3994
Q 2675 3663 2675 3213
Q 2675 2891 2525 2569
Q 2294 2063 1775 1497
Q 997 647 803 472
L 1909 472
Q 2247 472 2383 497
Q 2519 522 2628 598
Q 2738 675 2819 816
L 2934 816
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_3">
<g id="line2d_7"/>
<g id="text_3">
<!-- it3 -->
<g transform="translate(132.829962 244.12375) scale(0.1 -0.1)">
<defs>
<path id="TimesNewRomanPSMT-33" d="M 325 3431
Q 506 3859 782 4092
Q 1059 4325 1472 4325
Q 1981 4325 2253 3994
Q 2459 3747 2459 3466
Q 2459 3003 1878 2509
Q 2269 2356 2469 2072
Q 2669 1788 2669 1403
Q 2669 853 2319 450
Q 1863 -75 997 -75
Q 569 -75 414 31
Q 259 138 259 259
Q 259 350 332 419
Q 406 488 509 488
Q 588 488 669 463
Q 722 447 909 348
Q 1097 250 1169 231
Q 1284 197 1416 197
Q 1734 197 1970 444
Q 2206 691 2206 1028
Q 2206 1275 2097 1509
Q 2016 1684 1919 1775
Q 1784 1900 1550 2001
Q 1316 2103 1072 2103
L 972 2103
L 972 2197
Q 1219 2228 1467 2375
Q 1716 2522 1828 2728
Q 1941 2934 1941 3181
Q 1941 3503 1739 3701
Q 1538 3900 1238 3900
Q 753 3900 428 3381
L 325 3431
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_4">
<g id="line2d_8"/>
<g id="text_4">
<!-- it1 -->
<g transform="translate(188.083442 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-31" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_5">
<g id="line2d_9"/>
<g id="text_5">
<!-- it2 -->
<g transform="translate(229.128885 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_6">
<g id="line2d_10"/>
<g id="text_6">
<!-- it3 -->
<g transform="translate(270.174327 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_7">
<g id="line2d_11"/>
<g id="text_7">
<!-- it1 -->
<g transform="translate(325.427807 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-31" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_8">
<g id="line2d_12"/>
<g id="text_8">
<!-- it2 -->
<g transform="translate(366.47325 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_9">
<g id="line2d_13"/>
<g id="text_9">
<!-- it3 -->
<g transform="translate(407.518693 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_10">
<g id="line2d_14"/>
<g id="text_10">
<!-- it1 -->
<g transform="translate(462.772173 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-31" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_11">
<g id="line2d_15"/>
<g id="text_11">
<!-- it2 -->
<g transform="translate(503.817615 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_12">
<g id="line2d_16"/>
<g id="text_12">
<!-- it3 -->
<g transform="translate(544.863058 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_13">
<g id="line2d_17"/>
<g id="text_13">
<!-- it1 -->
<g transform="translate(600.116538 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-31" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_14">
<g id="line2d_18"/>
<g id="text_14">
<!-- it2 -->
<g transform="translate(641.161981 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_15">
<g id="line2d_19"/>
<g id="text_15">
<!-- it3 -->
<g transform="translate(682.207423 244.12375) scale(0.1 -0.1)">
<use xlink:href="#TimesNewRomanPSMT-69"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(55.566406 0)"/>
</g>
</g>
</g>
<g id="xtick_16">
<g id="line2d_20"/>
</g>
<g id="xtick_17">
<g id="line2d_21"/>
</g>
<g id="xtick_18">
<g id="line2d_22"/>
</g>
<g id="xtick_19">
<g id="line2d_23"/>
</g>
<g id="xtick_20">
<g id="line2d_24"/>
</g>
<g id="xtick_21">
<g id="line2d_25"/>
</g>
<g id="xtick_22">
<g id="line2d_26"/>
</g>
<g id="xtick_23">
<g id="line2d_27"/>
</g>
<g id="xtick_24">
<g id="line2d_28"/>
</g>
<g id="xtick_25">
<g id="line2d_29"/>
</g>
<g id="xtick_26">
<g id="line2d_30"/>
</g>
<g id="xtick_27">
<g id="line2d_31"/>
</g>
<g id="xtick_28">
<g id="line2d_32"/>
</g>
<g id="xtick_29">
<g id="line2d_33"/>
</g>
<g id="xtick_30">
<g id="line2d_34"/>
</g>
<g id="xtick_31">
<g id="line2d_35"/>
</g>
<g id="xtick_32">
<g id="line2d_36"/>
</g>
<g id="xtick_33">
<g id="line2d_37"/>
</g>
<g id="xtick_34">
<g id="line2d_38"/>
</g>
<g id="xtick_35">
<g id="line2d_39"/>
</g>
<g id="xtick_36">
<g id="line2d_40"/>
</g>
<g id="xtick_37">
<g id="line2d_41"/>
</g>
<g id="xtick_38">
<g id="line2d_42"/>
</g>
<g id="xtick_39">
<g id="line2d_43"/>
</g>
<g id="xtick_40">
<g id="line2d_44"/>
</g>
<g id="xtick_41">
<g id="line2d_45"/>
</g>
<g id="xtick_42">
<g id="line2d_46"/>
</g>
<g id="xtick_43">
<g id="line2d_47"/>
</g>
<g id="xtick_44">
<g id="line2d_48"/>
</g>
<g id="xtick_45">
<g id="line2d_49"/>
</g>
<g id="xtick_46">
<g id="line2d_50"/>
</g>
<g id="xtick_47">
<g id="line2d_51"/>
</g>
<g id="xtick_48">
<g id="line2d_52"/>
</g>
<g id="xtick_49">
<g id="line2d_53"/>
</g>
<g id="xtick_50">
<g id="line2d_54"/>
</g>
<g id="xtick_51">
<g id="line2d_55"/>
</g>
<g id="xtick_52">
<g id="line2d_56"/>
</g>
<g id="xtick_53">
<g id="line2d_57"/>
</g>
<g id="xtick_54">
<g id="line2d_58"/>
</g>
<g id="xtick_55">
<g id="line2d_59"/>
</g>
<g id="xtick_56">
<g id="line2d_60"/>
</g>
<g id="xtick_57">
<g id="line2d_61"/>
</g>
<g id="xtick_58">
<g id="line2d_62"/>
</g>
<g id="xtick_59">
<g id="line2d_63"/>
</g>
<g id="xtick_60">
<g id="line2d_64"/>
</g>
<g id="xtick_61">
<g id="line2d_65"/>
</g>
<g id="xtick_62">
<g id="line2d_66"/>
</g>
<g id="xtick_63">
<g id="line2d_67"/>
</g>
<g id="xtick_64">
<g id="line2d_68"/>
</g>
<g id="xtick_65">
<g id="line2d_69"/>
</g>
<g id="xtick_66">
<g id="line2d_70"/>
</g>
<g id="xtick_67">
<g id="line2d_71"/>
</g>
<g id="xtick_68">
<g id="line2d_72"/>
</g>
<g id="xtick_69">
<g id="line2d_73"/>
</g>
<g id="xtick_70">
<g id="line2d_74"/>
</g>
<g id="xtick_71">
<g id="line2d_75"/>
</g>
<g id="xtick_72">
<g id="line2d_76"/>
</g>
<g id="xtick_73">
<g id="line2d_77"/>
</g>
<g id="xtick_74">
<g id="line2d_78"/>
</g>
<g id="xtick_75">
<g id="line2d_79"/>
</g>
<g id="xtick_76">
<g id="line2d_80"/>
</g>
<g id="xtick_77">
<g id="line2d_81"/>
</g>
</g>
<g id="matplotlib.axis_2">
<g id="ytick_1">
<g id="line2d_82">
<path d="M 37.599375 208.509643
L 705.903375 208.509643
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_83">
<defs>
<path id="m6441478011" d="M 0 0
L 4 0
" style="stroke: #000000; stroke-width: 0.7"/>
</defs>
<g>
<use xlink:href="#m6441478011" x="37.599375" y="208.509643" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_16">
<!-- 6 -->
<g transform="translate(28.099375 212.675893) scale(0.12 -0.12)">
<defs>
<path id="TimesNewRomanPSMT-36" d="M 2869 4325
L 2869 4209
Q 2456 4169 2195 4045
Q 1934 3922 1679 3669
Q 1425 3416 1258 3105
Q 1091 2794 978 2366
Q 1428 2675 1881 2675
Q 2316 2675 2634 2325
Q 2953 1975 2953 1425
Q 2953 894 2631 456
Q 2244 -75 1606 -75
Q 1172 -75 869 213
Q 275 772 275 1663
Q 275 2231 503 2743
Q 731 3256 1154 3653
Q 1578 4050 1965 4187
Q 2353 4325 2688 4325
L 2869 4325
z
M 925 2138
Q 869 1716 869 1456
Q 869 1156 980 804
Q 1091 453 1309 247
Q 1469 100 1697 100
Q 1969 100 2183 356
Q 2397 613 2397 1088
Q 2397 1622 2184 2012
Q 1972 2403 1581 2403
Q 1463 2403 1327 2353
Q 1191 2303 925 2138
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-36"/>
</g>
</g>
</g>
<g id="ytick_2">
<g id="line2d_84">
<path d="M 37.599375 181.488214
L 705.903375 181.488214
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_85">
<g>
<use xlink:href="#m6441478011" x="37.599375" y="181.488214" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_17">
<!-- 8 -->
<g transform="translate(28.099375 185.654464) scale(0.12 -0.12)">
<defs>
<path id="TimesNewRomanPSMT-38" d="M 1228 2134
Q 725 2547 579 2797
Q 434 3047 434 3316
Q 434 3728 753 4026
Q 1072 4325 1600 4325
Q 2113 4325 2425 4047
Q 2738 3769 2738 3413
Q 2738 3175 2569 2928
Q 2400 2681 1866 2347
Q 2416 1922 2594 1678
Q 2831 1359 2831 1006
Q 2831 559 2490 242
Q 2150 -75 1597 -75
Q 994 -75 656 303
Q 388 606 388 966
Q 388 1247 577 1523
Q 766 1800 1228 2134
z
M 1719 2469
Q 2094 2806 2194 3001
Q 2294 3197 2294 3444
Q 2294 3772 2109 3958
Q 1925 4144 1606 4144
Q 1288 4144 1088 3959
Q 888 3775 888 3528
Q 888 3366 970 3203
Q 1053 3041 1206 2894
L 1719 2469
z
M 1375 2016
Q 1116 1797 991 1539
Q 866 1281 866 981
Q 866 578 1086 336
Q 1306 94 1647 94
Q 1984 94 2187 284
Q 2391 475 2391 747
Q 2391 972 2272 1150
Q 2050 1481 1375 2016
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-38"/>
</g>
</g>
</g>
<g id="ytick_3">
<g id="line2d_86">
<path d="M 37.599375 154.466786
L 705.903375 154.466786
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_87">
<g>
<use xlink:href="#m6441478011" x="37.599375" y="154.466786" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_18">
<!-- 10 -->
<g transform="translate(22.099375 158.633036) scale(0.12 -0.12)">
<defs>
<path id="TimesNewRomanPSMT-30" d="M 231 2094
Q 231 2819 450 3342
Q 669 3866 1031 4122
Q 1313 4325 1613 4325
Q 2100 4325 2488 3828
Q 2972 3213 2972 2159
Q 2972 1422 2759 906
Q 2547 391 2217 158
Q 1888 -75 1581 -75
Q 975 -75 572 641
Q 231 1244 231 2094
z
M 844 2016
Q 844 1141 1059 588
Q 1238 122 1591 122
Q 1759 122 1940 273
Q 2122 425 2216 781
Q 2359 1319 2359 2297
Q 2359 3022 2209 3506
Q 2097 3866 1919 4016
Q 1791 4119 1609 4119
Q 1397 4119 1231 3928
Q 1006 3669 925 3112
Q 844 2556 844 2016
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-31"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(50 0)"/>
</g>
</g>
</g>
<g id="ytick_4">
<g id="line2d_88">
<path d="M 37.599375 127.445357
L 705.903375 127.445357
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_89">
<g>
<use xlink:href="#m6441478011" x="37.599375" y="127.445357" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_19">
<!-- 12 -->
<g transform="translate(22.099375 131.611607) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-31"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(50 0)"/>
</g>
</g>
</g>
<g id="ytick_5">
<g id="line2d_90">
<path d="M 37.599375 100.423929
L 705.903375 100.423929
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_91">
<g>
<use xlink:href="#m6441478011" x="37.599375" y="100.423929" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_20">
<!-- 14 -->
<g transform="translate(22.099375 104.590179) scale(0.12 -0.12)">
<defs>
<path id="TimesNewRomanPSMT-34" d="M 2978 1563
L 2978 1119
L 2409 1119
L 2409 0
L 1894 0
L 1894 1119
L 100 1119
L 100 1519
L 2066 4325
L 2409 4325
L 2409 1563
L 2978 1563
z
M 1894 1563
L 1894 3666
L 406 1563
L 1894 1563
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-31"/>
<use xlink:href="#TimesNewRomanPSMT-34" transform="translate(50 0)"/>
</g>
</g>
</g>
<g id="ytick_6">
<g id="line2d_92">
<path d="M 37.599375 73.4025
L 705.903375 73.4025
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_93">
<g>
<use xlink:href="#m6441478011" x="37.599375" y="73.4025" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_21">
<!-- 16 -->
<g transform="translate(22.099375 77.56875) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-31"/>
<use xlink:href="#TimesNewRomanPSMT-36" transform="translate(50 0)"/>
</g>
</g>
</g>
<g id="ytick_7">
<g id="line2d_94">
<path d="M 37.599375 46.381071
L 705.903375 46.381071
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_95">
<g>
<use xlink:href="#m6441478011" x="37.599375" y="46.381071" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_22">
<!-- 18 -->
<g transform="translate(22.099375 50.547321) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-31"/>
<use xlink:href="#TimesNewRomanPSMT-38" transform="translate(50 0)"/>
</g>
</g>
</g>
<g id="ytick_8">
<g id="line2d_96">
<path d="M 37.599375 19.359643
L 705.903375 19.359643
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_97">
<g>
<use xlink:href="#m6441478011" x="37.599375" y="19.359643" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_23">
<!-- 20 -->
<g transform="translate(22.099375 23.525893) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-32"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(50 0)"/>
</g>
</g>
</g>
<g id="ytick_9">
<g id="line2d_98">
<defs>
<path id="m6a4c1ad03c" d="M 0 0
L 2.5 0
" style="stroke: #000000; stroke-width: 0.6"/>
</defs>
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="228.775714" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_10">
<g id="line2d_99">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="222.020357" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_11">
<g id="line2d_100">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="215.265" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_12">
<g id="line2d_101">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="201.754286" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_13">
<g id="line2d_102">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="194.998929" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_14">
<g id="line2d_103">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="188.243571" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_15">
<g id="line2d_104">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="174.732857" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_16">
<g id="line2d_105">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="167.9775" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_17">
<g id="line2d_106">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="161.222143" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_18">
<g id="line2d_107">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="147.711429" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_19">
<g id="line2d_108">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="140.956071" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_20">
<g id="line2d_109">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="134.200714" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_21">
<g id="line2d_110">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="120.69" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_22">
<g id="line2d_111">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="113.934643" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_23">
<g id="line2d_112">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="107.179286" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_24">
<g id="line2d_113">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="93.668571" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_25">
<g id="line2d_114">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="86.913214" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_26">
<g id="line2d_115">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="80.157857" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_27">
<g id="line2d_116">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="66.647143" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_28">
<g id="line2d_117">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="59.891786" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_29">
<g id="line2d_118">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="53.136429" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_30">
<g id="line2d_119">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="39.625714" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_31">
<g id="line2d_120">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="32.870357" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_32">
<g id="line2d_121">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="26.115" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_33">
<g id="line2d_122">
<g>
<use xlink:href="#m6a4c1ad03c" x="37.599375" y="12.604286" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="text_24">
<!-- Window thickness [mm] -->
<g transform="translate(15.5325 179.774063) rotate(-90) scale(0.12 -0.12)">
<defs>
<path id="TimesNewRomanPSMT-57" d="M 5991 4238
L 5991 4122
Q 5825 4122 5722 4062
Q 5619 4003 5525 3841
Q 5463 3731 5328 3319
L 4147 -97
L 4022 -97
L 3056 2613
L 2097 -97
L 1984 -97
L 725 3422
Q 584 3816 547 3888
Q 484 4006 376 4064
Q 269 4122 84 4122
L 84 4238
L 1653 4238
L 1653 4122
L 1578 4122
Q 1413 4122 1325 4047
Q 1238 3972 1238 3866
Q 1238 3756 1375 3363
L 2209 984
L 2913 3006
L 2788 3363
L 2688 3647
Q 2622 3803 2541 3922
Q 2500 3981 2441 4022
Q 2363 4078 2284 4103
Q 2225 4122 2097 4122
L 2097 4238
L 3747 4238
L 3747 4122
L 3634 4122
Q 3459 4122 3378 4047
Q 3297 3972 3297 3844
Q 3297 3684 3438 3288
L 4250 984
L 5056 3319
Q 5194 3706 5194 3856
Q 5194 3928 5148 3990
Q 5103 4053 5034 4078
Q 4916 4122 4725 4122
L 4725 4238
L 5991 4238
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-6e" d="M 1034 2341
Q 1538 2947 1994 2947
Q 2228 2947 2397 2830
Q 2566 2713 2666 2444
Q 2734 2256 2734 1869
L 2734 647
Q 2734 375 2778 278
Q 2813 200 2889 156
Q 2966 113 3172 113
L 3172 0
L 1756 0
L 1756 113
L 1816 113
Q 2016 113 2095 173
Q 2175 234 2206 353
Q 2219 400 2219 647
L 2219 1819
Q 2219 2209 2117 2386
Q 2016 2563 1775 2563
Q 1403 2563 1034 2156
L 1034 647
Q 1034 356 1069 288
Q 1113 197 1189 155
Q 1266 113 1500 113
L 1500 0
L 84 0
L 84 113
L 147 113
Q 366 113 442 223
Q 519 334 519 647
L 519 1709
Q 519 2225 495 2337
Q 472 2450 423 2490
Q 375 2531 294 2531
Q 206 2531 84 2484
L 38 2597
L 900 2947
L 1034 2947
L 1034 2341
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-64" d="M 2222 322
Q 2013 103 1813 7
Q 1613 -88 1381 -88
Q 913 -88 563 304
Q 213 697 213 1313
Q 213 1928 600 2439
Q 988 2950 1597 2950
Q 1975 2950 2222 2709
L 2222 3238
Q 2222 3728 2198 3840
Q 2175 3953 2125 3993
Q 2075 4034 2000 4034
Q 1919 4034 1784 3984
L 1744 4094
L 2597 4444
L 2738 4444
L 2738 1134
Q 2738 631 2761 520
Q 2784 409 2836 365
Q 2888 322 2956 322
Q 3041 322 3181 375
L 3216 266
L 2366 -88
L 2222 -88
L 2222 322
z
M 2222 541
L 2222 2016
Q 2203 2228 2109 2403
Q 2016 2578 1861 2667
Q 1706 2756 1559 2756
Q 1284 2756 1069 2509
Q 784 2184 784 1559
Q 784 928 1059 592
Q 1334 256 1672 256
Q 1956 256 2222 541
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-6f" d="M 1600 2947
Q 2250 2947 2644 2453
Q 2978 2031 2978 1484
Q 2978 1100 2793 706
Q 2609 313 2286 112
Q 1963 -88 1566 -88
Q 919 -88 538 428
Q 216 863 216 1403
Q 216 1797 411 2186
Q 606 2575 925 2761
Q 1244 2947 1600 2947
z
M 1503 2744
Q 1338 2744 1170 2645
Q 1003 2547 900 2300
Q 797 2053 797 1666
Q 797 1041 1045 587
Q 1294 134 1700 134
Q 2003 134 2200 384
Q 2397 634 2397 1244
Q 2397 2006 2069 2444
Q 1847 2744 1503 2744
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-77" d="M 41 2863
L 1241 2863
L 1241 2747
Q 1075 2734 1023 2687
Q 972 2641 972 2553
Q 972 2456 1025 2319
L 1638 672
L 2253 2013
L 2091 2434
Q 2016 2622 1894 2694
Q 1825 2738 1638 2747
L 1638 2863
L 3000 2863
L 3000 2747
Q 2775 2738 2681 2666
Q 2619 2616 2619 2506
Q 2619 2444 2644 2378
L 3294 734
L 3897 2319
Q 3959 2488 3959 2588
Q 3959 2647 3898 2694
Q 3838 2741 3659 2747
L 3659 2863
L 4563 2863
L 4563 2747
Q 4291 2706 4163 2378
L 3206 -88
L 3078 -88
L 2363 1741
L 1528 -88
L 1413 -88
L 494 2319
Q 403 2547 315 2626
Q 228 2706 41 2747
L 41 2863
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-20" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-68" d="M 1041 4444
L 1041 2350
Q 1388 2731 1591 2839
Q 1794 2947 1997 2947
Q 2241 2947 2416 2812
Q 2591 2678 2675 2391
Q 2734 2191 2734 1659
L 2734 647
Q 2734 375 2778 275
Q 2809 200 2884 156
Q 2959 113 3159 113
L 3159 0
L 1753 0
L 1753 113
L 1819 113
Q 2019 113 2097 173
Q 2175 234 2206 353
Q 2216 403 2216 647
L 2216 1659
Q 2216 2128 2167 2275
Q 2119 2422 2012 2495
Q 1906 2569 1756 2569
Q 1603 2569 1437 2487
Q 1272 2406 1041 2159
L 1041 647
Q 1041 353 1073 281
Q 1106 209 1195 161
Q 1284 113 1503 113
L 1503 0
L 84 0
L 84 113
Q 275 113 384 172
Q 447 203 484 290
Q 522 378 522 647
L 522 3238
Q 522 3728 498 3840
Q 475 3953 426 3993
Q 378 4034 297 4034
Q 231 4034 84 3984
L 41 4094
L 897 4444
L 1041 4444
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-63" d="M 2631 1088
Q 2516 522 2178 217
Q 1841 -88 1431 -88
Q 944 -88 581 321
Q 219 731 219 1428
Q 219 2103 620 2525
Q 1022 2947 1584 2947
Q 2006 2947 2278 2723
Q 2550 2500 2550 2259
Q 2550 2141 2473 2067
Q 2397 1994 2259 1994
Q 2075 1994 1981 2113
Q 1928 2178 1911 2362
Q 1894 2547 1784 2644
Q 1675 2738 1481 2738
Q 1169 2738 978 2506
Q 725 2200 725 1697
Q 725 1184 976 792
Q 1228 400 1656 400
Q 1963 400 2206 609
Q 2378 753 2541 1131
L 2631 1088
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-6b" d="M 1047 4444
L 1047 1594
L 1775 2259
Q 2006 2472 2044 2528
Q 2069 2566 2069 2603
Q 2069 2666 2017 2711
Q 1966 2756 1847 2763
L 1847 2863
L 3091 2863
L 3091 2763
Q 2834 2756 2664 2684
Q 2494 2613 2291 2428
L 1556 1750
L 2291 822
Q 2597 438 2703 334
Q 2853 188 2966 144
Q 3044 113 3238 113
L 3238 0
L 1847 0
L 1847 113
Q 1966 116 2008 148
Q 2050 181 2050 241
Q 2050 313 1925 472
L 1047 1594
L 1047 644
Q 1047 366 1086 278
Q 1125 191 1197 153
Q 1269 116 1509 113
L 1509 0
L 53 0
L 53 113
Q 272 113 381 166
Q 447 200 481 272
Q 528 375 528 628
L 528 3234
Q 528 3731 506 3842
Q 484 3953 434 3995
Q 384 4038 303 4038
Q 238 4038 106 3984
L 53 4094
L 903 4444
L 1047 4444
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-65" d="M 681 1784
Q 678 1147 991 784
Q 1303 422 1725 422
Q 2006 422 2214 576
Q 2422 731 2563 1106
L 2659 1044
Q 2594 616 2278 264
Q 1963 -88 1488 -88
Q 972 -88 605 314
Q 238 716 238 1394
Q 238 2128 614 2539
Q 991 2950 1559 2950
Q 2041 2950 2350 2633
Q 2659 2316 2659 1784
L 681 1784
z
M 681 1966
L 2006 1966
Q 1991 2241 1941 2353
Q 1863 2528 1708 2628
Q 1553 2728 1384 2728
Q 1125 2728 920 2526
Q 716 2325 681 1966
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-73" d="M 2050 2947
L 2050 1972
L 1947 1972
Q 1828 2431 1642 2597
Q 1456 2763 1169 2763
Q 950 2763 815 2647
Q 681 2531 681 2391
Q 681 2216 781 2091
Q 878 1963 1175 1819
L 1631 1597
Q 2266 1288 2266 781
Q 2266 391 1970 151
Q 1675 -88 1309 -88
Q 1047 -88 709 6
Q 606 38 541 38
Q 469 38 428 -44
L 325 -44
L 325 978
L 428 978
Q 516 541 762 319
Q 1009 97 1316 97
Q 1531 97 1667 223
Q 1803 350 1803 528
Q 1803 744 1651 891
Q 1500 1038 1047 1263
Q 594 1488 453 1669
Q 313 1847 313 2119
Q 313 2472 555 2709
Q 797 2947 1181 2947
Q 1350 2947 1591 2875
Q 1750 2828 1803 2828
Q 1853 2828 1881 2850
Q 1909 2872 1947 2947
L 2050 2947
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-5b" d="M 1900 -1269
L 525 -1269
L 525 4334
L 1900 4334
L 1900 4088
L 994 4088
L 994 -1025
L 1900 -1025
L 1900 -1269
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-6d" d="M 1050 2338
Q 1363 2650 1419 2697
Q 1559 2816 1721 2881
Q 1884 2947 2044 2947
Q 2313 2947 2506 2790
Q 2700 2634 2766 2338
Q 3088 2713 3309 2830
Q 3531 2947 3766 2947
Q 3994 2947 4170 2830
Q 4347 2713 4450 2447
Q 4519 2266 4519 1878
L 4519 647
Q 4519 378 4559 278
Q 4591 209 4675 161
Q 4759 113 4950 113
L 4950 0
L 3538 0
L 3538 113
L 3597 113
Q 3781 113 3884 184
Q 3956 234 3988 344
Q 4000 397 4000 647
L 4000 1878
Q 4000 2228 3916 2372
Q 3794 2572 3525 2572
Q 3359 2572 3192 2489
Q 3025 2406 2788 2181
L 2781 2147
L 2788 2013
L 2788 647
Q 2788 353 2820 281
Q 2853 209 2943 161
Q 3034 113 3253 113
L 3253 0
L 1806 0
L 1806 113
Q 2044 113 2133 169
Q 2222 225 2256 338
Q 2272 391 2272 647
L 2272 1878
Q 2272 2228 2169 2381
Q 2031 2581 1784 2581
Q 1616 2581 1450 2491
Q 1191 2353 1050 2181
L 1050 647
Q 1050 366 1089 281
Q 1128 197 1204 155
Q 1281 113 1516 113
L 1516 0
L 100 0
L 100 113
Q 297 113 375 155
Q 453 197 493 289
Q 534 381 534 647
L 534 1741
Q 534 2213 506 2350
Q 484 2453 437 2492
Q 391 2531 309 2531
Q 222 2531 100 2484
L 53 2597
L 916 2947
L 1050 2947
L 1050 2338
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-5d" d="M 234 4334
L 1609 4334
L 1609 -1272
L 234 -1272
L 234 -1025
L 1141 -1025
L 1141 4088
L 234 4088
L 234 4334
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-57"/>
<use xlink:href="#TimesNewRomanPSMT-69" transform="translate(90.384766 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6e" transform="translate(118.167969 0)"/>
<use xlink:href="#TimesNewRomanPSMT-64" transform="translate(168.167969 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6f" transform="translate(218.167969 0)"/>
<use xlink:href="#TimesNewRomanPSMT-77" transform="translate(268.167969 0)"/>
<use xlink:href="#TimesNewRomanPSMT-20" transform="translate(340.384766 0)"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(365.384766 0)"/>
<use xlink:href="#TimesNewRomanPSMT-68" transform="translate(393.167969 0)"/>
<use xlink:href="#TimesNewRomanPSMT-69" transform="translate(443.167969 0)"/>
<use xlink:href="#TimesNewRomanPSMT-63" transform="translate(470.951172 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6b" transform="translate(515.335938 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6e" transform="translate(565.335938 0)"/>
<use xlink:href="#TimesNewRomanPSMT-65" transform="translate(615.335938 0)"/>
<use xlink:href="#TimesNewRomanPSMT-73" transform="translate(659.720703 0)"/>
<use xlink:href="#TimesNewRomanPSMT-73" transform="translate(698.636719 0)"/>
<use xlink:href="#TimesNewRomanPSMT-20" transform="translate(737.552734 0)"/>
<use xlink:href="#TimesNewRomanPSMT-5b" transform="translate(762.552734 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6d" transform="translate(795.853516 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6d" transform="translate(873.636719 0)"/>
<use xlink:href="#TimesNewRomanPSMT-5d" transform="translate(951.419922 0)"/>
</g>
</g>
</g>
<g id="patch_3">
<path d="M 37.599375 234.18
L 37.599375 7.2
" style="fill: none; stroke: #000000; stroke-width: 0.7; stroke-linejoin: miter; stroke-linecap: square"/>
</g>
<g id="patch_4">
<path d="M 37.599375 234.18
L 705.903375 234.18
" style="fill: none; stroke: #000000; stroke-width: 0.7; stroke-linejoin: miter; stroke-linecap: square"/>
</g>
<g id="line2d_123">
<path d="M 56.017202 122.851714
L 97.062644 118.258071
L 138.108087 119.879357
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #1a6faf; stroke-width: 1.5; stroke-linecap: square"/>
<defs>
<path id="m01da5d4e0e" d="M 0 2.1
C 0.556927 2.1 1.091118 1.878731 1.484924 1.484924
C 1.878731 1.091118 2.1 0.556927 2.1 0
C 2.1 -0.556927 1.878731 -1.091118 1.484924 -1.484924
C 1.091118 -1.878731 0.556927 -2.1 0 -2.1
C -0.556927 -2.1 -1.091118 -1.878731 -1.484924 -1.484924
C -1.878731 -1.091118 -2.1 -0.556927 -2.1 0
C -2.1 0.556927 -1.878731 1.091118 -1.484924 1.484924
C -1.091118 1.878731 -0.556927 2.1 0 2.1
z
" style="stroke: #1a6faf; stroke-width: 0.8"/>
</defs>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="56.017202" y="122.851714" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="97.062644" y="118.258071" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="138.108087" y="119.879357" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_124">
<path d="M 56.017202 119.338929
L 97.062644 120.284679
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #1a6faf; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="56.017202" y="119.338929" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="97.062644" y="120.284679" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_125">
<path d="M 56.017202 95.830286
L 97.062644 88.129179
L 138.108087 89.750464
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #e07060; stroke-width: 1.5; stroke-linecap: square"/>
<defs>
<path id="m7bbdf599ea" d="M 0 2.1
C 0.556927 2.1 1.091118 1.878731 1.484924 1.484924
C 1.878731 1.091118 2.1 0.556927 2.1 0
C 2.1 -0.556927 1.878731 -1.091118 1.484924 -1.484924
C 1.091118 -1.878731 0.556927 -2.1 0 -2.1
C -0.556927 -2.1 -1.091118 -1.878731 -1.484924 -1.484924
C -1.878731 -1.091118 -2.1 -0.556927 -2.1 0
C -2.1 0.556927 -1.878731 1.091118 -1.484924 1.484924
C -1.091118 1.878731 -0.556927 2.1 0 2.1
z
" style="stroke: #e07060; stroke-width: 0.8"/>
</defs>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="56.017202" y="95.830286" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="97.062644" y="88.129179" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="138.108087" y="89.750464" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_126">
<path d="M 56.017202 91.777071
L 97.062644 90.290893
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #e07060; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="56.017202" y="91.777071" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="97.062644" y="90.290893" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_127">
<path d="M 193.361567 80.157857
L 234.40701 89.615357
L 275.452452 90.020679
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #1a6faf; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="193.361567" y="80.157857" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="234.40701" y="89.615357" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="275.452452" y="90.020679" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_128">
<path d="M 193.361567 77.590821
L 234.40701 85.021714
L 275.452452 84.211071
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #1a6faf; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="193.361567" y="77.590821" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="234.40701" y="85.021714" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="275.452452" y="84.211071" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_129">
<path d="M 193.361567 19.359643
L 234.40701 33.816107
L 275.452452 33.545893
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #e07060; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="193.361567" y="19.359643" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="234.40701" y="33.816107" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="275.452452" y="33.545893" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_130">
<path d="M 193.361567 19.359643
L 234.40701 19.359643
L 275.452452 19.359643
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #e07060; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="193.361567" y="19.359643" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="234.40701" y="19.359643" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="275.452452" y="19.359643" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_131">
<path d="M 330.705932 209.320286
L 371.751375 212.697964
L 412.796818 211.076679
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #1a6faf; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="330.705932" y="209.320286" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="371.751375" y="212.697964" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="412.796818" y="211.076679" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_132">
<path d="M 330.705932 209.050071
L 371.751375 212.562857
L 412.796818 212.292643
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #1a6faf; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="330.705932" y="209.050071" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="371.751375" y="212.562857" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="412.796818" y="212.292643" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_133">
<path d="M 330.705932 176.354143
L 371.751375 181.893536
L 412.796818 183.1095
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #e07060; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="330.705932" y="176.354143" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="371.751375" y="181.893536" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="412.796818" y="183.1095" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_134">
<path d="M 330.705932 178.38075
L 371.751375 182.839286
L 412.796818 183.244607
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #e07060; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="330.705932" y="178.38075" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="371.751375" y="182.839286" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="412.796818" y="183.244607" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_135">
<path d="M 330.705932 164.1945
L 371.751375 167.707286
L 412.796818 168.247714
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #4d9a57; stroke-width: 1.5; stroke-linecap: square"/>
<defs>
<path id="m54076f75c0" d="M 0 2.1
C 0.556927 2.1 1.091118 1.878731 1.484924 1.484924
C 1.878731 1.091118 2.1 0.556927 2.1 0
C 2.1 -0.556927 1.878731 -1.091118 1.484924 -1.484924
C 1.091118 -1.878731 0.556927 -2.1 0 -2.1
C -0.556927 -2.1 -1.091118 -1.878731 -1.484924 -1.484924
C -1.878731 -1.091118 -2.1 -0.556927 -2.1 0
C -2.1 0.556927 -1.878731 1.091118 -1.484924 1.484924
C -1.091118 1.878731 -0.556927 2.1 0 2.1
z
" style="stroke: #4d9a57; stroke-width: 0.8"/>
</defs>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m54076f75c0" x="330.705932" y="164.1945" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="371.751375" y="167.707286" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="412.796818" y="168.247714" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_136">
<path d="M 330.705932 161.627464
L 371.751375 167.707286
L 412.796818 168.517929
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #4d9a57; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m54076f75c0" x="330.705932" y="161.627464" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="371.751375" y="167.707286" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="412.796818" y="168.517929" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_137">
<path d="M 468.050298 192.161679
L 509.09574 197.565964
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #1a6faf; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="468.050298" y="192.161679" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="509.09574" y="197.565964" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_138">
<path d="M 468.050298 190.405286
L 509.09574 196.755321
L 550.141183 197.160643
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #1a6faf; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="468.050298" y="190.405286" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="509.09574" y="196.755321" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="550.141183" y="197.160643" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_139">
<path d="M 468.050298 164.329607
L 509.09574 167.707286
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #e07060; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="468.050298" y="164.329607" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="509.09574" y="167.707286" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_140">
<path d="M 468.050298 164.1945
L 509.09574 166.896643
L 550.141183 167.301964
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #e07060; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="468.050298" y="164.1945" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="509.09574" y="166.896643" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="550.141183" y="167.301964" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_141">
<path d="M 468.050298 156.898714
L 509.09574 159.195536
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #4d9a57; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m54076f75c0" x="468.050298" y="156.898714" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="509.09574" y="159.195536" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_142">
<path d="M 468.050298 152.710393
L 509.09574 156.358286
L 550.141183 158.114679
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #4d9a57; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m54076f75c0" x="468.050298" y="152.710393" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="509.09574" y="156.358286" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="550.141183" y="158.114679" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_143">
<path d="M 605.394663 208.779857
L 646.440106 212.42775
L 687.485548 211.617107
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #1a6faf; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="605.394663" y="208.779857" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="646.440106" y="212.42775" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="687.485548" y="211.617107" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_144">
<path d="M 605.394663 208.914964
L 646.440106 211.752214
L 687.485548 212.022429
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #1a6faf; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m01da5d4e0e" x="605.394663" y="208.914964" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="646.440106" y="211.752214" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
<use xlink:href="#m01da5d4e0e" x="687.485548" y="212.022429" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_145">
<path d="M 605.394663 191.080821
L 646.440106 189.054214
L 687.485548 189.864857
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #e07060; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="605.394663" y="191.080821" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="646.440106" y="189.054214" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="687.485548" y="189.864857" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_146">
<path d="M 605.394663 189.864857
L 646.440106 189.999964
L 687.485548 188.784
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #e07060; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7bbdf599ea" x="605.394663" y="189.864857" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="646.440106" y="189.999964" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
<use xlink:href="#m7bbdf599ea" x="687.485548" y="188.784" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_147">
<path d="M 605.394663 174.327536
L 646.440106 174.59775
L 687.485548 176.48925
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #4d9a57; stroke-width: 1.5; stroke-linecap: square"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m54076f75c0" x="605.394663" y="174.327536" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="646.440106" y="174.59775" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="687.485548" y="176.48925" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_148">
<path d="M 605.394663 173.922214
L 646.440106 175.273286
L 687.485548 174.732857
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #4d9a57; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m54076f75c0" x="605.394663" y="173.922214" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="646.440106" y="175.273286" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
<use xlink:href="#m54076f75c0" x="687.485548" y="174.732857" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_149">
<path d="M 605.394663 198.646821
L 646.440106 206.483036
L 687.485548 206.077714
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #8b6bbe; stroke-width: 1.5; stroke-linecap: square"/>
<defs>
<path id="m7a4187b773" d="M 0 2.1
C 0.556927 2.1 1.091118 1.878731 1.484924 1.484924
C 1.878731 1.091118 2.1 0.556927 2.1 0
C 2.1 -0.556927 1.878731 -1.091118 1.484924 -1.484924
C 1.091118 -1.878731 0.556927 -2.1 0 -2.1
C -0.556927 -2.1 -1.091118 -1.878731 -1.484924 -1.484924
C -1.878731 -1.091118 -2.1 -0.556927 -2.1 0
C -2.1 0.556927 -1.878731 1.091118 -1.484924 1.484924
C -1.091118 1.878731 -0.556927 2.1 0 2.1
z
" style="stroke: #8b6bbe; stroke-width: 0.8"/>
</defs>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7a4187b773" x="605.394663" y="198.646821" style="fill: #ffffff; stroke: #8b6bbe; stroke-width: 0.8"/>
<use xlink:href="#m7a4187b773" x="646.440106" y="206.483036" style="fill: #ffffff; stroke: #8b6bbe; stroke-width: 0.8"/>
<use xlink:href="#m7a4187b773" x="687.485548" y="206.077714" style="fill: #ffffff; stroke: #8b6bbe; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_150">
<path d="M 605.394663 199.052143
L 646.440106 199.457464
L 687.485548 203.510679
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #8b6bbe; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m7a4187b773" x="605.394663" y="199.052143" style="fill: #ffffff; stroke: #8b6bbe; stroke-width: 0.8"/>
<use xlink:href="#m7a4187b773" x="646.440106" y="199.457464" style="fill: #ffffff; stroke: #8b6bbe; stroke-width: 0.8"/>
<use xlink:href="#m7a4187b773" x="687.485548" y="203.510679" style="fill: #ffffff; stroke: #8b6bbe; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_151">
<path d="M 605.394663 222.020357
L 646.440106 222.020357
L 687.485548 222.020357
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke: #d49a2a; stroke-width: 1.5; stroke-linecap: square"/>
<defs>
<path id="m934becfce0" d="M 0 2.1
C 0.556927 2.1 1.091118 1.878731 1.484924 1.484924
C 1.878731 1.091118 2.1 0.556927 2.1 0
C 2.1 -0.556927 1.878731 -1.091118 1.484924 -1.484924
C 1.091118 -1.878731 0.556927 -2.1 0 -2.1
C -0.556927 -2.1 -1.091118 -1.878731 -1.484924 -1.484924
C -1.878731 -1.091118 -2.1 -0.556927 -2.1 0
C -2.1 0.556927 -1.878731 1.091118 -1.484924 1.484924
C -1.091118 1.878731 -0.556927 2.1 0 2.1
z
" style="stroke: #d49a2a; stroke-width: 0.8"/>
</defs>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m934becfce0" x="605.394663" y="222.020357" style="fill: #ffffff; stroke: #d49a2a; stroke-width: 0.8"/>
<use xlink:href="#m934becfce0" x="646.440106" y="222.020357" style="fill: #ffffff; stroke: #d49a2a; stroke-width: 0.8"/>
<use xlink:href="#m934becfce0" x="687.485548" y="222.020357" style="fill: #ffffff; stroke: #d49a2a; stroke-width: 0.8"/>
</g>
</g>
<g id="line2d_152">
<path d="M 605.394663 222.020357
L 646.440106 222.020357
L 687.485548 222.020357
" clip-path="url(#p2984c4b15a)" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #d49a2a; stroke-width: 1.5"/>
<g clip-path="url(#p2984c4b15a)">
<use xlink:href="#m934becfce0" x="605.394663" y="222.020357" style="fill: #ffffff; stroke: #d49a2a; stroke-width: 0.8"/>
<use xlink:href="#m934becfce0" x="646.440106" y="222.020357" style="fill: #ffffff; stroke: #d49a2a; stroke-width: 0.8"/>
<use xlink:href="#m934becfce0" x="687.485548" y="222.020357" style="fill: #ffffff; stroke: #d49a2a; stroke-width: 0.8"/>
</g>
</g>
<g id="text_25">
<!-- H30_B29 -->
<g transform="translate(73.727332 268.5927) scale(0.12 -0.12)">
<defs>
<path id="TimesNewRomanPSMT-48" d="M 1316 2272
L 3284 2272
L 3284 3484
Q 3284 3809 3244 3913
Q 3213 3991 3113 4047
Q 2978 4122 2828 4122
L 2678 4122
L 2678 4238
L 4491 4238
L 4491 4122
L 4341 4122
Q 4191 4122 4056 4050
Q 3956 4000 3920 3898
Q 3884 3797 3884 3484
L 3884 750
Q 3884 428 3925 325
Q 3956 247 4053 191
Q 4191 116 4341 116
L 4491 116
L 4491 0
L 2678 0
L 2678 116
L 2828 116
Q 3088 116 3206 269
Q 3284 369 3284 750
L 3284 2041
L 1316 2041
L 1316 750
Q 1316 428 1356 325
Q 1388 247 1488 191
Q 1622 116 1772 116
L 1925 116
L 1925 0
L 109 0
L 109 116
L 259 116
Q 522 116 641 269
Q 716 369 716 750
L 716 3484
Q 716 3809 675 3913
Q 644 3991 547 4047
Q 409 4122 259 4122
L 109 4122
L 109 4238
L 1925 4238
L 1925 4122
L 1772 4122
Q 1622 4122 1488 4050
Q 1391 4000 1353 3898
Q 1316 3797 1316 3484
L 1316 2272
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-5f" d="M 3256 -1381
L -53 -1381
L -53 -1119
L 3256 -1119
L 3256 -1381
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-42" d="M 2956 2163
Q 3397 2069 3616 1863
Q 3919 1575 3919 1159
Q 3919 844 3719 555
Q 3519 266 3170 133
Q 2822 0 2106 0
L 106 0
L 106 116
L 266 116
Q 531 116 647 284
Q 719 394 719 750
L 719 3488
Q 719 3881 628 3984
Q 506 4122 266 4122
L 106 4122
L 106 4238
L 1938 4238
Q 2450 4238 2759 4163
Q 3228 4050 3475 3764
Q 3722 3478 3722 3106
Q 3722 2788 3528 2536
Q 3334 2284 2956 2163
z
M 1319 2331
Q 1434 2309 1582 2298
Q 1731 2288 1909 2288
Q 2366 2288 2595 2386
Q 2825 2484 2947 2687
Q 3069 2891 3069 3131
Q 3069 3503 2766 3765
Q 2463 4028 1881 4028
Q 1569 4028 1319 3959
L 1319 2331
z
M 1319 306
Q 1681 222 2034 222
Q 2600 222 2897 476
Q 3194 731 3194 1106
Q 3194 1353 3059 1581
Q 2925 1809 2622 1940
Q 2319 2072 1872 2072
Q 1678 2072 1540 2065
Q 1403 2059 1319 2044
L 1319 306
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-39" d="M 338 -88
L 338 28
Q 744 34 1094 217
Q 1444 400 1770 856
Q 2097 1313 2225 1859
Q 1734 1544 1338 1544
Q 891 1544 572 1889
Q 253 2234 253 2806
Q 253 3363 572 3797
Q 956 4325 1575 4325
Q 2097 4325 2469 3894
Q 2925 3359 2925 2575
Q 2925 1869 2578 1258
Q 2231 647 1613 244
Q 1109 -88 516 -88
L 338 -88
z
M 2275 2091
Q 2331 2497 2331 2741
Q 2331 3044 2228 3395
Q 2125 3747 1936 3934
Q 1747 4122 1506 4122
Q 1228 4122 1018 3872
Q 809 3622 809 3128
Q 809 2469 1088 2097
Q 1291 1828 1588 1828
Q 1731 1828 1928 1897
Q 2125 1966 2275 2091
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-48"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(72.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(122.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-5f" transform="translate(172.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-42" transform="translate(222.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(288.916016 0)"/>
<use xlink:href="#TimesNewRomanPSMT-39" transform="translate(338.916016 0)"/>
</g>
</g>
<g id="text_26">
<!-- H30_B34 -->
<g transform="translate(211.071697 268.5927) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-48"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(72.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(122.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-5f" transform="translate(172.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-42" transform="translate(222.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(288.916016 0)"/>
<use xlink:href="#TimesNewRomanPSMT-34" transform="translate(338.916016 0)"/>
</g>
</g>
<g id="text_27">
<!-- H45_B29 -->
<g transform="translate(348.416063 268.5927) scale(0.12 -0.12)">
<defs>
<path id="TimesNewRomanPSMT-35" d="M 2778 4238
L 2534 3706
L 1259 3706
L 981 3138
Q 1809 3016 2294 2522
Q 2709 2097 2709 1522
Q 2709 1188 2573 903
Q 2438 619 2231 419
Q 2025 219 1772 97
Q 1413 -75 1034 -75
Q 653 -75 479 54
Q 306 184 306 341
Q 306 428 378 495
Q 450 563 559 563
Q 641 563 702 538
Q 763 513 909 409
Q 1144 247 1384 247
Q 1750 247 2026 523
Q 2303 800 2303 1197
Q 2303 1581 2056 1914
Q 1809 2247 1375 2428
Q 1034 2569 447 2591
L 1259 4238
L 2778 4238
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-48"/>
<use xlink:href="#TimesNewRomanPSMT-34" transform="translate(72.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(122.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-5f" transform="translate(172.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-42" transform="translate(222.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(288.916016 0)"/>
<use xlink:href="#TimesNewRomanPSMT-39" transform="translate(338.916016 0)"/>
</g>
</g>
<g id="text_28">
<!-- H45_B34 -->
<g transform="translate(485.760428 268.5927) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-48"/>
<use xlink:href="#TimesNewRomanPSMT-34" transform="translate(72.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(122.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-5f" transform="translate(172.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-42" transform="translate(222.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(288.916016 0)"/>
<use xlink:href="#TimesNewRomanPSMT-34" transform="translate(338.916016 0)"/>
</g>
</g>
<g id="text_29">
<!-- H60_B34 -->
<g transform="translate(623.104793 268.5927) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-48"/>
<use xlink:href="#TimesNewRomanPSMT-36" transform="translate(72.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(122.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-5f" transform="translate(172.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-42" transform="translate(222.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(288.916016 0)"/>
<use xlink:href="#TimesNewRomanPSMT-34" transform="translate(338.916016 0)"/>
</g>
</g>
</g>
<g id="legend_1">
<g id="line2d_153">
<path d="M 88.215 309.151125
L 100.215 309.151125
L 112.215 309.151125
" style="fill: none; stroke: #1a6faf; stroke-width: 1.5; stroke-linecap: square"/>
<g>
<use xlink:href="#m01da5d4e0e" x="100.215" y="309.151125" style="fill: #ffffff; stroke: #1a6faf; stroke-width: 0.8"/>
</g>
</g>
<g id="text_30">
<!-- tw1 -->
<g transform="translate(121.815 313.351125) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-74"/>
<use xlink:href="#TimesNewRomanPSMT-77" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-31" transform="translate(100 0)"/>
</g>
</g>
<g id="line2d_154">
<path d="M 156.615 309.151125
L 168.615 309.151125
L 180.615 309.151125
" style="fill: none; stroke: #e07060; stroke-width: 1.5; stroke-linecap: square"/>
<g>
<use xlink:href="#m7bbdf599ea" x="168.615" y="309.151125" style="fill: #ffffff; stroke: #e07060; stroke-width: 0.8"/>
</g>
</g>
<g id="text_31">
<!-- tw2 -->
<g transform="translate(190.215 313.351125) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-74"/>
<use xlink:href="#TimesNewRomanPSMT-77" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(100 0)"/>
</g>
</g>
<g id="line2d_155">
<path d="M 225.015 309.151125
L 237.015 309.151125
L 249.015 309.151125
" style="fill: none; stroke: #4d9a57; stroke-width: 1.5; stroke-linecap: square"/>
<g>
<use xlink:href="#m54076f75c0" x="237.015" y="309.151125" style="fill: #ffffff; stroke: #4d9a57; stroke-width: 0.8"/>
</g>
</g>
<g id="text_32">
<!-- tw3 -->
<g transform="translate(258.615 313.351125) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-74"/>
<use xlink:href="#TimesNewRomanPSMT-77" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-33" transform="translate(100 0)"/>
</g>
</g>
<g id="line2d_156">
<path d="M 293.415 309.151125
L 305.415 309.151125
L 317.415 309.151125
" style="fill: none; stroke: #8b6bbe; stroke-width: 1.5; stroke-linecap: square"/>
<g>
<use xlink:href="#m7a4187b773" x="305.415" y="309.151125" style="fill: #ffffff; stroke: #8b6bbe; stroke-width: 0.8"/>
</g>
</g>
<g id="text_33">
<!-- tw4 -->
<g transform="translate(327.015 313.351125) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-74"/>
<use xlink:href="#TimesNewRomanPSMT-77" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-34" transform="translate(100 0)"/>
</g>
</g>
<g id="line2d_157">
<path d="M 361.815 309.151125
L 373.815 309.151125
L 385.815 309.151125
" style="fill: none; stroke: #d49a2a; stroke-width: 1.5; stroke-linecap: square"/>
<g>
<use xlink:href="#m934becfce0" x="373.815" y="309.151125" style="fill: #ffffff; stroke: #d49a2a; stroke-width: 0.8"/>
</g>
</g>
<g id="text_34">
<!-- tw5 -->
<g transform="translate(395.415 313.351125) scale(0.12 -0.12)">
<use xlink:href="#TimesNewRomanPSMT-74"/>
<use xlink:href="#TimesNewRomanPSMT-77" transform="translate(27.783203 0)"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(100 0)"/>
</g>
</g>
<g id="line2d_158">
<path d="M 430.215 309.151125
L 442.215 309.151125
L 454.215 309.151125
" style="fill: none; stroke: #444444; stroke-width: 1.5; stroke-linecap: square"/>
</g>
<g id="text_35">
<!-- RBF -->
<g transform="translate(463.815 313.351125) scale(0.12 -0.12)">
<defs>
<path id="TimesNewRomanPSMT-52" d="M 4325 0
L 3194 0
L 1759 1981
Q 1600 1975 1500 1975
Q 1459 1975 1412 1976
Q 1366 1978 1316 1981
L 1316 750
Q 1316 350 1403 253
Q 1522 116 1759 116
L 1925 116
L 1925 0
L 109 0
L 109 116
L 269 116
Q 538 116 653 291
Q 719 388 719 750
L 719 3488
Q 719 3888 631 3984
Q 509 4122 269 4122
L 109 4122
L 109 4238
L 1653 4238
Q 2328 4238 2648 4139
Q 2969 4041 3192 3777
Q 3416 3513 3416 3147
Q 3416 2756 3161 2468
Q 2906 2181 2372 2063
L 3247 847
Q 3547 428 3762 290
Q 3978 153 4325 116
L 4325 0
z
M 1316 2178
Q 1375 2178 1419 2176
Q 1463 2175 1491 2175
Q 2097 2175 2405 2437
Q 2713 2700 2713 3106
Q 2713 3503 2464 3751
Q 2216 4000 1806 4000
Q 1625 4000 1316 3941
L 1316 2178
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-46" d="M 1309 4006
L 1309 2341
L 2081 2341
Q 2347 2341 2470 2458
Q 2594 2575 2634 2922
L 2750 2922
L 2750 1488
L 2634 1488
Q 2631 1734 2570 1850
Q 2509 1966 2401 2023
Q 2294 2081 2081 2081
L 1309 2081
L 1309 750
Q 1309 428 1350 325
Q 1381 247 1481 191
Q 1619 116 1769 116
L 1922 116
L 1922 0
L 103 0
L 103 116
L 253 116
Q 516 116 634 269
Q 709 369 709 750
L 709 3488
Q 709 3809 669 3913
Q 638 3991 541 4047
Q 406 4122 253 4122
L 103 4122
L 103 4238
L 3256 4238
L 3297 3306
L 3188 3306
Q 3106 3603 2998 3742
Q 2891 3881 2733 3943
Q 2575 4006 2244 4006
L 1309 4006
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-52"/>
<use xlink:href="#TimesNewRomanPSMT-42" transform="translate(66.699219 0)"/>
<use xlink:href="#TimesNewRomanPSMT-46" transform="translate(133.398438 0)"/>
</g>
</g>
<g id="line2d_159">
<path d="M 503.296875 309.151125
L 515.296875 309.151125
L 527.296875 309.151125
" style="fill: none; stroke-dasharray: 5.55,2.4; stroke-dashoffset: 0; stroke: #444444; stroke-width: 1.5"/>
</g>
<g id="text_36">
<!-- Supervised ML -->
<g transform="translate(536.896875 313.351125) scale(0.12 -0.12)">
<defs>
<path id="TimesNewRomanPSMT-53" d="M 2934 4334
L 2934 2869
L 2819 2869
Q 2763 3291 2617 3541
Q 2472 3791 2203 3937
Q 1934 4084 1647 4084
Q 1322 4084 1109 3886
Q 897 3688 897 3434
Q 897 3241 1031 3081
Q 1225 2847 1953 2456
Q 2547 2138 2764 1967
Q 2981 1797 3098 1565
Q 3216 1334 3216 1081
Q 3216 600 2842 251
Q 2469 -97 1881 -97
Q 1697 -97 1534 -69
Q 1438 -53 1133 45
Q 828 144 747 144
Q 669 144 623 97
Q 578 50 556 -97
L 441 -97
L 441 1356
L 556 1356
Q 638 900 775 673
Q 913 447 1195 297
Q 1478 147 1816 147
Q 2206 147 2432 353
Q 2659 559 2659 841
Q 2659 997 2573 1156
Q 2488 1316 2306 1453
Q 2184 1547 1640 1851
Q 1097 2156 867 2337
Q 638 2519 519 2737
Q 400 2956 400 3219
Q 400 3675 750 4004
Q 1100 4334 1641 4334
Q 1978 4334 2356 4169
Q 2531 4091 2603 4091
Q 2684 4091 2736 4139
Q 2788 4188 2819 4334
L 2934 4334
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-75" d="M 2709 2863
L 2709 1128
Q 2709 631 2732 520
Q 2756 409 2807 365
Q 2859 322 2928 322
Q 3025 322 3147 375
L 3191 266
L 2334 -88
L 2194 -88
L 2194 519
Q 1825 119 1631 15
Q 1438 -88 1222 -88
Q 981 -88 804 51
Q 628 191 559 409
Q 491 628 491 1028
L 491 2306
Q 491 2509 447 2587
Q 403 2666 317 2708
Q 231 2750 6 2747
L 6 2863
L 1009 2863
L 1009 947
Q 1009 547 1148 422
Q 1288 297 1484 297
Q 1619 297 1789 381
Q 1959 466 2194 703
L 2194 2325
Q 2194 2569 2105 2655
Q 2016 2741 1734 2747
L 1734 2863
L 2709 2863
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-70" d="M -6 2578
L 875 2934
L 994 2934
L 994 2266
Q 1216 2644 1439 2795
Q 1663 2947 1909 2947
Q 2341 2947 2628 2609
Q 2981 2197 2981 1534
Q 2981 794 2556 309
Q 2206 -88 1675 -88
Q 1444 -88 1275 -22
Q 1150 25 994 166
L 994 -706
Q 994 -1000 1030 -1079
Q 1066 -1159 1155 -1206
Q 1244 -1253 1478 -1253
L 1478 -1369
L -22 -1369
L -22 -1253
L 56 -1253
Q 228 -1256 350 -1188
Q 409 -1153 442 -1076
Q 475 -1000 475 -688
L 475 2019
Q 475 2297 450 2372
Q 425 2447 370 2484
Q 316 2522 222 2522
Q 147 2522 31 2478
L -6 2578
z
M 994 2081
L 994 1013
Q 994 666 1022 556
Q 1066 375 1236 237
Q 1406 100 1666 100
Q 1978 100 2172 344
Q 2425 663 2425 1241
Q 2425 1897 2138 2250
Q 1938 2494 1663 2494
Q 1513 2494 1366 2419
Q 1253 2363 994 2081
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-72" d="M 1038 2947
L 1038 2303
Q 1397 2947 1775 2947
Q 1947 2947 2059 2842
Q 2172 2738 2172 2600
Q 2172 2478 2090 2393
Q 2009 2309 1897 2309
Q 1788 2309 1652 2417
Q 1516 2525 1450 2525
Q 1394 2525 1328 2463
Q 1188 2334 1038 2041
L 1038 669
Q 1038 431 1097 309
Q 1138 225 1241 169
Q 1344 113 1538 113
L 1538 0
L 72 0
L 72 113
Q 291 113 397 181
Q 475 231 506 341
Q 522 394 522 644
L 522 1753
Q 522 2253 501 2348
Q 481 2444 426 2487
Q 372 2531 291 2531
Q 194 2531 72 2484
L 41 2597
L 906 2947
L 1038 2947
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-76" d="M 53 2863
L 1400 2863
L 1400 2747
L 1313 2747
Q 1191 2747 1127 2687
Q 1063 2628 1063 2528
Q 1063 2419 1128 2269
L 1794 688
L 2463 2328
Q 2534 2503 2534 2594
Q 2534 2638 2509 2666
Q 2475 2713 2422 2730
Q 2369 2747 2206 2747
L 2206 2863
L 3141 2863
L 3141 2747
Q 2978 2734 2916 2681
Q 2806 2588 2719 2369
L 1703 -88
L 1575 -88
L 553 2328
Q 484 2497 421 2570
Q 359 2644 263 2694
Q 209 2722 53 2747
L 53 2863
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-4d" d="M 2619 0
L 981 3566
L 981 734
Q 981 344 1066 247
Q 1181 116 1431 116
L 1581 116
L 1581 0
L 106 0
L 106 116
L 256 116
Q 525 116 638 278
Q 706 378 706 734
L 706 3503
Q 706 3784 644 3909
Q 600 4000 483 4061
Q 366 4122 106 4122
L 106 4238
L 1306 4238
L 2844 922
L 4356 4238
L 5556 4238
L 5556 4122
L 5409 4122
Q 5138 4122 5025 3959
Q 4956 3859 4956 3503
L 4956 734
Q 4956 344 5044 247
Q 5159 116 5409 116
L 5556 116
L 5556 0
L 3756 0
L 3756 116
L 3906 116
Q 4178 116 4288 278
Q 4356 378 4356 734
L 4356 3566
L 2722 0
L 2619 0
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-4c" d="M 3669 1172
L 3772 1150
L 3409 0
L 128 0
L 128 116
L 288 116
Q 556 116 672 291
Q 738 391 738 753
L 738 3488
Q 738 3884 650 3984
Q 528 4122 288 4122
L 128 4122
L 128 4238
L 2047 4238
L 2047 4122
Q 1709 4125 1573 4059
Q 1438 3994 1388 3894
Q 1338 3794 1338 3416
L 1338 753
Q 1338 494 1388 397
Q 1425 331 1503 300
Q 1581 269 1991 269
L 2300 269
Q 2788 269 2984 341
Q 3181 413 3343 595
Q 3506 778 3669 1172
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-53"/>
<use xlink:href="#TimesNewRomanPSMT-75" transform="translate(55.615234 0)"/>
<use xlink:href="#TimesNewRomanPSMT-70" transform="translate(105.615234 0)"/>
<use xlink:href="#TimesNewRomanPSMT-65" transform="translate(155.615234 0)"/>
<use xlink:href="#TimesNewRomanPSMT-72" transform="translate(200 0)"/>
<use xlink:href="#TimesNewRomanPSMT-76" transform="translate(233.300781 0)"/>
<use xlink:href="#TimesNewRomanPSMT-69" transform="translate(283.300781 0)"/>
<use xlink:href="#TimesNewRomanPSMT-73" transform="translate(311.083984 0)"/>
<use xlink:href="#TimesNewRomanPSMT-65" transform="translate(350 0)"/>
<use xlink:href="#TimesNewRomanPSMT-64" transform="translate(394.384766 0)"/>
<use xlink:href="#TimesNewRomanPSMT-20" transform="translate(444.384766 0)"/>
<use xlink:href="#TimesNewRomanPSMT-4d" transform="translate(469.384766 0)"/>
<use xlink:href="#TimesNewRomanPSMT-4c" transform="translate(558.300781 0)"/>
</g>
</g>
</g>
</g>
<defs>
<clipPath id="p2984c4b15a">
<rect x="37.599375" y="7.2" width="668.304" height="226.98"/>
</clipPath>
</defs>
</svg>
#!/usr/bin/env python3
"""Plot optimized window thickness evolution in a single combined figure.
Input CSV expected columns:
family, surrogate, iteration, window, window_index, thickness_mm
The plot groups the x-axis by geometry family and shows adaptive iterations
inside each family block. Window color identifies each thickness variable, and
line style identifies the surrogate strategy:
solid = RBF, dashed = Supervised ML.
"""
from __future__ import annotations
import csv
from pathlib import Path
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
plt.rcParams.update(
{
"font.family": "serif",
"font.serif": ["Times New Roman", "DejaVu Serif"],
"mathtext.fontset": "stix",
"font.size": 12,
"axes.labelsize": 12,
"axes.titlesize": 11,
"xtick.labelsize": 12,
"ytick.labelsize": 12,
"axes.linewidth": 0.7,
"axes.spines.top": False,
"axes.spines.right": False,
"figure.dpi": 300,
"savefig.dpi": 300,
}
)
BASE_DIR = Path(__file__).resolve().parent
INPUT_CSV = BASE_DIR / "optimized_window_thickness_evolution.csv"
FIG_PATH = BASE_DIR / "optimized_window_thickness_evolution"
SURROGATE_LINESTYLES = {
"RBF": "-",
"Supervised ML": "--",
}
SURROGATE_ORDER = ["RBF", "Supervised ML"]
WINDOW_COLORS = {
"tw1": "#1a6faf",
"tw2": "#E07060",
"tw3": "#4D9A57",
"tw4": "#8B6BBE",
"tw5": "#D49A2A",
}
COLOR_GRID = "#d8d8d8"
ITERATION_STEP = 0.78
FAMILY_GAP = 1.05
def load_rows(path: Path):
with path.open(newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
rows = []
for row in reader:
row["iteration"] = int(row["iteration"])
row["window_index"] = int(row["window_index"])
row["thickness_mm"] = float(row["thickness_mm"])
rows.append(row)
return rows
def style_axis(ax, *, include_x_grid: bool = False) -> None:
ax.grid(
True,
axis="both" if include_x_grid else "y",
color=COLOR_GRID,
linewidth=0.55,
alpha=0.75,
)
ax.tick_params(axis="both", which="major", direction="in", length=4, width=0.7)
ax.tick_params(axis="both", which="minor", direction="in", length=2.5, width=0.6)
ax.tick_params(axis="x", which="both", length=0)
ax.minorticks_on()
def save_figure_all_formats(fig, out_base: Path) -> None:
fig.savefig(f"{out_base}.png", format="png", bbox_inches="tight", dpi=300)
fig.savefig(f"{out_base}.svg", format="svg", bbox_inches="tight")
fig.savefig(f"{out_base}.pdf", format="pdf", bbox_inches="tight")
def family_sort_key(family: str) -> tuple[int, int, str]:
height_text, width_text = family.split("_")
return int(height_text.replace("H", "")), int(width_text.replace("B", "")), family
def window_sort_key(window: str) -> int:
return int(window.replace("tw", ""))
def plot_all_families(rows: list[dict], out_base: Path):
rows = sorted(
rows,
key=lambda r: (
family_sort_key(r["family"]),
r["window_index"],
SURROGATE_ORDER.index(r["surrogate"])
if r["surrogate"] in SURROGATE_ORDER
else len(SURROGATE_ORDER),
r["iteration"],
),
)
families = sorted({r["family"] for r in rows}, key=family_sort_key)
windows = sorted({r["window"] for r in rows}, key=window_sort_key)
surrogates = [s for s in SURROGATE_ORDER if s in {r["surrogate"] for r in rows}]
fig, ax = plt.subplots(figsize=(10.2, 4.85))
fig.subplots_adjust(left=0.075, right=0.985, bottom=0.3, top=0.95)
family_centers = {}
tick_positions = []
tick_labels = []
family_start_positions = []
x_by_family_iteration = {}
current_x = 0.0
for family in families:
iterations = sorted({r["iteration"] for r in rows if r["family"] == family})
family_start_positions.append(current_x)
family_positions = []
for offset, iteration in enumerate(iterations):
x = current_x + offset * ITERATION_STEP
x_by_family_iteration[(family, iteration)] = x
family_positions.append(x)
tick_positions.append(x)
tick_labels.append(f"it{iteration}")
family_centers[family] = (family_positions[0] + family_positions[-1]) / 2
current_x = family_positions[-1] + FAMILY_GAP
for family_start in family_start_positions[1:]:
ax.axvline(
family_start - FAMILY_GAP / 2,
color=COLOR_GRID,
linewidth=0.7,
zorder=0,
)
for family in families:
family_rows = [r for r in rows if r["family"] == family]
for window in sorted({r["window"] for r in family_rows}, key=window_sort_key):
for surrogate in surrogates:
subset = [
r
for r in family_rows
if r["window"] == window and r["surrogate"] == surrogate
]
if not subset:
continue
subset = sorted(subset, key=lambda r: r["iteration"])
ax.plot(
[x_by_family_iteration[(family, r["iteration"])] for r in subset],
[r["thickness_mm"] for r in subset],
marker="o",
color=WINDOW_COLORS.get(window, "#555555"),
markerfacecolor="white",
markeredgewidth=0.8,
linewidth=1.5,
markersize=4.2,
linestyle=SURROGATE_LINESTYLES.get(surrogate, "-"),
zorder=3,
)
ax.set_ylabel("Window thickness [mm]")
ax.set_xticks(tick_positions)
ax.set_xticklabels(tick_labels)
ax.tick_params(axis="x", labelsize=10, pad=3)
ax.set_xlim(min(tick_positions) - 0.35, max(tick_positions) + 0.35)
style_axis(ax)
y_values = [r["thickness_mm"] for r in rows]
y_margin = (max(y_values) - min(y_values)) * 0.06
ax.set_ylim(max(0, min(y_values) - y_margin), max(y_values) + y_margin)
for family, center in family_centers.items():
ax.text(
center,
-0.115,
family,
transform=ax.get_xaxis_transform(),
ha="center",
va="top",
fontsize=12,
clip_on=False,
)
window_handles = [
Line2D(
[0],
[0],
color=WINDOW_COLORS.get(window, "#555555"),
marker="o",
markerfacecolor="white",
markeredgewidth=0.8,
linewidth=1.5,
markersize=4.2,
label=window,
)
for window in windows
]
surrogate_handles = [
Line2D(
[0],
[0],
color="#444444",
linestyle=SURROGATE_LINESTYLES.get(surrogate, "-"),
linewidth=1.5,
label=surrogate,
)
for surrogate in surrogates
]
fig.legend(
window_handles + surrogate_handles,
[h.get_label() for h in window_handles + surrogate_handles],
loc="lower center",
ncol=len(window_handles) + len(surrogate_handles),
frameon=False,
bbox_to_anchor=(0.5, 0.035),
columnspacing=1.4,
handlelength=2.0,
)
save_figure_all_formats(fig, out_base)
plt.close(fig)
return out_base
def main():
rows = load_rows(INPUT_CSV)
created = plot_all_families(rows, FIG_PATH)
print(f"Saved: {created}.png/.svg/.pdf")
if __name__ == "__main__":
main()
#!/usr/bin/env python3
"""Plot 3D RBF objective-surface evolution with one color per iteration.
The source Plotly HTML files contain the objective surfaces as numerical
meshes. This script reads those meshes and overlays the 3D surfaces. Color
identifies the adaptive iteration, not the objective value.
"""
from __future__ import annotations
import base64
import csv
import json
import os
import shutil
from dataclasses import dataclass
from pathlib import Path
import numpy as np
import plotly.graph_objects as go
BASE_DIR = Path(__file__).resolve().parent
PROJECT_ROOT = BASE_DIR.parents[2]
SOURCE_DIR = (
PROJECT_ROOT / "Code" / "reports" / "width_optimization" / "2W" / "rbf_optimization"
)
FIG_PATH = BASE_DIR / "rbf_surface_tw1_tw2_B34_H30_TFD_W90_evolution_3d"
ITERATIONS = [0, 1, 2]
ITERATION_COLORS = {
0: "#1a6faf",
1: "#E07060",
2: "#4D9A57",
}
ITERATION_CONTOUR_COLORS = {
0: "#0d4f83",
1: "#9f4036",
2: "#2f6b38",
}
COLOR_GRID = "#d8d8d8"
COLOR_AXIS = "#222222"
OUTPUT_WIDTH = 900
OUTPUT_HEIGHT = 560
Z_AXIS_RANGE = [-1, 50000]
PREFERRED_BROWSER_BINARIES = [
str(PROJECT_ROOT / ".plotly_chrome" / "chrome-linux64" / "chrome"),
"/usr/bin/google-chrome-stable",
"/usr/bin/google-chrome",
"/usr/bin/chrome",
"/usr/bin/chromium",
"/usr/bin/chromium-browser",
]
@dataclass
class SurfaceData:
iteration: int
x: np.ndarray
y: np.ndarray
z: np.ndarray
optimum: tuple[float, float, float]
def save_figure_all_formats(fig: go.Figure, out_base: Path) -> None:
fig.write_html(f"{out_base}.html", include_plotlyjs="cdn")
fig.write_image(
f"{out_base}.png",
format="png",
width=OUTPUT_WIDTH,
height=OUTPUT_HEIGHT,
scale=2,
)
fig.write_image(
f"{out_base}.svg",
format="svg",
width=OUTPUT_WIDTH,
height=OUTPUT_HEIGHT,
)
fig.write_image(
f"{out_base}.pdf",
format="pdf",
width=OUTPUT_WIDTH,
height=OUTPUT_HEIGHT,
)
def configure_kaleido_browser() -> None:
"""Prefer a non-snap Chrome/Chromium for Plotly static image export."""
if os.environ.get("BROWSER_PATH"):
return
for browser in PREFERRED_BROWSER_BINARIES:
if Path(browser).exists():
os.environ["BROWSER_PATH"] = browser
return
for browser_name in ("google-chrome-stable", "google-chrome", "chrome"):
browser = shutil.which(browser_name)
if browser:
os.environ["BROWSER_PATH"] = browser
return
def find_argument_span(text: str, start: int) -> tuple[int, int]:
depth = 0
quote: str | None = None
escaped = False
for idx in range(start, len(text)):
char = text[idx]
if quote is not None:
if escaped:
escaped = False
elif char == "\\":
escaped = True
elif char == quote:
quote = None
continue
if char in ('"', "'"):
quote = char
elif char in "[{(":
depth += 1
elif char in "]})":
depth -= 1
elif char == "," and depth == 0:
return start, idx
raise ValueError("Could not find the end of the Plotly argument.")
def extract_plotly_data(html_path: Path) -> list[dict]:
text = html_path.read_text(encoding="utf-8")
call_start = text.rfind("Plotly.newPlot(")
if call_start < 0:
raise ValueError(f"Plotly.newPlot call not found in {html_path}")
cursor = call_start + len("Plotly.newPlot(")
while text[cursor].isspace():
cursor += 1
_, first_arg_end = find_argument_span(text, cursor)
cursor = first_arg_end + 1
while text[cursor].isspace():
cursor += 1
data_start, data_end = find_argument_span(text, cursor)
return json.loads(text[data_start:data_end])
def decode_plotly_array(value) -> np.ndarray:
if isinstance(value, list):
return np.asarray(value, dtype=float)
if not isinstance(value, dict) or "bdata" not in value:
raise TypeError(f"Unsupported Plotly array encoding: {type(value)!r}")
dtype = np.dtype(value.get("dtype", "f8"))
data = np.frombuffer(base64.b64decode(value["bdata"]), dtype=dtype)
shape = tuple(int(part.strip()) for part in value["shape"].split(","))
return data.reshape(shape)
def load_optimum_from_csv(csv_path: Path) -> tuple[float, float, float]:
values = {}
with csv_path.open(newline="", encoding="utf-8") as f:
for row in csv.DictReader(f):
values[row["Parameter"]] = float(row["Value"])
return (
values["tw1_optimal"],
values["tw2_optimal"],
values["Objective_score"],
)
def load_surface(iteration: int) -> SurfaceData:
it_dir = SOURCE_DIR / f"it{iteration}"
html_path = it_dir / "surface_tw1_tw2_B34_H30_TFD_W90.html"
csv_path = it_dir / "optimization_results_2W_B34_H30_TFD_W90.csv"
traces = extract_plotly_data(html_path)
surface = next(trace for trace in traces if trace.get("type") == "surface")
return SurfaceData(
iteration=iteration,
x=decode_plotly_array(surface["x"]),
y=decode_plotly_array(surface["y"]),
z=decode_plotly_array(surface["z"]),
optimum=load_optimum_from_csv(csv_path),
)
def solid_colorscale(color: str) -> list[list[object]]:
return [[0.0, color], [1.0, color]]
def axis_style(title: str) -> dict:
return {
"title": {
"text": title,
"font": {"family": "Times New Roman, DejaVu Serif", "size": 17},
},
"showbackground": True,
"backgroundcolor": "white",
"gridcolor": COLOR_GRID,
"gridwidth": 1,
"linecolor": COLOR_AXIS,
"linewidth": 1,
"mirror": True,
"ticks": "inside",
"tickfont": {"family": "Times New Roman, DejaVu Serif", "size": 15},
"zeroline": False,
}
def z_axis_style() -> dict:
style = axis_style("Objective score")
style.update({"tickvals": [10000, 20000, 30000, 40000, 50000]})
return style
def main() -> None:
configure_kaleido_browser()
surfaces = [load_surface(iteration) for iteration in ITERATIONS]
fig = go.Figure()
for surface in surfaces:
color = ITERATION_COLORS[surface.iteration]
contour_color = ITERATION_CONTOUR_COLORS[surface.iteration]
fig.add_trace(
go.Surface(
x=surface.x,
y=surface.y,
z=surface.z,
surfacecolor=np.zeros_like(surface.z),
colorscale=solid_colorscale(color),
showscale=False,
opacity=0.44,
name=f"it{surface.iteration}",
showlegend=True,
legendgroup=f"it{surface.iteration}",
contours={
"z": {
"show": True,
"usecolormap": False,
"color": contour_color,
"width": 3,
"start": 0,
"end": Z_AXIS_RANGE[1],
"size": 500,
}
},
hovertemplate=(
f"it{surface.iteration}<br>"
+ "tw1=%{x:.2f} mm<br>"
+ "tw2=%{y:.2f} mm<br>"
+ "Objective=%{z:.3e}<extra></extra>"
),
)
)
for surface in surfaces:
color = ITERATION_COLORS[surface.iteration]
fig.add_trace(
go.Scatter3d(
x=[surface.optimum[0]],
y=[surface.optimum[1]],
z=[surface.optimum[2]],
mode="markers",
marker={
"size": 5.5,
"color": color,
"line": {"color": "white", "width": 1.0},
},
name=f"it{surface.iteration} optimum",
legendgroup=f"it{surface.iteration}",
showlegend=False,
hovertemplate=(
f"it{surface.iteration} optimum<br>"
+ "tw1=%{x:.2f} mm<br>"
+ "tw2=%{y:.2f} mm<br>"
+ "Objective=%{z:.3e}<extra></extra>"
),
)
)
fig.add_trace(
go.Scatter3d(
x=[surface.optimum[0] for surface in surfaces],
y=[surface.optimum[1] for surface in surfaces],
z=[surface.optimum[2] for surface in surfaces],
mode="lines",
line={"color": "#444444", "width": 4, "dash": "dot"},
name="Optimum path",
hoverinfo="skip",
)
)
fig.update_layout(
width=OUTPUT_WIDTH,
height=OUTPUT_HEIGHT,
margin={"l": 0, "r": 0, "b": 0, "t": 0},
paper_bgcolor="white",
plot_bgcolor="white",
font={
"family": "Times New Roman, DejaVu Serif",
"size": 16,
"color": COLOR_AXIS,
},
legend={
"orientation": "h",
"x": 0.5,
"xanchor": "center",
"y": 0.0,
"yanchor": "bottom",
"font": {"family": "Times New Roman, DejaVu Serif", "size": 18},
"bgcolor": "rgba(255,255,255,0)",
},
scene={
"xaxis": {**axis_style("t<sub>w,1</sub> [mm]"), "range": [9.6, 20.4]},
"yaxis": {**axis_style("t<sub>w,2</sub> [mm]"), "range": [9.6, 20.4]},
"zaxis": {**z_axis_style(), "range": Z_AXIS_RANGE},
"camera": {
"eye": {"x": 1.28, "y": 1.23, "z": 0.7},
"center": {"x": 0, "y": 0, "z": -0.08},
},
"aspectmode": "manual",
"aspectratio": {"x": 1.0, "y": 1.0, "z": 0.68},
"domain": {"x": [0.0, 1.0], "y": [0.16, 1.0]},
},
)
save_figure_all_formats(fig, FIG_PATH)
print(f"Saved: {FIG_PATH}.html/.png/.svg/.pdf")
if __name__ == "__main__":
main()
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
\begin{document} \begin{document}
\title{Damage-aware surrogate optimization of buckling-delayed shear-link dampers with adaptive finite element validation} \title{Comparison of surrogate strategies for damage-aware optimization of buckling-delayed shear-link dampers with adaptive finite element validation}
\author[1]{J. Irazábal} \author[1]{J. Irazábal}
\author[1,2]{J. Ramírez} \author[1,2]{J. Ramírez}
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
\author[4]{L. Bozzo} \author[4]{L. Bozzo}
\authormark{IRAZÁBAL \textsc{et al.}} \authormark{IRAZÁBAL \textsc{et al.}}
\titlemark{DAMAGE-AWARE SURROGATE OPTIMIZATION OF SHEAR-LINK DAMPERS} \titlemark{COMPARISON OF SURROGATE STRATEGIES FOR DAMAGE-AWARE OPTIMIZATION OF SHEAR-LINK DAMPERS}
\address[1]{\orgname{Centre Internacional de Metodes Numerics en Enginyeria (CIMNE)}, \orgaddress{\city{Barcelona}, \country{Spain}}} \address[1]{\orgname{Centre Internacional de Metodes Numerics en Enginyeria (CIMNE)}, \orgaddress{\city{Barcelona}, \country{Spain}}}
\address[2]{\orgname{Universitat Politecnica de Catalunya (UPC)}, \orgaddress{\city{Barcelona}, \country{Spain}}} \address[2]{\orgname{Universitat Politecnica de Catalunya (UPC)}, \orgaddress{\city{Barcelona}, \country{Spain}}}
...@@ -315,7 +315,7 @@ If all criteria are satisfied, the FEM-validated geometry is accepted as the opt ...@@ -315,7 +315,7 @@ If all criteria are satisfied, the FEM-validated geometry is accepted as the opt
\section{Numerical results and discussion}\label{sec:results} \section{Numerical results and discussion}\label{sec:results}
The supervised-learning comparison shows a clear hierarchy among the candidate surrogate models. A total of 100 output-specific training problems were considered, corresponding to the $2W+1$ target variables required for each geometry family and adaptive iteration. The H30\_B29 family required two optimization iterations, whereas the remaining families required three. Across all geometry families, iterations and output variables, SVR was the most frequently selected model and also the model that most often achieved the lowest cross-validated RMSE. As summarized in Figure~\ref{fig:surrogate_selection_summary_barplot}, SVR was selected in 71 cases, followed by GPR, GBR, XGBoost and MLP, while Random Forest was not selected in any case. This dominance was particularly clear for the two-window families, where only one output was assigned to a different model, namely GPR, and for the damage-related outputs, for which SVR was selected in 47 out of 57 cases. For more complex devices, those with three and five windows, and for distortion-related outputs, the model selection became more heterogeneous, although SVR still provided the best overall performance. From the computational point of view, SVR also offered one of the lowest median training times among the supervised models, whereas MLP required substantially longer training times without providing gain in accuracy. The supervised-learning comparison shows a clear hierarchy among the candidate surrogate models. A total of 100 output-specific training problems were considered, corresponding to the $2W+1$ target variables required for each geometry family and adaptive iteration. The H30\_B29 family required two optimization iterations, whereas the remaining families required three. Across all geometry families, iterations and output variables, SVR was the most frequently selected model and also the model that most often achieved the lowest cross-validated RMSE. As summarized in Figure~\ref{fig:surrogate_selection_summary_barplot}, SVR was selected in 71 cases, followed by GPR, GBR, XGBoost and MLP, while Random Forest was not selected in any case. This dominance was particularly clear for the two-window families, where only one output was assigned to a different model, namely GPR, and for the damage-related outputs, for which SVR was selected in 47 out of 57 cases. For more complex devices, those with three and five windows, and for distortion-related outputs, the model selection became more heterogeneous, although SVR still provided the best overall performance. From the computational point of view, SVR also offered the lowest median training times among the supervised models, whereas MLP required substantially longer training times without providing gain in accuracy.
\begin{figure}[htbp] \begin{figure}[htbp]
\centering \centering
...@@ -324,9 +324,9 @@ The supervised-learning comparison shows a clear hierarchy among the candidate s ...@@ -324,9 +324,9 @@ The supervised-learning comparison shows a clear hierarchy among the candidate s
\label{fig:surrogate_selection_summary_barplot} \label{fig:surrogate_selection_summary_barplot}
\end{figure} \end{figure}
These results indicate that kernel-based models are particularly well suited to the present surrogate task. SVR provides the best compromise between accuracy and computational cost, while GPR is the second most competitive supervised strategy, especially in some higher-dimensional cases. Tree-based models, although robust, are less frequently selected, and MLP models are not competitive in terms of computational efficiency for the dataset sizes considered here. As mentioned in previous sections, this behaviour motivated the additional evaluation of RBF interpolation as a simpler surrogate alternative. In contrast to the supervised models, which require Bayesian hyperparameter optimization and cross-validation, RBF models were trained in less than one second per output, making them especially attractive for repeated surrogate updates within the adaptive optimization loop. These results indicate that kernel-based models are particularly well suited to the present surrogate task. SVR provides the best compromise between accuracy and computational cost, while GPR is the second most competitive supervised strategy, especially in some higher-dimensional cases. Tree-based models, although robust, are less frequently selected, and MLP models are not competitive in terms of computational efficiency for the dataset sizes considered here. As mentioned in previous sections, this behaviour motivated the additional evaluation of RBF interpolation as a simpler surrogate alternative. In contrast to the supervised models, RBF models were trained in less than one second per output, making them especially attractive for repeated surrogate updates within the adaptive optimization loop.
The FEM validation of the optimized geometries is summarized in Table~\ref{tab:final_surrogate_comparison}. For each geometry family and surrogate strategy, the table reports the final accepted adaptive iteration, the optimized window thicknesses, the surrogate-predicted objective value, the corresponding FEM-recomputed objective value, and the associated validation errors. The optimization process required between two and three adaptive iterations depending on the geometry family and surrogate type, with most cases converging after three iterations. No systematic difference in the number of iterations was observed between RBF and supervised ML surrogates. The maximum variable error, $e_{\max}$, is defined as the largest relative error among all quantities entering the objective function, namely ${\Exy}_i$, $\TFD_i$ and $\TFD_f$, whereas the objective-function error, $|e_J|$, is reported in absolute value. The FEM validation of the optimized geometries is summarized in Table~\ref{tab:final_surrogate_comparison}. For each geometry family and surrogate strategy, the table reports the final accepted adaptive iteration, the optimized window thicknesses $\mathbf{t}_w^{\star}$, the surrogate-predicted objective value ($J_{\mathrm{surr}}$), the corresponding FEM-recomputed objective value ($J_{\mathrm{FEM}}$) and the associated validation errors ($|e_J|$ and $e_{\max}$). The optimization process required between two and three adaptive iterations depending on the geometry family and surrogate type, with most cases converging after three iterations. No systematic difference in the number of iterations was observed between RBF and supervised ML surrogates. The maximum variable error, $e_{\max}$, is defined as the largest relative error among all quantities entering the objective function, namely ${\Exy}_i$, $\TFD_i$ and $\TFD_f$, whereas the objective-function error, $|e_J|$, is reported in absolute value.
\begin{table*}[ht!] \begin{table*}[ht!]
\centering \centering
...@@ -380,51 +380,54 @@ H60\_B34 & Supervised ML & 3 ...@@ -380,51 +380,54 @@ H60\_B34 & Supervised ML & 3
\end{tabular} \end{tabular}
\end{table*} \end{table*}
The final validation results show that both surrogate strategies provide FEM-consistent optimized geometries after few adaptive iterations. RBF surrogates generally lead to lower objective-function discrepancies, with an average $|e_J|$ of 1.36, compared with 5.04 for the supervised ML surrogates. The average maximum variable error is also lower for RBF, with 1.79\% compared with 2.67\% for supervised ML. The RBF surrogate provides particularly accurate predictions for the two-window devices, with $e_{\max}$ below 0.3\%, while remaining below 4.3\% for the three- and five-window families. The supervised ML surrogates also satisfy all validation criteria, although they show larger discrepancies in some cases, especially for the H60\_B34 family, where the objective-function error reaches 9.97. The final validation results show that both surrogate strategies provide FEM-consistent optimized geometries after only a few adaptive iterations. RBF surrogates generally lead to lower objective-function discrepancies, with an average $|e_J|$ of 1.36, compared with 5.04 for the supervised ML surrogates. The average maximum variable error is also lower for RBF, with 1.79\% compared with 2.67\% for supervised ML. The RBF surrogate provides particularly accurate predictions for the two-window devices, with $e_{\max}$ below 0.3\%, while remaining below 4.3\% for the three- and five-window families. The supervised ML surrogates also satisfy all validation criteria, although larger discrepancies are observed in some cases, especially for the H60\_B34 family, where the objective-function error reaches 9.97.
The adaptive validation loop is essential to reach these levels of agreement. In several cases, the first surrogate-optimized candidate did not satisfy the error tolerances, particularly for the three- and five-window devices. After incorporating the additional FEM results and retraining the surrogates, the prediction errors decreased significantly. For instance, the maximum variable error of the RBF surrogate decreased from 13.70\% to 1.70\% in the H45\_B29 family, and from 11.44\% to 2.66\% in the H60\_B34 family. A similar behaviour was observed for the supervised ML surrogates, whose final candidates also satisfied all acceptance criteria. This confirms that the adaptive loop reduces the risk of accepting geometries that appear optimal only because of surrogate extrapolation errors. The adaptive validation loop is essential to reach these levels of agreement. In several cases, the first surrogate-optimized candidate did not satisfy the prescribed error tolerances, particularly for the three- and five-window devices. After incorporating the additional FEM results and retraining the surrogates, the prediction errors decreased significantly. For instance, the maximum variable error of the RBF surrogate decreased from 13.70\% to 1.70\% in the H45\_B29 family, and from 11.44\% to 2.66\% in the H60\_B34 family. A similar behaviour was observed for the supervised ML surrogates, whose final candidates also satisfied all acceptance criteria. This confirms that the adaptive loop reduces the risk of accepting geometries that appear optimal only because of surrogate prediction errors in sparsely sampled regions of the design space.
The optimized geometries obtained with RBF and supervised ML surrogates are also very similar in most geometry families. In general, the difference in the optimized window thicknesses is below 0.1 mm and always below 0.2 mm, except for the H30\_B34 family. In this case, the differences reach 0.43 mm and 1.05 mm for the first and second windows, respectively. This family also presents the largest objective-function values, indicating that the prescribed damage targets, $\TFD_i$ and $\TFD_f$, cannot be fully maintained below the desired threshold within the admissible thickness range. Consequently, the optimizer is forced to find the best compromise between damage control and dissipative activation, which may amplify the differences between surrogate predictions. Even in this more demanding case, the FEM validation confirms that both surrogate strategies remain within the prescribed error limits. The optimized geometries obtained with RBF and supervised ML surrogates are very similar in most geometry families. In general, the differences in the optimized window thicknesses are below 0.1 mm and always below 0.2 mm, except for the H30\_B34 family. In this case, the differences reach 0.43 mm and 1.05 mm for the first and second windows, respectively. This family also presents the largest objective-function values, indicating that the prescribed damage targets, $\TFD_i$ and $\TFD_f$, cannot be fully maintained below the desired threshold within the admissible thickness range. Consequently, the optimizer is forced to find the best compromise between damage control and dissipative activation, which may amplify the differences between surrogate predictions.
The optimized geometries are stable between consecutive adaptive iterations. The maximum change in any window thickness between the last two iterations remains below 5\% of the corresponding design range for all validated cases, with a maximum observed variation of 4.44\%. This indicates that the optimization process has converged not only in terms of surrogate prediction accuracy, but also in terms of the geometry proposed by the optimizer. Figure~\ref{fig:optimized_window_thickness_evolution} shows the evolution of the window thicknesses during the adaptive optimization process. In most cases, the largest adjustment occurs between the first and second iterations, while the changes between the second and third iterations are considerably smaller, indicating convergence of the proposed geometry. According to the acceptance criteria, the maximum variation in any window thickness between the last two iterations must remain below 5\% of the corresponding design range. This condition is satisfied in all validated cases, with a maximum observed variation of 4.44\%. Therefore, the adaptive process converges not only in terms of surrogate prediction accuracy, but also in terms of the optimized geometry proposed by the optimizer.
From a methodological point of view, these results highlight the trade-off between surrogate complexity, accuracy and computational efficiency. Supervised models, particularly SVR and GPR, provide high predictive accuracy and robustness, but require hyperparameter optimization and cross-validation for every output variable and adaptive iteration. RBF interpolation, in contrast, has a much lower training cost and provides very competitive final predictions once the relevant regions of the design domain have been adaptively sampled. Therefore, the comparison does not identify a universally superior surrogate strategy. Instead, it suggests that RBF interpolation is especially suitable for low- to moderate-dimensional design spaces with well-distributed FEM samples, whereas supervised ML models remain valuable when greater robustness is required or when the response surface is expected to be more complex. \begin{figure}[htbp]
\centering
\includegraphics[width=1.0\textwidth]{./Figures/OptimizedWindowThicknessEvolution/optimized_window_thickness_evolution.png}
\caption{Evolution of the optimized window thicknesses during the adaptive optimization process.}
\label{fig:optimized_window_thickness_evolution}
\end{figure}
From a methodological point of view, these results highlight the trade-off between surrogate complexity, accuracy and computational efficiency. Supervised models, particularly SVR and GPR, provide high predictive accuracy and robustness, but require hyperparameter optimization and cross-validation for every output variable and adaptive iteration. RBF interpolation, in contrast, has a much lower training cost and provides very competitive final predictions once the relevant regions of the design domain have been adaptively sampled. Therefore, the comparison does not identify a universally superior surrogate strategy. Instead, it suggests that RBF interpolation is especially suitable for low- to moderate-dimensional design spaces with well-distributed FEM samples and relatively smooth input--output relationships, as occurs for the response variables analysed in this work. Supervised ML surrogates remain valuable when greater robustness is required, or when the response surface is expected to involve stronger nonlinear interactions, local irregularities or higher-dimensional dependencies.
The objective-function values should be interpreted carefully. The objective-function error measures the consistency between surrogate predictions and FEM validation, not whether the final objective value is necessarily close to zero. Some geometry families retain non-negligible penalty contributions because the prescribed damage targets cannot be fully achieved within the admissible design bounds. Nevertheless, the close agreement between surrogate and FEM objective values indicates that the accepted designs are not artifacts of surrogate prediction errors, but FEM-consistent optimized candidates within the explored design space. The objective-function values should also be interpreted carefully. The objective-function error measures the consistency between surrogate predictions and FEM validation, not whether the final objective value is necessarily close to zero. Some geometry families, such as H30\_B34, retain non-negligible penalty contributions because the prescribed damage targets cannot be fully achieved within the admissible design bounds. Nevertheless, the close agreement between surrogate and FEM objective values indicates that the accepted designs are not artifacts of surrogate extrapolation, but FEM-consistent optimized candidates within the explored design space.
The proposed methodology addresses a central limitation of direct FEM-based damper optimization: the high cost of evaluating many nonlinear cyclic simulations. By training surrogate models on FEM-generated datasets and validating the optimized candidates through additional FEM analyses, the optimizer can explore the design domain efficiently while retaining consistency with the underlying mechanics of the device. The objective function also reflects the mechanical hierarchy of the BDSL damper. Damage in the windows is not intrinsically undesirable, since it is associated with the intended dissipative mechanism, provided that it remains below the adopted threshold and is reasonably distributed among windows. By contrast, damage in the frame is structurally more critical, as it may compromise the integrity of the device. The stronger frame penalty therefore guides the optimizer towards geometries that preserve the frame while using the windows as sacrificial dissipative regions. This behaviour is illustrated in Figure~\ref{fig:rbf_surface_evolution}, which shows the evolution of the RBF objective surface during the adaptive optimization process for the two-window families. The response surfaces remain relatively smooth, supporting the suitability of RBF interpolation for this problem. The evolution between adaptive iterations also shows how the surrogate surface is progressively corrected as new FEM information is incorporated near the optimized region.
\begin{figure}[htbp]
\centering
\includegraphics[width=1.0\textwidth]{./Figures/RBFOptimizationSurfaceEvolution/rbf_surface_evolution.png}
\caption{Evolution of the RBF objective surface during the adaptive optimization process for the two-window families. Left: H30\_B29. Right: H30\_B34.}
\label{fig:rbf_surface_evolution}
\end{figure}
Several limitations should also be acknowledged. First, the reliability of the proposed framework depends on the quality of the calibrated FEM model used to generate the training data and validate the optimized geometries. Second, the TFDMap is used here as a post-processing damage indicator rather than as a constitutive fracture model, so the optimized designs should be interpreted in terms of relative damage control rather than direct crack prediction. Third, the present optimization considers only the window thicknesses as design variables. Additional parameters, such as window height, spacing, frame thickness or filler properties, could be incorporated in future work, although this would increase the dimensionality of the problem and require a larger FEM dataset. Finally, the optimized configurations should ultimately be validated experimentally before being used to derive general design recommendations. \section{Conclusions and future work}\label{sec:conclusions}
\section{Conclusions}\label{sec:conclusions} This work presented an adaptive surrogate-assisted optimization framework for buckling-delayed shear-link dampers subjected to cyclic seismic loading. The proposed methodology addresses the main limitation of direct FEM-based optimization, the high computational cost associated with repeatedly evaluating nonlinear cyclic simulations. By training surrogate models on FEM-generated datasets and validating the optimized candidates through additional FEM analyses, the optimizer can efficiently explore the design domain while remaining consistent with the mechanical response captured by the calibrated numerical model.
One of the key features of the proposed optimisation framework, compared to approaches focused primarily on energy maximisation, is the formulation of an objective function that takes damage into account. The aim is to prioritise local damage control in both the dissipative windows and the surrounding frame, whilst promoting a balanced contribution from all windows to the energy dissipation process. Thus, damage to the windows is permitted and expected, as they are intended to act as dissipative regions, provided that it remains controlled and reasonably distributed; conversely, damage to the frame is penalised more severely because it can compromise the structural integrity of the damper. Therefore, rather than merely maximising the energy dissipated, the proposed formulation favours geometries that concentrate dissipative activation in the windows, prevent excessive damage localisation in a single region, and protect the frame from critical damage.
As a result, the main contribution of this work lies in the development of a robust, scalable and physically informed design methodology that explicitly accounts for the trade-off between energy dissipation and damage. To summarize, the main contributions of this work are: A comprehensive comparison of surrogate strategies was performed in terms of predictive accuracy and computational efficiency. The supervised ML results showed that SVR and GPR were the most competitive models, with SVR being the most frequently selected across the analysed outputs. RBF interpolation also proved to be a highly efficient alternative: in the final adaptive iterations, it achieved validation errors comparable to, and in most cases lower than, those of the supervised ML surrogates, while requiring substantially lower training effort and no hyperparameter search. This performance is attributed to the characteristics of the present problem: low- to moderate-dimensional design spaces, well-distributed FEM samples and nonlinear but relatively smooth relationships between window thicknesses and response indicators.
\begin{itemize}
\item generation of high-fidelity FEM datasets for BDSL dampers with increasing geometric complexity and different numbers of dissipative windows;
\item geometric optimization using surrogate models, including supervised ML techniques and RBF interpolants;
\item systematic comparison of surrogate strategies in terms of predictive accuracy, computational cost and practical suitability for optimization;
\item a damage-aware objective function that combines window damage control, severe frame-damage penalization, window-to-window damage balancing and dissipated-energy maximization;
\item an adaptive FEM validation and retraining strategy based on explicit tolerances for surrogate error, objective-function error and stability of the optimized geometry between successive iterations.
\end{itemize}
The proposed adaptive validation loop proved to be necessary and effective. Several initially optimized candidates did not satisfy the prescribed error tolerances. After incorporating the new FEM results into the training dataset and retraining the surrogates, the prediction errors decreased and all final optimized geometries satisfied the acceptance criteria after only two or three iterations. Therefore, the final designs are not accepted solely on the basis of surrogate predictions, but are explicitly verified through FEM in the region of the design space where the optimum is located.
This work presents an adaptive surrogate-assisted optimization framework for BDSL dampers under cyclic seismic loading. The methodology combines FEM-calibrated numerical simulations, supervised ML models, RBF interpolation, DE and FEM-based validation of the optimized geometries. The following conclusions can be drawn from the proposed formulation: The proposed methodology also has some limitations that should be acknowledged. First, its reliability depends on the quality of the calibrated FEM model used to generate the training data and validate the optimized designs. Second, the TFDMap is used here as a post-processing damage indicator rather than as a constitutive fracture model; therefore, the optimized configurations should be interpreted in terms of relative damage control and proximity to critical states, not as direct predictions of crack initiation. Third, only the window thicknesses are considered as design variables. Although this leads to a controlled and interpretable optimization problem, it does not exploit the full geometric flexibility of BDSL dampers. Finally, the optimized geometries should ultimately be validated experimentally before being used to establish general design recommendations.
\begin{enumerate} Future work should extend the design space by including additional geometric and mechanical variables, such as window height, window spacing, frame thickness, global device proportions, or filler properties. This extension would increase the dimensionality and complexity of the surrogate task, and the performance of RBF interpolation should therefore be reassessed under those conditions. While RBF models performed very well in the present study, their efficiency and accuracy may decrease as the input space becomes larger or the response surfaces develop stronger local nonlinearities. In such cases, supervised ML models or hybrid surrogate strategies may become more advantageous.
\item The BDSL optimization problem must be formulated as a damage-aware design problem rather than as a pure energy-maximization problem. The same energy level may correspond to different local damage distributions and different safety margins in the frame.
\item FEM simulations provide the necessary ground truth for training because they supply internal indicators such as TFDMap and local distortion, which cannot be obtained experimentally with the same spatial resolution.
\item Supervised ML models and RBF interpolants provide complementary surrogate strategies. SVR and GPR are expected to be highly accurate based on preliminary tests, while RBF models offer a faster alternative for well-sampled design domains.
\item The proposed objective function explicitly encodes the desired mechanical behaviour: controlled window damage, severe penalization of frame damage, balanced participation of windows and preference for higher dissipated energy when damage performance is comparable.
\item The adaptive FEM validation and retraining loop is a key component of the framework. A candidate geometry is accepted only if surrogate predictions match FEM results within the defined tolerances and if the optimized thicknesses remain stable between consecutive iterations.
\end{enumerate}
The numerical campaign reported in Section~\ref{sec:results} provides the final model-selection tables, RBF validation metrics, optimized geometries and FEM-validation comparisons. Another relevant future direction is the incorporation of interpretability analyses, such as SHapley Additive exPlanations, to quantify the influence of each geometric variable on window damage, frame damage, and dissipative activation. Although such an analysis lies outside the main scope of the present study, it could provide valuable insight into the design drivers governing the behaviour of BDSL dampers and support more transparent engineering decision-making. Overall, the proposed methodology establishes a scalable basis for FEM-consistent, damage-aware optimization of seismic energy dissipation devices, while leaving room for broader design variables, richer surrogate strategies, and experimental validation of the optimized configurations.
%\backmatter %\backmatter
\bmsection*{Author contributions} \bmsection*{Author contributions}
Conceptualization: J. Irazábal, J. Ramírez, J. M. González, G. Bozzo, L. Bozzo. Methodology: J. Irazábal, J. Ramírez, J. M. González. Software and surrogate optimization: J. Irazábal. FEM modelling and validation: J. Ramírez, J. M. González, L. Lázaro, F. Rastellini. Writing--original draft: J. Irazábal and J. Ramírez. Writing--review and editing: all authors. Conceptualization: J. Irazábal, J. Ramírez, J. M. González, G. Bozzo, L. Bozzo. Methodology: J. Irazábal, J. Ramírez, J. M. González. Software and surrogate optimization: J. Irazábal. FEM modelling and validation: J. Ramírez, J. M. González, L. Lázaro, F. Rastellini. Writing--original draft: J. Irazábal. Writing--review and editing: all authors.
\bmsection*{Acknowledgments} \bmsection*{Acknowledgments}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment