<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "https://jats.nlm.nih.gov/nlm-dtd/publishing/3.0/journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" xml:lang="en" dtd-version="3.0" article-type="research-article">
  <front>
    <journal-meta><journal-id journal-id-type="publisher">WES</journal-id><journal-title-group>
    <journal-title>Wind Energy Science</journal-title>
    <abbrev-journal-title abbrev-type="publisher">WES</abbrev-journal-title><abbrev-journal-title abbrev-type="nlm-ta">Wind Energ. Sci.</abbrev-journal-title>
  </journal-title-group><issn pub-type="epub">2366-7451</issn><publisher>
    <publisher-name>Copernicus Publications</publisher-name>
    <publisher-loc>Göttingen, Germany</publisher-loc>
  </publisher></journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.5194/wes-11-1989-2026</article-id><title-group><article-title>Adaptive economic wind turbine control</article-title><alt-title>Adaptive economic wind turbine control</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="no" rid="aff1">
          <name><surname>Anand</surname><given-names>Abhinav</given-names></name>
          
        <ext-link>https://orcid.org/0000-0001-9816-8976</ext-link></contrib>
        <contrib contrib-type="author" corresp="yes" rid="aff1">
          <name><surname>Bottasso</surname><given-names>Carlo L.</given-names></name>
          <email>carlo.bottasso@tum.de</email>
        <ext-link>https://orcid.org/0000-0002-9931-4389</ext-link></contrib>
        <aff id="aff1"><label>1</label><institution>Wind Energy Institute, Technical University of Munich, Boltzmannstraße 15, 85748 Garching b., München, Germany</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">Carlo L. Bottasso (carlo.bottasso@tum.de)</corresp></author-notes><pub-date><day>5</day><month>June</month><year>2026</year></pub-date>
      
      <volume>11</volume>
      <issue>6</issue>
      <fpage>1989</fpage><lpage>2008</lpage>
      <history>
        <date date-type="received"><day>3</day><month>June</month><year>2025</year></date>
           <date date-type="rev-request"><day>26</day><month>June</month><year>2025</year></date>
           <date date-type="rev-recd"><day>6</day><month>March</month><year>2026</year></date>
           <date date-type="accepted"><day>30</day><month>April</month><year>2026</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2026 Abhinav Anand</copyright-statement>
        <copyright-year>2026</copyright-year>
      <license license-type="open-access"><license-p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this licence, visit <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link></license-p></license></permissions><self-uri xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026.html">This article is available from https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026.html</self-uri><self-uri xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026.pdf">The full text article is available as a PDF file from https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e88">Model predictive control    (MPC) for wind turbines offers several interesting advantages over simpler techniques, as for example the direct optimization of a goal function, the inclusion of constraints, non-linear coupled dynamics, and wind preview (when available). To enable real-time execution, MPC uses a reduced-order model (ROM) that approximates the  dynamics of the controlled system using only a limited number of degrees of freedom. As a result, the accuracy of the ROM is often the main limit to the performance of MPC. To address this problem, an adaptive controller-internal model can reduce plant-model mismatches, potentially leading to improved performance.</p>

      <p id="d2e91">This work proposes an adaptive economic non-linear MPC (ENMPC) for wind turbines. The controller maximizes profit by optimally balancing fatigue damage cost with revenue due to power generation. The cyclic fatigue cost is formulated directly in the controller using the novel parametric online rain flow counting (PORFC) approach. PORFC provides a rigorous continuous expression of the discontinuous cyclic fatigue cost using time-varying parameters. Adaptivity is obtained by a controller-internal gray-box model that combines reduced-order physical dynamics with data-driven correction terms. These are implemented via a neural network that is trained offline. Additionally, system state and disturbance estimators are included in the closed-loop controller.</p>

      <p id="d2e94">The improvement in state predictions due to model adaptation is first assessed and compared with the non-adapted baseline ROM in open loop. The performance of the adaptive ENMPC and the impact of a reduced plant-model mismatch is then assessed in closed loop for a reference multi-MW onshore wind turbine in a realistic simulation environment. Results show that the adaptive ENMPC yields higher economic profits at significantly lower pitch and torque travels compared to the baseline non-adaptive ENMPC. While the enhanced closed-loop performance and economic gains of the proposed model adaptation are significant, they come at the cost of a slight increase in the computational burden of the controller.</p>
  </abstract>
    
<funding-group>
<award-group id="gs1">
<funding-source>Bundesministerium für Wirtschaft und Klimaschutz</funding-source>
<award-id>03EI6020</award-id>
</award-group>
</funding-group>
</article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
<sec id="Ch1.S1.SS1">
  <label>1.1</label><title>Beyond power maximization: economic wind turbine control</title>
      <p id="d2e113">Wind turbine operation and control have recently shifted from the traditional goal of power maximization to more economically driven goals. In this new paradigm, turbines are operated with damage awareness in mind <xref ref-type="bibr" rid="bib1.bibx24 bib1.bibx5 bib1.bibx19 bib1.bibx4 bib1.bibx23" id="paren.1"/>. This shift is driven by the impact of fatigue damage, which shortens the operational life of turbines, and increases operation and maintenance (O&amp;M) costs. In fact, these factors are critical to the economic profitability of operators of wind energy assets <xref ref-type="bibr" rid="bib1.bibx8 bib1.bibx37" id="paren.2"/>.</p>
      <p id="d2e122">One widely used method for developing economic controllers for wind turbines is model predictive control (MPC) <xref ref-type="bibr" rid="bib1.bibx28" id="paren.3"/>. MPC optimizes control actions over the short-term future by predicting system behavior, and then solving an economic optimization problem based on these predictions <xref ref-type="bibr" rid="bib1.bibx27" id="paren.4"/>. Existing literature shows that economic MPC formulations for wind turbine control – using the conventional objective of maximizing revenue from power generation – achieve better performance than baseline controllers and standard MPC approaches <xref ref-type="bibr" rid="bib1.bibx25 bib1.bibx12 bib1.bibx13 bib1.bibx11 bib1.bibx43" id="paren.5"/>. However, when considering wind energy systems, an economic optimization should balance the conflicting objectives of maximizing revenue from power generation and of minimizing the cost of fatigue-related damage. Additionally, a controller should always guarantee that the system operates within feasible limits. The effectiveness of the controller ultimately depends on the quality of the solution of this constrained optimization, which essentially relies not only on the economic model but also on the quality of predictions of the controller-internal model.</p>
</sec>
<sec id="Ch1.S1.SS2">
  <label>1.2</label><title>The challenge of including fatigue in control formulations</title>
      <p id="d2e142">The existing literature on the economic control of wind turbines using MPC is based on two main approaches for estimating cyclic fatigue: indirect and direct methods.</p>
      <p id="d2e145">The indirect approach uses a proxy for fatigue <xref ref-type="bibr" rid="bib1.bibx5" id="paren.6"/>. This method is convenient because it avoids the use of cycle counting that, because of its branching nature, introduces discontinuities in the calculations <xref ref-type="bibr" rid="bib1.bibx22" id="paren.7"/>. As a result, with the indirect approach, gradient-based methods can be used to solve the optimization problem. However, this also means that fatigue is only approximatively taken into account through a proxy quantity, which might not always provide for accurate results.</p>
      <p id="d2e154">The direct approach, on the other hand, estimates fatigue explicitly using online cycle counting directly in the MPC framework <xref ref-type="bibr" rid="bib1.bibx21 bib1.bibx4" id="paren.8"/>. This method, termed parametric online rain flow counting (PORFC), is relatively new and was first introduced in our previous work <xref ref-type="bibr" rid="bib1.bibx20" id="text.9"/>. It has since been applied in its fundamental form in various contexts, including wind turbine fatigue control <xref ref-type="bibr" rid="bib1.bibx21" id="paren.10"/>, battery cyclic aging control <xref ref-type="bibr" rid="bib1.bibx22" id="paren.11"/>, and control of grid-connected wind-battery hybrid systems <xref ref-type="bibr" rid="bib1.bibx3 bib1.bibx4" id="paren.12"/>. To the authors' knowledge, PORFC is the only approach that allows for the rigorous treatment of fatigue, as it was designed to produce the same results on receding horizons that would be obtained by cycle counting the whole response time history a posteriori <xref ref-type="bibr" rid="bib1.bibx20" id="paren.13"/>.</p>
</sec>
<sec id="Ch1.S1.SS3">
  <label>1.3</label><title>The challenge of relying on controller-internal models of reduced complexity</title>
      <p id="d2e184">In both approaches mentioned above, the controller relies on an internal model of the wind turbine to predict its behavior over the MPC horizon. However, due to computational effort and time constraints, the internal representation of the system response is typically obtained through a reduced-order model (ROM). ROMs approximate the system dynamics using a limited number of degrees of freedom (DOFs), enabling the real-time execution of the controller. The accuracy of these predictions plays a crucial role in the performance of the controller. A closer match between the predicted and actual wind turbine dynamics allows for the controller to make more precise decisions when optimizing the objective function, while at the same time ensuring compliance with system constraints. In fact, the degree of model mismatch not only affects  optimality but may also impact the ability  of the closed-loop system to operate strictly within admissible or desired limits.</p>
      <p id="d2e187">One way to address model mismatches is by using state observers and estimators <xref ref-type="bibr" rid="bib1.bibx4 bib1.bibx19" id="paren.14"/>, where  measurements of the response of the wind turbine from previous time steps are used to estimate and adjust the initialization of the controller for the next step. However, the effectiveness of this approach is limited when estimates are obtained from underlying models of scarce accuracy.</p>
      <p id="d2e193">A more compelling alternative is to adapt the internal model dynamics of the controller, either by using measured operational data or synthetic results from  models of sufficiently high fidelity that can accurately represent the plant behavior. One of the aims of this paper is to develop practical methods for enabling adaptivity in wind turbine ROMs.</p>
</sec>
<sec id="Ch1.S1.SS4">
  <label>1.4</label><title>Offline adaptation for certifiable learning control</title>
      <p id="d2e204">Data-driven adaptation can be implemented online, offline, or in a hybrid manner, each of these options offering distinct trade-offs in terms of advantages, challenges, and practical applicability to economic control.</p>
      <p id="d2e207">Online adaptation allows for quickly adjusting model behavior in real time based on observed plant response. However, for industrial applications, it is difficult to imagine how one could guarantee the correct learning of model corrections and how such a system could be demonstrated to always be safe and certifiable in practice.</p>
      <p id="d2e210">In contrast, offline adaptation allows for the systematic integration of data, enabling a rigorous verification and validation of any learned correction terms prior to their deployment in the field. A rigorous offline verification and validation opens the door to the certification of adaptive controllers, which must meet strict standards in performance, safety, and reliability before deployment in real-world operations.</p>
      <p id="d2e213">In the context of economic MPC, offline model adaptation can be achieved in several ways: by adjusting the parameters of the ROM <xref ref-type="bibr" rid="bib1.bibx30" id="paren.15"/>, by incorporating a correction term into the ROM or MPC optimization function <xref ref-type="bibr" rid="bib1.bibx7 bib1.bibx9 bib1.bibx35" id="paren.16"/>, or by a combination of both methods.</p>
      <p id="d2e223">It is, however, important to note that a ROM captures only selected aspects of the behavior of the plant – and does so only with limited accuracy. As a consequence, the tuning of ROM parameters alone is often insufficient and may even produce non-physical results, because parameter tuning cannot compensate for missing physics. Instead, data can be leveraged to learn and incorporate the missing physics into the internal model used by the controller. This is the approach followed in this work.</p>
      <p id="d2e226">The few existing studies on adaptive economic MPC for wind turbine control focus primarily on the tuning of controller gains <xref ref-type="bibr" rid="bib1.bibx31 bib1.bibx39" id="paren.17"/>. These works rely on simplified linearized models and Bayesian optimization techniques to achieve robust performance under uncertain and varying wind conditions, but they do not explicitly address model mismatch. More in general, gain tuning cannot compensate for missing or inaccurate representation of relevant physics. Recent contributions to economic MPC introduce more complex, non-linear internal models <xref ref-type="bibr" rid="bib1.bibx25 bib1.bibx26" id="paren.18"/>; however, these approaches still lack adaptive mechanisms that explicitly compensate for modeling errors.</p>
      <p id="d2e235">Furthermore, although the economic optimization in all of these studies incorporates profit-related objectives, it relies solely on indirect penalization of system states and does not explicitly account for fatigue damage, whose relevance has been highlighted by <xref ref-type="bibr" rid="bib1.bibx19" id="text.19"/> and <xref ref-type="bibr" rid="bib1.bibx4" id="text.20"/>.</p>
</sec>
<sec id="Ch1.S1.SS5">
  <label>1.5</label><title>Toward model-adaptive fatigue-aware economic wind turbine control</title>
      <p id="d2e253">The key contribution of this work is the development of a novel fatigue-aware economic non-linear model predictive controller (ENMPC) with offline-adaptive capabilities enabled by data-learned ROM corrections.</p>
      <p id="d2e256">The controller maximizes profit by balancing two competing factors: revenue from power generation and costs associated with fatigue damage of the turbine components. The cost of cyclic damage is formulated using the novel PORFC approach, which performs online rain flow analysis over the stress history and its future predictions to generate time-varying parameters. These parameters are then used to obtain a continuous expression of the discontinuous fatigue cost, which is incorporated into the MPC optimization. The  profit formulation used here does not explicitly incorporate the effects of fatigue on component reliability and O&amp;M costs, simply because of a lack of data and appropriate models linking loads with failure rates, instead representing fatigue-related costs solely through the amortization of the overall component cost, as discussed in <xref ref-type="bibr" rid="bib1.bibx40" id="text.21"/>.</p>
      <p id="d2e262">The controller-internal model is a gray box that combines reduced-order physical dynamics with offline-computed correction terms. These terms are formulated as neural networks trained on high-resolution measured or synthetic data of the wind turbine. Their objective is to reduce model mismatch, thereby improving online closed-loop performance.</p>
      <p id="d2e265">The paper is structured as follows. Section <xref ref-type="sec" rid="Ch1.S2"/> introduces the proposed model adaptation approach. It describes both the simplified wind turbine model used as internal ROM and the data-driven modeling of the correction term. Section <xref ref-type="sec" rid="Ch1.S3"/> provides a detailed formulation of the ENMPC, discussing various aspects of the underlying optimization problem. This section also describes the state and wind speed estimators, which provide initial conditions and disturbance predictions for the ENMPC. Section <xref ref-type="sec" rid="Ch1.S4"/> presents and discusses the results from a case study. The analysis begins with an open-loop assessment of the model adaptation approach, followed by a closed-loop evaluation of its impact on economic performance, actuator usage, and computational burden. Additionally, this section examines the benefits of the proposed model adaptation under different wind input and preview scenarios. Section <xref ref-type="sec" rid="Ch1.S5"/> summarizes the key findings of this work and outlines potential directions for future research.</p>
</sec>
</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Model adaptation</title>
      <p id="d2e285">The proposed model adaptation approach enhances the ROM dynamics by introducing a data-driven correction function <inline-formula><mml:math id="M1" display="inline"><mml:mrow><mml:mi mathvariant="bold">Δ</mml:mi><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mi mathvariant="normal">ROM</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. This function is designed to compensate for the mismatch between the ROM and the actual wind turbine behavior. The adapted model dynamics, denoted as <inline-formula><mml:math id="M2" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="normal">ROM</mml:mi><mml:mi mathvariant="normal">aug</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, can be expressed as

          <disp-formula id="Ch1.E1" content-type="numbered"><label>1</label><mml:math id="M3" display="block"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mi mathvariant="normal">ROM</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="bold">Δ</mml:mi><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mi mathvariant="normal">ROM</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

        where <inline-formula><mml:math id="M4" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mi mathvariant="normal">ROM</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> represents the original non-linear ROM dynamics. By adding the corrective function <inline-formula><mml:math id="M5" display="inline"><mml:mrow><mml:mi mathvariant="bold">Δ</mml:mi><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mi mathvariant="normal">ROM</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, the adapted model more accurately captures the behavior of the plant. Here, <inline-formula><mml:math id="M6" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M7" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M8" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> represent the continuous system states, control variables, and external disturbances, respectively. The correction <inline-formula><mml:math id="M9" display="inline"><mml:mrow><mml:mi mathvariant="bold">Δ</mml:mi><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mi mathvariant="normal">ROM</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> depends on these same quantities but also on free parameters <inline-formula><mml:math id="M10" display="inline"><mml:mi mathvariant="bold-italic">p</mml:mi></mml:math></inline-formula> that are learned based on data.</p>
