Add loading pattern plotting script and update manuscript

- Introduced a new Python script `plot_load_patterns.py` to visualize loading pattern displacement histories from `LoadPatterns.csv`, generating figures in PNG, SVG, and PDF formats. - Removed the outdated `PatronesCarga.csv` file as it is no longer needed. - Revised the abstract and various sections of the manuscript to enhance clarity and detail, including the introduction of radial basis function surrogates and adjustments to the optimization methodology. - Updated references in the bibliography to include new citations for SciPy and Differential Evolution.
parent 7c430ea6
Time (s),Displacement H30 (mm),Displacement H45 (mm),Displacement H60 (mm)
0,0,0,0
0.0625,12,16,20
0.125,0,0,0
0.1875,-12,-16,-16
0.25,0,0,0
0.3125,12,16,16
0.375,0,0,0
0.4375,-12,-16,-16
0.5,0,0,0
0.5625,25,32,32
0.625,0,0,0
0.6875,-25,-32,-32
0.75,0,0,0
0.8125,25,32,32
0.875,0,0,0
0.9375,-25,-32,-32
1,0,0,0
1.0625,38,48,48
1.125,0,0,0
1.1875,-38,-48,-48
1.25,0,0,0
1.3125,38,48,48
1.375,0,0,0
1.4375,-38,-48,-48
1.5,0,0,0
1.5625,50,64,64
1.625,0,0,0
1.6875,-50,-64,-64
1.75,0,0,0
1.8125,50,64,64
1.875,0,0,0
1.9375,-50,-64,-64
2,0,0,0
2.0625,60,75,75
2.125,0,0,0
2.1875,-60,-75,-75
2.25,0,0,0
2.3125,60,75,75
2.375,0,0,0
2.4375,-60,-75,-75
2.5,0,0,0
2.5625,70,85,85
2.625,0,0,0
2.6875,-70,-85,-85
2.75,0,0,0
2.8125,70,85,85
2.875,0,0,0
2.9375,-70,-85,-85
3,0,0,0
<?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="372.337062pt" height="251.036pt" viewBox="0 0 372.337062 251.036" 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-13T11:05:27.090383</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 251.036
L 372.337062 251.036
L 372.337062 0
L 0 0
z
" style="fill: #ffffff"/>
</g>
<g id="axes_1">
<g id="patch_2">
<path d="M 41.894063 187.776
L 358.262063 187.776
L 358.262063 7.2
L 41.894063 7.2
z
" style="fill: #ffffff"/>
</g>
<g id="matplotlib.axis_1">
<g id="xtick_1">
<g id="line2d_1">
<path d="M 41.894063 187.776
L 41.894063 7.2
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_2">
<defs>
<path id="mc9b31e65f3" d="M 0 0
L 0 -4
" style="stroke: #000000; stroke-width: 0.7"/>
</defs>
<g>
<use xlink:href="#mc9b31e65f3" x="41.894063" y="187.776" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_1">
<!-- 0.0 -->
<g transform="translate(35.019063 198.914125) scale(0.11 -0.11)">
<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)"/>
<path id="TimesNewRomanPSMT-2e" d="M 800 606
Q 947 606 1047 504
Q 1147 403 1147 259
Q 1147 116 1045 14
Q 944 -88 800 -88
Q 656 -88 554 14
Q 453 116 453 259
Q 453 406 554 506
Q 656 606 800 606
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-30"/>
<use xlink:href="#TimesNewRomanPSMT-2e" transform="translate(50 0)"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(75 0)"/>
</g>
</g>
</g>
<g id="xtick_2">
<g id="line2d_3">
<path d="M 94.622062 187.776
L 94.622062 7.2
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_4">
<g>
<use xlink:href="#mc9b31e65f3" x="94.622062" y="187.776" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_2">
<!-- 0.5 -->
<g transform="translate(87.747062 198.914125) scale(0.11 -0.11)">
<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-30"/>
<use xlink:href="#TimesNewRomanPSMT-2e" transform="translate(50 0)"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(75 0)"/>
</g>
</g>
</g>
<g id="xtick_3">
<g id="line2d_5">
<path d="M 147.350062 187.776
L 147.350062 7.2
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_6">
<g>
<use xlink:href="#mc9b31e65f3" x="147.350062" y="187.776" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_3">
<!-- 1.0 -->
<g transform="translate(140.475062 198.914125) scale(0.11 -0.11)">
<defs>
<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-31"/>
<use xlink:href="#TimesNewRomanPSMT-2e" transform="translate(50 0)"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(75 0)"/>
</g>
</g>
</g>
<g id="xtick_4">
<g id="line2d_7">
<path d="M 200.078062 187.776
L 200.078062 7.2
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_8">
<g>
<use xlink:href="#mc9b31e65f3" x="200.078062" y="187.776" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_4">
<!-- 1.5 -->
<g transform="translate(193.203062 198.914125) scale(0.11 -0.11)">
<use xlink:href="#TimesNewRomanPSMT-31"/>
<use xlink:href="#TimesNewRomanPSMT-2e" transform="translate(50 0)"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(75 0)"/>
</g>
</g>
</g>
<g id="xtick_5">
<g id="line2d_9">
<path d="M 252.806062 187.776
L 252.806062 7.2
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_10">
<g>
<use xlink:href="#mc9b31e65f3" x="252.806062" y="187.776" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_5">
<!-- 2.0 -->
<g transform="translate(245.931062 198.914125) scale(0.11 -0.11)">
<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-32"/>
<use xlink:href="#TimesNewRomanPSMT-2e" transform="translate(50 0)"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(75 0)"/>
</g>
</g>
</g>
<g id="xtick_6">
<g id="line2d_11">
<path d="M 305.534063 187.776
L 305.534063 7.2
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_12">
<g>
<use xlink:href="#mc9b31e65f3" x="305.534063" y="187.776" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_6">
<!-- 2.5 -->
<g transform="translate(298.659063 198.914125) scale(0.11 -0.11)">
<use xlink:href="#TimesNewRomanPSMT-32"/>
<use xlink:href="#TimesNewRomanPSMT-2e" transform="translate(50 0)"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(75 0)"/>
</g>
</g>
</g>
<g id="xtick_7">
<g id="line2d_13">
<path d="M 358.262062 187.776
L 358.262062 7.2
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_14">
<g>
<use xlink:href="#mc9b31e65f3" x="358.262062" y="187.776" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_7">
<!-- 3.0 -->
<g transform="translate(351.387062 198.914125) scale(0.11 -0.11)">
<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-33"/>
<use xlink:href="#TimesNewRomanPSMT-2e" transform="translate(50 0)"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(75 0)"/>
</g>
</g>
</g>
<g id="xtick_8">
<g id="line2d_15">
<defs>
<path id="mc352a48ecc" d="M 0 0
L 0 -2.5
" style="stroke: #000000; stroke-width: 0.6"/>
</defs>
<g>
<use xlink:href="#mc352a48ecc" x="52.439663" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_9">
<g id="line2d_16">
<g>
<use xlink:href="#mc352a48ecc" x="62.985263" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_10">
<g id="line2d_17">
<g>
<use xlink:href="#mc352a48ecc" x="73.530863" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_11">
<g id="line2d_18">
<g>
<use xlink:href="#mc352a48ecc" x="84.076463" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_12">
<g id="line2d_19">
<g>
<use xlink:href="#mc352a48ecc" x="105.167663" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_13">
<g id="line2d_20">
<g>
<use xlink:href="#mc352a48ecc" x="115.713262" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_14">
<g id="line2d_21">
<g>
<use xlink:href="#mc352a48ecc" x="126.258863" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_15">
<g id="line2d_22">
<g>
<use xlink:href="#mc352a48ecc" x="136.804462" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_16">
<g id="line2d_23">
<g>
<use xlink:href="#mc352a48ecc" x="157.895663" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_17">
<g id="line2d_24">
<g>
<use xlink:href="#mc352a48ecc" x="168.441262" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_18">
<g id="line2d_25">
<g>
<use xlink:href="#mc352a48ecc" x="178.986862" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_19">
<g id="line2d_26">
<g>
<use xlink:href="#mc352a48ecc" x="189.532463" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_20">
<g id="line2d_27">
<g>
<use xlink:href="#mc352a48ecc" x="210.623663" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_21">
<g id="line2d_28">
<g>
<use xlink:href="#mc352a48ecc" x="221.169263" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_22">
<g id="line2d_29">
<g>
<use xlink:href="#mc352a48ecc" x="231.714862" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_23">
<g id="line2d_30">
<g>
<use xlink:href="#mc352a48ecc" x="242.260463" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_24">
<g id="line2d_31">
<g>
<use xlink:href="#mc352a48ecc" x="263.351662" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_25">
<g id="line2d_32">
<g>
<use xlink:href="#mc352a48ecc" x="273.897263" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_26">
<g id="line2d_33">
<g>
<use xlink:href="#mc352a48ecc" x="284.442862" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_27">
<g id="line2d_34">
<g>
<use xlink:href="#mc352a48ecc" x="294.988463" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_28">
<g id="line2d_35">
<g>
<use xlink:href="#mc352a48ecc" x="316.079662" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_29">
<g id="line2d_36">
<g>
<use xlink:href="#mc352a48ecc" x="326.625263" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_30">
<g id="line2d_37">
<g>
<use xlink:href="#mc352a48ecc" x="337.170862" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="xtick_31">
<g id="line2d_38">
<g>
<use xlink:href="#mc352a48ecc" x="347.716463" y="187.776" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="text_8">
<!-- Time (s) -->
<g transform="translate(181.485484 212.905219) scale(0.11 -0.11)">
<defs>
<path id="TimesNewRomanPSMT-54" d="M 3703 4238
L 3750 3244
L 3631 3244
Q 3597 3506 3538 3619
Q 3441 3800 3280 3886
Q 3119 3972 2856 3972
L 2259 3972
L 2259 734
Q 2259 344 2344 247
Q 2463 116 2709 116
L 2856 116
L 2856 0
L 1059 0
L 1059 116
L 1209 116
Q 1478 116 1591 278
Q 1659 378 1659 734
L 1659 3972
L 1150 3972
Q 853 3972 728 3928
Q 566 3869 450 3700
Q 334 3531 313 3244
L 194 3244
L 244 4238
L 3703 4238
z
" transform="scale(0.015625)"/>
<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-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-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-20" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-28" d="M 1988 -1253
L 1988 -1369
Q 1516 -1131 1200 -813
Q 750 -359 506 256
Q 263 872 263 1534
Q 263 2503 741 3301
Q 1219 4100 1988 4444
L 1988 4313
Q 1603 4100 1356 3731
Q 1109 3363 987 2797
Q 866 2231 866 1616
Q 866 947 969 400
Q 1050 -31 1165 -292
Q 1281 -553 1476 -793
Q 1672 -1034 1988 -1253
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-29" d="M 144 4313
L 144 4444
Q 619 4209 934 3891
Q 1381 3434 1625 2820
Q 1869 2206 1869 1541
Q 1869 572 1392 -226
Q 916 -1025 144 -1369
L 144 -1253
Q 528 -1038 776 -670
Q 1025 -303 1145 264
Q 1266 831 1266 1447
Q 1266 2113 1163 2663
Q 1084 3094 967 3353
Q 850 3613 656 3853
Q 463 4094 144 4313
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-54"/>
<use xlink:href="#TimesNewRomanPSMT-69" transform="translate(57.583984 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6d" transform="translate(85.367188 0)"/>
<use xlink:href="#TimesNewRomanPSMT-65" transform="translate(163.150391 0)"/>
<use xlink:href="#TimesNewRomanPSMT-20" transform="translate(207.535156 0)"/>
<use xlink:href="#TimesNewRomanPSMT-28" transform="translate(232.535156 0)"/>
<use xlink:href="#TimesNewRomanPSMT-73" transform="translate(265.835938 0)"/>
<use xlink:href="#TimesNewRomanPSMT-29" transform="translate(304.751953 0)"/>
</g>
</g>
</g>
<g id="matplotlib.axis_2">
<g id="ytick_1">
<g id="line2d_39">
<path d="M 41.894063 169.911529
L 358.262063 169.911529
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_40">
<defs>
<path id="m28f4dc0bdf" d="M 0 0
L 4 0
" style="stroke: #000000; stroke-width: 0.7"/>
</defs>
<g>
<use xlink:href="#m28f4dc0bdf" x="41.894063" y="169.911529" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_9">
<!-- −75 -->
<g transform="translate(21.191094 173.730592) scale(0.11 -0.11)">
<defs>
<path id="TimesNewRomanPSMT-2212" d="M 3484 2000
L 116 2000
L 116 2256
L 3484 2256
L 3484 2000
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-37" d="M 644 4238
L 2916 4238
L 2916 4119
L 1503 -88
L 1153 -88
L 2419 3728
L 1253 3728
Q 900 3728 750 3644
Q 488 3500 328 3200
L 238 3234
L 644 4238
z
" transform="scale(0.015625)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-2212"/>
<use xlink:href="#TimesNewRomanPSMT-37" transform="translate(56.396484 0)"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(106.396484 0)"/>
</g>
</g>
</g>
<g id="ytick_2">
<g id="line2d_41">
<path d="M 41.894063 145.770353
L 358.262063 145.770353
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_42">
<g>
<use xlink:href="#m28f4dc0bdf" x="41.894063" y="145.770353" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_10">
<!-- −50 -->
<g transform="translate(21.191094 149.589415) scale(0.11 -0.11)">
<use xlink:href="#TimesNewRomanPSMT-2212"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(56.396484 0)"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(106.396484 0)"/>
</g>
</g>
</g>
<g id="ytick_3">
<g id="line2d_43">
<path d="M 41.894063 121.629176
L 358.262063 121.629176
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_44">
<g>
<use xlink:href="#m28f4dc0bdf" x="41.894063" y="121.629176" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_11">
<!-- −25 -->
<g transform="translate(21.191094 125.448239) scale(0.11 -0.11)">
<use xlink:href="#TimesNewRomanPSMT-2212"/>
<use xlink:href="#TimesNewRomanPSMT-32" transform="translate(56.396484 0)"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(106.396484 0)"/>
</g>
</g>
</g>
<g id="ytick_4">
<g id="line2d_45">
<path d="M 41.894063 97.488
L 358.262063 97.488
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_46">
<g>
<use xlink:href="#m28f4dc0bdf" x="41.894063" y="97.488" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_12">
<!-- 0 -->
<g transform="translate(32.894063 101.307062) scale(0.11 -0.11)">
<use xlink:href="#TimesNewRomanPSMT-30"/>
</g>
</g>
</g>
<g id="ytick_5">
<g id="line2d_47">
<path d="M 41.894063 73.346824
L 358.262063 73.346824
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_48">
<g>
<use xlink:href="#m28f4dc0bdf" x="41.894063" y="73.346824" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_13">
<!-- 25 -->
<g transform="translate(27.394063 77.165886) scale(0.11 -0.11)">
<use xlink:href="#TimesNewRomanPSMT-32"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(50 0)"/>
</g>
</g>
</g>
<g id="ytick_6">
<g id="line2d_49">
<path d="M 41.894063 49.205647
L 358.262063 49.205647
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_50">
<g>
<use xlink:href="#m28f4dc0bdf" x="41.894063" y="49.205647" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_14">
<!-- 50 -->
<g transform="translate(27.394063 53.02471) scale(0.11 -0.11)">
<use xlink:href="#TimesNewRomanPSMT-35"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(50 0)"/>
</g>
</g>
</g>
<g id="ytick_7">
<g id="line2d_51">
<path d="M 41.894063 25.064471
L 358.262063 25.064471
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #d8d8d8; stroke-opacity: 0.75; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="line2d_52">
<g>
<use xlink:href="#m28f4dc0bdf" x="41.894063" y="25.064471" style="stroke: #000000; stroke-width: 0.7"/>
</g>
</g>
<g id="text_15">
<!-- 75 -->
<g transform="translate(27.394063 28.883533) scale(0.11 -0.11)">
<use xlink:href="#TimesNewRomanPSMT-37"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(50 0)"/>
</g>
</g>
</g>
<g id="ytick_8">
<g id="line2d_53">
<defs>
<path id="m0f1f99a069" d="M 0 0
L 2.5 0
" style="stroke: #000000; stroke-width: 0.6"/>
</defs>
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="184.396235" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_9">
<g id="line2d_54">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="179.568" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_10">
<g id="line2d_55">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="174.739765" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_11">
<g id="line2d_56">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="165.083294" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_12">
<g id="line2d_57">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="160.255059" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_13">
<g id="line2d_58">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="155.426824" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_14">
<g id="line2d_59">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="150.598588" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_15">
<g id="line2d_60">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="140.942118" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_16">
<g id="line2d_61">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="136.113882" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_17">
<g id="line2d_62">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="131.285647" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_18">
<g id="line2d_63">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="126.457412" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_19">
<g id="line2d_64">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="116.800941" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_20">
<g id="line2d_65">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="111.972706" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_21">
<g id="line2d_66">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="107.144471" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_22">
<g id="line2d_67">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="102.316235" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_23">
<g id="line2d_68">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="92.659765" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_24">
<g id="line2d_69">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="87.831529" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_25">
<g id="line2d_70">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="83.003294" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_26">
<g id="line2d_71">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="78.175059" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_27">
<g id="line2d_72">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="68.518588" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_28">
<g id="line2d_73">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="63.690353" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_29">
<g id="line2d_74">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="58.862118" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_30">
<g id="line2d_75">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="54.033882" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_31">
<g id="line2d_76">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="44.377412" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_32">
<g id="line2d_77">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="39.549176" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_33">
<g id="line2d_78">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="34.720941" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_34">
<g id="line2d_79">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="29.892706" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_35">
<g id="line2d_80">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="20.236235" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_36">
<g id="line2d_81">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="15.408" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="ytick_37">
<g id="line2d_82">
<g>
<use xlink:href="#m0f1f99a069" x="41.894063" y="10.579765" style="stroke: #000000; stroke-width: 0.6"/>
</g>
</g>
</g>
<g id="text_16">
<!-- Displacement (mm) -->
<g transform="translate(14.838125 141.322141) rotate(-90) scale(0.11 -0.11)">
<defs>
<path id="TimesNewRomanPSMT-44" d="M 109 0
L 109 116
L 269 116
Q 538 116 650 288
Q 719 391 719 750
L 719 3488
Q 719 3884 631 3984
Q 509 4122 269 4122
L 109 4122
L 109 4238
L 1834 4238
Q 2784 4238 3279 4022
Q 3775 3806 4076 3303
Q 4378 2800 4378 2141
Q 4378 1256 3841 663
Q 3238 0 2003 0
L 109 0
z
M 1319 306
Q 1716 219 1984 219
Q 2709 219 3187 728
Q 3666 1238 3666 2109
Q 3666 2988 3187 3494
Q 2709 4000 1959 4000
Q 1678 4000 1319 3909
L 1319 306
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-6c" d="M 1184 4444
L 1184 647
Q 1184 378 1223 290
Q 1263 203 1344 158
Q 1425 113 1647 113
L 1647 0
L 244 0
L 244 113
Q 441 113 512 153
Q 584 194 625 287
Q 666 381 666 647
L 666 3247
Q 666 3731 644 3842
Q 622 3953 573 3993
Q 525 4034 450 4034
Q 369 4034 244 3984
L 191 4094
L 1044 4444
L 1184 4444
z
" transform="scale(0.015625)"/>
<path id="TimesNewRomanPSMT-61" d="M 1822 413
Q 1381 72 1269 19
Q 1100 -59 909 -59
Q 613 -59 420 144
Q 228 347 228 678
Q 228 888 322 1041
Q 450 1253 767 1440
Q 1084 1628 1822 1897
L 1822 2009
Q 1822 2438 1686 2597
Q 1550 2756 1291 2756
Q 1094 2756 978 2650
Q 859 2544 859 2406
L 866 2225
Q 866 2081 792 2003
Q 719 1925 600 1925
Q 484 1925 411 2006
Q 338 2088 338 2228
Q 338 2497 613 2722
Q 888 2947 1384 2947
Q 1766 2947 2009 2819
Q 2194 2722 2281 2516
Q 2338 2381 2338 1966
L 2338 994
Q 2338 584 2353 492
Q 2369 400 2405 369
Q 2441 338 2488 338
Q 2538 338 2575 359
Q 2641 400 2828 588
L 2828 413
Q 2478 -56 2159 -56
Q 2006 -56 1915 50
Q 1825 156 1822 413
z
M 1822 616
L 1822 1706
Q 1350 1519 1213 1441
Q 966 1303 859 1153
Q 753 1003 753 825
Q 753 600 887 451
Q 1022 303 1197 303
Q 1434 303 1822 616
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-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-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)"/>
</defs>
<use xlink:href="#TimesNewRomanPSMT-44"/>
<use xlink:href="#TimesNewRomanPSMT-69" transform="translate(72.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-73" transform="translate(100 0)"/>
<use xlink:href="#TimesNewRomanPSMT-70" transform="translate(138.916016 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6c" transform="translate(188.916016 0)"/>
<use xlink:href="#TimesNewRomanPSMT-61" transform="translate(216.699219 0)"/>
<use xlink:href="#TimesNewRomanPSMT-63" transform="translate(261.083984 0)"/>
<use xlink:href="#TimesNewRomanPSMT-65" transform="translate(305.46875 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6d" transform="translate(349.853516 0)"/>
<use xlink:href="#TimesNewRomanPSMT-65" transform="translate(427.636719 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6e" transform="translate(472.021484 0)"/>
<use xlink:href="#TimesNewRomanPSMT-74" transform="translate(522.021484 0)"/>
<use xlink:href="#TimesNewRomanPSMT-20" transform="translate(549.804688 0)"/>
<use xlink:href="#TimesNewRomanPSMT-28" transform="translate(574.804688 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6d" transform="translate(608.105469 0)"/>
<use xlink:href="#TimesNewRomanPSMT-6d" transform="translate(685.888672 0)"/>
<use xlink:href="#TimesNewRomanPSMT-29" transform="translate(763.671875 0)"/>
</g>
</g>
</g>
<g id="line2d_83">
<path d="M 41.894063 97.488
L 48.485063 85.900235
L 55.076063 97.488
L 61.667063 109.075765
L 68.258062 97.488
L 74.849063 85.900235
L 81.440062 97.488
L 88.031062 109.075765
L 94.622062 97.488
L 101.213063 73.346824
L 107.804063 97.488
L 114.395062 121.629176
L 120.986062 97.488
L 127.577062 73.346824
L 134.168062 97.488
L 140.759062 121.629176
L 147.350062 97.488
L 153.941062 60.793412
L 160.532062 97.488
L 167.123063 134.182588
L 173.714063 97.488
L 180.305062 60.793412
L 186.896062 97.488
L 193.487062 134.182588
L 200.078062 97.488
L 206.669062 49.205647
L 213.260063 97.488
L 219.851063 145.770353
L 226.442062 97.488
L 233.033062 49.205647
L 239.624062 97.488
L 246.215062 145.770353
L 252.806062 97.488
L 259.397063 39.549176
L 265.988062 97.488
L 272.579062 155.426824
L 279.170062 97.488
L 285.761062 39.549176
L 292.352062 97.488
L 298.943062 155.426824
L 305.534063 97.488
L 312.125063 29.892706
L 318.716062 97.488
L 325.307062 165.083294
L 331.898062 97.488
L 338.489062 29.892706
L 345.080062 97.488
L 351.671063 165.083294
L 358.262062 97.488
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #1a6faf; stroke-width: 1.6; stroke-linecap: square"/>
</g>
<g id="line2d_84">
<path d="M 41.894063 97.488
L 48.485063 82.037647
L 55.076063 97.488
L 61.667063 112.938353
L 68.258062 97.488
L 74.849063 82.037647
L 81.440062 97.488
L 88.031062 112.938353
L 94.622062 97.488
L 101.213063 66.587294
L 107.804063 97.488
L 114.395062 128.388706
L 120.986062 97.488
L 127.577062 66.587294
L 134.168062 97.488
L 140.759062 128.388706
L 147.350062 97.488
L 153.941062 51.136941
L 160.532062 97.488
L 167.123063 143.839059
L 173.714063 97.488
L 180.305062 51.136941
L 186.896062 97.488
L 193.487062 143.839059
L 200.078062 97.488
L 206.669062 35.686588
L 213.260063 97.488
L 219.851063 159.289412
L 226.442062 97.488
L 233.033062 35.686588
L 239.624062 97.488
L 246.215062 159.289412
L 252.806062 97.488
L 259.397063 25.064471
L 265.988062 97.488
L 272.579062 169.911529
L 279.170062 97.488
L 285.761062 25.064471
L 292.352062 97.488
L 298.943062 169.911529
L 305.534063 97.488
L 312.125063 15.408
L 318.716062 97.488
L 325.307062 179.568
L 331.898062 97.488
L 338.489062 15.408
L 345.080062 97.488
L 351.671063 179.568
L 358.262062 97.488
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #e07060; stroke-width: 1.6; stroke-linecap: square"/>
</g>
<g id="line2d_85">
<path d="M 41.894063 97.488
L 48.485063 78.175059
L 55.076063 97.488
L 61.667063 112.938353
L 68.258062 97.488
L 74.849063 82.037647
L 81.440062 97.488
L 88.031062 112.938353
L 94.622062 97.488
L 101.213063 66.587294
L 107.804063 97.488
L 114.395062 128.388706
L 120.986062 97.488
L 127.577062 66.587294
L 134.168062 97.488
L 140.759062 128.388706
L 147.350062 97.488
L 153.941062 51.136941
L 160.532062 97.488
L 167.123063 143.839059
L 173.714063 97.488
L 180.305062 51.136941
L 186.896062 97.488
L 193.487062 143.839059
L 200.078062 97.488
L 206.669062 35.686588
L 213.260063 97.488
L 219.851063 159.289412
L 226.442062 97.488
L 233.033062 35.686588
L 239.624062 97.488
L 246.215062 159.289412
L 252.806062 97.488
L 259.397063 25.064471
L 265.988062 97.488
L 272.579062 169.911529
L 279.170062 97.488
L 285.761062 25.064471
L 292.352062 97.488
L 298.943062 169.911529
L 305.534063 97.488
L 312.125063 15.408
L 318.716062 97.488
L 325.307062 179.568
L 331.898062 97.488
L 338.489062 15.408
L 345.080062 97.488
L 351.671063 179.568
L 358.262062 97.488
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #4d9a57; stroke-width: 1.6; stroke-linecap: square"/>
</g>
<g id="line2d_86">
<path d="M 41.894063 97.488
L 358.262063 97.488
" clip-path="url(#pc6a86df331)" style="fill: none; stroke: #000000; stroke-opacity: 0.65; stroke-width: 0.55; stroke-linecap: square"/>
</g>
<g id="patch_3">
<path d="M 41.894063 187.776
L 41.894063 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 41.894063 187.776
L 358.262062 187.776
" style="fill: none; stroke: #000000; stroke-width: 0.7; stroke-linejoin: miter; stroke-linecap: square"/>
</g>
</g>
<g id="legend_1">
<g id="line2d_87">
<path d="M 80.061969 233.233031
L 91.061969 233.233031
L 102.061969 233.233031
" style="fill: none; stroke: #1a6faf; stroke-width: 1.6; stroke-linecap: square"/>
</g>
<g id="text_17">
<!-- H30 -->
<g transform="translate(110.861969 237.083031) scale(0.11 -0.11)">
<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)"/>
</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)"/>
</g>
</g>
<g id="line2d_88">
<path d="M 151.806031 233.233031
L 162.806031 233.233031
L 173.806031 233.233031
" style="fill: none; stroke: #e07060; stroke-width: 1.6; stroke-linecap: square"/>
</g>
<g id="text_18">
<!-- H45 -->
<g transform="translate(182.606031 237.083031) scale(0.11 -0.11)">
<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-48"/>
<use xlink:href="#TimesNewRomanPSMT-34" transform="translate(72.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-35" transform="translate(122.216797 0)"/>
</g>
</g>
<g id="line2d_89">
<path d="M 223.550094 233.233031
L 234.550094 233.233031
L 245.550094 233.233031
" style="fill: none; stroke: #4d9a57; stroke-width: 1.6; stroke-linecap: square"/>
</g>
<g id="text_19">
<!-- H60 -->
<g transform="translate(254.350094 237.083031) scale(0.11 -0.11)">
<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-48"/>
<use xlink:href="#TimesNewRomanPSMT-36" transform="translate(72.216797 0)"/>
<use xlink:href="#TimesNewRomanPSMT-30" transform="translate(122.216797 0)"/>
</g>
</g>
</g>
</g>
<defs>
<clipPath id="pc6a86df331">
<rect x="41.894063" y="7.2" width="316.368" height="180.576"/>
</clipPath>
</defs>
</svg>
"""
Plot the loading pattern displacement histories.
The script reads LoadPatterns.csv and saves a single-panel figure as PNG, SVG,
and PDF using the same visual format as the FEM validation plots.
"""
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams.update(
{
"font.family": "serif",
"font.serif": ["Times New Roman", "DejaVu Serif"],
"mathtext.fontset": "stix",
"font.size": 11,
"axes.labelsize": 11,
"axes.titlesize": 11,
"xtick.labelsize": 11,
"ytick.labelsize": 11,
"axes.linewidth": 0.7,
"axes.spines.top": False,
"axes.spines.right": False,
"figure.dpi": 300,
"savefig.dpi": 300,
}
)
COLORS = ["#1a6faf", "#E07060", "#4D9A57"]
COLOR_GRID = "#d8d8d8"
X_LABEL = "Time (s)"
Y_LABEL = "Displacement (mm)"
SERIES_LABELS = ["H30", "H45", "H60"]
def load_loading_patterns(path):
data = np.genfromtxt(path, delimiter=",", skip_header=1)
if data.ndim != 2 or data.shape[1] != 4:
raise ValueError(f"{path.name} must contain four numeric columns.")
return data[:, 0], data[:, 1:]
def style_axis(ax):
ax.grid(True, 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.minorticks_on()
def save_figure_all_formats(fig, out_base):
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 main():
base_dir = Path(__file__).resolve().parent
time, displacements = load_loading_patterns(base_dir / "LoadPatterns.csv")
fig, ax = plt.subplots(figsize=(5.2, 3.8))
fig.subplots_adjust(left=0.14, right=0.985, bottom=0.28, top=0.94)
for index, label in enumerate(SERIES_LABELS):
ax.plot(
time,
displacements[:, index],
color=COLORS[index],
linewidth=1.6,
label=label,
)
ax.axhline(0, color="black", linewidth=0.55, alpha=0.65)
ax.set_xlabel(X_LABEL)
ax.set_ylabel(Y_LABEL)
ax.set_xlim(time.min(), time.max())
style_axis(ax)
handles, labels = ax.get_legend_handles_labels()
fig.legend(
handles,
labels,
loc="lower center",
ncol=3,
frameon=False,
framealpha=0.95,
edgecolor="#cccccc",
bbox_to_anchor=(0.5, 0.055),
)
output_base = base_dir / "LoadPatterns"
save_figure_all_formats(fig, output_base)
plt.close(fig)
print(f"Saved: {output_base}.png/.svg/.pdf")
if __name__ == "__main__":
main()
Tiempo [s],Desplazamiento H30 [mm],Desplazamiento H45 [mm]
0,0,0
0.0625,12,16
0.125,0,0
0.1875,-12,-16
0.25,0,0
0.3125,12,16
0.375,0,0
0.4375,-12,-16
0.5,0,0
0.5625,25,32
0.625,0,0
0.6875,-25,-32
0.75,0,0
0.8125,25,32
0.875,0,0
0.9375,-25,-32
1,0,0
1.0625,38,48
1.125,0,0
1.1875,-38,-48
1.25,0,0
1.3125,38,48
1.375,0,0
1.4375,-38,-48
1.5,0,0
1.5625,50,64
1.625,0,0
1.6875,-50,-64
1.75,0,0
1.8125,50,64
1.875,0,0
1.9375,-50,-64
2,0,0
2.0625,60,75
2.125,0,0
2.1875,-60,-75
2.25,0,0
2.3125,60,75
2.375,0,0
2.4375,-60,-75
2.5,0,0
2.5625,70,85
2.625,0,0
2.6875,-70,-85
2.75,0,0
2.8125,70,85
2.875,0,0
2.9375,-70,-85
3,0,0
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
\corres{J. Irazábal. \email{jirazabal@cimne.upc.edu}} \corres{J. Irazábal. \email{jirazabal@cimne.upc.edu}}
\abstract[Abstract]{Buckling-delayed shear-link dampers are used in seismic-resistant structures as passive devices that concentrate energy dissipation while limiting damage to the primary system. Their geometric optimization requires balancing high energy dissipation with strict control of local damage. Finite element models can accurately reproduce the nonlinear cyclic response of these devices and provide internal quantities such as damage indicators and local distortion, but their computational cost prevents their direct use within iterative optimization loops. This work proposes an adaptive surrogate-assisted optimization framework for buckling-delayed shear-link dampers. First, experimentally calibrated nonlinear finite element models are used to generate reference datasets for dampers with different geometric and mechanical configurations. Supervised learning models are initially evaluated, with support vector regression and Gaussian process regression, both based on radial kernel functions, consistently providing high predictive accuracy. Motivated by this observation, radial basis function surrogates are introduced as a computationally efficient alternative. The surrogate predictions are coupled with a differential evolution algorithm through a damage-aware objective function that controls local damage and uses dissipated energy as a performance criterion. Optimized geometries are finally re-evaluated with finite element simulations. When the surrogate error exceeds the adopted tolerances, the new simulation result is added to the dataset and the surrogate models are retrained. In addition, SHapley Additive exPlanations are employed to quantify the influence of window thickness on damage distribution, with particular emphasis on the response of the surrounding frame. The proposed framework provides an efficient damage-aware optimization of seismic energy dissipation devices.} \abstract[Abstract]{Buckling-delayed shear-link dampers are used in seismic-resistant structures as passive devices that concentrate energy dissipation while limiting damage to the primary system. Their geometric optimization requires balancing high energy dissipation with strict control of local damage. Finite element models can accurately reproduce the nonlinear cyclic response of these devices and provide internal quantities such as damage indicators and local distortion, but their computational cost prevents their direct use within iterative optimization loops. This work proposes an adaptive surrogate-assisted optimization framework for buckling-delayed shear-link dampers. First, experimentally calibrated nonlinear finite element models are used to generate reference datasets for dampers with different geometric and mechanical configurations. Supervised learning models are initially evaluated, with support vector regression and Gaussian process regression consistently providing high predictive accuracy. This suggests that kernel-based, distance-dependent approximations are well suited to the problem, motivating the introduction of radial basis function surrogates as a computationally efficient alternative. The surrogate predictions are coupled with a differential evolution algorithm through a damage-aware objective function that controls local damage and uses dissipated energy as a performance criterion. Optimized geometries are finally re-evaluated with finite element simulations. When the surrogate error exceeds the adopted tolerances, the new simulation result is added to the dataset and the surrogate models are retrained. In addition, SHapley Additive exPlanations are employed to quantify the influence of window thickness on damage distribution, with particular emphasis on the response of the surrounding frame. The proposed framework provides an efficient damage-aware optimization of seismic energy dissipation devices.}
\keywords{Buckling-delayed shear link, seismic energy dissipation, FEM validation, surrogate modelling, machine learning, radial basis functions, Differential Evolution, SHAP.} \keywords{Buckling-delayed shear link, seismic energy dissipation, FEM validation, surrogate modelling, machine learning, radial basis functions, Differential Evolution, SHAP.}
...@@ -197,23 +197,30 @@ To improve surrogate robustness near the admissible limits, the sampling domain ...@@ -197,23 +197,30 @@ To improve surrogate robustness near the admissible limits, the sampling domain
\end{tabular} \end{tabular}
\end{table} \end{table}
For every sampled configuration, a FEM simulation is performed, and the resulting dataset stores the input variables and the corresponding structural response quantities. The target outputs include damage indicators in the windows and in the frame, together with local distortion measures associated with dissipative activation. The aggregated TFDMap indicator in window $i$ is denoted by $\TFD_i$, whereas the corresponding frame indicator is denoted by $\TFD_f$. Both quantities are computed as the average TFDMap value of the 12 nodes with the highest values within each region, capturing the most critical damage levels while reducing sensitivity to isolated numerical peaks. The maximum local shear distortion in each window is denoted by $\varepsilon_{xy,i}$ and is used as a proxy for dissipative activation. When included in the objective function, each window contribution is weighted according to its effective geometric volume, so that the optimization accounts for both local strain intensity and the material volume involved in the dissipation process. For every sampled configuration, a FEM simulation is performed under a displacement-controlled cyclic loading protocol. Since the admissible deformation demand depends on the size of the device, different loading patterns are adopted according to the device height. As shown in Figure~\ref{fig:LoadPatterns}, both the number of cycles and the maximum displacement amplitude increase with the device height, consistently with the expected performance range of each geometry family.
\red{Faltan por meter los ciclos de carga aplicados para cada geometría.} \begin{figure}[!ht]
\centering
\includegraphics[width=0.50\textwidth]{./Figures/LoadPatterns/LoadPatterns.png}
\caption{Displacement-controlled cyclic loading patterns adopted for the different device heights considered in the FEM campaign.}
\label{fig:LoadPatterns}
\end{figure}
The resulting dataset stores the input variables and the structural response quantities extracted at the final time of each simulation. The target outputs include damage indicators in the windows and in the frame, together with local distortion measures associated with dissipative activation. For compactness in the optimization formulation, the aggregated TFDMap indicator in window $i$ is denoted by $\TFD_i$, whereas the corresponding frame indicator is denoted by $\TFD_f$. Both quantities are computed as the average TFDMap value of the 12 nodes with the highest values within each region, capturing the most critical damage levels while reducing sensitivity to isolated numerical peaks.
The maximum local shear distortion in each window is denoted by $\varepsilon_{xy,i}$ and is used as a proxy for dissipative activation. When included in the objective function, each window contribution is weighted according to its effective geometric volume, so that the optimization accounts for both local strain intensity and the material volume involved in the dissipation process.
\subsection{Supervised ML surrogate models}\label{subsec:ml_models} \subsection{Supervised ML surrogate models}\label{subsec:ml_models}
This work compares several supervised surrogate models for predicting FEM-derived damage and distortion indicators. The considered models cover three families: tree-based methods, including Random Forest (RF) \cite{Breiman2001}, Gradient Boosting Regression (GBR) \cite{Friedman2001} and XGBoost \cite{Chen2016}; kernel-based methods, including Support Vector Regression (SVR) \cite{Drucker1996} and Gaussian Process Regression (GPR) \cite{Williams1995}; and neural-network models, represented by the Multilayer Perceptron (MLP) \cite{Rosenblatt1958,Rumelhart1986}. RF relies on bootstrap aggregation of decision trees, GBR and XGBoost are sequential boosting approaches, SVR and GPR exploit kernel functions to model nonlinear relationships and MLP approximates nonlinear input--output mappings through interconnected layers. This work compares several supervised surrogate models for predicting FEM-derived damage and distortion indicators. The considered models cover three families: tree-based methods, including Random Forest (RF) \cite{Breiman2001}, Gradient Boosting Regression (GBR) \cite{Friedman2001} and XGBoost \cite{Chen2016}; kernel-based methods, including Support Vector Regression (SVR) \cite{Drucker1996} and Gaussian Process Regression (GPR) \cite{Williams1995}; and neural-network models, represented by the Multilayer Perceptron (MLP) \cite{Rosenblatt1958,Rumelhart1986}. RF relies on bootstrap aggregation of decision trees, GBR and XGBoost are sequential boosting approaches, SVR and GPR exploit kernel functions to model nonlinear relationships and MLP approximates nonlinear input--output mappings through interconnected layers.
For each geometry family, an independent regression model is trained for every target output. The input vector contains the window thicknesses of the corresponding device, while the outputs are the local distortion indicators $\varepsilon_{xy,i}$, the window damage indicators $\TFD_i$ and the frame damage indicator $\TFD_f$. Therefore, for a device with $W$ windows, $2W+1$ surrogate models are trained: $W$ for distortion, $W$ for window damage and one for frame damage. For each output, all candidate algorithms are evaluated and the selected model is stored. For each geometry family, an independent regression model is trained for every target output. The input vector contains the window thicknesses of the corresponding device, while the outputs are the local distortion indicators in each window $\varepsilon_{xy,i}$, the window damage indicators $\TFD_i$ and the frame damage indicator $\TFD_f$. Therefore, for a device with $W$ windows, $2W+1$ surrogate models are trained: $W$ for windows distortion, $W$ for windows damage and one for frame damage. For each output, all candidate algorithms are evaluated and the selected model is stored.
Hyperparameters are optimized using Bayesian optimization \cite{Snoek2012}, with 40 evaluations per model. The first 10 evaluations are randomly sampled to explore the search space, while the remaining 30 are guided by the Bayesian surrogate model. This strategy provides a more efficient alternative to exhaustive grid search, particularly given the number of geometry families, target outputs and candidate algorithms considered. Hyperparameters are optimized using Bayesian optimization \cite{Snoek2012}, with 40 evaluations per model. The first 10 evaluations are randomly sampled to explore the search space, while the remaining 30 are guided by the Bayesian surrogate model. This strategy provides a more efficient alternative to exhaustive grid search, particularly given the number of geometry families, target outputs and candidate algorithms considered.
The cross-validation strategy is adapted to the dataset size. Leave-One-Out validation is used for $N\leq20$, repeated five-fold cross-validation with five repetitions for $21\leq N\leq80$, and shuffled five-fold cross-validation for larger datasets. For small datasets, the search spaces of tree-based models are restricted to reduce overfitting. The cross-validation strategy is adapted to the dataset size. Leave-One-Out validation is used for $N\leq20$, repeated five-fold cross-validation with five repetitions for $21\leq N\leq80$, and shuffled five-fold cross-validation for larger datasets. For small datasets, the search spaces of tree-based models are restricted to reduce overfitting.
Model selection is performed in two stages. First, for each candidate algorithm, Bayesian hyperparameter optimization is carried out using cross-validated RMSE as the refit criterion. The best hyperparameter configuration is therefore the one with the lowest mean RMSE. Then, the best configurations from all candidate algorithms are compared. The model with the lowest mean RMSE defines a competitive threshold, and all models with an RMSE within 5\% of this value are retained. Among these competitive models, the final selection is based on the lowest relative RMSE dispersion, computed as the standard deviation of the fold-wise RMSE divided by the mean RMSE. If two models have the same dispersion, the one with the lower mean RMSE is preferred. Model selection is performed in two stages. First, for each candidate algorithm, Bayesian hyperparameter optimization is carried out using cross-validated Root Mean Squared Error (RMSE) as the refit criterion. The best hyperparameter configuration is therefore the one with the lowest mean RMSE. Then, the best configurations from all candidate algorithms are compared. The model with the lowest mean RMSE defines a competitive threshold, and all models with an RMSE within 5\% of this value are retained. Among these competitive models, the final selection is based on the lowest relative RMSE dispersion, computed as the standard deviation of the fold-wise RMSE divided by the mean RMSE. If two models have the same dispersion, the one with the lower mean RMSE is preferred. This procedure favours surrogates that are both accurate and stable, which is important because small prediction errors near active damage constraints may alter the optimized geometry.
This procedure favours surrogates that are both accurate and stable, which is important because small prediction errors near active damage constraints may alter the optimized geometry.
\begin{figure}[!ht] \begin{figure}[!ht]
\centering \centering
...@@ -222,11 +229,11 @@ This procedure favours surrogates that are both accurate and stable, which is im ...@@ -222,11 +229,11 @@ This procedure favours surrogates that are both accurate and stable, which is im
\label{fig:BayesianSearchCV} \label{fig:BayesianSearchCV}
\end{figure} \end{figure}
Preliminary executions of the proposed workflow show that SVR and GPR frequently provide the highest, or second-highest, predictive accuracy for the considered datasets. Since both methods rely on radial kernel functions, this result motivates the assessment of Radial Basis Function (RBF) interpolation \cite{Gutmann2001} as a simpler and computationally efficient surrogate alternative. Although the cost of surrogate evaluation is negligible compared with FEM simulations, training and repeatedly evaluating complex supervised models can still become relevant within optimization loops involving many candidate geometries. RBF interpolation offers a non-parametric and fast-to-train alternative that can capture nonlinear response surfaces with limited hyperparameter tuning, making it attractive for low-dimensional and moderately sampled design spaces. Preliminary executions of the proposed workflow show that SVR and GPR frequently provide the highest, or second-highest, predictive accuracy for the considered datasets. These results suggest that kernel-based models, and in particular distance-based similarity measures, are well suited to approximate the FEM response surfaces involved in this problem. This observation motivates the assessment of Radial Basis Function (RBF) interpolation \cite{Gutmann2001} as a simpler and computationally efficient surrogate alternative. Although surrogate evaluation is negligible compared with FEM simulations, the training and hyperparameter optimization of complex supervised models can still become relevant when several outputs, geometry families and adaptive iterations are considered. RBF interpolation provides a non-parametric and fast-to-train alternative that can capture nonlinear response surfaces with limited hyperparameter tuning, making it attractive for low-dimensional and moderately sampled design spaces.
\subsection{RBF surrogate models}\label{subsec:rbf_models} \subsection{RBF surrogate models}\label{subsec:rbf_models}
The RBF surrogate is implemented using the \texttt{scipy.interpolate.Rbf} interpolator. For each output variable, the model is trained using the same input features employed by the supervised ML surrogates. In the current implementation, a multiquadric radial basis function is adopted with zero smoothing and automatic shape-parameter estimation. The RBF surrogate is implemented using the interpolator available in the \textit{SciPy} library \cite{Virtanen2025}. For each output variable, the model is trained using the same input features employed by the supervised ML surrogates. In the current implementation, a multiquadric radial basis function is adopted with zero smoothing and automatic shape-parameter selection. Unlike the Gaussian RBF kernel used in SVR, the multiquadric function leads here to an interpolation-based approximation of the FEM response surface.
The prediction model can be expressed as The prediction model can be expressed as
\begin{equation} \begin{equation}
...@@ -235,38 +242,24 @@ The prediction model can be expressed as ...@@ -235,38 +242,24 @@ The prediction model can be expressed as
\end{equation} \end{equation}
where $\mathbf{x}_j$ denotes the FEM-sampled geometries, $\lambda_j$ represents the interpolation weights, and $\phi$ corresponds to the selected radial basis function. where $\mathbf{x}_j$ denotes the FEM-sampled geometries, $\lambda_j$ represents the interpolation weights, and $\phi$ corresponds to the selected radial basis function.
RBF models are evaluated through Leave-One-Out validation. For each output variable, one FEM sample is iteratively removed from the dataset, the interpolant is trained using the remaining samples, and the excluded sample is subsequently predicted. The resulting predictions are used to compute RMSE, MAE, $R^2$, and dispersion-related metrics. For each output variable, a final RBF surrogate is trained using all available FEM samples in the current iteration and stored for subsequent use in the optimization process. Its predictive performance is assessed through Leave-One-Out validation: each FEM sample is iteratively removed from the dataset, a temporary RBF interpolant is trained with the remaining samples, and the excluded sample is predicted. The resulting out-of-sample predictions are then used to compute RMSE, MAE, $R^2$, and error-dispersion metrics.
This validation strategy is particularly suitable for the present application because the number of FEM simulations remains limited and the interpolation accuracy may be sensitive to local variations in the density of training samples. In addition, the low computational cost of RBF interpolation makes it especially attractive for iterative optimization workflows involving repeated surrogate evaluations. This validation strategy is particularly suitable for the present application because the number of FEM simulations is limited and the interpolation accuracy may be sensitive to local variations in the density of training samples. In addition, the low training and evaluation cost of RBF interpolation makes it especially attractive for iterative optimization workflows involving repeated surrogate updates and evaluations.
\section{Damage-aware surrogate-assisted optimization}\label{sec:optimization} \section{Damage-aware surrogate-assisted optimization}\label{sec:optimization}
\subsection{Optimization algorithm}\label{subsec:de} The proposed methodology seeks to minimize local damage in both the dissipative windows and the surrounding frame, while promoting a balanced contribution of all windows to the energy dissipation process. The geometric optimization is carried out using DE \cite{Storn1997}, a population-based global optimizer that does not require gradient information and is therefore suitable for nonlinear and non-convex surrogate response surfaces. In the current implementation, DE is run with a maximum of 500 iterations, a population size factor of 25 and a convergence tolerance of $10^{-6}$. Once an optimal candidate is obtained, an adaptive FEM validation loop is applied to verify the predicted geometry before acceptance.
The proposed methodology seeks to minimize local damage in both the dissipative windows and the surrounding frame while promoting a balanced contribution of all windows to the energy dissipation process. Following optimization, an adaptive FEM validation loop is incorporated to verify the predicted optimal geometries before acceptance.
The geometric optimization is carried out with Differential Evolution. DE is a population-based global optimizer that does not require gradient information and is therefore suitable for nonlinear, non-convex surrogate response surfaces. In the current implementation, the DE algorithm is run with a maximum of 500 iterations, a population size factor of 25, a convergence tolerance of $10^{-6}$ and a fixed random seed equal to 42 for reproducibility. For each candidate geometry $\mathbf{x}$, the trained surrogate models predict the window distortions $\hat{\Exy}_i$, the window damage indicators $\widehat{\TFD}_i$ and the frame damage indicator $\widehat{\TFD}_f$. These quantities are combined into a scalar objective function designed to encode four mechanical criteria: damage must remain limited in all structural components; frame damage must be penalized more severely than window damage because frame failure would compromise the structural integrity of the damper; the windows should develop comparable damage levels to avoid concentration of the dissipative demand in a single region; and, among geometries with similar damage performance, the preferred solution should be the one with higher energy dissipation capacity.
For each candidate geometry $\mathbf{x}$, the trained surrogate models predict the window distortions $\hat{\Exy}_i$, the window damage indicators $\widehat{\TFD}_i$ and the frame damage indicator $\widehat{\TFD}_f$. These predictions are then combined into a scalar objective function to be minimized. The implemented objective function to be minimized is
\subsection{Objective function}\label{subsec:objective}
The objective function is designed to encode four mechanical rules:
\begin{enumerate}
\item the damage indicator must remain limited in all structural components, including both windows and frame;
\item reaching complete or near-complete damage in the frame is much more critical than reaching a similar damage level in a window, because frame failure would imply loss of the structural integrity of the damper;
\item the windows should develop comparable damage levels so that the dissipation mechanism is distributed rather than concentrated in a single window;
\item if several geometries show similar damage performance, the preferred one is the geometry that dissipates more energy, approximated through stable window distortion and the corresponding volume contribution.
\end{enumerate}
The implemented scalar objective is
\begin{equation} \begin{equation}
J(\mathbf{x}) = - \sum_{i=1}^{W} \hat{\Exy}_i^2\, t_{w,i}\, V_i + J(\mathbf{x}) = - \sum_{i=1}^{W} \hat{\Exy}_i^2\, t_{w,i}\, V_i +
\sum_{i=1}^{W} P_w\left(\widehat{\TFD}_i;\TFD_w^{\star}\right) + \sum_{i=1}^{W} P_w\left(\widehat{\TFD}_i;\TFD_w^{\star}\right) +
P_f\left(\widehat{\TFD}_f;\TFD_f^{\max}\right), P_f\left(\widehat{\TFD}_f;\TFD_f^{\max}\right),
\label{eq:objective} \label{eq:objective}
\end{equation} \end{equation}
where $V_i$ is the volume factor associated with window $i$, $\TFD_w^{\star}$ is the target TFDMap level for the windows and $\TFD_f^{\max}$ is the maximum admissible frame threshold. The first term is negative because the optimizer minimizes $J$; therefore, larger distortion contributions reduce the objective value. where $W$ is the number of windows, $t_{w,i}$ is the thickness of window $i$, $V_i$ is the corresponding volume factor, $\TFD_w^{\star}$ is the target damage level for the windows, and $\TFD_f^{\max}$ is the maximum admissible frame damage threshold. The first term is negative because the optimizer minimizes $J$; therefore, larger stable distortion contributions reduce the objective value and are favoured once the damage criteria are satisfied.
The window penalty is defined as The window penalty is defined as
\begin{equation} \begin{equation}
...@@ -277,9 +270,9 @@ P_w\left(\widehat{\TFD}_i;\TFD_w^{\star}\right)= ...@@ -277,9 +270,9 @@ P_w\left(\widehat{\TFD}_i;\TFD_w^{\star}\right)=
\end{cases} \end{cases}
\label{eq:window_penalty} \label{eq:window_penalty}
\end{equation} \end{equation}
This expression penalizes exceeding the target value quadratically, while also discouraging excessively under-utilized windows through a linear distance to the target. As a result, the optimizer tends to equalize the TFDMap levels among windows rather than forcing all windows to remain far below the admissible damage level. This formulation penalizes values above the target quadratically, while also discouraging excessively underused windows through a linear distance to the target. As a result, the optimizer tends to balance the damage levels among windows rather than forcing all windows to remain far below the admissible level.
The frame penalty is more severe: The frame penalty is defined as
\begin{equation} \begin{equation}
P_f\left(\widehat{\TFD}_f;\TFD_f^{\max}\right)= P_f\left(\widehat{\TFD}_f;\TFD_f^{\max}\right)=
\begin{cases} \begin{cases}
...@@ -288,15 +281,14 @@ P_f\left(\widehat{\TFD}_f;\TFD_f^{\max}\right)= ...@@ -288,15 +281,14 @@ P_f\left(\widehat{\TFD}_f;\TFD_f^{\max}\right)=
\end{cases} \end{cases}
\label{eq:frame_penalty} \label{eq:frame_penalty}
\end{equation} \end{equation}
The cubic frame penalty reflects the fact that complete frame failure is a much more severe event than localized damage in a replaceable window. In the current scripts, $\TFD_f^{\max}=90$ is used, while the target window threshold $\TFD_w^{\star}$ is provided as an input argument to the optimizer. The cubic penalty reflects the greater severity of frame damage compared with localized damage in a replaceable window. In the current implementation, $\TFD_f^{\max}=90$ is adopted, while the target window threshold $\TFD_w^{\star}$ is provided as an input parameter to the optimizer.
\subsection{Volume factors}\label{subsec:volume_factors}
The distortion contribution is weighted by a geometric factor that accounts for the effective volume associated with each window. These factors differ between families because the windows have different dimensions and positions. The current values used in the scripts are summarized in Table~\ref{tab:volume_factors}. When a geometry family is not explicitly covered, the implementation falls back to an unweighted contribution. The distortion contribution in Eq.~\eqref{eq:objective} is weighted by a geometric factor $V_i$ that accounts for the effective volume associated with each window. These factors depend on the geometry family because the windows differ in size and position. The values currently used in the optimization scripts are summarized in Table~\ref{tab:volume_factors}. If a geometry family is not explicitly covered, the implementation falls back to an unweighted contribution.
\begin{table}[t] \begin{table}[ht!]
\centering \centering
\caption{Window volume factors used to weight the distortion contribution in the objective function.}\label{tab:volume_factors} \caption{Window volume factors used to weight the distortion contribution in the objective function.}
\label{tab:volume_factors}
\begin{tabular}{lll} \begin{tabular}{lll}
\toprule \toprule
Family & Width identifier $B$ & Volume factors $V_i$ \\ Family & Width identifier $B$ & Volume factors $V_i$ \\
...@@ -419,7 +411,7 @@ Some limitations should be highlighted. First, the methodology is only as reliab ...@@ -419,7 +411,7 @@ Some limitations should be highlighted. First, the methodology is only as reliab
\section{Conclusions}\label{sec:conclusions} \section{Conclusions}\label{sec:conclusions}
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, Differential Evolution and FEM-based validation of the optimized geometries. The following conclusions can be drawn from the proposed formulation: 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:
\begin{enumerate} \begin{enumerate}
\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 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.
......
...@@ -765,4 +765,31 @@ steel from coupon test results available. First, the theory of metal plasticity ...@@ -765,4 +765,31 @@ steel from coupon test results available. First, the theory of metal plasticity
howpublished = {Standard, American Society of Civil Engineers}, howpublished = {Standard, American Society of Civil Engineers},
} }
@Article{Virtanen2025,
author = {Virtanen, Pauli and Gommers, Ralf and Oliphant, Travis E. and Haberland, Matt and Reddy, Tyler and Cournapeau, David and Burovski, Evgeni and Peterson, Pearu and Weckesser, Warren and Bright, Jonathan and {van der Walt}, St{\'e}fan J. and Brett, Matthew and Wilson, Joshua and Millman, K. Jarrod and Mayorov, Nikolay and Nelson, Andrew R. J. and Jones, Eric and Kern, Robert and Larson, Eric and Carey, C J and Polat, {\.I}lhan and Feng, Yu and Moore, Eric W. and {VanderPlas}, Jake and Laxalde, Denis and Perktold, Josef and Cimrman, Robert and Henriksen, Ian and Quintero, E. A. and Harris, Charles R. and Archibald, Anne M. and Ribeiro, Ant{\^o}nio H. and Pedregosa, Fabian and {van Mulbregt}, Paul and {SciPy 1.0 Contributors}},
title = {{{SciPy} 1.0: Fundamental Algorithms for Scientific Computing in Python}},
journal = {Nature Methods},
year = {2020},
volume = {17},
pages = {261--272},
doi = {10.1038/s41592-019-0686-2},
}
@Article{Storn1997,
author = {Storn, Rainer and Price, Kenneth},
journal = {Journal of Global Optimization},
title = {Differential {Evolution} – {A} {Simple} and {Efficient} {Heuristic} for global {Optimization} over {Continuous} {Spaces}},
year = {1997},
issn = {1573-2916},
month = dec,
number = {4},
pages = {341--359},
volume = {11},
abstract = {A new heuristic approach for minimizing possiblynonlinear and non-differentiable continuous spacefunctions is presented. By means of an extensivetestbed it is demonstrated that the new methodconverges faster and with more certainty than manyother acclaimed global optimization methods. The newmethod requires few control variables, is robust, easyto use, and lends itself very well to parallelcomputation.},
doi = {10.1023/A:1008202821328},
keywords = {evolution strategy, genetic algorithm, global optimization, nonlinear optimization, Stochastic optimization},
language = {en},
urldate = {2026-05-13},
}
@Comment{jabref-meta: databaseType:bibtex;} @Comment{jabref-meta: databaseType:bibtex;}
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