<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>Reduced-order model</title>
      <p id="d2e544">A simplified wind turbine model with only 3 degrees of freedom (drivetrain angular speed, and tower fore-aft and side-side deflections) is considered to represent the ROM dynamics <inline-formula><mml:math id="M11" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mi mathvariant="normal">ROM</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. The incident wind <inline-formula><mml:math id="M12" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> induces an aerodynamic torque <inline-formula><mml:math id="M13" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">a</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> about the rotor axis and an aerodynamic force <inline-formula><mml:math id="M14" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> along it. The aerodynamic torque directly excites the drivetrain rotational dynamics

            <disp-formula id="Ch1.E2" content-type="numbered"><label>2</label><mml:math id="M15" display="block"><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">ω</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">a</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          ignoring mechanical losses, where <inline-formula><mml:math id="M16" display="inline"><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M17" display="inline"><mml:mi mathvariant="italic">ω</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math id="M18" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> represent the rotor moment of inertia, rotor speed, and generator torque referred to the low-speed shaft, respectively. The aerodynamic force <inline-formula><mml:math id="M19" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, coupled with the drivetrain dynamics, excites oscillations in the tower. These can be quantified by using the tower-top deflections in the fore-aft (noted <inline-formula><mml:math id="M20" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) and side-side (noted <inline-formula><mml:math id="M21" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) directions, which are governed by the following equations of dynamic equilibrium:
          

                <disp-formula id="Ch1.E3" specific-use="gather" content-type="subnumberedsingle"><mml:math id="M22" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E3.4"><mml:mtd><mml:mtext>3a</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">f</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>(</mml:mo><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="double-struck">f</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="double-struck">f</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msub><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E3.5"><mml:mtd><mml:mtext>3b</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>(</mml:mo><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msub><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mn mathvariant="normal">4</mml:mn></mml:msub><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          Tower oscillations result in cyclic stresses <inline-formula><mml:math id="M23" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M24" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, respectively, at tower base. Here, <inline-formula><mml:math id="M25" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M26" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> represent the rotor-plane-orthogonal (thrust) and rotor-in-plane (side-side force) components of the aerodynamic force <inline-formula><mml:math id="M27" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, whereas <inline-formula><mml:math id="M28" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">f</mml:mi><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M29" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> are model parameters. The aerodynamic torque <inline-formula><mml:math id="M30" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">a</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="italic">ω</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and force components <inline-formula><mml:math id="M31" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="italic">ω</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M32" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="italic">ω</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> introduce non-linearities in the model.</p>
      <p id="d2e1142">The turbine model has two control variables: the commanded generator torque <inline-formula><mml:math id="M33" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">gc</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and the commanded blade pitch angle <inline-formula><mml:math id="M34" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. The dynamics of the generator is given as

            <disp-formula id="Ch1.E6" content-type="numbered"><label>4</label><mml:math id="M35" display="block"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>Q</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">g</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>(</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">gc</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where coefficient <inline-formula><mml:math id="M36" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">g</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> represents the time-constant of the first-order dynamic model. The pitch dynamics is modeled as

            <disp-formula id="Ch1.E7" content-type="numbered"><label>5</label><mml:math id="M37" display="block"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="double-struck">b</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="double-struck">b</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

          Here, <inline-formula><mml:math id="M38" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> represents the effective collective blade pitch angle, and the coefficients <inline-formula><mml:math id="M39" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">b</mml:mi><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> are model parameters representing properties of the second-order pitch model.</p>
      <p id="d2e1309">The reduced-order wind turbine model consists of eight system states

            <disp-formula id="Ch1.E8" content-type="numbered"><label>6</label><mml:math id="M40" display="block"><mml:mrow><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="italic">ω</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          and two control input variables

            <disp-formula id="Ch1.E9" content-type="numbered"><label>7</label><mml:math id="M41" display="block"><mml:mrow><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">gc</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

          The wind speed <inline-formula><mml:math id="M42" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is considered as the single disturbance input to the model, i.e.,

            <disp-formula id="Ch1.E10" content-type="numbered"><label>8</label><mml:math id="M43" display="block"><mml:mrow><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

          The reduced-order model outputs the wind turbine electrical power

            <disp-formula id="Ch1.E11" content-type="numbered"><label>9</label><mml:math id="M44" display="block"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mi mathvariant="normal">gen</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">gen</mml:mi></mml:msub><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">ω</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mspace width="0.125em" linebreak="nobreak"/></mml:mrow></mml:math></disp-formula>

          and the tower-base stresses

            <disp-formula id="Ch1.E12" content-type="numbered"><label>10</label><mml:math id="M45" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mo>/</mml:mo><mml:mi mathvariant="normal">SS</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="double-struck">t</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mo>/</mml:mo><mml:mi mathvariant="normal">SS</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></disp-formula>

          in the fore-aft and side-side directions, modeled as linear functions of the respective tower-top deflections. Here, <inline-formula><mml:math id="M46" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">gen</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> denotes the drivetrain conversion efficiency, and <inline-formula><mml:math id="M47" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">t</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> is a constant of proportionality derived from the tower-base geometry and material properties.</p>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Data-driven correction</title>
      <p id="d2e1568">With advancements in computing technologies, machine learning techniques – including supervised and unsupervised learning – have become highly effective for a wide range of data-driven system identification tasks. A key advantage of supervised learning over unsupervised learning is its access to both input states and their corresponding target states during training. This allows the model to generalize and predict system behavior for previously unseen input combinations. A particularly effective approach for supervised learning in this context is based on the training of a neural network (NN). NNs can approximate arbitrarily complex functions while also providing gradients, making them especially well suited for integration in an optimal control framework.</p>
      <p id="d2e1571">In this work, the NN is designed to provide a static mapping from inputs to outputs. The network architecture consists of multiple hidden layers and a single output layer, with each layer composed of a certain number of neurons. Each neuron is defined by weights, biases, and an activation function. Within a given layer, the input data is first transformed by applying the weights and biases associated with the neuron. The resulting weighted sums are then passed to the next layer through the selected activation function. Activation functions apply a non-linear mapping to the weighted input plus bias, which determines whether and to what extent a neuron is activated, thereby enabling the network to model complex, non-linear relationships between inputs and outputs. The choice of activation function therefore plays a key role in shaping the flow of information through the network and, consequently, its predictive performance. Moreover, for use in an ENMPC, the activation function must be continuous and differentiable, so that first- and second-order derivatives can be computed. These derivatives are required for the numerical solution of the underlying optimization problem by gradient-based methods <xref ref-type="bibr" rid="bib1.bibx28" id="paren.22"/>.</p>
      <p id="d2e1577">A feed-forward NN with one hidden layer and one output layer is considered in this work. The static mapping of the input features <inline-formula><mml:math id="M48" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> to the output features <inline-formula><mml:math id="M49" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> for the considered NN can be written as

            <disp-formula id="Ch1.E13" content-type="numbered"><label>11</label><mml:math id="M50" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mi>y</mml:mi><mml:mi mathvariant="normal">act</mml:mi></mml:msubsup><mml:mo>(</mml:mo><mml:msubsup><mml:mi mathvariant="bold">W</mml:mi><mml:mi>y</mml:mi><mml:mi>T</mml:mi></mml:msubsup><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msubsup><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mi>h</mml:mi><mml:mi mathvariant="normal">act</mml:mi></mml:msubsup><mml:mo>(</mml:mo><mml:msubsup><mml:mi mathvariant="bold">W</mml:mi><mml:mi>h</mml:mi><mml:mi>T</mml:mi></mml:msubsup><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mi>h</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

          Here, <inline-formula><mml:math id="M51" display="inline"><mml:mi mathvariant="bold">W</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M52" display="inline"><mml:mi mathvariant="bold-italic">b</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math id="M53" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mi mathvariant="normal">act</mml:mi></mml:msup><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> represent the weights, biases, and activation functions, respectively, where the subscript <inline-formula><mml:math id="M54" display="inline"><mml:mi>h</mml:mi></mml:math></inline-formula> denotes the hidden layer and the subscript <inline-formula><mml:math id="M55" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> denotes the output layer.</p>
      <p id="d2e1722">Before training the NN, the generated dataset is split into training and testing sets. Moreover, every feature in the input and the target set is normalized by subtracting the minimum of the feature vector from the feature vector itself, and then dividing the result by the range (difference of maximum and minimum), i.e.:

            <disp-formula id="Ch1.E14" content-type="numbered"><label>12</label><mml:math id="M56" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msubsup><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">NN</mml:mi><mml:mo>min⁡</mml:mo></mml:msubsup></mml:mrow><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">NN</mml:mi><mml:mo>max⁡</mml:mo></mml:msubsup><mml:mo>-</mml:mo><mml:msubsup><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">NN</mml:mi><mml:mo>min⁡</mml:mo></mml:msubsup></mml:mrow></mml:mfrac></mml:mstyle><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
      <p id="d2e1775">Furthermore, the normalized datasets are shuffled to reduce the possible clustering of conditions that might create biases. After preprocessing the training set, the parameters <inline-formula><mml:math id="M57" display="inline"><mml:mi mathvariant="bold-italic">p</mml:mi></mml:math></inline-formula> of the NN, defined as

            <disp-formula id="Ch1.E15" content-type="numbered"><label>13</label><mml:math id="M58" display="block"><mml:mrow><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mi>h</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mi>h</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">b</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          are computed using the Levenberg–Marquardt algorithm to minimize the sum of squares of error between the predicted output and target output.</p>
      <p id="d2e1829">The accuracy of NN predictions depends heavily on the quality of its training process, which requires a comprehensive dataset of inputs and corresponding target outputs. Wind turbine original equipment manufacturers (OEMs) typically have validated high-fidelity models from design and prototyping that can generate representative datasets, and they may also have access to high-resolution data from on-board sensors of operational turbines to supplement them. In the present work, data are obtained from a high-fidelity simulation model, using both standard measurements and estimates derived from these measurements.</p>
      <p id="d2e1832">Figure <xref ref-type="fig" rid="F1"/> illustrates the proposed approach of acquiring input and target data for NN training, where the solid blue circles represent the plant states <inline-formula><mml:math id="M59" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> at a given time instant <inline-formula><mml:math id="M60" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula>. To generate training data, the ROM is initialized with each plant state sample, setting <inline-formula><mml:math id="M61" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="normal">ROM</mml:mi></mml:msubsup><mml:mo>=</mml:mo><mml:msubsup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. The ROM then predicts the next state <inline-formula><mml:math id="M62" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi mathvariant="normal">ROM</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, based on the applied control inputs <inline-formula><mml:math id="M63" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and the influence of external disturbance <inline-formula><mml:math id="M64" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</p>

      <fig id="F1" specific-use="star"><label>Figure 1</label><caption><p id="d2e1926">Data acquisition for model adaptation.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026-f01.png"/>

        </fig>

      <p id="d2e1935">The error between the derivatives of the ROM model and the plant is defined as

            <disp-formula id="Ch1.E16" content-type="numbered"><label>14</label><mml:math id="M65" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup><mml:mo>-</mml:mo><mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi mathvariant="normal">ROM</mml:mi></mml:msubsup><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          and constitutes the target dataset. Derivatives are calculated using the current state <inline-formula><mml:math id="M66" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> at time <inline-formula><mml:math id="M67" display="inline"><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and the corresponding next states <inline-formula><mml:math id="M68" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M69" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mi mathvariant="normal">ROM</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> at time <inline-formula><mml:math id="M70" display="inline"><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> via finite differences, i.e. <inline-formula><mml:math id="M71" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>/</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. The set of the current states, control inputs, and disturbances applied to the plant constitutes the input dataset <inline-formula><mml:math id="M72" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:msubsup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi>i</mml:mi><mml:mi mathvariant="normal">Plant</mml:mi></mml:msubsup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> for the <inline-formula><mml:math id="M73" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula>th time sample. This simple temporal discretization, although of limited numerical accuracy, is deemed sufficient for the present application, where modeling errors are typically larger than the numerical ones.</p>
</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>ENMPC formulation</title>
      <p id="d2e2169">The ENMPC is formulated based on the augmented internal model ROM<sub>aug</sub>, as expressed by Eq. (<xref ref-type="disp-formula" rid="Ch1.E1"/>), to predict the system states and associated outputs over a short future horizon <inline-formula><mml:math id="M75" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horizon</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. The discretization of time-continuous variables is performed over the prediction horizon using  <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>u</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> control time steps of duration <inline-formula><mml:math id="M77" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">ctrl</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horizon</mml:mi></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>N</mml:mi><mml:mi>u</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. The  predictions of states and outputs are used to calculate control inputs that optimize a desired meaningful economic objective function (here chosen as profit, with the goal of balancing revenue and costs). Moreover, constraints are enforced to the optimization problem to ensure that the controller keeps the plant states and applied inputs within feasible ranges.</p>
      <p id="d2e2230">The proposed ENMPC optimization problem is formulated as
        

          <disp-formula id="Ch1.E17.18" content-type="subnumberedon"><label>15a</label><mml:math id="M78" display="block"><mml:mtable class="split" rowspacing="0.2ex" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:munder><mml:mo movablelimits="false">min⁡</mml:mo><mml:mrow><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="bold-italic">ξ</mml:mi></mml:mrow></mml:munder></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>-</mml:mo><mml:mo>(</mml:mo><mml:msubsup><mml:mi>J</mml:mi><mml:mi mathvariant="normal">generation</mml:mi><mml:mi mathvariant="normal">Power</mml:mi></mml:msubsup><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>+</mml:mo><mml:mo>(</mml:mo><mml:msubsup><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">tower</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">fatigue</mml:mi></mml:mrow><mml:mi mathvariant="normal">FA</mml:mi></mml:msubsup><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>+</mml:mo><mml:mo>(</mml:mo><mml:msubsup><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">tower</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">fatigue</mml:mi></mml:mrow><mml:mi mathvariant="normal">SS</mml:mi></mml:msubsup><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mo>+</mml:mo><mml:munderover><mml:mo movablelimits="false">∫</mml:mo><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horizon</mml:mi></mml:msub></mml:mrow></mml:munderover><mml:mo>(</mml:mo><mml:msubsup><mml:mi>W</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mi mathvariant="italic">ξ</mml:mi></mml:msubsup><mml:msubsup><mml:mi mathvariant="italic">ξ</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:msubsup><mml:mi>W</mml:mi><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="italic">ξ</mml:mi></mml:msubsup><mml:msubsup><mml:mi mathvariant="italic">ξ</mml:mi><mml:mn mathvariant="normal">2</mml:mn><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi>t</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>

        subject to

              <disp-formula specific-use="gather" content-type="subnumberedoff"><mml:math id="M79" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E17.19"><mml:mtd><mml:mtext>15b</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">c</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="normal">ROM</mml:mi><mml:mi mathvariant="normal">aug</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E17.20"><mml:mtd><mml:mtext>15c</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:munder><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:munder><mml:mo>≤</mml:mo><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>≤</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E17.21"><mml:mtd><mml:mtext>15d</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:munder><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:munder><mml:mo>≤</mml:mo><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>≤</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E17.22"><mml:mtd><mml:mtext>15e</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:munder><mml:mi mathvariant="italic">ξ</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:munder><mml:mo>≤</mml:mo><mml:mi mathvariant="bold-italic">ξ</mml:mi><mml:mo>≤</mml:mo><mml:mover accent="true"><mml:mi mathvariant="italic">ξ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E17.23"><mml:mtd><mml:mtext>15f</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:munder><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>Q</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow><mml:mo mathvariant="normal">¯</mml:mo></mml:munder><mml:mo>≤</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>Q</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mo>≤</mml:mo><mml:mover accent="true"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>Q</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

        The meaning of all variables and terms in this problem are explained in Sect. <xref ref-type="sec" rid="Ch1.S3.SS1"/>–<xref ref-type="sec" rid="Ch1.S3.SS3"/>.</p>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title>Optimization variables</title>
      <p id="d2e2577">The optimization variables in the problem expressed by Eq. (<xref ref-type="disp-formula" rid="Ch1.E17.18"/>)–(<xref ref-type="disp-formula" rid="Ch1.E17.23"/>) are the control inputs <inline-formula><mml:math id="M80" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">gc</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and the slack variables <inline-formula><mml:math id="M81" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">ξ</mml:mi><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ξ</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">ξ</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. The purpose of introducing slack variables is to achieve recursive feasibility of the MPC optimization problem in the presence of model uncertainties and system perturbations <xref ref-type="bibr" rid="bib1.bibx11" id="paren.23"/>. Hence, in the present formulation, the state variable <inline-formula><mml:math id="M82" display="inline"><mml:mi mathvariant="italic">ω</mml:mi></mml:math></inline-formula> and the output variable <inline-formula><mml:math id="M83" display="inline"><mml:mrow><mml:msub><mml:mi>P</mml:mi><mml:mi mathvariant="normal">gen</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are augmented using the bounded slack variables <inline-formula><mml:math id="M84" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ξ</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M85" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ξ</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, respectively. This approach is used because <inline-formula><mml:math id="M86" display="inline"><mml:mi mathvariant="italic">ω</mml:mi></mml:math></inline-formula>, despite the smoothing effect provided by the large rotor inertia, is subject to wind perturbations and model errors that affect the economic MPC problem <xref ref-type="bibr" rid="bib1.bibx11" id="paren.24"/>. The modified set of states <inline-formula><mml:math id="M87" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is expressed as

            <disp-formula id="Ch1.E24" content-type="numbered"><label>16</label><mml:math id="M88" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="italic">ω</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mi mathvariant="italic">ξ</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>P</mml:mi><mml:mi mathvariant="normal">gen</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi mathvariant="italic">ξ</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>Optimization objective</title>
      <p id="d2e2806">The optimization objective aims to maximize the generated profit by maximizing the revenue accrued from wind power generation and minimizing the cost incurred due to fatigue damage. The cost of fatigue damage should be expressed by appropriate models, which will differ depending on the component; for example, it is reasonable to assume that the effects of cyclic loading on a pitch bearing will in general be very different from the ones on a gearbox. Here, for the lack of specific models and relevant data, we simply consider the tower as an exemplary component that is often fatigue critical. It is clear that this is only an academic example, and more realistic scenarios could be readily developed by using the same methodology for multiple components using dedicated component-specific cost models.</p>
      <p id="d2e2809">The wind power generation is maximized by considering the aerodynamic power capture

            <disp-formula id="Ch1.E25" content-type="numbered"><label>17</label><mml:math id="M89" display="block"><mml:mrow><mml:msubsup><mml:mi>J</mml:mi><mml:mi mathvariant="normal">generation</mml:mi><mml:mi mathvariant="normal">Power</mml:mi></mml:msubsup><mml:mo>=</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>P</mml:mi></mml:msub><mml:munderover><mml:mo movablelimits="false">∫</mml:mo><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horizon</mml:mi></mml:msub></mml:mrow></mml:munderover><mml:mo>(</mml:mo><mml:mi mathvariant="italic">ω</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">a</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi mathvariant="italic">ω</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi>t</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M90" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>P</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> denotes the revenue rate for providing electricity to the grid. It should be noted that even though revenue is accrued based on the overall electrical power generation, in this work the aerodynamic power is maximized. This is to avoid the greedy extraction of rotor kinetic energy by MPC (referred to as “turnpike effect” in <xref ref-type="bibr" rid="bib1.bibx11" id="altparen.25"/>).</p>
      <p id="d2e2928">In general, the revenue rate <inline-formula><mml:math id="M91" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>P</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> depends on time, because time-dependent ambient conditions influence the energy mix and because market prices may vary dynamically. However, the typical time scales of these variations are much longer – usually on the order of tens of minutes and specifically 15 min in intra-day markets – than the receding horizon used in MPC, which typically spans only a few seconds. For this reason, even though <inline-formula><mml:math id="M92" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>P</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> appears outside the integral in Eq. (<xref ref-type="disp-formula" rid="Ch1.E25"/>), the present formulation remains fully applicable to variable electricity prices.</p>
      <p id="d2e2955">The tower cyclic fatigue damage is minimized by a direct penalization of fatigue via the PORFC approach. The PORFC algorithm uses a preprocessing step to identify fatigue cycles <inline-formula><mml:math id="M93" display="inline"><mml:mi>c</mml:mi></mml:math></inline-formula> for a given set of stress samples <inline-formula><mml:math id="M94" display="inline"><mml:mi mathvariant="bold-italic">σ</mml:mi></mml:math></inline-formula> and splits the respective cyclic fatigue damages over the contributing samples. In the general case, a particular stress sample may  belong to no cycle (when it is not an extremum),  one cycle (when it is part of only one half or full cycle), or two cycles (when it lies at a cycle-junction point) <xref ref-type="bibr" rid="bib1.bibx32 bib1.bibx33" id="paren.26"/>. The output of the preprocessing step is the PORFC mean parameters <inline-formula><mml:math id="M95" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mrow><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow><mml:mi mathvariant="normal">PORFC</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and PORFC weight parameters <inline-formula><mml:math id="M96" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mrow><mml:mi>w</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow><mml:mi mathvariant="normal">PORFC</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <xref ref-type="bibr" rid="bib1.bibx22" id="paren.27"/>.</p>
      <p id="d2e3016">A Python script to extract the PORFC parameters for a given set of stress trajectories is shared with this work <xref ref-type="bibr" rid="bib1.bibx2" id="paren.28"/>. This allows for a detailed understanding of the novel formulation, and its adaptability and usage for economic MPC. The script performs standard rain flow counting to identify cycle characteristics and extract PORFC parameters. These parameters are then used to reformulate the cycle amplitudes and weights over stress samples in a continuous manner.</p>
      <p id="d2e3022">The cost of tower fatigue damage <inline-formula><mml:math id="M97" display="inline"><mml:mrow><mml:msubsup><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">tower</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">fatigue</mml:mi></mml:mrow><mml:mi mathvariant="normal">FA</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, due to tower root fore-aft cyclic stress <inline-formula><mml:math id="M98" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, is formulated as
          

                <disp-formula id="Ch1.E26" specific-use="gather" content-type="subnumberedsingle"><mml:math id="M99" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E26.27"><mml:mtd><mml:mtext>18a</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msubsup><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">tower</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">fatigue</mml:mi></mml:mrow><mml:mi mathvariant="normal">FA</mml:mi></mml:msubsup><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">ctrl</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:munderover><mml:mo movablelimits="false">∫</mml:mo><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horizon</mml:mi></mml:msub></mml:mrow></mml:munderover><mml:munderover><mml:mo movablelimits="false">∑</mml:mo><mml:mrow><mml:mi>c</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:munderover><mml:msubsup><mml:mi>J</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow><mml:mi mathvariant="normal">PORFC</mml:mi></mml:msubsup><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow><mml:mi mathvariant="normal">PORFC</mml:mi></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>w</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow><mml:mi mathvariant="normal">PORFC</mml:mi></mml:msubsup><mml:mo>)</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi>t</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E26.28"><mml:mtd><mml:mtext>18b</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msubsup><mml:mi>J</mml:mi><mml:mrow><mml:mi>c</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow><mml:mi mathvariant="normal">PORFC</mml:mi></mml:msubsup><mml:mo>=</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>w</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow><mml:mi mathvariant="normal">PORFC</mml:mi></mml:msubsup><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msub><mml:mi>a</mml:mi><mml:mi mathvariant="double-struck">m</mml:mi></mml:msub><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">eq</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow><mml:mi mathvariant="double-struck">m</mml:mi></mml:msubsup><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E26.29"><mml:mtd><mml:mtext>18c</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">eq</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo>|</mml:mo><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow><mml:mi mathvariant="normal">PORFC</mml:mi></mml:msubsup><mml:mo>|</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi>R</mml:mi><mml:mi mathvariant="double-struck">m</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>R</mml:mi><mml:mi mathvariant="double-struck">m</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

          Here, <inline-formula><mml:math id="M100" display="inline"><mml:mrow><mml:msub><mml:mi>a</mml:mi><mml:mi mathvariant="double-struck">m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> denotes the capital cost of the component and is determined from the initial capital expenditure of the machine (see also <xref ref-type="bibr" rid="bib1.bibx23" id="altparen.29"/>, for details), <inline-formula><mml:math id="M101" display="inline"><mml:mrow><mml:msub><mml:mi>R</mml:mi><mml:mi mathvariant="double-struck">m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> denotes the ultimate tensile strength of the material, and <inline-formula><mml:math id="M102" display="inline"><mml:mi mathvariant="double-struck">m</mml:mi></mml:math></inline-formula> represents the positive exponent derived from the material S-N characteristic.</p>
      <p id="d2e3375">The tower cyclic fatigue damage <inline-formula><mml:math id="M103" display="inline"><mml:mrow><mml:msubsup><mml:mi>J</mml:mi><mml:mrow><mml:mi mathvariant="normal">tower</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">fatigue</mml:mi></mml:mrow><mml:mi mathvariant="normal">SS</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, due to tower root side-side cyclic stress <inline-formula><mml:math id="M104" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">σ</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, is formulated in a similar manner.</p>
      <p id="d2e3406">Although the optimization objective, shown in Eq. (<xref ref-type="disp-formula" rid="Ch1.E17.18"/>), separately considers the costs of tower fore-aft and side-side fatigue, the final evaluation is based on the projected total cost, as explained below. In addition to the fact that fore-aft and side-side components depend on wind direction, which is not constant, this also ensures that any potential increase or decrease in tower side-side stress oscillations resulting from control actions aimed at minimizing tower fore-aft stress (and vice versa) is properly accounted for.</p>
      <p id="d2e3411">To obtain the cost of cyclic fatigue damage for each projection at a given azimuth direction on a tower section, the following steps are taken. First, rain flow counting is performed on the projected stress trajectory. Then, the Goodman equation is applied for mean stress correction. The damage cost of each stress cycle is determined using the S-N curve of the material of the tower and the component cost. Finally, the Miner–Palmgren algorithm is used to sum the costs of individual cycles and obtain the total cost; refer to <xref ref-type="bibr" rid="bib1.bibx23" id="text.30"/> for a detailed description of this formulation.</p>
      <p id="d2e3417">This approach – here illustrated for the tower – is readily generalized to other components. Once cyclic fatigue is assessed on each prediction horizon for each component of interest, a dedicated model could provide failure rates and/or maintenance activities resulting from such loading, in turn generating the associated costs, which would be included in the optimization merit function.</p>
      <p id="d2e3421">It should be noted that the objective terms of the optimization problem are not assigned arbitrary or heuristic weights. Instead, each term is weighted according to its  actual economic value. As a result, the optimization outcomes are economically meaningful and directly aligned with practical decision-making considerations, rather than being influenced by ad hoc tuning of weights. For instance, the weighting term to calculate revenue due to power production is represented by the (optionally time-varying) revenue rate <inline-formula><mml:math id="M105" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>P</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, as shown in Eq. (<xref ref-type="disp-formula" rid="Ch1.E25"/>). Similarly, the cost due to accumulated tower fatigue damage is weighted using the initial capital-cost parameter <inline-formula><mml:math id="M106" display="inline"><mml:mrow><mml:msub><mml:mi>a</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> through the online rain flow analysis, as shown in Eq. (<xref ref-type="disp-formula" rid="Ch1.E26.27"/>–<xref ref-type="disp-formula" rid="Ch1.E26.29"/>).</p>
</sec>
<sec id="Ch1.S3.SS3">
  <label>3.3</label><title>Optimization constraints</title>
      <p id="d2e3461">The ENMPC optimization problem expressed by Eq. (<xref ref-type="disp-formula" rid="Ch1.E17.18"/>)–(<xref ref-type="disp-formula" rid="Ch1.E17.23"/>) is subjected to various constraints.</p>
      <p id="d2e3468">The equality constraints expressed by  Eq. (<xref ref-type="disp-formula" rid="Ch1.E17.19"/>) enforce the governing equations of the augmented plant-model <inline-formula><mml:math id="M107" display="inline"><mml:mrow><mml:msub><mml:mtext>ROM</mml:mtext><mml:mi mathvariant="normal">aug</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and have the role of informing the problem of the underlying system dynamics.</p>
      <p id="d2e3490">The optimization is also subjected to inequality constraints. To ensure feasible states and control inputs, box constraints are provided through Eq. (<xref ref-type="disp-formula" rid="Ch1.E17.20"/>) and (<xref ref-type="disp-formula" rid="Ch1.E17.22"/>), respectively. Slack variables are  bounded using Eq. (<xref ref-type="disp-formula" rid="Ch1.E17.21"/>) to ease convergence. Finally, the rate of change of generator torque <inline-formula><mml:math id="M108" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>Q</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is bounded using Eq. (<xref ref-type="disp-formula" rid="Ch1.E17.23"/>) to reduce torque travel and fatigue in the drivetrain.</p>
</sec>
<sec id="Ch1.S3.SS4">
  <label>3.4</label><title>Estimators</title>
<sec id="Ch1.S3.SS4.SSS1">
  <label>3.4.1</label><title>State estimator</title>
      <p id="d2e3530">The controller-internal model is initialized using the currently measured initial states <inline-formula><mml:math id="M109" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. However, not all system states of the internal model can actually be measured directly on the plant using standard on-board sensors. For instance, both the tower-top deflection and velocity states (<inline-formula><mml:math id="M110" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M111" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>,<inline-formula><mml:math id="M112" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M113" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>) for ROM and ROM<sub>aug</sub> cannot be measured directly on a real turbine. Only the rotor speed <inline-formula><mml:math id="M115" display="inline"><mml:mi mathvariant="italic">ω</mml:mi></mml:math></inline-formula>, the blade pitch angle <inline-formula><mml:math id="M116" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and the tower-top accelerations <inline-formula><mml:math id="M117" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M118" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> can be measured by on-board sensors, whereas the remaining states need to be estimated using  measured quantities. Furthermore, as the controller-internal model is only a reduced representation of the plant, the initial values measured directly on the plant may not be suitable for initializing the ENMPC. As a consequence, a state estimator is additionally required to provide initial value estimates <inline-formula><mml:math id="M119" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> of the system states for the ENMPC internal model, using the available measurements from the plant.</p>
      <p id="d2e3685">A classical approach for state estimation is the Kalman filter, also widely used for wind turbine control <xref ref-type="bibr" rid="bib1.bibx6 bib1.bibx29" id="paren.31"/>. However, due to the non-linear nature of the system and the need to enforce constraints on both stage and terminal states, here we instead adopt a moving horizon estimator (MHE). A detailed comparison between optimization-based state estimation techniques based on MHE and Kalman filters has been presented in <xref ref-type="bibr" rid="bib1.bibx19" id="text.32"/>. The MHE formulation used in this study builds upon the approach discussed in <xref ref-type="bibr" rid="bib1.bibx4" id="text.33"/>.</p>
      <p id="d2e3697">MHE utilizes system information from the plant over a finite past horizon, noted as <inline-formula><mml:math id="M120" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">horizon</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, to calculate the initial state estimates <inline-formula><mml:math id="M121" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> for the current ENMPC step. The MHE optimization problem is formulated as
            

                  <disp-formula id="Ch1.E30" specific-use="gather" content-type="subnumberedsingle"><mml:math id="M122" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E30.31"><mml:mtd><mml:mtext>19a</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mtable class="split" rowspacing="0.2ex" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:munder><mml:mo movablelimits="false">min⁡</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ν</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:mover></mml:munder></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:munderover><mml:mo movablelimits="false">∫</mml:mo><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">horizon</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:munderover><mml:mo>(</mml:mo><mml:mo>|</mml:mo><mml:mo>|</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mrow><mml:mi mathvariant="normal">est</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">prev</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo><mml:msubsup><mml:mo>|</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mi mathvariant="normal">prev</mml:mi></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:mo>|</mml:mo><mml:mo>|</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub><mml:mo>|</mml:mo><mml:msubsup><mml:mo>|</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:mo>|</mml:mo><mml:mo>|</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ν</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:mover><mml:mo>|</mml:mo><mml:msubsup><mml:mo>|</mml:mo><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mover accent="true"><mml:mi mathvariant="italic">ν</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:mover></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>)</mml:mo><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">d</mml:mi><mml:mi>t</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E30.32"><mml:mtd><mml:mtext>19b</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mtext>subject to</mml:mtext></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E30.33"><mml:mtd><mml:mtext>19c</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:msub><mml:mover accent="true"><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:mo>+</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ν</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:mover><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

            The objective function is represented by the weighted sum of the squares of state and output deviations, and of the noise variable <inline-formula><mml:math id="M123" display="inline"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">ν</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:mover></mml:math></inline-formula> <xref ref-type="bibr" rid="bib1.bibx11 bib1.bibx14" id="paren.34"/>. The diagonal weighting matrices <inline-formula><mml:math id="M124" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M125" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mi mathvariant="normal">prev</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M126" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">W</mml:mi><mml:mover accent="true"><mml:mi mathvariant="italic">ν</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:mover></mml:msub></mml:mrow></mml:math></inline-formula> are obtained by a trial and error tuning, such that a satisfactory performance is achieved.</p>
      <p id="d2e4028">The role of the state deviation term is to ensure a smooth estimator output over consecutive MHE steps.</p>
      <p id="d2e4032">The estimated and measured outputs are respectively defined as <inline-formula><mml:math id="M127" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">SS</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M128" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">meas</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">SS</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">meas</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. The estimated tower-top fore-aft acceleration <inline-formula><mml:math id="M129" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and side-side acceleration <inline-formula><mml:math id="M130" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">SS</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> are obtained using the non-linear output equation expressed by Eq. (<xref ref-type="disp-formula" rid="Ch1.E3.4"/>) and (<xref ref-type="disp-formula" rid="Ch1.E3.5"/>), respectively. The measured tower-top fore-aft acceleration <inline-formula><mml:math id="M131" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">FA</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">meas</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and the side-side acceleration <inline-formula><mml:math id="M132" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">¨</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">SS</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">meas</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> are obtained from the plant as a result of standard sensor measurements. The measured tower-top velocity and deflection in both the fore-aft and side-side directions are obtained by numerical integration of the tower-top acceleration and velocity, respectively.</p>
      <p id="d2e4252">The optimization problem is subjected to the equality constraints expressed by Eq. (<xref ref-type="disp-formula" rid="Ch1.E30.33"/>), which inform the estimator of the underlying system dynamics. In Eq. (<xref ref-type="disp-formula" rid="Ch1.E30.33"/>), <inline-formula><mml:math id="M133" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> are the disturbance inputs to the system, which are already set by the ENMPC and are hence fixed for the current MHE step. Here, <inline-formula><mml:math id="M134" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> represents the estimator system states, corresponding to the wind turbine system states <inline-formula><mml:math id="M135" display="inline"><mml:mi mathvariant="bold-italic">x</mml:mi></mml:math></inline-formula>, as discussed in Sect. <xref ref-type="sec" rid="Ch1.S2.SS1"/>. Moreover, <inline-formula><mml:math id="M136" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">F</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mo>⋅</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> represents the system of ODEs for wind turbine dynamics discussed in Sect. <xref ref-type="sec" rid="Ch1.S2.SS1"/>.</p>
      <p id="d2e4360">After the execution of an MHE step, the terminal state at the end of the MHE horizon becomes the initial state at the beginning of the ENMPC prediction horizon, i.e. <inline-formula><mml:math id="M137" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>.</p>
</sec>
<sec id="Ch1.S3.SS4.SSS2">
  <label>3.4.2</label><title>Disturbance estimator</title>
      <p id="d2e4411">The wind speed <inline-formula><mml:math id="M138" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is considered as a disturbance input to the ENMPC formulation and needs to be estimated over the prediction horizon <inline-formula><mml:math id="M139" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horizon</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> of the controller. This work considers a simple rotor-effective wind speed (REWS) estimator, based on the approach discussed in <xref ref-type="bibr" rid="bib1.bibx36" id="text.35"/>. The REWS estimator utilizes the drivetrain dynamics, expressed by Eq. (<xref ref-type="disp-formula" rid="Ch1.E2"/>), to estimate the aerodynamic torque as

              <disp-formula id="Ch1.E34" content-type="numbered"><label>20</label><mml:math id="M140" display="block"><mml:mrow><mml:msub><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">a</mml:mi></mml:msub><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:msub><mml:mi>P</mml:mi><mml:mi>Q</mml:mi></mml:msub><mml:mi mathvariant="normal">est</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mi mathvariant="italic">ω</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>≈</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:msub><mml:mi>P</mml:mi><mml:mi mathvariant="normal">gen</mml:mi></mml:msub><mml:mi mathvariant="normal">meas</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">ω</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:msub><mml:mi mathvariant="italic">ω</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

            where  <inline-formula><mml:math id="M141" display="inline"><mml:mrow><mml:msub><mml:msub><mml:mi>P</mml:mi><mml:mi mathvariant="normal">gen</mml:mi></mml:msub><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is the measured generator power and <inline-formula><mml:math id="M142" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ω</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is the measured rotor speed. The rate of change of rotor speed <inline-formula><mml:math id="M143" display="inline"><mml:mover accent="true"><mml:mi mathvariant="italic">ω</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover></mml:math></inline-formula> is computed by finite difference from <inline-formula><mml:math id="M144" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ω</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. The estimated aerodynamic torque <inline-formula><mml:math id="M145" display="inline"><mml:mrow><mml:msub><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">a</mml:mi></mml:msub><mml:mi mathvariant="normal">est</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is then equated to the aerodynamic torque <inline-formula><mml:math id="M146" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">a</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ω</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mi mathvariant="normal">meas</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, described in Sect. <xref ref-type="sec" rid="Ch1.S2.SS1"/>, to estimate wind speed <inline-formula><mml:math id="M147" display="inline"><mml:mrow><mml:msub><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub><mml:mi mathvariant="normal">est</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> for the measured pitch angle <inline-formula><mml:math id="M148" display="inline"><mml:mrow><mml:msub><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M149" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ω</mml:mi><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.</p>
</sec>
</sec>
</sec>
<sec id="Ch1.S4">
  <label>4</label><title>Results and discussions</title>
<sec id="Ch1.S4.SS1">
  <label>4.1</label><title>Case study</title>
      <p id="d2e4668">The ability of the adapted model to accurately predict the plant states depends directly on the precision of the data-driven corrections. Additionally, to determine the extent of model adaptation required, it is necessary to assess how reducing the model mismatch influences the closed-loop performance of the controller. To answer these questions, we consider a plant represented by the NREL 5 MW reference wind turbine <xref ref-type="bibr" rid="bib1.bibx17" id="paren.36"/>, which is modeled using OpenFAST <xref ref-type="bibr" rid="bib1.bibx18" id="paren.37"/>, a widely used tool for simulating wind turbine dynamics.</p>
      <p id="d2e4677">The plant model includes the first and second flapwise, and the first edgewise bending modes for each of the three blades. Additionally, it also includes the first and second tower bending modes in both fore-aft and side-side directions, as well as the torsional flexibility of the drivetrain and the generator DOF.</p>
      <p id="d2e4680">The model, which incorporates pitch and torque actuators but excludes the yaw mechanism, consists of 33 system states. There are eight states for the tower dynamics, 18 for the blades (six per blade), two for drive-shaft torsion, two for rotor rotation, two for collective blade pitch actuation, and one for generator torque actuation.</p>
      <p id="d2e4683">The fixed model parameters of the corresponding ROM, namely <inline-formula><mml:math id="M150" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">f</mml:mi><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M151" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M152" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">g</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M153" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">b</mml:mi><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M154" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">t</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, are derived from the NREL report describing the 5 MW reference wind turbine <xref ref-type="bibr" rid="bib1.bibx17" id="paren.38"/>. Table <xref ref-type="table" rid="T1"/> summarizes these parameters and lists their corresponding values.</p>

<table-wrap id="T1" specific-use="star"><label>Table 1</label><caption><p id="d2e4766">ROM parameters derived from the 5 MW reference wind turbine report and OpenFAST baseline-controller simulations <xref ref-type="bibr" rid="bib1.bibx17" id="paren.39"/>.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:colspec colnum="4" colname="col4" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Parameter</oasis:entry>
         <oasis:entry colname="col2">Equation</oasis:entry>
         <oasis:entry colname="col3">Value</oasis:entry>
         <oasis:entry colname="col4">Unit</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M155" display="inline"><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E2"/>)</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M156" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.0470</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">7</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">kg m<sup>2</sup></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M158" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">f</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M159" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">f</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M160" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">f</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E3.4"/>)</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M161" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.3218</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M162" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.7596</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M163" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.7911</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M164" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.947</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">kg, kg s<sup>−1</sup>, kg s<sup>−2</sup></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M167" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M168" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M169" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mn mathvariant="normal">3</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M170" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mn mathvariant="normal">4</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E3.5"/>)</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M171" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.3218</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">5</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M172" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.7596</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M173" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.7911</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M174" display="inline"><mml:mrow><mml:mn mathvariant="normal">1.947</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">4</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">kg, kg s<sup>−1</sup>, kg s<sup>−2</sup>, kg m<sup>−2</sup></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M178" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">g</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E6"/>)</oasis:entry>
         <oasis:entry colname="col3">0.01</oasis:entry>
         <oasis:entry colname="col4">s</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M179" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">b</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M180" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">b</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E7"/>)</oasis:entry>
         <oasis:entry colname="col3">0.01</oasis:entry>
         <oasis:entry colname="col4">s<sup>−1</sup>, s<sup>−2</sup></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M183" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">gen</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E11"/>)</oasis:entry>
         <oasis:entry colname="col3">0.944</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M184" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">t</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E12"/>)</oasis:entry>
         <oasis:entry colname="col3">245.76</oasis:entry>
         <oasis:entry colname="col4">MPa m<sup>−1</sup></oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

<sec id="Ch1.S4.SS1.SSS1">
  <label>4.1.1</label><title>Data generation</title>
      <p id="d2e5292">The performance of an NN depends heavily on the quality of its training, which requires an exhaustive dataset that encompasses a wide range of operating conditions. To generate a comprehensive training dataset, the OpenFAST model is simulated in turbulent wind conditions using the baseline controller provided in the OpenFAST package. Full-field turbulent wind inputs are generated using TurbSim <xref ref-type="bibr" rid="bib1.bibx16" id="paren.40"/>, considering the class-B normal turbulence model. Simulations are performed for wind speeds ranging from cut-in to cut-out in 1 m s<sup>−1</sup> steps. For each wind speed, six different turbulent wind seed simulations are conducted.</p>
      <p id="d2e5310">Figure <xref ref-type="fig" rid="F2"/> presents the Pearson correlation coefficients of the states (<inline-formula><mml:math id="M187" display="inline"><mml:mi mathvariant="bold-italic">x</mml:mi></mml:math></inline-formula>), inputs (<inline-formula><mml:math id="M188" display="inline"><mml:mi mathvariant="bold-italic">u</mml:mi></mml:math></inline-formula>), and disturbances (<inline-formula><mml:math id="M189" display="inline"><mml:mi mathvariant="bold-italic">d</mml:mi></mml:math></inline-formula>) of the ROM with the corresponding state errors (refer to Sect. <xref ref-type="sec" rid="Ch1.S2.SS2"/>), computed over the entire dataset. The Pearson correlation coefficient quantifies the linear relationship between two variables <xref ref-type="bibr" rid="bib1.bibx10" id="paren.41"/>. Each entry in the table of Fig. <xref ref-type="fig" rid="F2"/> displays the absolute value of the  coefficient, where a higher magnitude indicates a stronger correlation. The same relationship is visualized through a color gradient map, where darker shades represent stronger correlations and lighter shades indicate weaker ones.</p>

      <fig id="F2" specific-use="star"><label>Figure 2</label><caption><p id="d2e5346">Correlation coefficient of states, inputs, and disturbance of the controller-internal model (as columns) with the error in states (as rows) for the generated dataset, rounded off to two significant digits. The number in each cell denotes the absolute value of the Pearson correlation coefficient, while the cell color visually denotes the degree of correlation.</p></caption>
            <graphic xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026-f02.png"/>

          </fig>

      <p id="d2e5356">Figure <xref ref-type="fig" rid="F2"/> shows that all ROM states and inputs significantly influence the state errors, as evidenced by their non-zero correlation coefficients. In particular, the rotor speed (<inline-formula><mml:math id="M190" display="inline"><mml:mi mathvariant="italic">ω</mml:mi></mml:math></inline-formula>) and blade states (<inline-formula><mml:math id="M191" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) exhibit the strongest correlation with both rotor speed errors and tower state errors. Additionally, the control inputs (<inline-formula><mml:math id="M192" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M193" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">gc</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) and wind speed (<inline-formula><mml:math id="M194" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) strongly affect the mismatch across all states. Furthermore, the non-zero yet distinct correlation magnitudes for blade pitch (<inline-formula><mml:math id="M195" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) and collective blade control (<inline-formula><mml:math id="M196" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) highlight the importance of blade dynamics, expressed by Eq. (<xref ref-type="disp-formula" rid="Ch1.E7"/>), in the internal model of the controller. This suggests that, while the ROM captures an approximation of the complex aeroelastic response, it does not fully represent the detailed dynamics present in the plant.</p>
</sec>
<sec id="Ch1.S4.SS1.SSS2">
  <label>4.1.2</label><title>NN training</title>
      <p id="d2e5456">The proposed NN input set <inline-formula><mml:math id="M197" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> contains 11 features (eight system states, two control variables, and one disturbance input), and each output set <inline-formula><mml:math id="M198" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> contains eight features representing errors in the derivatives of states calculated using the plant and ROM states. The selection of input features is guided by the correlation coefficients presented in Fig. <xref ref-type="fig" rid="F2"/>, which indicate a non-zero correlation between all variables in the input and target sets. The hidden layer of the network consists of 20 neurons, each utilizing a radial basis activation function, while the output layer comprises eight neurons with linear activation functions. The number of neurons in the hidden layer was determined through hyperparameter tuning, ensuring optimal training performance.</p>
      <p id="d2e5483">Before training the NN, the generated dataset is split into training and testing sets. During wind turbine operation, more data are naturally collected for operating conditions, corresponding to more probable wind speed values. To account for this effect in the application of the proposed methodology, the dataset split is performed according to a hypothetical site-specific Weibull distribution. Figure <xref ref-type="fig" rid="F3"/> illustrates the distribution of selected input features in the training dataset.</p>
      <p id="d2e5488">The various subplots in Fig. <xref ref-type="fig" rid="F3"/> show that the dataset covers a broad operational range of the wind turbine, allowing the NN to predict the target variables across a wide range of input conditions. Furthermore, Fig. <xref ref-type="fig" rid="F3"/>i confirms that the wind speed distribution in the training dataset closely follows the Weibull shape, ensuring a realistic representation of operating conditions.</p>

      <fig id="F3" specific-use="star"><label>Figure 3</label><caption><p id="d2e5498">Distribution of different input features in the training set.</p></caption>
            <graphic xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026-f03.png"/>

          </fig>

      <p id="d2e5507">The training dataset consists of 216 071 sample points. This number is small compared to the number of data points typically generated for design load case (DLC) 1.2 of the IEC Standards 61400-1 applicable to wind turbine certification and testing <xref ref-type="bibr" rid="bib1.bibx15" id="paren.42"/>, which – assuming six turbulence seeds and a sampling rate of 0.1 s – would result in 3 312 000 data points. This suggests that model adaption may be based on datasets that are 1 order of magnitude smaller than datasets routinely collected for standard design and certification purposes.</p>
</sec>
</sec>
<sec id="Ch1.S4.SS2">
  <label>4.2</label><title>Open-loop evaluation</title>
      <p id="d2e5522">The ability of the augmented internal model to track system states accurately is essential for ensuring both the optimality and the stability of the closed-loop behavior. To evaluate this aspect of the proposed approach, both ROM<sub>aug</sub> and ROM are simulated using each input combination from the testing dataset (refer to Sect. <xref ref-type="sec" rid="Ch1.S4.SS1.SSS2"/>), with the initial state accordingly set. The final states predicted by both models are then compared to the corresponding plant states, and the prediction error is computed to quantify the accuracy achieved by each model.</p>
      <p id="d2e5536">Figure <xref ref-type="fig" rid="F4"/> presents the kernel density plot of the absolute prediction errors for both ROM (solid blue line) and ROM<sub>aug</sub> (solid green line) across all system states. For each of the subplot, the <inline-formula><mml:math id="M201" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> axis represents the absolute error values, while the <inline-formula><mml:math id="M202" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axis shows the probability density estimate (PDE), calculated using a normal kernel function.</p>

      <fig id="F4" specific-use="star"><label>Figure 4</label><caption><p id="d2e5566">PDEs of the open-loop prediction errors for both ROM<sub>aug</sub> and ROM, shown in green and blue, respectively, evaluated over the test set.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026-f04.png"/>

        </fig>

      <p id="d2e5585">In the ROM case, certain states, such as “Tower-top FA defl.” and “Tower-top FA vel.”, exhibit their highest PDE at a non-zero error value, indicating a mismatch in model fidelity. In contrast, in the ROM<sub>aug</sub> case, this mismatch is corrected using the proposed adaptation scheme. As a result, the PDE peak shifts toward zero, signifying an improved state prediction accuracy. Furthermore, for most system states, the PDE peak magnitude in the ROM<sub>aug</sub> case is higher than in the ROM case. This indicates a greater concentration of cases where ROM<sub>aug</sub> achieves lower absolute errors than ROM, further demonstrating the effectiveness of the proposed model augmentation. The figure also shows that the accuracy of some quantities cannot be improved, although their typical errors are always very small.</p>
      <p id="d2e5615">To quantify the effectiveness of ROM<sub>aug</sub> in minimizing plant-model mismatch in open-loop, a statistical evaluation was conducted using the mean and standard deviation (STD) of prediction errors. Table <xref ref-type="table" rid="T2"/> presents the percentage reduction in both the error mean and STD for ROM<sub>aug</sub>, relative to ROM, across the test set.</p>

<table-wrap id="T2"><label>Table 2</label><caption><p id="d2e5641">Percentage reduction in error mean and STD thanks to model augmentation, as assessed on the test set.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="3">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:thead>
       <oasis:row>
         <oasis:entry colname="col1">State</oasis:entry>
         <oasis:entry colname="col2">Mean error</oasis:entry>
         <oasis:entry colname="col3">STD error</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2">reduction [%]</oasis:entry>
         <oasis:entry colname="col3">reduction [%]</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">Rotor speed (<inline-formula><mml:math id="M209" display="inline"><mml:mi mathvariant="italic">ω</mml:mi></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2">25.37</oasis:entry>
         <oasis:entry colname="col3">26.51</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Tower-top FA defl. (<inline-formula><mml:math id="M210" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2">20.55</oasis:entry>
         <oasis:entry colname="col3">12.57</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Tower-top FA vel. (<inline-formula><mml:math id="M211" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2">11.02</oasis:entry>
         <oasis:entry colname="col3">9.73</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Tower-top SS defl. (<inline-formula><mml:math id="M212" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2">7.91</oasis:entry>
         <oasis:entry colname="col3">8.14</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Tower-top SS vel. (<inline-formula><mml:math id="M213" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>d</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2">7.76</oasis:entry>
         <oasis:entry colname="col3">9.05</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Pitch angle (<inline-formula><mml:math id="M214" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2">5.69</oasis:entry>
         <oasis:entry colname="col3">5.96</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Pitch angle rate (<inline-formula><mml:math id="M215" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">β</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2">0.08</oasis:entry>
         <oasis:entry colname="col3">0.53</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">Gen. torque (<inline-formula><mml:math id="M216" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2">0.01</oasis:entry>
         <oasis:entry colname="col3">0.00</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e5890">The results show varying degrees of improvement in state prediction, demonstrating that NN-based augmentation reduces not only the average error but also the error spread over different operating conditions. A greater reduction in prediction error is observed for states with higher absolute error magnitudes in Fig. <xref ref-type="fig" rid="F4"/>. This highlights the effectiveness of weight tuning during the NN training stage, which prioritizes correcting states with significant errors. These findings further emphasize the effectiveness of the proposed offline data-driven approach in reducing plant-model mismatch, improving the overall accuracy of the internal model.</p>
      <p id="d2e5895">For a practical application of the model adaptation, it is interesting to quantify the amount of training data that are needed to achieve a desired level of performance. To this end, multiple data subsets are created from the original training set. Each subset contains a specified fraction of the data samples from the original training set.</p>
      <p id="d2e5899">Figure <xref ref-type="fig" rid="F5"/>a illustrates the distribution of wind speed for multiple subsets, ranging from 45 % to 95 % of the original training set. The <inline-formula><mml:math id="M217" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> axis represents the wind speed, while the <inline-formula><mml:math id="M218" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axis shows the corresponding relative share. Each subset is used to train an NN, with the same architecture as described in Sect. <xref ref-type="sec" rid="Ch1.S4.SS1.SSS2"/>.</p>

      <fig id="F5" specific-use="star"><label>Figure 5</label><caption><p id="d2e5922">Open-loop evaluation of the proposed model adaptation where the NNs are trained using subsets of the full training set. Relative share of wind speed (<inline-formula><mml:math id="M219" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>) in the NN training set <bold>(a)</bold>. Corresponding performance score of ROM<sub>aug</sub> relative to the performance score of ROM as a function of test set size <bold>(b)</bold>.</p></caption>
          <graphic xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026-f05.png"/>

        </fig>

      <p id="d2e5957">Figure <xref ref-type="fig" rid="F5"/>b presents the performance of the adapted models evaluated on the same test set. The performance score is calculated by summing the root mean square error (RMSE) of predictions for all eight states. The <inline-formula><mml:math id="M221" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axis reports the performance scores of the different ROM<sub>aug</sub> models, normalized against the performance score of ROM. The <inline-formula><mml:math id="M223" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> axis displays the number of samples in percentage of the full training set. The figure also reports the normalized performance score of the ROM<sub>aug</sub> model trained with the full dataset, represented by the green circle.</p>
      <p id="d2e5994">The results show that, as expected, incorporating more data into the training process provides the NN with additional information, leading to improved performance. However, even a relatively small subset of training data helps to reduce the plant-model mismatch. Furthermore, performance begins to level off beyond a certain point, as additional data samples no longer significantly contribute to improving the model because they do not carry any extra useful informational content that is not already present in the data pool. In this study, performance starts to plateau once 85 % of the training dataset is used. As noted earlier, even when using the full dataset, the number of data points that are necessary for model adaption is small compared to the typical datasets collected in standard aeroelastic analyses conducted during routine design and certification activities.</p>
</sec>
<sec id="Ch1.S4.SS3">
  <label>4.3</label><title>Closed-loop evaluation</title>
      <p id="d2e6005">Although the long tail of the PDE plots in Fig. <xref ref-type="fig" rid="F4"/> indicate that the prediction errors of the augmented ROM remain non-zero for some operating conditions, it is still useful to examine the potential benefit of reducing plant-model mismatch on closed-loop performance, as this helps to quantify the necessary level of compensation. To investigate this aspect of the formulation, the proposed adaptive economic controller is implemented in closed loop with the plant. This configuration is referred to as ENMPC<sub>aug</sub>. To assess the impact of the augmentation, the plant performance is also evaluated using the same ENMPC formulation but based on the original, non-augmented ROM, referred to as ENMPC.</p>
      <p id="d2e6019">Several studies on wind turbine control have demonstrated that economic MPC formulations yield superior performance compared to baseline controllers <xref ref-type="bibr" rid="bib1.bibx17 bib1.bibx1" id="paren.43"/>, as well as standard reference-tracking-based MPC formulations. This holds both for pure power-maximization objectives <xref ref-type="bibr" rid="bib1.bibx25 bib1.bibx13 bib1.bibx12 bib1.bibx43" id="paren.44"/> and for combined power-maximization and fatigue-minimization objectives <xref ref-type="bibr" rid="bib1.bibx19 bib1.bibx34 bib1.bibx42" id="paren.45"/>. Therefore, the discussion in this section focuses only on the closed-loop behavior of ENMPC and ENMPC<sub>aug</sub> formulations, in order to quantify the performance improvement resulting from model adaptation.</p>
      <p id="d2e6040">We consider DLC 1.2 at 11 m s<sup>−1</sup> wind speed. The ENMPC-MHE optimization problem (refer to Sect. <xref ref-type="sec" rid="Ch1.S3"/>) is solved via the state-of-the-art Acados framework <xref ref-type="bibr" rid="bib1.bibx41" id="paren.46"/>. The interior-point solver HPIPM is used for solving the underlying quadratic programs (QP) in the non-linear program (NLP). Several sequential quadratic program (SQP) iterations are carried out at each controller step. The multiple shooting approach is employed with a Newton step length of 1. To address potential numerical issues caused by the highly non-standard formulation produced by PORFC <xref ref-type="bibr" rid="bib1.bibx21" id="paren.47"/>, the Hessian matrix is automatically convexified. It is important to note that solving multiple SQPs can improve performance. However, it also increases the computational burden.</p>
      <p id="d2e6063">The ENMPC and MHE horizon lengths, <inline-formula><mml:math id="M228" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horizon</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M229" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">horizon</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, are both set to 2 s, each having 20 discretization steps. This results in a sample time <inline-formula><mml:math id="M230" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">ctrl</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> of 100 ms for both the controller and the estimator. The sample time of the plant, <inline-formula><mml:math id="M231" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">sim</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, is set to 10 ms. The optimal control inputs applied to the plant model are considered as piece-wise constant values over <inline-formula><mml:math id="M232" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">ctrl</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. Measurements from the plant are taken every <inline-formula><mml:math id="M233" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">ctrl</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. Table <xref ref-type="table" rid="T3"/> lists the fixed optimization parameters for the ENMPC. The weighting matrices for the MHE optimization are listed in <xref ref-type="bibr" rid="bib1.bibx19" id="text.48"/>.</p>

<table-wrap id="T3" specific-use="star"><label>Table 3</label><caption><p id="d2e6147">Fixed optimization parameters for closed-loop evaluation. The values are derived from <xref ref-type="bibr" rid="bib1.bibx23 bib1.bibx4 bib1.bibx38 bib1.bibx17" id="text.49"/>.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:colspec colnum="4" colname="col4" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Parameter</oasis:entry>
         <oasis:entry colname="col2">Equation</oasis:entry>
         <oasis:entry colname="col3">Value</oasis:entry>
         <oasis:entry colname="col4">Unit</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M234" display="inline"><mml:mrow><mml:msubsup><mml:mi>W</mml:mi><mml:mn mathvariant="normal">1</mml:mn><mml:mi mathvariant="italic">ξ</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M235" display="inline"><mml:mrow><mml:msubsup><mml:mi>W</mml:mi><mml:mn mathvariant="normal">2</mml:mn><mml:mi mathvariant="italic">ξ</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E17.18"/>)</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M236" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M237" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">–, –</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M238" display="inline"><mml:munder><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow><mml:mo mathvariant="normal">¯</mml:mo></mml:munder></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E17.19"/>)</oasis:entry>
         <oasis:entry colname="col3">0, <inline-formula><mml:math id="M239" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1.302</mml:mn></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M240" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1.302</mml:mn></mml:mrow></mml:math></inline-formula>, 0, <inline-formula><mml:math id="M241" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">0.1396</mml:mn></mml:mrow></mml:math></inline-formula>, 0, 0</oasis:entry>
         <oasis:entry colname="col4">rad s<sup>−1</sup>, m, m, rad, rad s<sup>−1</sup>, MNm, MW</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M244" display="inline"><mml:mover accent="true"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E17.19"/>)</oasis:entry>
         <oasis:entry colname="col3">1.2671, 1.302, 1.302, 1.5708, 0.1396, 4.5981, 5</oasis:entry>
         <oasis:entry colname="col4">rad s<sup>−1</sup>, m, m, rad, rad s<sup>−1</sup>, MNm, MW</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M247" display="inline"><mml:munder><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow><mml:mo mathvariant="normal">¯</mml:mo></mml:munder></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E17.20"/>)</oasis:entry>
         <oasis:entry colname="col3">0, 0</oasis:entry>
         <oasis:entry colname="col4">rad, MNm</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M248" display="inline"><mml:mover accent="true"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E17.20"/>)</oasis:entry>
         <oasis:entry colname="col3">1.5708, 4.5981</oasis:entry>
         <oasis:entry colname="col4">rad, MNm</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M249" display="inline"><mml:munder><mml:mi mathvariant="italic">ξ</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:munder></mml:math></inline-formula>, <inline-formula><mml:math id="M250" display="inline"><mml:mover accent="true"><mml:mi mathvariant="italic">ξ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E17.21"/>)</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M251" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">0.1</mml:mn></mml:mrow></mml:math></inline-formula>, 0.1</oasis:entry>
         <oasis:entry colname="col4">–, –</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M252" display="inline"><mml:munder><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>Q</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow><mml:mo mathvariant="normal">¯</mml:mo></mml:munder></mml:math></inline-formula>, <inline-formula><mml:math id="M253" display="inline"><mml:mover accent="true"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi>Q</mml:mi><mml:mo mathvariant="normal">˙</mml:mo></mml:mover><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow><mml:mo mathvariant="normal">‾</mml:mo></mml:mover></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E17.22"/>)</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M254" display="inline"><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1.4550</mml:mn></mml:mrow></mml:math></inline-formula>, 1.4550</oasis:entry>
         <oasis:entry colname="col4">MNm s<sup>−1</sup></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M256" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>P</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E25"/>)</oasis:entry>
         <oasis:entry colname="col3">0.2</oasis:entry>
         <oasis:entry colname="col4">EUR kWh<sup>−1</sup></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M258" display="inline"><mml:mrow><mml:msub><mml:mi>a</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E26.28"/>)</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M259" display="inline"><mml:mrow><mml:mn mathvariant="normal">4.00</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col4">EUR</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M260" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E26.28"/>)</oasis:entry>
         <oasis:entry colname="col3">4</oasis:entry>
         <oasis:entry colname="col4">–</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M261" display="inline"><mml:mrow><mml:msub><mml:mi>R</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">(<xref ref-type="disp-formula" rid="Ch1.E26.29"/>)</oasis:entry>
         <oasis:entry colname="col3">400</oasis:entry>
         <oasis:entry colname="col4">MPa</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e6689">The closed-loop simulations run for a duration of 10 min. Six turbulent wind speed seeds, generated using TurbSim, are used to characterize  uncertainties in fatigue damage. The controller uses the estimated wind speed REWS (refer to Sect. <xref ref-type="sec" rid="Ch1.S3.SS4.SSS2"/>) as input, which remains constant over the prediction horizon of the controller.</p>
      <p id="d2e6694">The closed-loop control performance is evaluated using the following performance indicators: <list list-type="order"><list-item>
      <p id="d2e6699">Revenue due to power generation, calculated considering a fixed feed-in tariff <inline-formula><mml:math id="M262" display="inline"><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>P</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and turbine electrical power generation <inline-formula><mml:math id="M263" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">η</mml:mi><mml:mi mathvariant="normal">gen</mml:mi></mml:msub><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="italic">ω</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> (refer to Eq. <xref ref-type="disp-formula" rid="Ch1.E25"/> for details).</p></list-item><list-item>
      <p id="d2e6736">Cost due to projected tower-base fatigue damage. To calculate the projected damage, the tower fore-aft <inline-formula><mml:math id="M264" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and tower side-side oscillations <inline-formula><mml:math id="M265" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> are first projected along the various azimuth directions at the tower base. Next, the fatigue damage cost is computed for each of these projections, as discussed in Sect. <xref ref-type="sec" rid="Ch1.S3.SS2"/>. Finally, the maximum cost across all projections is selected.</p></list-item><list-item>
      <p id="d2e6776">Profit, calculated as the difference of revenue and cost.</p></list-item><list-item>
      <p id="d2e6780">Pitch travel, showing the total degrees that the blades traveled for a given control formulation. This can be considered as a proxy for the usage of pitch actuators, which may be prone to wear and tear, calling for extra maintenance.</p></list-item><list-item>
      <p id="d2e6784">Torque travel, showing the total amount of torque that the generator had to apply. This can be considered as a proxy for the usage of the turbine drivetrain, leading to the wear and tear of bearings and the gearbox. Additionally, it also serves as a proxy for switching-related damage in the power electronic converters.</p></list-item></list></p>
<sec id="Ch1.S4.SS3.SSS1">
  <label>4.3.1</label><title>Economic performance of the controller</title>
      <p id="d2e6794">Figure <xref ref-type="fig" rid="F6"/> presents the performance indicators calculated over 10 min, with results averaged across different seeds. The set of bars in the left and right parts of the figure represent the performance for the ENMPC and ENMPC<sub>aug</sub> formulations, respectively. The color of the bars corresponds to different performance indicators. The results for ENMPC<sub>aug</sub> are normalized with the ENMPC ones to facilitate comparison. The <inline-formula><mml:math id="M268" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axis shows these relative values, which are also noted in black above each bar. Additionally, the numbers on the face of each bar, shown in purple text, represent the absolute values.</p>

      <fig id="F6" specific-use="star"><label>Figure 6</label><caption><p id="d2e6826">Performance indicators for closed-loop simulations using controllers employing the baseline ROM (ENMPC) and the augmented ROM (ENMPC<sub>aug</sub>) as internal models. The black numbers on the top of each bar denote the corresponding relative cumulative values. The purple text on the face of each bar denotes the absolute cumulative values.</p></caption>
            <graphic xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026-f06.png"/>

          </fig>

      <p id="d2e6844">Figure <xref ref-type="fig" rid="F6"/> shows that ENMPC<sub>aug</sub> results in 9 % higher economic profit than ENMPC. This improvement is due to the more accurate estimation of revenue and cost in ENMPC<sub>aug</sub>, which is made possible by a better prediction of the system states. The higher profit is directly attributed to an increased revenue, with a slight increase in cost. Since the absolute economic value of revenue exceeds that of cost (as shown by the purple numbers on the face of the bars), ENMPC<sub>aug</sub> effectively balances the two, leading to a higher overall economic profit.</p>
      <p id="d2e6877">In contrast, for the ENMPC case, while the controller aims to maximize economic profit, the plant-model mismatch leads to control actions that are not economically optimal. As a result, the controller struggles to accurately estimate and balance revenue and cost, ultimately resulting in a lower economic profit.</p>
      <p id="d2e6880">Furthermore, since the future predictions in the controller more closely match the actual evolution of the plant in the ENMPC<sub>aug</sub> formulation, the controller requires less frequent control actions. This is reflected in the significantly smaller pitch and torque travel compared to the ENMPC case.</p>
      <p id="d2e6892">As a result, reducing plant-model mismatch to improve system state predictions not only enhances performance but also leads to a substantial reduction in actuator usage. It is reasonable to assume that this, in turn, will result in lower maintenance costs for both the actuators and the drivetrain. This effect was, however, not quantified here, as a result of a lack of data and of specific and reliable models.</p>
</sec>
<sec id="Ch1.S4.SS3.SSS2">
  <label>4.3.2</label><title>Benefits under different wind inputs</title>
      <p id="d2e6903">Advanced wind turbine control formulations require the current wind speed as an input. Improved foresight of the wind speed enables the ENMPC to determine the most suitable control actions.</p>
      <p id="d2e6906">Wind speed can be gauged using a simple wind speed estimator, as utilized in this work (refer to Sect. <xref ref-type="sec" rid="Ch1.S3.SS4.SSS2"/>), or through advanced estimators as discussed in <xref ref-type="bibr" rid="bib1.bibx36" id="text.50"/>. Alternatively, the current wind speed can be measured directly, either using a nacelle-mounted anemometer or a light detection and ranging (LiDaR) device. LiDaRs not only provide real-time wind speed data but also offer short-term wind speed previews. This capability makes LiDaRs an ideal complement to MPC-based wind turbine control, where the MPC optimization uses system states derived from wind speed forecasts over the MPC prediction horizon <xref ref-type="bibr" rid="bib1.bibx19 bib1.bibx8" id="paren.51"/>.</p>
      <p id="d2e6917">Here, the benefits of the proposed model adaptation for reducing plant-model mismatch under different wind input estimates are assessed. Figure <xref ref-type="fig" rid="F7"/> presents various wind profiles used as input to the controller.</p>

      <fig id="F7" specific-use="star"><label>Figure 7</label><caption><p id="d2e6925">Exemplary wind profiles used as disturbance inputs to the ENMPC formulations.</p></caption>
            <graphic xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026-f07.png"/>

          </fig>

      <p id="d2e6934">The solid gray curve represents the longitudinal component of the full wind field generated using TurbSim at the turbine hub height for a 10 min duration. This scenario is labeled “Hub height wind speed”. This is only shown to illustrate wind fluctuations, but it is not used as input to the controller. The dash-dotted red curve corresponds to the nacelle filtered wind speed (NFWS), which is a rough approximation of what an anemometer mounted on the nacelle would measure. Typically, anemometer measurements are subjected to various disturbances, including – among others – flow distortion due to proximity of the nacelle (a bluff body), periodic effects caused by blade passage, interference due to the wake, and sensor noise. For the lack of models of these complex phenomena, here we have simply filtered the wind field at the nacelle location using a standard bandpass filter. This case is referred to as “Anemometer”. The dashed green curve shows the rotor-averaged wind speed (RAWS). The RAWS is a much simplified representation of what a nacelle-mounted scanning LiDaR system with discrete scanning and spatial averaging would estimate under a frozen turbulence hypothesis, i.e., with a purely rigid transport of the flow from the measurement volume to the rotor disk <xref ref-type="bibr" rid="bib1.bibx19" id="paren.52"/>. This case is referred to as “LiDaR”.</p>
      <p id="d2e6940">It can be observed that the anemometer-measured wind speed follows the highly turbulent fluctuations of the wind speed at hub height. Additionally, the RAWS shows even less dynamic variation in the wind speed but successfully captures the long-term wind speed trends. Although these speeds are only very rough approximations of the wind that could be actually measured on a wind turbine, they still capture a range of situations from point-wise exact values to spatial and temporal averages.</p>
      <p id="d2e6943">Figure <xref ref-type="fig" rid="F8"/> presents the results obtained with the closed-loop control formulations, considering different wind speed estimates. For each wind speed input scenario, two sets of bars are displayed: the first set represents the ENMPC case, while the second corresponds to the ENMPC<sub>aug</sub> case. In each set, each of the five performance indicators is shown as a bar of a different face color. The various sets of bars correspond to the following situations: <list list-type="bullet"><list-item>
      <p id="d2e6959">The first and second sets show results when the controllers use REWS, described in Sect. <xref ref-type="sec" rid="Ch1.S3.SS4.SSS2"/>, as disturbance input and the current wind speed is held constant over the prediction horizon. These results are the same as discussed in Fig. <xref ref-type="fig" rid="F6"/> and are shown here again for ease of comparison.</p></list-item><list-item>
      <p id="d2e6967">The third and fourth sets show results when the controllers use NFWS (Anemometer) as disturbance input and the current wind speed is held constant over the prediction horizon.</p></list-item><list-item>
      <p id="d2e6971">The fifth and sixth sets show results when the controllers use LiDaR measurements as input and the current wind speed is held constant over the prediction horizon.</p></list-item><list-item>
      <p id="d2e6975">The seventh and eighth sets show results when the controllers use LiDaR measurements as input and a perfect preview of wind condition over the prediction horizon is considered. This case has been labeled as LiDaR-PF.</p></list-item></list> The results are normalized with respect to the ENMPC case, which is shown in the first set. The black text above each bar represents the relative cumulative values. To aid interpretation, the results from different wind input scenarios are highlighted with distinct background colors. The red background corresponds to the Anemometer scenario, the light-green shade represents the LiDaR scenario, and the dark-green background indicates the LiDaR-PF scenario.</p>

      <fig id="F8" specific-use="star"><label>Figure 8</label><caption><p id="d2e6981">Performance indicators for closed-loop simulations using ENMPC and ENMPC<sub>aug</sub>. The background colors denote different wind input scenarios: white for REWS, red for Anemometer, light-green for LiDaR, and dark-green for LiDaR-PF. For a given background color, the left and right columns show ENMPC and ENMPC<sub>aug</sub> results, respectively. The black numbers on the top of each bar denote the corresponding relative cumulative values.</p></caption>
            <graphic xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026-f08.png"/>

          </fig>

      <p id="d2e7009">The results show that providing the controller with more accurate information about the wind disturbance input leads to an increase in economic profit for both ENMPC and ENMPC<sub>aug</sub>. As expected, the Anemometer scenario, providing only a disturbed point-wise wind measurement, results in the lowest economic profit, while the LiDaR-PF scenario yields the highest economic profit.</p>
      <p id="d2e7021">Furthermore, for all wind input scenarios, the proposed model adaptation results in higher economic profit and reduced pitch and torque travel. The magnitude of the performance improvement varies across the different wind input scenarios. For example, ENMPC<sub>aug</sub> achieves a 7 % higher economic profit in the Anemometer scenario and a 30 % increase in the LiDaR scenario, compared to the corresponding ENMPC formulation. It is noteworthy that the economic performance of ENMPC<sub>aug</sub> in the LiDaR scenario is only slightly worse than that in the LiDaR-PF scenario. This suggests that, for this case study, a perfect wind preview does not significantly pay off, and a simple constant speed estimate is sufficient. However, a more general conclusion can only be drawn by evaluating the two scenarios over a wider range of turbine inflow conditions.</p>
</sec>
<sec id="Ch1.S4.SS3.SSS3">
  <label>4.3.3</label><title>Computational performance</title>
      <p id="d2e7050">An economic controller is real-time feasible if the computational time required to generate the optimal control actions is less than the sample time of the plant. The length of the prediction horizon, along with the nature of the underlying internal model and the optimization problem, directly affects the number of SQP iterations needed for the controller to converge to a solution. A higher number of SQP iterations increases the computational time.</p>
      <p id="d2e7053">Although this work does not focus on optimizing the computational performance of the formulated controllers to ensure real-time feasibility, the impact of the proposed model adaptation on the computational performance of the controllers is assessed.</p>
      <p id="d2e7056">Figure <xref ref-type="fig" rid="F9"/> presents the economic profit and computational time for ENMPC<sub>aug</sub> LiDaR, with the controller limited to a maximum of 3, 5, and 10 SQP iterations, as reported on the <inline-formula><mml:math id="M281" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> axis. The results are normalized with respect to the ENMPC LiDaR formulation, which uses a maximum of 10 SQP iterations. The <inline-formula><mml:math id="M282" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axis on the left shows the relative economic profit in blue, while the <inline-formula><mml:math id="M283" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axis on the right displays the relative mean CPU time per controller iteration in orange. The results for ENMPC<sub>aug</sub> LiDaR are marked with circular markers filled in blue, and the results for ENMPC LiDaR are marked with circular markers filled in green.</p>
      <p id="d2e7101">The simulations were performed on a desktop computer with an Intel i7 processor, a 64-bit operating system, and 8 GB of RAM.</p>

      <fig id="F9" specific-use="star"><label>Figure 9</label><caption><p id="d2e7107">Economic performance and the corresponding CPU time requirement for the ENMPC<sub>aug</sub> LiDaR formulation utilizing an increasing number of SQP iterations. Performance is normalized with respect to the ENMPC LiDaR formulation utilizing 10 SQP iterations.</p></caption>
            <graphic xlink:href="https://wes.copernicus.org/articles/11/1989/2026/wes-11-1989-2026-f09.png"/>

          </fig>

      <p id="d2e7125">The results clearly show that increasing the number of SQP iterations leads to a higher relative economic profit. For 10 SQP iterations, ENMPC<sub>aug</sub> LiDaR results in a 30 % higher economic profit, but it requires more than double the computational effort compared to ENMPC LiDaR. This is because of the additional calculations in the NN part of the model.</p>
      <p id="d2e7137">Interestingly, ENMPC<sub>aug</sub> LiDaR with only five SQP iterations still achieves a 22 % higher economic profit than ENMPC LiDaR with 10 SQP iterations, while requiring just 15 % more computational effort. This demonstrates that, although the proposed model adaptation increases the CPU time for ENMPC, the improvement in economic performance outweighs the additional computational cost. Moreover, the adapted model requires fewer SQP iterations to generate economically optimal control actions at a smaller actuator usage.</p>
      <p id="d2e7149">This effect, combined with the use of high-performance computational platforms and further software optimization for speed may result in real-time feasible economic controllers.</p>
</sec>
</sec>
</sec>
<sec id="Ch1.S5" sec-type="conclusions">
  <label>5</label><title>Conclusions</title>
      <p id="d2e7163">MPC uses an approximate representation of the plant to predict the system evolution over a short future horizon. The internal models used by MPC are typically a reduced representation of the plant. The resulting model mismatch affects the feasibility and the optimality of the closed-loop performance. This study presented a fatigue-aware adaptive ENMPC for closed-loop control of wind turbines. The ENMPC directly incorporates cyclic fatigue costs using a novel online rain flow counting approach and is able to generate more accurate model predictions through a data-driven adapted model.</p>
      <p id="d2e7166">The proposed adaptive ENMPC aims to maximize economic profit, which is here computed as the revenue from power generation minus the cost of fatigue damage at the tower base. Revenue is calculated based on the (optionally time-varying) market tariff and the energy supplied to the grid. The cyclic fatigue damage is estimated using online rain flow counting on adapted model predictions, while also accounting for residual cycles. While cycle counting is the only approach to precisely account for fatigue, it also inherently introduces discontinuities in the MPC optimization problem. To address this problem, the PORFC approach is used to externalize fatigue estimation from the MPC optimization. This method estimates time-varying fatigue-related parameters, allowing for a continuous formulation of cyclic fatigue costs that can be numerically optimized in the MPC.</p>
      <p id="d2e7169">The ENMPC optimization problem is subject to bound constraints on system states and control variables, ensuring feasible solutions and a stable closed-loop behavior. The ENMPC formulation is further enhanced by integrating state and disturbance estimators. These estimators account for measurement uncertainties and provide accurate initial values for the ENMPC.</p>
      <p id="d2e7172">The proposed approach utilizes wind turbine operational or synthetic data with machine learning techniques to predict the mismatch in the system states of plant and ROM. A data-driven model is developed to estimate the error in the states across a range of relevant inflow and control conditions. This process results in an adapted model, where the underlying dynamics are represented by a simple physics-based model combined with data-driven correction terms. The adapted ROM is then used as the internal model in the controller. This process is performed offline, which offers two important advantages. First, it does not introduce additional computational effort during operation, thereby facilitating real-time performance. Second, it results in a certifiable controller, for which safety and performance can be fully assessed offline before deployment in the field. The same is far more difficult – if possible at all – for controllers based on online learning.</p>
      <p id="d2e7176">The performance of the proposed approach is assessed through a case study using an OpenFAST model of the NREL 5 MW reference wind turbine as a plant. This model generates measurement data for the study. The plant model has 15 degrees of freedom and includes 33 system states, while the ROM has only 3 degrees of freedom and consists of 8 system states. The simulation data is generated across a wide range of operational conditions. A feed-forward NN is developed to predict the error in plant and ROM states, and is then used in the adapted model dynamics.</p>
      <p id="d2e7179">The performance of the proposed model adaptation is initially evaluated in an open-loop setup. In this case, the predictions of the adapted model ROM<sub>aug</sub> and the baseline ROM are compared with the actual behavior of the plant across a range of operational conditions. The kernel density estimates of the prediction error show that the adapted model performs significantly better than the original model for all eight system states. The performance improvement is further quantified in terms of statistics of the prediction error. The results reveal a reduction in both the mean and standard deviation of errors for all system states, with an approximate 20 % reduction in the angular velocity error of the rotor.</p>
      <p id="d2e7191">Additionally, the effect of dataset size on the open-loop performance of the proposed model adaptation is assessed. Results indicate that even a relatively small subset of training data helps to reduce the plant-model mismatch. Performance starts to plateau once 85 % of the generated training dataset is used, as additional data samples no longer significantly improve the model. This amount of data is about 1 order of magnitude smaller than the number of data points typically collected during aeroelastic analyses carried out as part of routine design and certification activities.</p>
      <p id="d2e7194">To further quantify the impact of model adaptation on the economic control of wind turbines, the closed-loop performance of the proposed economic MPC formulation is assessed using ROM<sub>aug</sub> as the internal model of the controller. Five performance indicators are considered: revenue (due to wind power generation), cost (due to tower fatigue damage), profit (calculated as the difference of revenue and cost), pitch travel (as a proxy for actuator usage), and torque travel (as a proxy for damage of power electronic converters and drivetrain usage).</p>
      <p id="d2e7206">The performance of ENMPC<sub>aug</sub> that uses the enhanced model is compared to the ENMPC formulation that uses the baseline ROM as its internal model. Results show that ENMPC<sub>aug</sub> achieves 9 % higher economic profit than ENMPC. This improvement is attributed to more accurate revenue and cost estimations, made possible by better predictions of the system states. Additionally, since the future predictions in ENMPC<sub>aug</sub> are closer to the actual evolution of the plant, the controller requires relatively fewer control actions. This is reflected in a significantly smaller pitch and torque travel compared to the ENMPC formulation.</p>
      <p id="d2e7236">The benefits of the proposed model adaptation are further assessed across different wind input scenarios. The results show an increased economic profit with improved wind foresight for both ENMPC<sub>aug</sub> and ENMPC. Moreover, the model adaptation leads to higher economic profit – up to 30 % in the LiDaR scenario – and reduced pitch and torque travel for all wind input scenarios.</p>
      <p id="d2e7249">Although this study did not focus on optimizing the computational performance of the controllers for real-time feasibility, the impact of model adaptation on computational performance was also evaluated. The results show that increasing the number of SQP iterations leads to higher economic profit but also increases computational expenses. Additionally, for the same number of SQP iterations, ENMPC<sub>aug</sub> is more computationally expensive than ENMPC due to the extra computational cost due to NN evaluations. However, when considering LiDaR wind estimates, ENMPC<sub>aug</sub> achieves a 22 % higher economic profit while requiring only 15 % more computational effort compared to ENMPC. Therefore, the proposed model adaptation, combined with high-performance computing platforms and additional software optimization (not considered here), could enable real-time feasible economic controllers.</p>
      <p id="d2e7270">The accuracy of offline data-driven model corrections depends strongly on the quality of the training process, which requires a comprehensive dataset that characterizes the range of operational conditions experienced by a wind turbine. In practice, wind turbine OEMs typically have validated high-fidelity turbine models developed during design and prototyping, and these models can be used to represent turbine behavior and generate the required dataset. Moreover, OEMs often have access to high-resolution measurements from on-board sensors of operating turbines, which can further contribute to the dataset. The generalized usability of the adapted model depends on how similar turbine behavior is across different installation sites, an aspect that has not been investigated in this work.</p>
      <p id="d2e7273">Future work should focus on developing a more comprehensive economic objective that accounts for fatigue damage affecting additional turbine components, such as the bearings and the drivetrain, while also incorporating a more realistic profit model. This would require applying the PORFC formulation to other fatigue-critical components of the turbine and integrating it into ENMPC as either an objective function or a constraint. The assessment can be extended to new scenarios that consider more dynamic variations of exogenous inputs, such as market prices over longer evaluation periods. At present, the profit formulation neglects the influence of fatigue on component reliability and O&amp;M costs, and it considers only tower fatigue damage. In addition, the physics-based internal model can be expanded to capture dependencies on a wider set of system states. The model can also be improved by introducing online tuning of model parameters in addition to the offline augmentation used in this study.</p>
</sec>

      
      </body>
    <back><app-group>

<app id="App1.Ch1.S1">
  <label>Appendix A</label><title>Nomenclature and abbreviations</title>
      <p id="d2e7287"><table-wrap position="anchor"><oasis:table><oasis:tgroup cols="2">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="justify" colwidth="6cm"/>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">DLC</oasis:entry>
         <oasis:entry colname="col2">Design load case</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">DOF</oasis:entry>
         <oasis:entry colname="col2">Degree of freedom</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ENMPC</oasis:entry>
         <oasis:entry colname="col2">Economic non-linear model predictive control</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ENMPC<sub>aug</sub></oasis:entry>
         <oasis:entry colname="col2">Economic non-linear model predictive control having ROM<sub>aug</sub> as the controller-internal model</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">FA</oasis:entry>
         <oasis:entry colname="col2">Fore-aft</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">LiDaR</oasis:entry>
         <oasis:entry colname="col2">Light detection and ranging</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">MHE</oasis:entry>
         <oasis:entry colname="col2">Moving horizon estimator</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">MPC</oasis:entry>
         <oasis:entry colname="col2">Model predictive control</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">NFWS</oasis:entry>
         <oasis:entry colname="col2">Nacelle filtered wind speed</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">NLP</oasis:entry>
         <oasis:entry colname="col2">Non-linear program</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">NN</oasis:entry>
         <oasis:entry colname="col2">Neural network</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">O&amp;M</oasis:entry>
         <oasis:entry colname="col2">Operation and maintenance</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ODE</oasis:entry>
         <oasis:entry colname="col2">Ordinary differential equation</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">OEM</oasis:entry>
         <oasis:entry colname="col2">Original equipment manufacturer</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">PDE</oasis:entry>
         <oasis:entry colname="col2">Probability density estimate</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">PF</oasis:entry>
         <oasis:entry colname="col2">Perfect foresight</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">PORFC</oasis:entry>
         <oasis:entry colname="col2">Parametric online rain flow counting</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">QP</oasis:entry>
         <oasis:entry colname="col2">Quadratic program</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">RAWS</oasis:entry>
         <oasis:entry colname="col2">Rotor-averaged wind speed</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">REWS</oasis:entry>
         <oasis:entry colname="col2">Rotor-effective wind speed</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">RMSE</oasis:entry>
         <oasis:entry colname="col2">Root mean square error</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ROM</oasis:entry>
         <oasis:entry colname="col2">Reduced-order model</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">ROM<sub>aug</sub></oasis:entry>
         <oasis:entry colname="col2">Augmented reduced-order model</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">SQP</oasis:entry>
         <oasis:entry colname="col2">Sequential quadratic program</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">SS</oasis:entry>
         <oasis:entry colname="col2">Side-side</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">STD</oasis:entry>
         <oasis:entry colname="col2">Standard deviation</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M299" display="inline"><mml:mi mathvariant="italic">ξ</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Slack variable</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M300" display="inline"><mml:mover accent="true"><mml:mi mathvariant="italic">ν</mml:mi><mml:mo mathvariant="normal">¯</mml:mo></mml:mover></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Noise variable</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M301" display="inline"><mml:mi mathvariant="italic">ω</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Rotor speed</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M302" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Blade pitch angle</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M303" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">β</mml:mi><mml:mi mathvariant="normal">c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Commanded blade pitch angle</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M304" display="inline"><mml:mi mathvariant="italic">σ</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Stress at tower base</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M305" display="inline"><mml:mi mathvariant="italic">η</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Power conversion efficiency of the drivetrain</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M306" display="inline"><mml:mi mathvariant="bold-italic">F</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Set of dynamic equations of a model</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M307" display="inline"><mml:mrow><mml:mi mathvariant="bold">Δ</mml:mi><mml:mi mathvariant="bold-italic">F</mml:mi></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Set of dynamic equations of the correction model</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M308" display="inline"><mml:mrow><mml:msub><mml:mi>F</mml:mi><mml:mi mathvariant="normal">T</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Aerodynamic thrust force</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M309" display="inline"><mml:mi>J</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Optimization objective</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M310" display="inline"><mml:mrow><mml:msub><mml:mi>J</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Moment of inertia of the rotor</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M311" display="inline"><mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mi>u</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Number of intervals in the controller prediction horizon</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M312" display="inline"><mml:mi>P</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Electrical power output of the turbine</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M313" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">a</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Aerodynamic torque</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M314" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">g</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Generator torque</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M315" display="inline"><mml:mrow><mml:msub><mml:mi>Q</mml:mi><mml:mi mathvariant="normal">gc</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Commanded generator torque</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M316" display="inline"><mml:mrow><mml:msub><mml:mi>R</mml:mi><mml:mi mathvariant="double-struck">m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Ultimate tensile strength of the material</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap></p>
      <p id="d2e7874"><table-wrap position="anchor"><oasis:table><oasis:tgroup cols="2">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="justify" colwidth="6cm"/>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M317" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">ctrl</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Sample time of the internal model and the controller</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M318" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">horizon</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Prediction horizon of the controller</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M319" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mrow><mml:mi mathvariant="normal">horizon</mml:mi><mml:mo>,</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Prediction horizon of the state estimator</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M320" display="inline"><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">sim</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Sample time of the plant</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M321" display="inline"><mml:mrow><mml:msub><mml:mi>V</mml:mi><mml:mi mathvariant="normal">w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Wind speed</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M322" display="inline"><mml:mi>W</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Weight</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M323" display="inline"><mml:mrow><mml:msub><mml:mi>a</mml:mi><mml:mi mathvariant="double-struck">m</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Initial capital cost of the machine</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M324" display="inline"><mml:mi>b</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Bias</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M325" display="inline"><mml:mi>c</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Cycle</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M326" display="inline"><mml:mi>d</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Disturbance variable</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M327" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">FA</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Tower-top deflection in fore-aft direction</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M328" display="inline"><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:msub><mml:mi>T</mml:mi><mml:mi mathvariant="normal">SS</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Tower-top deflection in side-side direction</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M329" display="inline"><mml:mi>e</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Error in state</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M330" display="inline"><mml:mrow><mml:msup><mml:mi>f</mml:mi><mml:mi mathvariant="normal">act</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Activation function</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M331" display="inline"><mml:mi>i</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Time instant</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M332" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Time-varying PORFC parameter: mean</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M333" display="inline"><mml:mi>p</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Free model parameter</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M334" display="inline"><mml:mi>t</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Time</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M335" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Time step</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M336" display="inline"><mml:mi>u</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Control variable</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M337" display="inline"><mml:mi>w</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Time-varying PORFC parameter: weight</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M338" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">State variable</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M339" display="inline"><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Input feature of the NN</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M340" display="inline"><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mi mathvariant="normal">NN</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Output feature of the NN</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M341" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">b</mml:mi><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Model parameters for blade dynamics</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M342" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">f</mml:mi><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Model parameters for tower fore-aft dynamics</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M343" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">g</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Model parameters for generator dynamics</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M344" display="inline"><mml:mi mathvariant="double-struck">m</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Fatigue exponent derived from material properties</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M345" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">s</mml:mi><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mn mathvariant="normal">4</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Model parameters for tower side-side dynamics</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M346" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="double-struck">t</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Model parameters for estimating tower-base stresses using tower-top deflections</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M347" display="inline"><mml:mrow><mml:msub><mml:mo>□</mml:mo><mml:mi mathvariant="normal">aug</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Augmented</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M348" display="inline"><mml:mrow><mml:msub><mml:mo>□</mml:mo><mml:mi mathvariant="normal">est</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Estimation</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M349" display="inline"><mml:mrow><mml:msub><mml:mo>□</mml:mo><mml:mi mathvariant="normal">gen</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Generation</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M350" display="inline"><mml:mrow><mml:msub><mml:mo>□</mml:mo><mml:mi mathvariant="normal">meas</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Measurement</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M351" display="inline"><mml:mrow><mml:msub><mml:mo>□</mml:mo><mml:mi mathvariant="normal">prev</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Previous</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><inline-formula><mml:math id="M352" display="inline"><mml:mrow><mml:msub><mml:mo>□</mml:mo><mml:mi mathvariant="normal">sim</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col2">Simulation</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap></p>
</app>
  </app-group><notes notes-type="codedataavailability"><title>Code and data availability</title>

      <p id="d2e8534">A Python script to extract PORFC parameters for a given stress time series can be accessed on Zenodo at <ext-link xlink:href="https://doi.org/10.5281/zenodo.15530467" ext-link-type="DOI">10.5281/zenodo.15530467</ext-link> <xref ref-type="bibr" rid="bib1.bibx2" id="paren.53"/>. The data for Figs. 3–9 can also be retrieved in Python pickle format from the same Zenodo repository.</p>
  </notes><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e8546">AA and CLB developed the adaptive economic MPC formulation. AA implemented the model correction and the adaptive economic controller, carried out the simulations, and generated results. All authors contributed to the interpretation of the results. CLB supervised the overall research. AA and CLB prepared the paper. All authors provided valuable input to this research work through discussions, feedback, and improvement of the article.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d2e8552">At least one of the (co-)authors is a member of the editorial board of <italic>Wind Energy Science</italic>. The peer-review process was guided by an independent editor, and the authors also have no other competing interests to declare.</p>
  </notes><notes notes-type="disclaimer"><title>Disclaimer</title>

      <p id="d2e8561">Publisher's note: Copernicus Publications remains neutral with regard to jurisdictional claims made in the text, published maps, institutional affiliations, or any other geographical representation in this paper. The authors bear the ultimate responsibility for providing appropriate place names. Views expressed in the text are those of the authors and do not necessarily reflect the views of the publisher.</p>
  </notes><ack><title>Acknowledgements</title><p id="d2e8567">The authors would like to acknowledge Stefan Loew for his valuable inputs to the overall work, and Filippo Campagnolo for his support in the implementation of different wind inputs.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e8572">This work has been supported by the e-TWINS project (FKZ: 03EI6020), which received funding from the German Federal Ministry for Economic Affairs and Climate Action (BMWK).</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

      <p id="d2e8578">This paper was edited by Jan-Willem van Wingerden and reviewed by two anonymous referees.</p>
  </notes><ref-list>
    <title>References</title>

      <ref id="bib1.bibx1"><label>Abbas et al.(2022)</label><mixed-citation>Abbas, N. J., Zalkind, D. S., Pao, L., and Wright, A.: A reference open-source controller for fixed and floating offshore wind turbines, Wind Energ. Sci., 7, 53–73, <ext-link xlink:href="https://doi.org/10.5194/wes-7-53-2022" ext-link-type="DOI">10.5194/wes-7-53-2022</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx2"><label>Anand and Bottasso(2025)</label><mixed-citation>Anand, A. and Bottasso, C. L.: Adaptive economic wind turbine control, Zenodo [code and data set], <ext-link xlink:href="https://doi.org/10.5281/zenodo.15530467" ext-link-type="DOI">10.5281/zenodo.15530467</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx3"><label>Anand et al.(2021)</label><mixed-citation>Anand, A., Loew, S., and Bottasso, C. L.: Economic control of hybrid energy systems composed of wind turbine and battery, 2021 European Control Conference (ECC), Delft, the Netherlands,  2565–2572, <ext-link xlink:href="https://doi.org/10.23919/ECC54610.2021.9654911" ext-link-type="DOI">10.23919/ECC54610.2021.9654911</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx4"><label>Anand et al.(2022)</label><mixed-citation>Anand, A., Loew, S., and Bottasso, C. L.: Economic nonlinear model predictive control of fatigue for a hybrid wind-battery generation system, J. Phys. Conf. Ser., 2265, 032106, <ext-link xlink:href="https://doi.org/10.1088/1742-6596/2265/3/032106" ext-link-type="DOI">10.1088/1742-6596/2265/3/032106</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx5"><label>Barradas-Berglind and Wisniewski(2016)</label><mixed-citation>Barradas-Berglind, J. J. and Wisniewski, R.: Representation of fatigue for wind turbine control, Wind Energy, 19, 2189–2203, <ext-link xlink:href="https://doi.org/10.1002/we.1975" ext-link-type="DOI">10.1002/we.1975</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx6"><label>Bottasso and Croce(2009)</label><mixed-citation>Bottasso, C. L. and Croce, A.: Cascading Kalman observers of structural flexible and wind states for wind turbine control: Scientific Report DIA-SR 09-02, Dipartimento di Ingegneria Aerospaziale, Politecnico di Milano, Milano, Italy, <uri>https://www.researchgate.net/publication/228941698_Cascading_Kalman_observers_of_structural_flexible_and_wind_states_for_wind_turbine_control</uri> (last access: 23 November 2023), 2009.</mixed-citation></ref>
      <ref id="bib1.bibx7"><label>Bottasso et al.(2006)</label><mixed-citation>Bottasso, C. L., Chang, C.-S., Croce, A., Leonello, D., and Riviello, L.: Adaptive planning and tracking of trajectories for the simulation of maneuvers with multibody models, Comput. Methods Appl. M., 195, 7052–7072, <ext-link xlink:href="https://doi.org/10.1016/j.cma.2005.03.011" ext-link-type="DOI">10.1016/j.cma.2005.03.011</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bibx8"><label>Canet et al.(2021)</label><mixed-citation>Canet, H., Loew, S., and Bottasso, C. L.: What are the benefits of lidar-assisted control in the design of a wind turbine?, Wind Energ. Sci., 6, 1325–1340, <ext-link xlink:href="https://doi.org/10.5194/wes-6-1325-2021" ext-link-type="DOI">10.5194/wes-6-1325-2021</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx9"><label>Collet et al.(2021)</label><mixed-citation>Collet, D., Alamir, M., Di Domenico, D., and Sabiron, G.: Data-driven fatigue-oriented MPC applied to wind turbines Individual Pitch Control, Renewable Energy, 170, 1008–1019, <ext-link xlink:href="https://doi.org/10.1016/j.renene.2021.02.052" ext-link-type="DOI">10.1016/j.renene.2021.02.052</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx10"><label>Faizi and Alvi(2023)</label><mixed-citation>Faizi, N. and Alvi, Y.: Chapter 6 – Correlation, in: Biostatistics Manual for Health Research, edited by: Faizi, N. and Alvi, Y.,  109–126, Academic Press, ISBN 978-0-443-18550-2, <ext-link xlink:href="https://doi.org/10.1016/B978-0-443-18550-2.00002-5" ext-link-type="DOI">10.1016/B978-0-443-18550-2.00002-5</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx11"><label>Gros(2013)</label><mixed-citation>Gros, S.: An economic NMPC formulation for wind turbine control, in: 52nd IEEE Conference on Decision and Control,  1001–1006, <ext-link xlink:href="https://doi.org/10.1109/CDC.2013.6760013" ext-link-type="DOI">10.1109/CDC.2013.6760013</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx12"><label>Gros and Schild(2017)</label><mixed-citation>Gros, S. and Schild, A.: Real-time economic nonlinear model predictive control for wind turbine control, Int. J. Control, 90, 2799–2812, <ext-link xlink:href="https://doi.org/10.1080/00207179.2016.1266514" ext-link-type="DOI">10.1080/00207179.2016.1266514</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx13"><label>Hovgaard et al.(2015)</label><mixed-citation>Hovgaard, T. G., Boyd, S., and Jørgensen, J. B.: Model predictive control for wind power gradients, Wind Energy, 18, 991–1006, <ext-link xlink:href="https://doi.org/10.1002/we.1742" ext-link-type="DOI">10.1002/we.1742</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx14"><label>Huang et al.(2010)</label><mixed-citation>Huang, R., Biegler, L. T., and Patwardhan, S. C.: Fast Offset-Free Nonlinear Model Predictive Control Based on Moving Horizon Estimation, Ind. Eng. Chem. Res., 49, 7882–7890, <ext-link xlink:href="https://doi.org/10.1021/ie901945y" ext-link-type="DOI">10.1021/ie901945y</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx15"><label>IEC(2019)</label><mixed-citation> IEC: IEC 61400 – 1: Wind energy generation systems – Part 1: Design requirements, International Electrotechnical Commission, ISBN 978-2-8322-6571-0, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx16"><label>Jonkman(2009)</label><mixed-citation>Jonkman, B. J.: Turbsim User's Guide: Version 1.50, National Renewable Energy Laboratory (NREL), US Department of Energy, Golden, CO, USA, <ext-link xlink:href="https://doi.org/10.2172/965520" ext-link-type="DOI">10.2172/965520</ext-link>, 2009.</mixed-citation></ref>
      <ref id="bib1.bibx17"><label>Jonkman et al.(2009)</label><mixed-citation>Jonkman, J., Butterfield, S., Musial, W., and Scott, G.: Definition of a 5-MW Reference Wind Turbine for Offshore System Development, National Renewable Energy Laboratory (NREL), US Department of Energy, Golden, CO, USA, <ext-link xlink:href="https://doi.org/10.2172/947422" ext-link-type="DOI">10.2172/947422</ext-link>, 2009.</mixed-citation></ref>
      <ref id="bib1.bibx18"><label>Jonkman et al.(2022)</label><mixed-citation>Jonkman, B., Mudafort, R. M., Platt, A., Branlard, E., Sprague, M., jjonkman, HaymanConsulting, Vijayakumar, G., Buhl, M., Ross, H., Bortolotti, P., Masciola, M., Ananthan, S., Schmidt, M. J., Rood, J., rdamiani, nrmendoza, sinolonghai, Hall, M., ashesh, kshaler, Bendl, K., pschuenemann, psakievich, ewquon, mattrphillips, Kusuno, N., alvarogonzalezsalcedo, Martinez, T., and rcorniglion: OpenFAST/openfast: OpenFAST v3.1.0, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.6324288" ext-link-type="DOI">10.5281/zenodo.6324288</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx19"><label>Loew and Bottasso(2022)</label><mixed-citation>Loew, S. and Bottasso, C. L.: Lidar-assisted model predictive control of wind turbine fatigue via online rainflow counting considering stress history, Wind Energ. Sci., 7, 1605–1625, <ext-link xlink:href="https://doi.org/10.5194/wes-7-1605-2022" ext-link-type="DOI">10.5194/wes-7-1605-2022</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx20"><label>Loew et al.(2020a)</label><mixed-citation> Loew, S., Obradovic, D., Anand, A., and Szabo, A.: Stage Cost Formulations of Online Rainflow-counting for Model Predictive Control of Fatigue, in: 2020 European Control Conference (ECC),  475–482, 2020a.</mixed-citation></ref>
      <ref id="bib1.bibx21"><label>Loew et al.(2020b)</label><mixed-citation> Loew, S., Obradovic, D., and Bottasso, C. L.: Model predictive control of wind turbine fatigue via online rainflow-counting on stress history and prediction, J. Phys. Conf. Ser., 1618, 022041, 2020b.</mixed-citation></ref>
      <ref id="bib1.bibx22"><label>Loew et al.(2021)</label><mixed-citation>Loew, S., Anand, A., and Szabo, A.: Economic model predictive control of Li–ion battery cyclic aging via online rainflow–analysis, Energy Storage, 3, <ext-link xlink:href="https://doi.org/10.1002/est2.228" ext-link-type="DOI">10.1002/est2.228</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx23"><label>Loew et al.(2023)</label><mixed-citation>Loew, S., Obradovic, D., and Bottasso, C. L.: Economic nonlinear model predictive control of fatigue—Formulation and application to wind turbine control, Optimal Control Applications and Methods, 44, 647–676, <ext-link xlink:href="https://doi.org/10.1002/oca.2870" ext-link-type="DOI">10.1002/oca.2870</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx24"><label>Njiri and Söffker(2016)</label><mixed-citation>Njiri, J. G. and Söffker, D.: State-of-the-art in wind turbine control: Trends and challenges, Renewable and Sustainable Energy Reviews, 60, 377–393, <ext-link xlink:href="https://doi.org/10.1016/j.rser.2016.01.110" ext-link-type="DOI">10.1016/j.rser.2016.01.110</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx25"><label>Pustina et al.(2022)</label><mixed-citation>Pustina, L., Biral, F., and Serafini, J.: A novel Economic Nonlinear Model Predictive Controller for power maximisation on wind turbines, Renewable and Sustainable Energy Reviews, 170, 112964, <ext-link xlink:href="https://doi.org/10.1016/j.rser.2022.112964" ext-link-type="DOI">10.1016/j.rser.2022.112964</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx26"><label>Pustina et al.(2025)</label><mixed-citation>Pustina, L., Biral, F., Bertolazzi, E., and Serafini, J.: A multi-objective economic nonlinear model predictive controller for power and platform motion on floating offshore wind turbines, Ocean Eng., 342, 122888, <ext-link xlink:href="https://doi.org/10.1016/j.oceaneng.2025.122888" ext-link-type="DOI">10.1016/j.oceaneng.2025.122888</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx27"><label>Rawlings et al.(2012)</label><mixed-citation>Rawlings, J. B., Angeli, D., and Bates, C. N.: Fundamentals of economic model predictive control,  2012 IEEE 51st IEEE Conference on Decision and Control (CDC), Maui, HI, USA, 2012, 3851–3861, <ext-link xlink:href="https://doi.org/10.1109/CDC.2012.6425822" ext-link-type="DOI">10.1109/CDC.2012.6425822</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bibx28"><label>Rawlings et al.(2017)</label><mixed-citation> Rawlings, J. B., Mayne, D. Q., and Diehl, M. M.: Model predictive control: Theory, computation, and design, Nob Hill Publishing, Madison, Wisconsin, 2nd edn., ISBN 9780975937730, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx29"><label>Ritter(2020)</label><mixed-citation>Ritter, B.: Nonlinear State Estimation and Noise Adaptive Kalman Filter Design for Wind Turbines, Technische Universität Darmstadt, <ext-link xlink:href="https://doi.org/10.25534/tuprints-00011785" ext-link-type="DOI">10.25534/tuprints-00011785</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx30"><label>Schreiber et al.(2020)</label><mixed-citation>Schreiber, J., Bottasso, C. L., Salbert, B., and Campagnolo, F.: Improving wind farm flow models by learning from operational data, Wind Energ. Sci., 5, 647–673, <ext-link xlink:href="https://doi.org/10.5194/wes-5-647-2020" ext-link-type="DOI">10.5194/wes-5-647-2020</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx31"><label>Shaltout et al.(2018)</label><mixed-citation>Shaltout, M. L., Ma, Z., and Chen, D.: An Adaptive Economic Model Predictive Control Approach for Wind Turbines, J. Dyn. Syst.-T. ASME, 140, <ext-link xlink:href="https://doi.org/10.1115/1.4038490" ext-link-type="DOI">10.1115/1.4038490</ext-link>, 2018. </mixed-citation></ref>
      <ref id="bib1.bibx32"><label>Shi et al.(2018)</label><mixed-citation>Shi, Y., Xu, B., Tan, Y., and Zhang, B.: A Convex Cycle-based Degradation Model for Battery Energy Storage Planning and Operation,  2018 Annual American Control Conference (ACC), Milwaukee, WI, USA, 2018, 4590–4596, <ext-link xlink:href="https://doi.org/10.23919/ACC.2018.8431814" ext-link-type="DOI">10.23919/ACC.2018.8431814</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx33"><label>Shi et al.(2019)</label><mixed-citation>Shi, Y., Xu, B., Tan, Y., Kirschen, D., and Zhang, B.: Optimal Battery Control Under Cycle Aging Mechanisms in Pay for Performance Settings, IEEE T. Automat. Contr., 64, 2324–2339, <ext-link xlink:href="https://doi.org/10.1109/TAC.2018.2867507" ext-link-type="DOI">10.1109/TAC.2018.2867507</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx34"><label>Soleymani et al.(2024)</label><mixed-citation>Soleymani, M., Bigdeli, N., and Rahmani, M.: Real-time time-varying economic nonlinear model predictive control for wind turbines, Int. J. Elec. Power, 159, 110019, <ext-link xlink:href="https://doi.org/10.1016/j.ijepes.2024.110019" ext-link-type="DOI">10.1016/j.ijepes.2024.110019</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx35"><label>Soloperto et al.(2022)</label><mixed-citation>Soloperto, R., Muller, M. A., and Allgower, F.: Guaranteed closed-loop learning in Model Predictive Control, IEEE T. Automat. Contr., 68, 991–1006, <ext-link xlink:href="https://doi.org/10.1109/TAC.2022.3172453" ext-link-type="DOI">10.1109/TAC.2022.3172453</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx36"><label>Soltani et al.(2013)</label><mixed-citation>Soltani, M. N., Knudsen, T., Svenstrup, M., Wisniewski, R., Brath, P., Ortega, R., and Johnson, K.: Estimation of Rotor Effective Wind Speed: A Comparison, IEEE T. Contr. Syst. T., 21, 1155–1167, <ext-link xlink:href="https://doi.org/10.1109/TCST.2013.2260751" ext-link-type="DOI">10.1109/TCST.2013.2260751</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx37"><label>Stehly et al.(2020)</label><mixed-citation>Stehly, T., Beiter, P., and Duffy, P.: 2019 Cost of Wind Energy Review, <ext-link xlink:href="https://doi.org/10.2172/1756710" ext-link-type="DOI">10.2172/1756710</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx38"><label>Sutherland(1999)</label><mixed-citation> Sutherland, H. J.: On the Fatigue Analysis of Wind Turbines, Sandia National Laboratories, 1999.</mixed-citation></ref>
      <ref id="bib1.bibx39"><label>Tang et al.(2023)</label><mixed-citation>Tang, M., Wang, W., Yan, Y., Zhang, Y., and An, B.: Robust model predictive control of wind turbines based on Bayesian parameter self-optimization, Frontiers in Energy Research, 11, <ext-link xlink:href="https://doi.org/10.3389/fenrg.2023.1306167" ext-link-type="DOI">10.3389/fenrg.2023.1306167</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx40"><label>TotalControl(2022)</label><mixed-citation>TotalControl: D2.1 Cost Model for fatigue degradation and O&amp;M – Advanced integrated supervisory and wind turbine control for optimal operation of large Wind Power Plants: [TotalControl], European Commission, <ext-link xlink:href="https://doi.org/10.3030/727680" ext-link-type="DOI">10.3030/727680</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx41"><label>Verschueren et al.(2019)</label><mixed-citation>Verschueren, R., Frison, G., Kouzoupis, D., van Duijkeren, N., Zanelli, A., Novoselnik, B., Frey, J., Albin, T., Quirynen, R., and Diehl, M.: acados: a modular open-source framework for fast embedded optimal control, arXiv [preprint], <ext-link xlink:href="https://doi.org/10.48550/arXiv.1910.13753" ext-link-type="DOI">10.48550/arXiv.1910.13753</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx42"><label>Wang et al.(2025)</label><mixed-citation>Wang, Y., Zhu, S., Deng, R., Yang, B., Wang, P., and Gu, S.: Model predictive control of wind turbine based on deep-dive holistic observer of tower top IMU, Appl. Energ., 392, 125996, <ext-link xlink:href="https://doi.org/10.1016/j.apenergy.2025.125996" ext-link-type="DOI">10.1016/j.apenergy.2025.125996</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx43"><label>Yan et al.(2013)</label><mixed-citation>Yan, Z., Hall, J., and Chen, D.: MIMO control of wind turbine using direct shooting method,  2013 American Control Conference, Washington, DC, USA, 2013, 3655–3660, <ext-link xlink:href="https://doi.org/10.1109/ACC.2013.6580397" ext-link-type="DOI">10.1109/ACC.2013.6580397</ext-link>, 2013.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>Adaptive economic wind turbine control</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>Abbas et al.(2022)</label><mixed-citation>
      
Abbas, N. J., Zalkind, D. S., Pao, L., and Wright, A.: A reference open-source controller for fixed and floating offshore wind turbines, Wind Energ. Sci., 7, 53–73, <a href="https://doi.org/10.5194/wes-7-53-2022" target="_blank">https://doi.org/10.5194/wes-7-53-2022</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Anand and
Bottasso(2025)</label><mixed-citation>
      
Anand, A. and Bottasso, C. L.: Adaptive economic wind turbine control, Zenodo [code and data set], <a href="https://doi.org/10.5281/zenodo.15530467" target="_blank">https://doi.org/10.5281/zenodo.15530467</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>Anand et al.(2021)</label><mixed-citation>
      
Anand, A., Loew, S., and Bottasso, C. L.: Economic control of hybrid energy
systems composed of wind turbine and battery, 2021 European Control Conference (ECC), Delft, the Netherlands,  2565–2572,
<a href="https://doi.org/10.23919/ECC54610.2021.9654911" target="_blank">https://doi.org/10.23919/ECC54610.2021.9654911</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Anand et al.(2022)</label><mixed-citation>
      
Anand, A., Loew, S., and Bottasso, C. L.: Economic nonlinear model predictive
control of fatigue for a hybrid wind-battery generation system, J.
Phys. Conf. Ser., 2265, 032106,
<a href="https://doi.org/10.1088/1742-6596/2265/3/032106" target="_blank">https://doi.org/10.1088/1742-6596/2265/3/032106</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Barradas-Berglind and
Wisniewski(2016)</label><mixed-citation>
      
Barradas-Berglind, J. J. and Wisniewski, R.: Representation of fatigue for wind
turbine control, Wind Energy, 19, 2189–2203, <a href="https://doi.org/10.1002/we.1975" target="_blank">https://doi.org/10.1002/we.1975</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Bottasso and
Croce(2009)</label><mixed-citation>
      
Bottasso, C. L. and Croce, A.: Cascading Kalman observers of structural
flexible and wind states for wind turbine control: Scientific Report DIA-SR
09-02,
Dipartimento di Ingegneria Aerospaziale, Politecnico di Milano, Milano,
Italy,
<a href="https://www.researchgate.net/publication/228941698_Cascading_Kalman_observers_of_structural_flexible_and_wind_states_for_wind_turbine_control" target="_blank"/> (last access: 23 November 2023), 2009.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Bottasso et al.(2006)</label><mixed-citation>
      
Bottasso, C. L., Chang, C.-S., Croce, A., Leonello, D., and Riviello, L.:
Adaptive planning and tracking of trajectories for the simulation of
maneuvers with multibody models, Comput. Methods Appl. M., 195, 7052–7072, <a href="https://doi.org/10.1016/j.cma.2005.03.011" target="_blank">https://doi.org/10.1016/j.cma.2005.03.011</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Canet et al.(2021)</label><mixed-citation>
      
Canet, H., Loew, S., and Bottasso, C. L.: What are the benefits of lidar-assisted control in the design of a wind turbine?, Wind Energ. Sci., 6, 1325–1340, <a href="https://doi.org/10.5194/wes-6-1325-2021" target="_blank">https://doi.org/10.5194/wes-6-1325-2021</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>Collet et al.(2021)</label><mixed-citation>
      
Collet, D., Alamir, M., Di Domenico, D., and Sabiron, G.: Data-driven
fatigue-oriented MPC applied to wind turbines Individual Pitch Control,
Renewable Energy, 170, 1008–1019, <a href="https://doi.org/10.1016/j.renene.2021.02.052" target="_blank">https://doi.org/10.1016/j.renene.2021.02.052</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Faizi and Alvi(2023)</label><mixed-citation>
      
Faizi, N. and Alvi, Y.: Chapter 6 – Correlation, in:
Biostatistics Manual for Health Research, edited by: Faizi, N. and
Alvi, Y.,  109–126, Academic Press, ISBN 978-0-443-18550-2,
<a href="https://doi.org/10.1016/B978-0-443-18550-2.00002-5" target="_blank">https://doi.org/10.1016/B978-0-443-18550-2.00002-5</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>Gros(2013)</label><mixed-citation>
      
Gros, S.: An economic NMPC formulation for wind turbine control, in: 52nd IEEE
Conference on Decision and Control,  1001–1006,
<a href="https://doi.org/10.1109/CDC.2013.6760013" target="_blank">https://doi.org/10.1109/CDC.2013.6760013</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>Gros and
Schild(2017)</label><mixed-citation>
      
Gros, S. and Schild, A.: Real-time economic nonlinear model predictive control
for wind turbine control, Int. J. Control, 90, 2799–2812,
<a href="https://doi.org/10.1080/00207179.2016.1266514" target="_blank">https://doi.org/10.1080/00207179.2016.1266514</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>Hovgaard et al.(2015)</label><mixed-citation>
      
Hovgaard, T. G., Boyd, S., and Jørgensen, J. B.: Model predictive control
for wind power gradients, Wind Energy, 18, 991–1006, <a href="https://doi.org/10.1002/we.1742" target="_blank">https://doi.org/10.1002/we.1742</a>,
2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Huang et al.(2010)</label><mixed-citation>
      
Huang, R., Biegler, L. T., and Patwardhan, S. C.: Fast Offset-Free Nonlinear
Model Predictive Control Based on Moving Horizon Estimation, Ind.
Eng. Chem. Res., 49, 7882–7890, <a href="https://doi.org/10.1021/ie901945y" target="_blank">https://doi.org/10.1021/ie901945y</a>,
2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>IEC(2019)</label><mixed-citation>
      
IEC: IEC 61400 – 1: Wind energy generation systems – Part 1: Design
requirements, International Electrotechnical Commission, ISBN 978-2-8322-6571-0, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>Jonkman(2009)</label><mixed-citation>
      
Jonkman, B. J.: Turbsim User's Guide: Version 1.50, National Renewable Energy Laboratory (NREL), US Department of Energy, Golden, CO, USA, <a href="https://doi.org/10.2172/965520" target="_blank">https://doi.org/10.2172/965520</a>, 2009.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Jonkman et al.(2009)</label><mixed-citation>
      
Jonkman, J., Butterfield, S., Musial, W., and Scott, G.: Definition of a 5-MW
Reference Wind Turbine for Offshore System Development, National Renewable Energy Laboratory (NREL), US Department of Energy, Golden, CO, USA, <a href="https://doi.org/10.2172/947422" target="_blank">https://doi.org/10.2172/947422</a>,
2009.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>Jonkman et al.(2022)</label><mixed-citation>
      
Jonkman, B., Mudafort, R. M., Platt, A., Branlard, E.,
Sprague, M., jjonkman, HaymanConsulting, Vijayakumar, G., Buhl, M., Ross,
H., Bortolotti, P., Masciola, M., Ananthan, S.,
Schmidt, M. J., Rood, J., rdamiani, nrmendoza, sinolonghai,
Hall, M., ashesh, kshaler, Bendl, K., pschuenemann, psakievich, ewquon,
mattrphillips, Kusuno, N., alvarogonzalezsalcedo, Martinez, T., and
rcorniglion: OpenFAST/openfast: OpenFAST v3.1.0, Zenodo [code],
<a href="https://doi.org/10.5281/zenodo.6324288" target="_blank">https://doi.org/10.5281/zenodo.6324288</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>Loew and
Bottasso(2022)</label><mixed-citation>
      
Loew, S. and Bottasso, C. L.: Lidar-assisted model predictive control of wind turbine fatigue via online rainflow counting considering stress history, Wind Energ. Sci., 7, 1605–1625, <a href="https://doi.org/10.5194/wes-7-1605-2022" target="_blank">https://doi.org/10.5194/wes-7-1605-2022</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Loew et al.(2020a)</label><mixed-citation>
      
Loew, S., Obradovic, D., Anand, A., and Szabo, A.: Stage Cost Formulations of
Online Rainflow-counting for Model Predictive Control of Fatigue, in: 2020
European Control Conference (ECC),  475–482, 2020a.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>Loew et al.(2020b)</label><mixed-citation>
      
Loew, S., Obradovic, D., and Bottasso, C. L.: Model predictive control of wind
turbine fatigue via online rainflow-counting on stress history and
prediction, J. Phys. Conf. Ser., 1618, 022041,
2020b.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>Loew et al.(2021)</label><mixed-citation>
      
Loew, S., Anand, A., and Szabo, A.: Economic model predictive control of
Li–ion battery cyclic aging via online rainflow–analysis, Energy Storage,
3, <a href="https://doi.org/10.1002/est2.228" target="_blank">https://doi.org/10.1002/est2.228</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>Loew et al.(2023)</label><mixed-citation>
      
Loew, S., Obradovic, D., and Bottasso, C. L.: Economic nonlinear model
predictive control of fatigue—Formulation and application to wind turbine
control, Optimal Control Applications and Methods, 44, 647–676,
<a href="https://doi.org/10.1002/oca.2870" target="_blank">https://doi.org/10.1002/oca.2870</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>Njiri and
Söffker(2016)</label><mixed-citation>
      
Njiri, J. G. and Söffker, D.: State-of-the-art in wind turbine control:
Trends and challenges, Renewable and Sustainable Energy Reviews, 60,
377–393, <a href="https://doi.org/10.1016/j.rser.2016.01.110" target="_blank">https://doi.org/10.1016/j.rser.2016.01.110</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>Pustina et al.(2022)</label><mixed-citation>
      
Pustina, L., Biral, F., and Serafini, J.: A novel Economic Nonlinear Model
Predictive Controller for power maximisation on wind turbines, Renewable and
Sustainable Energy Reviews, 170, 112964, <a href="https://doi.org/10.1016/j.rser.2022.112964" target="_blank">https://doi.org/10.1016/j.rser.2022.112964</a>,
2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>Pustina et al.(2025)</label><mixed-citation>
      
Pustina, L., Biral, F., Bertolazzi, E., and Serafini, J.: A multi-objective
economic nonlinear model predictive controller for power and platform motion
on floating offshore wind turbines, Ocean Eng., 342, 122888,
<a href="https://doi.org/10.1016/j.oceaneng.2025.122888" target="_blank">https://doi.org/10.1016/j.oceaneng.2025.122888</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib27"><label>Rawlings et al.(2012)</label><mixed-citation>
      
Rawlings, J. B., Angeli, D., and Bates, C. N.: Fundamentals of economic model
predictive control,  2012 IEEE 51st IEEE Conference on Decision and Control (CDC), Maui, HI, USA, 2012, 3851–3861, <a href="https://doi.org/10.1109/CDC.2012.6425822" target="_blank">https://doi.org/10.1109/CDC.2012.6425822</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>Rawlings et al.(2017)</label><mixed-citation>
      
Rawlings, J. B., Mayne, D. Q., and Diehl, M. M.: Model predictive control:
Theory, computation, and design, Nob Hill Publishing, Madison, Wisconsin,
2nd edn., ISBN 9780975937730, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>Ritter(2020)</label><mixed-citation>
      
Ritter, B.: Nonlinear State Estimation and Noise Adaptive Kalman Filter Design
for Wind Turbines, Technische Universität Darmstadt, <a href="https://doi.org/10.25534/tuprints-00011785" target="_blank">https://doi.org/10.25534/tuprints-00011785</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>Schreiber et al.(2020)</label><mixed-citation>
      
Schreiber, J., Bottasso, C. L., Salbert, B., and Campagnolo, F.: Improving wind farm flow models by learning from operational data, Wind Energ. Sci., 5, 647–673, <a href="https://doi.org/10.5194/wes-5-647-2020" target="_blank">https://doi.org/10.5194/wes-5-647-2020</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>Shaltout et al.(2018)</label><mixed-citation>
      
Shaltout, M. L., Ma, Z., and Chen, D.: An Adaptive Economic Model Predictive
Control Approach for Wind Turbines, J. Dyn. Syst.-T. ASME, 140, <a href="https://doi.org/10.1115/1.4038490" target="_blank">https://doi.org/10.1115/1.4038490</a>, 2018.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>Shi et al.(2018)</label><mixed-citation>
      
Shi, Y., Xu, B., Tan, Y., and Zhang, B.: A Convex Cycle-based Degradation Model
for Battery Energy Storage Planning and Operation,  2018 Annual American Control Conference (ACC), Milwaukee, WI, USA, 2018, 4590–4596,
<a href="https://doi.org/10.23919/ACC.2018.8431814" target="_blank">https://doi.org/10.23919/ACC.2018.8431814</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>Shi et al.(2019)</label><mixed-citation>
      
Shi, Y., Xu, B., Tan, Y., Kirschen, D., and Zhang, B.: Optimal Battery Control
Under Cycle Aging Mechanisms in Pay for Performance Settings, IEEE
T. Automat. Contr., 64, 2324–2339,
<a href="https://doi.org/10.1109/TAC.2018.2867507" target="_blank">https://doi.org/10.1109/TAC.2018.2867507</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib34"><label>Soleymani et al.(2024)</label><mixed-citation>
      
Soleymani, M., Bigdeli, N., and Rahmani, M.: Real-time time-varying economic
nonlinear model predictive control for wind turbines, Int. J. Elec. Power, 159, 110019,
<a href="https://doi.org/10.1016/j.ijepes.2024.110019" target="_blank">https://doi.org/10.1016/j.ijepes.2024.110019</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>Soloperto et al.(2022)</label><mixed-citation>
      
Soloperto, R., Muller, M. A., and Allgower, F.: Guaranteed closed-loop learning
in Model Predictive Control, IEEE T. Automat. Contr., 68, 991–1006,
<a href="https://doi.org/10.1109/TAC.2022.3172453" target="_blank">https://doi.org/10.1109/TAC.2022.3172453</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>Soltani et al.(2013)</label><mixed-citation>
      
Soltani, M. N., Knudsen, T., Svenstrup, M., Wisniewski, R., Brath, P., Ortega,
R., and Johnson, K.: Estimation of Rotor Effective Wind Speed: A Comparison,
IEEE T. Contr. Syst. T., 21, 1155–1167,
<a href="https://doi.org/10.1109/TCST.2013.2260751" target="_blank">https://doi.org/10.1109/TCST.2013.2260751</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>Stehly et al.(2020)</label><mixed-citation>
      
Stehly, T., Beiter, P., and Duffy, P.: 2019 Cost of Wind Energy Review,
<a href="https://doi.org/10.2172/1756710" target="_blank">https://doi.org/10.2172/1756710</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib38"><label>Sutherland(1999)</label><mixed-citation>
      
Sutherland, H. J.: On the Fatigue Analysis of Wind Turbines, Sandia National
Laboratories, 1999.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>Tang et al.(2023)</label><mixed-citation>
      
Tang, M., Wang, W., Yan, Y., Zhang, Y., and An, B.: Robust model predictive
control of wind turbines based on Bayesian parameter self-optimization,
Frontiers in Energy Research, 11, <a href="https://doi.org/10.3389/fenrg.2023.1306167" target="_blank">https://doi.org/10.3389/fenrg.2023.1306167</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>TotalControl(2022)</label><mixed-citation>
      
TotalControl: D2.1 Cost Model for fatigue degradation and O&amp;M – Advanced
integrated supervisory and wind turbine control for optimal operation of
large Wind Power Plants: [TotalControl], European Commission, <a href="https://doi.org/10.3030/727680" target="_blank">https://doi.org/10.3030/727680</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>Verschueren et al.(2019)</label><mixed-citation>
      
Verschueren, R., Frison, G., Kouzoupis, D., van
Duijkeren, N., Zanelli, A., Novoselnik, B., Frey, J.,
Albin, T., Quirynen, R., and Diehl, M.: acados: a modular
open-source framework for fast embedded optimal control, arXiv [preprint], <a href="https://doi.org/10.48550/arXiv.1910.13753" target="_blank">https://doi.org/10.48550/arXiv.1910.13753</a>,
2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib42"><label>Wang et al.(2025)</label><mixed-citation>
      
Wang, Y., Zhu, S., Deng, R., Yang, B., Wang, P., and Gu, S.: Model predictive
control of wind turbine based on deep-dive holistic observer of tower top
IMU, Appl. Energ., 392, 125996, <a href="https://doi.org/10.1016/j.apenergy.2025.125996" target="_blank">https://doi.org/10.1016/j.apenergy.2025.125996</a>,
2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib43"><label>Yan et al.(2013)</label><mixed-citation>
      
Yan, Z., Hall, J., and Chen, D.: MIMO control of wind turbine using direct
shooting method,  2013 American Control Conference, Washington, DC, USA, 2013, 3655–3660, <a href="https://doi.org/10.1109/ACC.2013.6580397" target="_blank">https://doi.org/10.1109/ACC.2013.6580397</a>, 2013.

    </mixed-citation></ref-html>--></article>
