<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.3 20210610//EN" "JATS-journalpublishing1-3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" dtd-version="1.3" article-type="research-article" xml:lang="en">
  <front>
    <journal-meta>
      <journal-title-group><journal-title>Energy Catalyst</journal-title></journal-title-group>
      <issn pub-type="epub">3103-9952</issn>
      <publisher><publisher-name>Caravel Press</publisher-name></publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.65582/ec.2026.006</article-id>
      <article-id pub-id-type="publisher-id">2026.006</article-id>
      <title-group><article-title>Development of an Integrated DBN-ELM, CNN-SVM and CNN-BiGRU Photovoltaic Array Fault Diagnosis Model Based on Weighted Probability Averaging</article-title></title-group>
    <contrib-group>
      <contrib contrib-type="author">
        <name><surname>Guo</surname><given-names>Chunmei</given-names></name>
        <xref ref-type="aff" rid="aff1"/>
        <role vocab="credit" vocab-identifier="https://credit.niso.org/">Conceptualization</role>
      </contrib>
      <contrib contrib-type="author">
        <name><surname>Sun</surname><given-names>Weijin</given-names></name>
        <xref ref-type="aff" rid="aff1"/>
        <role vocab="credit" vocab-identifier="https://credit.niso.org/">Writing (original draft)</role>
      </contrib>
      <contrib contrib-type="author">
        <contrib-id contrib-id-type="orcid">https://orcid.org/0000-0002-2161-2343</contrib-id>
        <name><surname>Li</surname><given-names>Yang</given-names></name>
        <xref ref-type="aff" rid="aff1"/>
        <role vocab="credit" vocab-identifier="https://credit.niso.org/">Data curation</role>
      </contrib>
      <contrib contrib-type="author">
        <name><surname>You</surname><given-names>Yuwen</given-names></name>
        <xref ref-type="aff" rid="aff1"/>
        <role vocab="credit" vocab-identifier="https://credit.niso.org/">Methodology</role>
      </contrib>
      <contrib contrib-type="author" corresp="yes">
        <name><surname>He</surname><given-names>Zhonglu</given-names></name>
        <xref ref-type="aff" rid="aff1"/>
        <role vocab="credit" vocab-identifier="https://credit.niso.org/">Writing (review and editing)</role>
        <email>hzlfirst@163.com</email>
      </contrib>
      <aff id="aff1">School of Energy and Safety Engineering, Tianjin Chengjian University, Tianjin 300384, China</aff>
    </contrib-group>
      <pub-date publication-format="electronic" date-type="pub"><day>02</day><month>08</month><year>2026</year></pub-date>
      <volume>2</volume>
      <fpage>106</fpage>
      <lpage>131</lpage>
      <self-uri xlink:href="https://caravelpress.com/journals/ec/articles/2026.006"/>
      <history>
        <date date-type="received"><string-date>19 March 2026</string-date></date>
        <date date-type="rev-recd"><string-date>30 May 2026</string-date></date>
        <date date-type="accepted"><string-date>14 July 2026</string-date></date>
      </history>
      <permissions>
        <copyright-statement>© 2026 The Author(s). Published by Caravel Press.</copyright-statement>
        <copyright-year>2026</copyright-year>
        <license license-type="open-access" xlink:href="https://creativecommons.org/licenses/by/4.0/">
          <license-p>This is an open access article under the CC BY 4.0 licence.</license-p>
        </license>
      </permissions>
      <abstract><p>Photovoltaic arrays are continuously exposed to complex environmental conditions over long periods, making them susceptible to seven types of single and multiple failures such as shadow blocking and module aging. Fault diagnosis of photovoltaic arrays is essential to prevent failures that may lead to reduced power generation efficiency and potential safety hazards. This paper proposes a photovoltaic array fault diagnosis model based on weighted probability averaging, integrating DBN-ELM, CNN-SVM, and CNN-BiGRU methods. The model is calculated and experimentally verified. The results demonstrate that the integrated model achieves an overall accuracy, recall, precision, and F1-score of 99.0% across the four evaluation metrics, indicating a highly effective fault recognition capability.</p></abstract>
      <kwd-group kwd-group-type="author">
        <kwd>PV array</kwd>
        <kwd>Fault diagnosis methods</kwd>
        <kwd>Weighted probability average integration model</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec1">
      <title>Introduction</title>
      <p>Due to prolonged exposure to natural environmental conditions, photovoltaic (PV) arrays are prone to various degradation mechanisms, including module aging, open-circuit faults between strings, localized shading of modules, inter-module short circuits, and simultaneous multi-failure occurrences. These issues can lead to reduced power generation efficiency and potential safety risks. Consequently, extensive research has been conducted on photovoltaic fault diagnosis. Artificial intelligence algorithms have emerged as effective tool in this field due to their high computational speed and superior diagnostic accuracy.</p>
      <p>In recent years, artificial intelligence technology has gained widespread popularity among industry professionals due to its efficiency, accuracy, and strong adaptability, and has been extensively adopted across various sectors. The process begins with data collection, where sensors are used to gather various operational parameters from photovoltaic systems, which are then preprocessed. Next, an appropriate AI diagnostic model is developed and trained using the segmented dataset, followed by optimization. Finally, the model’s performance is evaluated.</p>
      <p>Zain et al. (2023) proposed a method using multi-output deep learning algorithms to detect, classify, and locate short-circuit, ground-fault, and open-circuit faults. Compared with existing methods, this approach significantly reduces the number of sensors required per string—by up to 50%—while maintaining a high diagnostic accuracy rate. Lin et al. (<xref ref-type="bibr" rid="ref-r8">2024</xref>) proposed a photovoltaic array open-circuit fault diagnosis model based on a one-dimensional VoVNet-SVDD (Variety of View Network with Support Vector Data Description). The model automatically extracts fault features from the input raw current-voltage curve data, then combines these extracted features with environmental parameters to construct an SVDD model, thereby enabling diagnosis. Sridhar Patthi et al. (<xref ref-type="bibr" rid="ref-r13">2024</xref>) proposed a multi-layer neural network (MLNN) technique capable of identifying issues of any size or mismatch severity in photovoltaic arrays. Gao et al. (<xref ref-type="bibr" rid="ref-r5">2024</xref>) proposed a PV array fault diagnosis method based on Variational Mode Decomposition (VMD) and the Subtractive Average Optimizer (SABO) to optimize the Kernel Extreme Learning Machine (KELM). By utilizing VMD to extract nine feature vectors from fault data and employing the SABO algorithm to optimize the kernel and regularization parameters of the KELM, they established a PV array fault diagnosis model based on VMD-SABO-KELM. Zhong et al. (<xref ref-type="bibr" rid="ref-r18">2024</xref>) proposed a lightweight PV array fault diagnosis model based on an improved SqueezeNet. This model significantly reduces computational complexity by replacing traditional convolutions with deep convolutions, while incorporating residual connections to facilitate effective information flow between layers, thereby enhancing diagnostic efficiency and accuracy. Ali et al. (<xref ref-type="bibr" rid="ref-r2">2025</xref>) developed a simple and accurate one-dimensional convolutional neural network model that classifies faults based on selected features. Lu et al. (<xref ref-type="bibr" rid="ref-r11">2023</xref>) proposed an accurate FDD model for photovoltaic arrays based solely on small datasets, utilizing a Wasserstein-based generative adversarial network to generate more labeled samples to improve the performance of the CNN-based classifier. Liu et al. (<xref ref-type="bibr" rid="ref-r9">2021</xref>) proposed a PV array fault diagnosis method based on stacked autoencoders and clustering algorithms, which can automatically extract features and mine data sample characteristics for fault diagnosis using a small number of labeled data samples. Fu et al. (<xref ref-type="bibr" rid="ref-r4">2025</xref>), to address the issue of data imbalance in photovoltaic arrays affecting the performance of fault diagnosis models, proposed integrating an improved slime mold algorithm with a CatBoost model based on a polyloss function to achieve accurate composite fault diagnosis. Zahra Yahyaoui et al. (<xref ref-type="bibr" rid="ref-r17">2024</xref>) proposed a novel Bayesian optimization-based diagnostic framework using interval-gated recurrent units to reduce the computational and storage costs associated with sensor uncertainty. Shiue-Der Lu et al. (<xref ref-type="bibr" rid="ref-r10">2024</xref>) were able to rapidly and accurately measure and locate short-circuit and open-circuit faults in bypass diodes by integrating voltmeters and support vector machines into solar photovoltaic array modules. Mansour Hajji et al. (<xref ref-type="bibr" rid="ref-r6">2021</xref>) developed a fault diagnosis method based on principal component analysis (PCA) to extract and select the most relevant multivariate features, and applied supervised machine learning classifiers to address the challenge of selecting more relevant and sensitive features.</p>
      <p>The NCA-CNN model proposed by Umit Cigdem et al. (2025) achieves a fault recognition rate of up to 99% for both aging and series resistance faults. The 1D-CNN model proposed by Belqasem (<xref ref-type="bibr" rid="ref-r1">Aljafari <italic>et al.</italic> 2024</xref>) achieves a 98.15% accuracy in identifying shadow faults in open- circuit conditions. Aziz, F et al. (<xref ref-type="bibr" rid="ref-r3">2020</xref>) proposed a fault diagnosis method based on a 2D-CNN. The results show that the proposed fine-tuned pre-trained CNN model achieves a fault detection accuracy of 73.53% and 70.45% in noisy scenes, outperforming existing machine learning and deep learning methods.</p>
      <p>In summary, four typical types of AI-detected photovoltaic (PV) faults are identified for single fault scenarios, including module surface shading, aging, open circuits, and short circuits. The diagnostic accuracy ranges from 93% to 99%. However, although the aforementioned models demonstrate relatively high accuracy in diagnosing several types of single faults, the diagnosis of multiple failures still requires further improvement.</p>
      <p>In this paper, an ensemble learning model is proposed based on weighted probabilistic averaging. This integrated model effectively combines the strengths of DBN-ELM, CNN-SVM, and CNN-BiGRU. Seven types of faults, encompassing both single and multiple faults, were identified. Corresponding training and testing datasets were then constructed, and the performance of the model was computed and evaluated.</p>
    </sec>
    <sec id="sec2">
      <title>Construction of PV array fault dataset</title>
      <p>As the foundation of fault diagnosis research, the construction and application of photovoltaic system fault datasets have a decisive impact on the development and optimization of diagnostic models. Voutsinas et al. (<xref ref-type="bibr" rid="ref-r15">2022</xref>) used a single-diode model to calculate the photocurrent generated by given irradiance and temperature settings, creating values for a dataset to be used in the neural network training process. Karmacharya et al.(<xref ref-type="bibr" rid="ref-r7">2018</xref>) modeled and simulated an ungrounded photovoltaic system in a real-time digital simulator (RTDS). Signals from the model outputs were collected to construct the dataset. Wang et al. (<xref ref-type="bibr" rid="ref-r16">2019</xref>) set up a fault data acquisition system and, based on this, used MATLAB to establish a 4×3 PV array model. They simulated the PV array’s normal, open-circuit, short-circuit, inter-string, and multi-fault states, collecting 779 data samples across these five states. Based on the fundamental principles of the various components of off-grid photovoltaic systems, fault simulations are performed using a simulation model in this chapter, and fault labels are established and a fault dataset is constructed from the results of the simulation analysis.</p>
      <p>To conduct an in-depth analysis of the output performance of a photovoltaic array under various fault conditions, this paper uses MATLAB/Simulink to build a 3×3 photovoltaic array model with a total output power of 2 kW. The study examines the output characteristics of four single faults—shading on the module surface, short circuits within module strings, open circuits between strings, and array aging—as well as three types of concurrent faults. Figure 1 shows a schematic diagram of a photovoltaic array. The detailed parameters of each photovoltaic module under standard test conditions are shown in Table 1. The schematic illustrates the behavior of several types of single faults.</p>
      <fig id="fig1">
        <label>Figure 1</label>
        <caption><p>Simulation modelling of PV array failures.</p></caption>
        <graphic xlink:href="obj/30/e2/30e20f6244ed9621ff6120b2dbd1db69cb4cdf0bcff57cc3a756b03a942cfbb9"/>
      </fig>
      <table-wrap id="tbl1">
        <label>Table 1</label>
        <caption><p>Parameters under Standard Test Conditions for PV modules</p></caption>
        <table>
          <thead>
            <tr>
              <th><bold>Parameters</bold></th>
              <th><bold>Value</bold></th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Maximum power P<sub>mppt</sub>/W</td>
              <td>218.87</td>
            </tr>
            <tr>
              <td>Maximum-power voltage V<sub>mppt</sub>/V</td>
              <td>29.30</td>
            </tr>
            <tr>
              <td>Maximum-power current I<sub>mppt</sub>/A</td>
              <td>7.47</td>
            </tr>
            <tr>
              <td>Open circuit voltage V<sub>oc</sub>/V</td>
              <td>36.60</td>
            </tr>
            <tr>
              <td>Short circuit current I<sub>sc</sub>/A</td>
              <td>7.97</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
      <p>By establishing a simulation model of the output characteristics of photovoltaic modules, multi-condition simulations were conducted by varying irradiance (200–1000 W/m²) and temperature (15–55 °C) to reveal the dynamic relationship between the modules’ electrical parameters and environmental factors. Simulations show that when the module temperature is held constant at 25 °C, a decrease in irradiance from 1000 W/m² to 200 W/m² causes the short-circuit current (Isc) to decrease approximately linearly from 41 A to 8 A (a reduction of 80.5%), resulting in a drop in maximum power point from 3700 W to 600 W; The open-circuit voltage (Voc) decreased from 110 V to 103 V, a reduction of approximately 6.3%. As shown in the figure 2 to figure 5.</p>
      <fig id="fig2">
        <label>Figure 2</label>
        <caption><p>I-V Curves of a Photovoltaic Array as a Function of Irradiance.</p></caption>
        <graphic xlink:href="obj/e0/8e/e08e72a266f50dbd2928bf827be0bb047c1ebc37579fd41dfc21d1ecde9c2af5"/>
      </fig>
      <fig id="fig3">
        <label>Figure 3</label>
        <caption><p>P-V Curves of a Photovoltaic Array as a Function of Irradiance.</p></caption>
        <graphic xlink:href="obj/bd/0e/bd0e6c3583284b835f47f68b9b234ac87a6033dd377a3f518bba85fd7236cb78"/>
      </fig>
      <fig id="fig4">
        <label>Figure 4</label>
        <caption><p>I-V Curves of a Photovoltaic Array as Module Temperature Varies.</p></caption>
        <graphic xlink:href="obj/f6/53/f653cb79ec955f02f118b7d6322a795616afe0c64dc167a2c4aaab9ebb1f232d"/>
      </fig>
      <fig id="fig5">
        <label>Figure 5</label>
        <caption><p>I-V Curves of a Photovoltaic Array as Module Temperature Varies.</p></caption>
        <graphic xlink:href="obj/18/69/186983a021d8a9980b89446f0d2e90347db5f20e2e4c58731e31c48cb6d3f24f"/>
      </fig>
      <p>Under conditions of constant irradiance (1000 W/m²), simulation data shows that as the module temperature rises from 15°C to 55°C, the open-circuit voltage (Voc) exhibits a significant negative temperature coefficient, decreasing from 115 V to 101 V at a rate of -0.35%/°C, with a total reduction of 12.2%. In contrast, the short-circuit current (Isc) shows only slight changes. The combined effect of these factors causes the maximum power point to decrease from 3700 W to 3100 W at a rate of -0.41%/°C, representing a reduction of approximately 16.2%.</p>
      <p>These regular patterns provide important evidence for fault diagnosis in photovoltaic arrays. Under normal operating conditions, changes in output parameters should strictly follow the aforementioned radiation-temperature coupling laws, and any deviation from these patterns may indicate a potential fault.</p>
      <p>Simulations were conducted to obtain the I-V and P-V characteristic curves for a single photovoltaic module under surface shading conditions. These simulations were performed under STC (Standard Test Conditions) with an irradiance of 1000 W/m² and a module temperature of 25 °C. Analysis shows that when the module is shaded, the array output current decreases in a “step-like” manner with voltage, and the output power first increases, then decreases, and then increases again, exhibiting multiple peaks; the open-circuit voltage and short-circuit current do not change significantly, while the maximum output power decreases by approximately 1000 W as shown in the figure 6 and 7.</p>
      <fig id="fig6">
        <label>Figure 6</label>
        <caption><p>I-V curve when shadows fall on the module surface.</p></caption>
        <graphic xlink:href="obj/13/14/131481e7ed5ba41848bb922d6ffdc7026141096187c461fcb5e7c55e3acb826a"/>
      </fig>
      <fig id="fig7">
        <label>Figure 7</label>
        <caption><p>P-V curve when shadows fall on the module surface.</p></caption>
        <graphic xlink:href="obj/44/03/4403c6fe104ab2965dc2d3732ae7c7bfa10c0f7dcc8a96ab14d61bceecda3d81"/>
      </fig>
      <p>Analysis of the I-V and P-V characteristic curves of a photovoltaic array under STC conditions during a short-circuit fault, as obtained through simulation, reveals that when a shorting wire is used to short-circuit a single PV module in the array, the open-circuit voltage of the array drops significantly compared to normal operating conditions—by approximately 30 V—resulting in a reduction in maximum power output of about 1,100 W. This reduction is directly proportional to the number of affected modules as shown in the figure 8 and 9.</p>
      <fig id="fig8">
        <label>Figure 8</label>
        <caption><p>I-V Curve During a Short Circuit Between Cells.</p></caption>
        <graphic xlink:href="obj/4a/09/4a09376920c905904320a95d74f6c06603e94b10742bee0f5704563815b883de"/>
      </fig>
      <fig id="fig9">
        <label>Figure 9</label>
        <caption><p>P-V Curve During a Short Circuit Between Cells.</p></caption>
        <graphic xlink:href="obj/45/01/45011440856d1fb47adb63f23a2c5de74d9449958b58c0eaba9bbc2b684c6b71"/>
      </fig>
      <p>Analysis of the I-V and P-V characteristic curves of the photovoltaic array under STC conditions following a simulation of an open-circuit fault reveals that when a single PV string is disconnected from the array, the array’s open-circuit voltage remains largely unchanged, while the short-circuit current decreases significantly, leading to a drop in output power. Furthermore, the maximum output power decreases by approximately 1,200 W compared to normal operating conditions, as shown in figure 10 and 11.</p>
      <fig id="fig10">
        <label>Figure 10</label>
        <caption><p>I-V curve for an open-circuit string.</p></caption>
        <graphic xlink:href="obj/f4/3f/f43faeb811603d39e844ba3e4a1b0d910158762b55fee8cb46a6ee8036dab1b5"/>
      </fig>
      <fig id="fig11">
        <label>Figure 11</label>
        <caption><p>P-V curve for an open-circuit string.</p></caption>
        <graphic xlink:href="obj/2b/e1/2be189efc9cbabd5504c2d9ada82f3a0817ae209cd9c6a77013b95e6d9350ccc"/>
      </fig>
      <p>Analysis of the I-V and P-V characteristic curves of the photovoltaic array, obtained through simulation, when aging-related failures occur under STC conditions reveals that, prior to the maximum power point, the output current decreases more rapidly as the output voltage increases compared to normal operating conditions. This results in a reduction in maximum power output relative to normal conditions, with the extent of this reduction being closely related to the degree of array aging, as shown in figure 12 and 13.</p>
      <fig id="fig12">
        <label>Figure 12</label>
        <caption><p>I-V Curves During Array Aging.</p></caption>
        <graphic xlink:href="obj/09/a0/09a0f5ae39ec297669f412e8fd48d16bca098416e26bc71f853da33f69904a7a"/>
      </fig>
      <fig id="fig13">
        <label>Figure 13</label>
        <caption><p>P-V Curves During Array Aging.</p></caption>
        <graphic xlink:href="obj/da/45/da4565628196700a2d3033ceadfccac1bee560b9b95e657f0a4511aae6f973c8"/>
      </fig>
      <p>This study addresses the issue of array fault diagnosis in off-grid photovoltaic systems by constructing an 8-label classification system comprising seven typical fault modes and one normal operating state, as listed in Table 2. Specifically, Label 1 represents the normal operating state of a 3×3 photovoltaic array and serves as the baseline reference for subsequent fault identification. Label 2 simulates shading on the module surface by randomly selecting 1 to 3 modules in the array and reducing their irradiance by 30% to 90% to characterize varying degrees of shading effects. Label 3 corresponds to aging-related faults in the PV array, achieved by connecting a 5–10 Ω resistor in series to represent performance degradation caused by increased series resistance after long-term operation. Label 4 simulates an open-circuit fault between strings by removing an entire row of PV strings, replicating open-circuit scenarios such as connector detachment or cable breakage. Label 5 describes a short-circuit fault between modules, using ultra-low-resistance resistors of 1×10⁻⁶ Ω to randomly short-circuit several modules, reflecting short-circuit phenomena caused by hidden cracks in solar cells or connection failures during actual operation. Furthermore, Labels 6–8 focus on more complex concurrent faults: Label 6 combines an inter-string open-circuit fault with shading on the module surface, simultaneously removing one string and applying 30%–90% irradiance attenuation to the remaining modules; Label 7 represents the combination of array aging and shading, superimposing random radiation attenuation on the array in addition to series-connected 5–10 Ω aging resistors; Label 8 combines inter-module short circuits with shading, applying both ultra-low-resistance short circuits and radiation density attenuation simultaneously to the array, thereby comprehensively covering common composite failure scenarios encountered in actual operation. The simulation model covers a solar irradiance range of 100–1000 W/m² and a module temperature range of 10–70°C. To enhance the randomness and representativeness of the samples, the intervals between changes in irradiance and module temperature were not fixed, thereby fully simulating the output characteristics under various operating conditions. For each operating scenario, 500 samples were collected, ultimately constructing an array failure dataset comprising 4,000 samples. The dataset was divided into a training set and a test set in a 7:3 ratio, with the training set containing 2,800 samples and the test set containing 1,200 samples (as shown in Table 2). Additionally, Table 3 lists the sample values for various array failures under Standard Test Conditions (STC), providing a baseline reference for subsequent diagnostic analysis.</p>
      <table-wrap id="tbl2">
        <label>Table 2</label>
        <caption><p>Fault classification labels.</p></caption>
        <table>
          <thead>
            <tr>
              <th><bold>Operating Conditions</bold></th>
              <th><bold>Labels</bold></th>
              <th><bold>Training set (group)</bold></th>
              <th><bold>Test set (group)</bold></th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Normal operation</td>
              <td>1</td>
              <td>350</td>
              <td>150</td>
            </tr>
            <tr>
              <td>Shadows on the component surface</td>
              <td>2</td>
              <td>350</td>
              <td>150</td>
            </tr>
            <tr>
              <td>Array aging</td>
              <td>3</td>
              <td>350</td>
              <td>150</td>
            </tr>
            <tr>
              <td>Open circuit between strings</td>
              <td>4</td>
              <td>350</td>
              <td>150</td>
            </tr>
            <tr>
              <td>Short circuit between components</td>
              <td>5</td>
              <td>350</td>
              <td>150</td>
            </tr>
            <tr>
              <td>Path &amp; Shadows</td>
              <td>6</td>
              <td>350</td>
              <td>150</td>
            </tr>
            <tr>
              <td>Aging &amp; Shadows</td>
              <td>7</td>
              <td>350</td>
              <td>150</td>
            </tr>
            <tr>
              <td>Short Circuit &amp; Shadow</td>
              <td>8</td>
              <td>350</td>
              <td>150</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
      <table-wrap id="tbl3">
        <label>Table 3</label>
        <caption><p>Sample fault data of PV arrays under STC.</p></caption>
        <table>
          <thead>
            <tr>
              <th><bold>Operating conditions</bold></th>
              <th><bold>G/（W/m<sup>2</sup>）</bold></th>
              <th><bold>T/(℃)</bold></th>
              <th><bold>V<sub>mppt</sub>/(V)</bold></th>
              <th><bold>I<sub>mppt</sub>/(A)</bold></th>
              <th><bold>V<sub>oc</sub>/(V)</bold></th>
              <th><bold>I<sub>sc</sub>/(A)</bold></th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Normal operation</td>
              <td>1000.00</td>
              <td>25.00</td>
              <td>91.84</td>
              <td>38.67</td>
              <td>110.19</td>
              <td>41.28</td>
            </tr>
            <tr>
              <td>Component surface shadow</td>
              <td>1000.00</td>
              <td>25.00</td>
              <td>94.74</td>
              <td>25.86</td>
              <td>109.58</td>
              <td>41.27</td>
            </tr>
            <tr>
              <td>Array aging</td>
              <td>1000.00</td>
              <td>25.00</td>
              <td>89.66</td>
              <td>29.81</td>
              <td>110.19</td>
              <td>41.21</td>
            </tr>
            <tr>
              <td>Open circuit between strings</td>
              <td>1000.00</td>
              <td>25.00</td>
              <td>91.84</td>
              <td>25.78</td>
              <td>110.19</td>
              <td>27.51</td>
            </tr>
            <tr>
              <td>Short circuit between components</td>
              <td>1000.00</td>
              <td>25.00</td>
              <td>64.98</td>
              <td>38.57</td>
              <td>84.20</td>
              <td>41.28</td>
            </tr>
            <tr>
              <td>Open circuit and shadow</td>
              <td>1000.00</td>
              <td>25.00</td>
              <td>93.65</td>
              <td>19.35</td>
              <td>109.52</td>
              <td>27.52</td>
            </tr>
            <tr>
              <td>Aging and shadow</td>
              <td>1000.00</td>
              <td>25.00</td>
              <td>89.30</td>
              <td>29.68</td>
              <td>110.13</td>
              <td>41.1</td>
            </tr>
            <tr>
              <td>Short circuit and shadow</td>
              <td>1000.00</td>
              <td>25.00</td>
              <td>67.16</td>
              <td>33.02</td>
              <td>83.94</td>
              <td>41.27</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
    </sec>
    <sec id="sec3">
      <title>Fault diagnosis modeling</title>
      <p>To identify a high-performance fault diagnosis model for photovoltaic arrays, this study developed and compared five diagnostic models based on different principles. Convolutional neural network (CNN) models possess strong feature extraction capabilities and can effectively extract key information from photovoltaic array fault data; the CNN-LSTM model combines the feature extraction strengths of CNN with the temporal data processing advantages of LSTM, enabling better handling of time-dependent fault sequences; CNN-SVM uses SVM to classify features extracted by CNN, further improving diagnostic accuracy; CNN-BiGRU leverages bidirectional gated recurrent networks to enhance the learning and understanding of temporal features in fault data; DBN-ELM combines the deep feature learning capabilities of deep belief networks with the rapid convergence characteristics of extreme learning machines to improve the model’s diagnostic efficiency.</p>
      <p>Subsequently, these five diagnostic models were systematically trained using a training dataset comprising 2,800 sets of fault samples. Next, each model was applied to the fault diagnosis of off-grid photovoltaic arrays using a test dataset containing 1,200 fault samples. Table 4 details the overall accuracy and accuracy rates for each fault category. The overall accuracy rates for these five models were 84.3%, 86.4%, 90.8%, 92.3%, and 94.7%, respectively. Among them, the DBN-ELM, CNN-SVM, and CNN-BiGRU models achieved relatively high overall accuracy rates, demonstrating excellent fault diagnosis performance. However, there are shortcomings in identifying single-point failures caused by array aging and concurrent failures involving both component shadowing and array aging.</p>
      <table-wrap id="tbl4">
        <label>Table 4</label>
        <caption><p>Diagnostic accuracy of individual models.</p></caption>
        <table>
          <thead>
            <tr>
              <th rowspan="2"><bold>Model</bold></th>
              <th rowspan="2"><bold>Overall accuracy / %</bold></th>
              <th colspan="8"><bold>Accuracy of each fault classification label/ %</bold></th>
            </tr>
            <tr>
              <th><bold>1</bold></th>
              <th><bold>2</bold></th>
              <th><bold>3</bold></th>
              <th><bold>4</bold></th>
              <th><bold>5</bold></th>
              <th><bold>6</bold></th>
              <th><bold>7</bold></th>
              <th><bold>8</bold></th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>CNN</td>
              <td>84.3</td>
              <td>89.3</td>
              <td>80.7</td>
              <td>84.7</td>
              <td>100.0</td>
              <td>98.0</td>
              <td>81.3</td>
              <td>40.7</td>
              <td>100.0</td>
            </tr>
            <tr>
              <td>CNN-LSTM</td>
              <td>86.4</td>
              <td>97.3</td>
              <td>86.0</td>
              <td>51.3</td>
              <td>98.0</td>
              <td>100.0</td>
              <td>93.3</td>
              <td>68.0</td>
              <td>97.3</td>
            </tr>
            <tr>
              <td>DBN-ELM</td>
              <td>90.8</td>
              <td>95.3</td>
              <td>82.0</td>
              <td>72.7</td>
              <td>97.3</td>
              <td>100.0</td>
              <td>98.7</td>
              <td>80.0</td>
              <td>100.0</td>
            </tr>
            <tr>
              <td>CNN-BiGRU</td>
              <td>92.3</td>
              <td>100.0</td>
              <td>86.7</td>
              <td>89.3</td>
              <td>100.0</td>
              <td>100.0</td>
              <td>97.3</td>
              <td>66.0</td>
              <td>98.7</td>
            </tr>
            <tr>
              <td>CNN-SVM</td>
              <td>94.7</td>
              <td>100.0</td>
              <td>94.0</td>
              <td>82.0</td>
              <td>95.3</td>
              <td>100.0</td>
              <td>100.0</td>
              <td>91.3</td>
              <td>94.7</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
      <p>To effectively address this issue, this paper proposes the use of a weighted probabilistic averaging ensemble algorithm to perform ensemble optimization on the DBN-ELM, CNN-SVM, and CNN-BiGRU models, thereby constructing a novel diagnostic model.</p>
      <sec id="sec4">
        <title>Data Preprocessing Layer</title>
        <p>The data preprocessing layer is used to standardize the raw data so that it meets the model’s input requirements. This study primarily employs normalization to eliminate differences in data units and numerical ranges, thereby improving the stability of model training. Based on the operating characteristics of the photovoltaic array’s maximum power point voltage and current, the maximum power voltage and maximum power current are normalized and mapped to a unified range to ensure model convergence and accuracy. Normalize the maximum power voltage and maximum power current; the expressions are shown in Equations 1 and 2.</p>
        <disp-formula id="eq1">
          <label>(1)</label>
          <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>U</mi><mrow><mi>n</mi><mi>o</mi><mi>r</mi><mi>m</mi></mrow></msub><mo>=</mo><mfrac><msub><mi>U</mi><mrow><mi>m</mi><mi>p</mi><mi>p</mi><mi>t</mi></mrow></msub><msub><mi>U</mi><mrow><mi>o</mi><mi>c</mi></mrow></msub></mfrac></mrow><annotation encoding="application/x-tex">U_{norm} = \frac{U_{mppt}}{U_{oc}}</annotation></semantics></math>
        </disp-formula>
        <p>In the equation <inline-formula><tex-math><![CDATA[U_{norm}]]></tex-math></inline-formula> is the normalized voltage (V); <inline-formula><tex-math><![CDATA[U_{mppt}]]></tex-math></inline-formula> is the maximum power output voltage of the array (V); <inline-formula><tex-math><![CDATA[U_{oc}]]></tex-math></inline-formula> is the open-circuit voltage of the array (V).</p>
        <disp-formula id="eq2">
          <label>(2)</label>
          <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>I</mi><mrow><mi>n</mi><mi>o</mi><mi>r</mi><mi>m</mi></mrow></msub><mo>=</mo><mfrac><msub><mi>I</mi><mrow><mi>m</mi><mi>p</mi><mi>p</mi><mi>t</mi></mrow></msub><msub><mi>I</mi><mrow><mi>s</mi><mi>c</mi></mrow></msub></mfrac></mrow><annotation encoding="application/x-tex">I_{norm} = \frac{I_{mppt}}{I_{sc}}</annotation></semantics></math>
        </disp-formula>
        <p>In the equation <inline-formula><tex-math><![CDATA[I_{norm}]]></tex-math></inline-formula> is the normalized current (A); <inline-formula><tex-math><![CDATA[I_{mppt}]]></tex-math></inline-formula> is the maximum power output current of the array (A); <inline-formula><tex-math><![CDATA[I_{sc}]]></tex-math></inline-formula> and is the short-circuit current of the array (A).</p>
      </sec>
      <sec id="sec5">
        <title>Base Model Layer</title>
        <sec id="sec6">
          <title>DBN-ELM Model</title>
          <p>Deep Belief Networks (DBN), as an efficient deep learning model, excel at complex feature extraction and data representation, while Extreme Learning Machines (ELM), as single-hidden-layer feedforward neural networks, are renowned for their efficient training and inference speeds, as well as their rapid convergence and ease of use.</p>
          <p>The DBN-ELM model developed in this paper comprises three hidden layers: the first two layers follow the DBN architecture, using a restricted Boltzmann machine to adaptively extract deep features from fault data; the third layer is replaced with an ELM hidden layer, which serves as the classifier. After the features extracted by the DBN are fed into the ELM, the model leverages the ELM’s ability to rapidly compute output weights to efficiently generate sample classification probabilities, thereby balancing feature learning capabilities with diagnostic efficiency. The mathematical expression is shown in equation 3.</p>
          <disp-formula id="eq3">
            <label>(3)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mrow></mrow><msub><mi>β</mi><mi>i</mi></msub><mi>g</mi><mrow><mo stretchy="true" form="prefix">(</mo><msub><mi>W</mi><mi>i</mi></msub><msub><mi>H</mi><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>b</mi><mi>i</mi></msub><mo stretchy="true" form="postfix">)</mo></mrow><mo>=</mo><msub><mi>o</mi><mi>j</mi></msub><mo>,</mo><mi>j</mi><mo>=</mo><mi>i</mi><mo>,</mo><mi>.</mi><mi>.</mi><mi>.</mi><mo>,</mo><mspace width="0.222em"></mspace><mi>m</mi></mrow><annotation encoding="application/x-tex">\sum_{i = 1}^{N}{}\beta_{i}g\left( W_{i}H_{n - 1} + b_{i} \right) = o_{j},j = i,...,\ m</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <italic>g(x)</italic> is the activation function; N is the number of nodes in the <inline-formula><tex-math><![CDATA[n]]></tex-math></inline-formula> th hidden layer; m is the number of nodes in the <inline-formula><tex-math><![CDATA[n - 1]]></tex-math></inline-formula> th hidden layer; <inline-formula><tex-math><![CDATA[\beta_{i}]]></tex-math></inline-formula> is the output weight from the <inline-formula><tex-math><![CDATA[n]]></tex-math></inline-formula> th hidden layer to the output layer; <inline-formula><tex-math><![CDATA[W_{i}]]></tex-math></inline-formula> is the weight from the <inline-formula><tex-math><![CDATA[n - 1]]></tex-math></inline-formula> th hidden layer to the <inline-formula><tex-math><![CDATA[n]]></tex-math></inline-formula> th hidden layer; <inline-formula><tex-math><![CDATA[H_{n - 1}]]></tex-math></inline-formula> is the output of the <inline-formula><tex-math><![CDATA[n - 1]]></tex-math></inline-formula> th hidden layer; <inline-formula><tex-math><![CDATA[b_{i}]]></tex-math></inline-formula> is the bias from the <inline-formula><tex-math><![CDATA[n - 1]]></tex-math></inline-formula> th hidden layer to the <inline-formula><tex-math><![CDATA[n]]></tex-math></inline-formula> th hidden layer.</p>
        </sec>
        <sec id="sec7">
          <title>CNN-SVM Model</title>
          <p>Convolutional neural networks (CNN) consist of convolutional layers and pooling layers. The convolutional layer is the core component of a CNN. It performs convolution operations by sliding a convolutional kernel over the input data the mathematical expressions are given in Equations 4 through 6.</p>
          <disp-formula id="eq4">
            <label>(4)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>O</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow></msub><mo>=</mo><mi>σ</mi><mrow><mo stretchy="true" form="prefix">(</mo><munderover><mo>∑</mo><mrow><mi>c</mi><mo>=</mo><mn>1</mn></mrow><mi>C</mi></munderover><mrow><munderover><mo>∑</mo><mrow><mi>m</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>M</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>N</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><msub><mi>K</mi><mrow><mi>k</mi><mo>,</mo><mi>c</mi><mo>,</mo><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><msub><mi>I</mi><mrow><mi>c</mi><mo>,</mo><mi>s</mi><mo>•</mo><mi>i</mi><mo>+</mo><mi>m</mi><mo>−</mo><mi>p</mi><mo>,</mo><mi>s</mi><mo>•</mo><mi>j</mi><mo>+</mo><mi>n</mi><mo>−</mo><mi>p</mi></mrow></msub><mo>+</mo><msub><mi>b</mi><mi>k</mi></msub></mrow></mrow></mrow><mo stretchy="true" form="postfix">)</mo></mrow></mrow><annotation encoding="application/x-tex">O_{i,j,k} = \sigma\left( \sum_{c = 1}^{C}{\sum_{m = 0}^{M - 1}{\sum_{n = 0}^{N - 1}{K_{k,c,m,n}I_{c,s \bullet i + m - p,s \bullet j + n - p} + b_{k}}}} \right)</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <inline-formula><tex-math><![CDATA[O_{i,j,k}]]></tex-math></inline-formula> denotes the value of the <inline-formula><tex-math><![CDATA[k]]></tex-math></inline-formula> th channel of the output feature at position (<inline-formula><tex-math><![CDATA[i,j]]></tex-math></inline-formula>); <inline-formula><tex-math><![CDATA[\sigma(x)]]></tex-math></inline-formula> denotes the nonlinear activation function; <inline-formula><tex-math><![CDATA[C]]></tex-math></inline-formula> denotes the number of input channels; <inline-formula><tex-math><![CDATA[M]]></tex-math></inline-formula>, <inline-formula><tex-math><![CDATA[N]]></tex-math></inline-formula> denotes the size of the convolution kernel; <inline-formula><tex-math><![CDATA[K_{k,c,m,n}]]></tex-math></inline-formula> denotes the value of the <inline-formula><tex-math><![CDATA[k]]></tex-math></inline-formula> th convolution kernel at position (<inline-formula><tex-math><![CDATA[m,n]]></tex-math></inline-formula>) in the <inline-formula><tex-math><![CDATA[c]]></tex-math></inline-formula> th input channel; <inline-formula><tex-math><![CDATA[I_{c,x,y}]]></tex-math></inline-formula> denotes the value of the input at position (<inline-formula><tex-math><![CDATA[x,y]]></tex-math></inline-formula>) in the <inline-formula><tex-math><![CDATA[c]]></tex-math></inline-formula> th channel; <inline-formula><tex-math><![CDATA[s]]></tex-math></inline-formula> denotes the stride; <inline-formula><tex-math><![CDATA[p]]></tex-math></inline-formula> denotes the padding; <inline-formula><tex-math><![CDATA[b_{k}]]></tex-math></inline-formula> denotes the bias term of the <inline-formula><tex-math><![CDATA[k]]></tex-math></inline-formula> th convolution kernel.</p>
          <disp-formula id="eq5">
            <label>(5)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>P</mi><mrow><msub><mi>i</mi><mn>1</mn></msub><mo>,</mo><msub><mi>j</mi><mn>1</mn></msub><mo>,</mo><mi>k</mi></mrow></msub><mo>=</mo><munder><mi mathvariant="normal">max</mi><mrow><mn>0</mn><mo>≤</mo><msub><mi>m</mi><mn>1</mn></msub><mo>≤</mo><msub><mi>M</mi><mn>1</mn></msub><mo>,</mo><mn>0</mn><mo>≤</mo><msub><mi>n</mi><mn>1</mn></msub><mo>≤</mo><msub><mi>N</mi><mn>1</mn></msub></mrow></munder><msub><mi>O</mi><mrow><mi>k</mi><mo>,</mo><msub><mi>s</mi><mn>1</mn></msub><mo>•</mo><msub><mi>i</mi><mn>1</mn></msub><mo>+</mo><msub><mi>m</mi><mn>1</mn></msub><mo>,</mo><msub><mi>s</mi><mn>1</mn></msub><mo>•</mo><msub><mi>j</mi><mn>1</mn></msub><mo>+</mo><msub><mi>n</mi><mn>1</mn></msub></mrow></msub></mrow><annotation encoding="application/x-tex">P_{i_{1},j_{1},k} = \max_{0 \leq m_{1} \leq M_{1},0 \leq n_{1} \leq N_{1}}O_{k,s_{1} \bullet i_{1} + m_{1},s_{1} \bullet j_{1} + n_{1}}</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <inline-formula><tex-math><![CDATA[P_{i,j,k}]]></tex-math></inline-formula> represents the value of the <inline-formula><tex-math><![CDATA[k]]></tex-math></inline-formula> th channel at position (<inline-formula><tex-math><![CDATA[i_{1},j_{1}]]></tex-math></inline-formula>) in the pooled output; <inline-formula><tex-math><![CDATA[O]]></tex-math></inline-formula> represents the input feature; <inline-formula><tex-math><![CDATA[M_{1},N_{1}]]></tex-math></inline-formula> represents the pooling window size; <inline-formula><tex-math><![CDATA[s_{1}]]></tex-math></inline-formula> represents the pooling stride.</p>
          <disp-formula id="eq6">
            <label>(6)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi><mo>=</mo><mi>σ</mi><mrow><mo stretchy="true" form="prefix">(</mo><mi>W</mi><mo>•</mo><mi>v</mi><mi>e</mi><mi>c</mi><mo stretchy="false" form="prefix">(</mo><mi>O</mi><mo stretchy="false" form="postfix">)</mo><mo>+</mo><mi>b</mi><mo stretchy="true" form="postfix">)</mo></mrow></mrow><annotation encoding="application/x-tex">y = \sigma\left( W \bullet vec(O) + b \right)</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <inline-formula><tex-math><![CDATA[y]]></tex-math></inline-formula> is the output vector; <inline-formula><tex-math><![CDATA[W]]></tex-math></inline-formula> is the weight matrix; <inline-formula><tex-math><![CDATA[vec(O)]]></tex-math></inline-formula> is the processed input feature vector; <inline-formula><tex-math><![CDATA[b]]></tex-math></inline-formula> is the bias vector.</p>
          <p>Support Vector Machines (SVM) is a commonly used classification method in machine learning, SVMs use a kernel function to map the data to a high-dimensional space, where they seek a hyperplane that maximizes the margin. This approach adapts to complex data distributions and improves classification accuracy; the mathematical expressions are given in Equations 7 through 11.</p>
          <disp-formula id="eq7">
            <label>(7)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><munder><mi mathvariant="normal">min</mi><mrow><mi>w</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>ε</mi></mrow></munder><mfrac><mn>1</mn><mn>2</mn></mfrac><msup><mrow><mo stretchy="false" form="postfix">∥</mo><mi>w</mi><mo stretchy="false" form="postfix">∥</mo></mrow><mn>2</mn></msup><mo>+</mo><mi>C</mi><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mrow></mrow><msub><mi>ε</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">\min_{w,b,\varepsilon}\frac{1}{2}{\| w\|}^{2} + C\sum_{i = 1}^{N}{}\varepsilon_{i}</annotation></semantics></math>
          </disp-formula>
          <disp-formula id="eq8">
            <label>(8)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>y</mi><mi>i</mi></msub><mrow><mo stretchy="true" form="prefix">(</mo><msup><mi>w</mi><mi>T</mi></msup><msub><mi>x</mi><mi>i</mi></msub><mo>+</mo><mi>b</mi><mo stretchy="true" form="postfix">)</mo></mrow><mo>≥</mo><mn>1</mn><mo>−</mo><msub><mi>ε</mi><mi>i</mi></msub><mo>,</mo><msub><mi>ε</mi><mi>i</mi></msub><mo>≥</mo><mn>0</mn><mo>,</mo><mo>∀</mo><mi>i</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mi>.</mi><mi>.</mi><mi>.</mi><mo>,</mo><mspace width="0.222em"></mspace><mi>N</mi></mrow><annotation encoding="application/x-tex">y_{i}\left( w^{T}x_{i} + b \right) \geq 1 - \varepsilon_{i},\varepsilon_{i} \geq 0,\forall i = 1,2,...,\ N</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <inline-formula><tex-math><![CDATA[w]]></tex-math></inline-formula> is the weight vector; <inline-formula><tex-math><![CDATA[b]]></tex-math></inline-formula> is the bias term; <inline-formula><tex-math><![CDATA[\varepsilon_{i}]]></tex-math></inline-formula> is the regularization term for the <inline-formula><tex-math><![CDATA[i]]></tex-math></inline-formula> th sample; <inline-formula><tex-math><![CDATA[C]]></tex-math></inline-formula> is the penalty parameter; <inline-formula><tex-math><![CDATA[x_{i}]]></tex-math></inline-formula> is the feature vector for the <inline-formula><tex-math><![CDATA[i]]></tex-math></inline-formula> th sample; <inline-formula><tex-math><![CDATA[y_{i}]]></tex-math></inline-formula> is the label for the <inline-formula><tex-math><![CDATA[i]]></tex-math></inline-formula> th sample.</p>
          <disp-formula id="eq9">
            <label>(9)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><munder><mi mathvariant="normal">max</mi><mi>α</mi></munder><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mrow></mrow><msub><mi>α</mi><mi>i</mi></msub><mo>−</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><munderover><mo>∑</mo><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mrow></mrow><msub><mi>α</mi><mi>i</mi></msub><msub><mi>α</mi><mi>j</mi></msub><msub><mi>y</mi><mi>i</mi></msub><msub><mi>y</mi><mi>j</mi></msub><mi>K</mi><mrow><mo stretchy="true" form="prefix">(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><msub><mi>x</mi><mi>j</mi></msub><mo stretchy="true" form="postfix">)</mo></mrow></mrow><annotation encoding="application/x-tex">\max_{\alpha}\sum_{i = 1}^{N}{}\alpha_{i} - \frac{1}{2}\sum_{i,j = 1}^{N}{}\alpha_{i}\alpha_{j}y_{i}y_{j}K\left( x_{i},x_{j} \right)</annotation></semantics></math>
          </disp-formula>
          <disp-formula id="eq10">
            <label>(10)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>≤</mo><msub><mi>α</mi><mi>i</mi></msub><mo>≤</mo><mi>C</mi><mo>,</mo><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mrow></mrow><msub><mi>α</mi><mi>i</mi></msub><msub><mi>y</mi><mi>i</mi></msub><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">0 \leq \alpha_{i} \leq C,\sum_{i = 1}^{N}{}\alpha_{i}y_{i} = 0</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <inline-formula><tex-math><![CDATA[\alpha_{i}]]></tex-math></inline-formula> is the Lagrange multiplier for the i th sample; <inline-formula><tex-math><![CDATA[K\left( x_{i},x_{j} \right)]]></tex-math></inline-formula> is the sum function.</p>
          <disp-formula id="eq11">
            <label>(11)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false" form="prefix">(</mo><mi>x</mi><mo stretchy="false" form="postfix">)</mo><mo>=</mo><mi>s</mi><mi>i</mi><mi>g</mi><mi>n</mi><mrow><mo stretchy="true" form="prefix">(</mo><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mrow></mrow><msub><mi>α</mi><mi>i</mi></msub><msub><mi>y</mi><mi>i</mi></msub><mi>K</mi><mrow><mo stretchy="true" form="prefix">(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><mi>x</mi><mo stretchy="true" form="postfix">)</mo></mrow><mo>+</mo><mi>b</mi><mo stretchy="true" form="postfix">)</mo></mrow></mrow><annotation encoding="application/x-tex">f(x) = sign\left( \sum_{i = 1}^{N}{}\alpha_{i}y_{i}K\left( x_{i},x \right) + b \right)</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: f(x) is the predicted class of sample <inline-formula><tex-math><![CDATA[x]]></tex-math></inline-formula>; <inline-formula><tex-math><![CDATA[sign( \bullet )]]></tex-math></inline-formula> is a symbolic function that outputs the classification result.</p>
          <p>The CNN-SVM model developed in this paper employs an alternating structure of two layers of convolutional and pooling operations to extract features, followed by an SVM for classification. Through convolutional and pooling operations, the CNN adaptively extracts highly representative feature vectors from the raw fault data; the SVM then constructs an optimal classification hyperplane based on these feature vectors to accurately identify fault types and output classification probabilities.</p>
        </sec>
        <sec id="sec8">
          <title>CNN-BiGRU Model</title>
          <p>The Gate-Recurrent Unit (GRU) is an improved type of recurrent neural network unit that controls information propagation via an update gate and a reset gate. their mathematical expressions are shown in Equations 12 through 15.</p>
          <disp-formula id="eq12">
            <label>(12)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>z</mi><mi>t</mi></msub><mo>=</mo><mi>σ</mi><mrow><mo stretchy="true" form="prefix">(</mo><msub><mi>W</mi><mi>z</mi></msub><msub><mi>x</mi><mi>t</mi></msub><mo>+</mo><msub><mi>U</mi><mi>z</mi></msub><msub><mi>h</mi><mrow><mi>t</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>b</mi><mi>z</mi></msub><mo stretchy="true" form="postfix">)</mo></mrow></mrow><annotation encoding="application/x-tex">z_{t} = \sigma\left( W_{z}x_{t} + U_{z}h_{t - 1} + b_{z} \right)</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <inline-formula><tex-math><![CDATA[z_{t}]]></tex-math></inline-formula> is the update gate vector, which controls the extent of the state update; <inline-formula><tex-math><![CDATA[W_{z}]]></tex-math></inline-formula>, <inline-formula><tex-math><![CDATA[U_{z}]]></tex-math></inline-formula> is the weight matrix of the update gate; <inline-formula><tex-math><![CDATA[b_{z}]]></tex-math></inline-formula> is the bias vector of the update gate; <inline-formula><tex-math><![CDATA[x_{t}]]></tex-math></inline-formula> is the input vector for the current time step; <inline-formula><tex-math><![CDATA[h_{t - 1}]]></tex-math></inline-formula> is the hidden state from the previous time step; <inline-formula><tex-math><![CDATA[\sigma(x)]]></tex-math></inline-formula> is the activation function.</p>
          <disp-formula id="eq13">
            <label>(13)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mi>t</mi></msub><mo>=</mo><mi>σ</mi><mrow><mo stretchy="true" form="prefix">(</mo><msub><mi>W</mi><mi>r</mi></msub><msub><mi>x</mi><mi>t</mi></msub><mo>+</mo><msub><mi>U</mi><mi>r</mi></msub><msub><mi>h</mi><mrow><mi>t</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>b</mi><mi>r</mi></msub><mo stretchy="true" form="postfix">)</mo></mrow></mrow><annotation encoding="application/x-tex">r_{t} = \sigma\left( W_{r}x_{t} + U_{r}h_{t - 1} + b_{r} \right)</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <inline-formula><tex-math><![CDATA[r_{t}]]></tex-math></inline-formula> is the reset gate vector; <inline-formula><tex-math><![CDATA[W_{r}]]></tex-math></inline-formula>, <inline-formula><tex-math><![CDATA[U_{r}]]></tex-math></inline-formula> is the reset gate weight matrix; <inline-formula><tex-math><![CDATA[b_{r}]]></tex-math></inline-formula> is the reset gate bias vector.</p>
          <disp-formula id="eq14">
            <label>(14)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mover><mi>h</mi><mo accent="true">̃</mo></mover><mi>t</mi></msub><mo>=</mo><mi>t</mi><mi>a</mi><mi>n</mi><mi>h</mi><mrow><mo stretchy="true" form="prefix">(</mo><msub><mi>W</mi><mi>h</mi></msub><msub><mi>x</mi><mi>t</mi></msub><mo>+</mo><msub><mi>U</mi><mi>h</mi></msub><mrow><mo stretchy="true" form="prefix">(</mo><msub><mi>r</mi><mi>t</mi></msub><mo>⨀</mo><msub><mi>h</mi><mrow><mi>t</mi><mo>−</mo><mn>1</mn></mrow></msub><mo stretchy="true" form="postfix">)</mo></mrow><mo>+</mo><msub><mi>b</mi><mi>h</mi></msub><mo stretchy="true" form="postfix">)</mo></mrow></mrow><annotation encoding="application/x-tex">{\widetilde{h}}_{t} = tanh\left( W_{h}x_{t} + U_{h}\left( r_{t}\bigodot h_{t - 1} \right) + b_{h} \right)</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <inline-formula><tex-math><![CDATA[{\widetilde{h}}_{t}]]></tex-math></inline-formula> is the candidate hidden state vector; <inline-formula><tex-math><![CDATA[W_{h}]]></tex-math></inline-formula>, <inline-formula><tex-math><![CDATA[U_{h}]]></tex-math></inline-formula> is the weight matrix for the candidate states; <inline-formula><tex-math><![CDATA[b_{h}]]></tex-math></inline-formula> is the bias vector for the candidate states.</p>
          <disp-formula id="eq15">
            <label>(15)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>h</mi><mi>t</mi></msub><mo>=</mo><mrow><mo stretchy="true" form="prefix">(</mo><mn>1</mn><mo>−</mo><msub><mi>z</mi><mi>t</mi></msub><mo stretchy="true" form="postfix">)</mo></mrow><mo>⨀</mo><msub><mi>h</mi><mrow><mi>t</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mi>z</mi><mi>t</mi></msub><mo>⨀</mo><msub><mover><mi>h</mi><mo accent="true">̃</mo></mover><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">h_{t} = \left( 1 - z_{t} \right)\bigodot h_{t - 1} + z_{t}\bigodot{\widetilde{h}}_{t}</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: <inline-formula><tex-math><![CDATA[h_{t}]]></tex-math></inline-formula> is the hidden state output at the current time step.</p>
          <p>The Bidirectional Gated Recurrent Unit (BiGRU) adds a backpropagation path to the standard GRU. This bidirectional structure is well-suited for handling such complex temporal dependencies. Its mathematical expressions are shown in Equations 16 to 18.</p>
          <disp-formula id="eq16">
            <label>(16)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mover><mi>h</mi><mo accent="true">→</mo></mover><mi>t</mi></msub><mo>=</mo><mrow><mo stretchy="true" form="prefix">(</mo><mn>1</mn><mo>−</mo><msub><mover><mi>z</mi><mo accent="true">→</mo></mover><mi>t</mi></msub><mo stretchy="true" form="postfix">)</mo></mrow><mo>⨀</mo><msub><mover><mi>h</mi><mo accent="true">→</mo></mover><mrow><mi>t</mi><mo>−</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mover><mi>z</mi><mo accent="true">→</mo></mover><mi>t</mi></msub><mo>⨀</mo><msub><mover><mover><mi>h</mi><mo accent="true">̃</mo></mover><mo accent="true">→</mo></mover><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">{\overrightarrow{h}}_{t} = \left( 1 - {\overrightarrow{z}}_{t} \right)\bigodot{\overrightarrow{h}}_{t - 1} + {\overrightarrow{z}}_{t}\bigodot{\overrightarrow{\widetilde{h}}}_{t}</annotation></semantics></math>
          </disp-formula>
          <disp-formula id="eq17">
            <label>(17)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mrow><mi>h</mi><mover><mrow></mrow><mo accent="true">⃖</mo></mover></mrow><mi>t</mi></msub><mo>=</mo><mrow><mo stretchy="true" form="prefix">(</mo><mn>1</mn><mo>−</mo><msub><mrow><mi>z</mi><mover><mrow></mrow><mo accent="true">⃖</mo></mover></mrow><mi>t</mi></msub><mo stretchy="true" form="postfix">)</mo></mrow><mo>⨀</mo><msub><mrow><mi>h</mi><mover><mrow></mrow><mo accent="true">⃖</mo></mover></mrow><mrow><mi>t</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mrow><mi>z</mi><mover><mrow></mrow><mo accent="true">⃖</mo></mover></mrow><mi>t</mi></msub><mo>⨀</mo><msub><mrow><mover><mi>h</mi><mo accent="true">̃</mo></mover><mover><mrow></mrow><mo accent="true">⃖</mo></mover></mrow><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">{h\overleftarrow{}}_{t} = \left( 1 - {z\overleftarrow{}}_{t} \right)\bigodot{h\overleftarrow{}}_{t + 1} + {z\overleftarrow{}}_{t}\bigodot{\widetilde{h}\overleftarrow{}}_{t}</annotation></semantics></math>
          </disp-formula>
          <disp-formula id="eq18">
            <label>(18)</label>
            <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>h</mi><mi>t</mi></msub><mo>=</mo><mrow><mo stretchy="true" form="prefix">[</mo><msub><mover><mi>h</mi><mo accent="true">→</mo></mover><mi>t</mi></msub><mo>;</mo><msub><mrow><mi>h</mi><mover><mrow></mrow><mo accent="true">⃖</mo></mover></mrow><mi>t</mi></msub><mo stretchy="true" form="postfix">]</mo></mrow></mrow><annotation encoding="application/x-tex">h_{t} = \left\lbrack {\overrightarrow{h}}_{t};{h\overleftarrow{}}_{t} \right\rbrack</annotation></semantics></math>
          </disp-formula>
          <p>In the equation: The parameters marked with <inline-formula><tex-math><![CDATA[\rightarrow , \leftarrow]]></tex-math></inline-formula> are those for the forward GRU and the backward GRU, respectively; <inline-formula><tex-math><![CDATA[h_{t}]]></tex-math></inline-formula> is the merged bidirectional hidden state.</p>
          <p>The CNN-BiGRU model developed in this paper consists of an alternating structure of two convolutional layers and pooling layers. The convolutional layers perform deep extraction of spatial features from array data by using convolutional kernels of different sizes. Based on the features in the CNN’s output, the number of channels in the BiGRU is determined to connect the CNN and BiGRU. The BiGRU layer then further captures the temporal and dynamic features of the data, helping the model better identify correlations among the data. The output layer uses the Softmax activation function to calculate the probability of each category corresponding to a given data set. Finally, the output layer outputs the model’s probability assessment of the sample type.</p>
          <p>During the integration process, the three base models are first trained and optimized to ensure that each model can independently produce accurate classification probabilities; subsequently, through multiple rounds of testing, the optimal weighting scheme is determined by evaluating metrics such as overall accuracy and recall.</p>
          <fig id="fig14">
            <label>Figure 14</label>
            <caption><p>Schematic diagram of the integration model.</p></caption>
            <graphic xlink:href="obj/7e/a1/7ea1481fa8660c4a12240da7a6b744cfc5345f74725bafd617f319c3b21ca545"/>
          </fig>
        </sec>
      </sec>
      <sec id="sec9">
        <title>Weighted Probability Averaging Layer</title>
        <p>The schematic diagram of the weighted average probability-based integration model proposed in this paper is presented in Figure 14. The data preprocessing layer processes raw data to convert it into a format that satisfies the requirements of the task. This model primarily employs normalization for the maximum power voltage and maximum power current. The base model layer consists of the integrated diagnostic models: DBN-ELM, CNN-SVM, and CNN-BiGRU. The weighted probability average calculation layer employs the weighted probability average ensemble learning algorithm to compute the weighted average of the sample type prediction probabilities generated by each base model in the base model layer. Specifically, this approach synthesizes the performance of each individual model across different samples, assigns an appropriate output weight accordingly, and identifies the type with the highest computed probability as the final prediction result. The detailed calculation is presented in Equation 19.</p>
        <disp-formula id="eq19">
          <label>(19)</label>
          <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>P</mi><mi>n</mi></msub><mo stretchy="false" form="prefix">(</mo><mi>x</mi><mo stretchy="false" form="postfix">)</mo><mo>=</mo><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>K</mi></munderover><mrow></mrow><msub><mi>ω</mi><mi>k</mi></msub><msub><mi>P</mi><mrow><mi>k</mi><mi>n</mi></mrow></msub><mo stretchy="false" form="prefix">(</mo><mi>x</mi><mo stretchy="false" form="postfix">)</mo></mrow><annotation encoding="application/x-tex">P_{n}(x) = \sum_{k = 1}^{K}{}\omega_{k}P_{kn}(x)</annotation></semantics></math>
        </disp-formula>
        <p>In the equation: <inline-formula><tex-math><![CDATA[K]]></tex-math></inline-formula> is the total number of base models; <inline-formula><tex-math><![CDATA[k]]></tex-math></inline-formula> is the model index, <inline-formula><tex-math><![CDATA[x]]></tex-math></inline-formula> is the sample number index, and n <inline-formula><tex-math><![CDATA[n]]></tex-math></inline-formula> denotes the operating conditions index; <inline-formula><tex-math><![CDATA[\omega_{k}]]></tex-math></inline-formula> is the weight assigned to the base model of index <inline-formula><tex-math><![CDATA[k]]></tex-math></inline-formula> ; <inline-formula><tex-math><![CDATA[P_{kn}(x)]]></tex-math></inline-formula> is the probability that the base model classifies sample <inline-formula><tex-math><![CDATA[k]]></tex-math></inline-formula> as type <inline-formula><tex-math><![CDATA[n]]></tex-math></inline-formula> ; and <inline-formula><tex-math><![CDATA[P_{n}(x)]]></tex-math></inline-formula> is the probability that the integrated model classifies sample <inline-formula><tex-math><![CDATA[x]]></tex-math></inline-formula> as type <inline-formula><tex-math><![CDATA[n]]></tex-math></inline-formula>.The final judgment result is calculated as shown in Equation 20.</p>
        <disp-formula id="eq20">
          <label>(20)</label>
          <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi><mo stretchy="false" form="prefix">(</mo><mi>x</mi><mo stretchy="false" form="postfix">)</mo><mo>=</mo><mi>m</mi><mi>a</mi><mi>x</mi><mspace width="0.222em"></mspace><msub><mi>P</mi><mi>n</mi></msub><mo stretchy="false" form="prefix">(</mo><mi>x</mi><mo stretchy="false" form="postfix">)</mo></mrow><annotation encoding="application/x-tex">E(x) = max\ P_{n}(x)</annotation></semantics></math>
        </disp-formula>
        <p>During the model ensemble phase, the three base models are first thoroughly trained and optimized. Through learning from a large dataset, we ensure that each model can independently and accurately output the probability of a sample’s class. Subsequently, through multiple rounds of comparative testing, different weighting schemes are validated on the test set. The optimal weights are determined by evaluating performance metrics such as overall accuracy and recall.</p>
        <p>The category probabilities output by each base model are then weighted and averaged according to the optimal weights, and the category with the highest weighted probability is selected as the final diagnostic result for the sample, thereby achieving accurate identification of photovoltaic faults.</p>
      </sec>
      <sec id="sec10">
        <title>Integrated Model Diagnostic Process</title>
        <p>The model diagnosis process is shown in Figure 15.</p>
        <list list-type="order">
          <list-item><p>Divide the collected dataset of output data from the off-grid PV system array into training and testing datasets in a 7:3 ratio;</p></list-item>
          <list-item><p>Normalize the training and testing datasets, scaling the data to the range [0,1];</p></list-item>
          <list-item><p>Set the initial model network parameters and construct the three basic diagnostic models;</p></list-item>
          <list-item><p>Train the three composite diagnostic models using the normalized training set, optimize the parameters, and complete feature extraction from the training data;</p></list-item>
          <list-item><p>After parameter optimization, calculate the loss value; when the loss value is minimized, save the current parameters, which represent the optimal state for each model;</p></list-item>
          <list-item><p>Ensemble the three composite diagnostic models in their optimal states using the weighted probability averaging algorithm to build the ensemble learning diagnostic model, then set the weight allocations;</p></list-item>
          <list-item><p>Finally, validate the model’s diagnostic performance on the normalized test set and output the performance evaluation results.</p></list-item>
        </list>
        <fig id="fig15">
          <label>Figure 15</label>
          <caption><p>Diagnostic process.</p></caption>
          <graphic xlink:href="obj/8b/d5/8bd56a899c4fe362765a1356b4459d6b5dda3e93db36673a02f4742899da9577"/>
        </fig>
      </sec>
    </sec>
    <sec id="sec11">
      <title>Model Testing and Evaluation</title>
      <sec id="sec12">
        <title>Evaluation Criteria</title>
        <p>To evaluate the performance of the fault diagnosis model for the PV array, this paper employs four widely recognized diagnostic evaluation metrics: accuracy, recall, precision, and the F1-Score. Accuracy is the proportion of correctly classified samples to the total number of samples, reflecting the overall classification accuracy of the model; Recall is the proportion of successfully predicted positive samples to all true positive samples, reflecting the model's ability to identify fault samples; Precision is the proportion of true positive samples to predict positive samples; F1-Score is the harmonic average of Recall and Precision, reflecting the reliability of the model's prediction results. The formula for calculating each indicator is shown in equations 21 to 24.</p>
        <disp-formula id="eq21">
          <label>(21)</label>
          <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mfrac><mrow><msub><mi>T</mi><mi>P</mi></msub><mo>+</mo><msub><mi>T</mi><mi>N</mi></msub></mrow><mrow><msub><mi>T</mi><mi>P</mi></msub><mo>+</mo><msub><mi>F</mi><mi>N</mi></msub><mo>+</mo><msub><mi>F</mi><mi>P</mi></msub><mo>+</mo><msub><mi>T</mi><mi>N</mi></msub></mrow></mfrac></mrow><annotation encoding="application/x-tex">A = \frac{T_{P} + T_{N}}{T_{P} + F_{N} + F_{P} + T_{N}}</annotation></semantics></math>
        </disp-formula>
        <disp-formula id="eq22">
          <label>(22)</label>
          <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>R</mi><mo>=</mo><mfrac><msub><mi>T</mi><mi>P</mi></msub><mrow><msub><mi>T</mi><mi>P</mi></msub><mo>+</mo><msub><mi>F</mi><mi>N</mi></msub></mrow></mfrac></mrow><annotation encoding="application/x-tex">R = \frac{T_{P}}{T_{P} + F_{N}}</annotation></semantics></math>
        </disp-formula>
        <disp-formula id="eq23">
          <label>(23)</label>
          <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>P</mi><mo>=</mo><mfrac><msub><mi>T</mi><mi>P</mi></msub><mrow><msub><mi>T</mi><mi>P</mi></msub><mo>+</mo><msub><mi>F</mi><mi>P</mi></msub></mrow></mfrac></mrow><annotation encoding="application/x-tex">P = \frac{T_{P}}{T_{P} + F_{P}}</annotation></semantics></math>
        </disp-formula>
        <disp-formula id="eq24">
          <label>(24)</label>
          <math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>F</mi><mn>1</mn></msub><mo>=</mo><mfrac><mrow><mn>2</mn><mo>×</mo><mi>P</mi><mo>×</mo><mi>R</mi></mrow><mrow><mi>P</mi><mo>+</mo><mi>R</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">F_{1} = \frac{2 \times P \times R}{P + R}</annotation></semantics></math>
        </disp-formula>
        <p>In the equation: <inline-formula><tex-math><![CDATA[A]]></tex-math></inline-formula> is the accuracy rate; <inline-formula><tex-math><![CDATA[R]]></tex-math></inline-formula> is the recall rate; <inline-formula><tex-math><![CDATA[P]]></tex-math></inline-formula> is the precision; <inline-formula><tex-math><![CDATA[F_{1}]]></tex-math></inline-formula> is the F1-Score; <inline-formula><tex-math><![CDATA[T_{P}]]></tex-math></inline-formula> refers to the number of samples in which faulty samples are correctly identified as faulty; <inline-formula><tex-math><![CDATA[T_{N}]]></tex-math></inline-formula> refers to the number of samples in which normal samples are correctly identified as normal; <inline-formula><tex-math><![CDATA[F_{P}]]></tex-math></inline-formula> refers to the number of samples in which faulty samples are incorrectly classified as normal; <inline-formula><tex-math><![CDATA[F_{N}]]></tex-math></inline-formula> refers to the number of samples in which normal samples are incorrectly classified as faulty.</p>
        <p>The performance of the integrated model is significantly influenced by key parameters, primarily including the dataset split ratio, the hyperparameters of each base model network, and the weight allocation among models. This study trained the model using the 2,800 training samples described earlier. Through multiple rounds of iterative experiments and parameter tuning, the optimal values for each parameter were determined: the dataset was split into a 7:3 training-to-test ratio to ensure both sufficient model learning and the validity of generalization capability assessments; the hyperparameters of the base models were optimized via grid search and cross-validation; and the ensemble weights were dynamically adjusted based on test set performance. The final optimized values for each parameter are detailed in Table 5.</p>
        <table-wrap id="tbl5">
          <label>Table 5</label>
          <caption><p>Diagnostic Model Parameters.</p></caption>
          <table>
            <thead>
              <tr>
                <th colspan="2"><bold>Model Structure</bold></th>
                <th><bold>Parameter</bold></th>
                <th><bold>Description</bold></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td rowspan="3" colspan="2">Data Preprocessing Layer</td>
                <td>Training set : Test set ratio</td>
                <td>7:3</td>
              </tr>
              <tr>
                <td>Data type</td>
                <td>8</td>
              </tr>
              <tr>
                <td>Data length</td>
                <td>4000</td>
              </tr>
              <tr>
                <td rowspan="13">Base Model Layer</td>
                <td rowspan="3">DBN-ELM Model</td>
                <td>DBN hidden layer 1</td>
                <td>Number of neurons: 20</td>
              </tr>
              <tr>
                <td>DBN hidden layer 2</td>
                <td>Number of neurons: 20</td>
              </tr>
              <tr>
                <td>ELM hidden layer</td>
                <td>Number of neurons: 41</td>
              </tr>
              <tr>
                <td rowspan="5">CNN-BiGRU Model</td>
                <td>Convolutional layer 1</td>
                <td>Number of kernels: 16; Kernel size: 2×1; Input channels per kernel: 1; Stride: 1</td>
              </tr>
              <tr>
                <td>Pooling layer 1</td>
                <td>Size: 2×1; Stride: 1</td>
              </tr>
              <tr>
                <td>Convolutional layer 2</td>
                <td>Number of kernels: 32; Kernel size: 2×1; Input channels per kernel: 16; Stride: 1</td>
              </tr>
              <tr>
                <td>Pooling layer 2</td>
                <td>Size: 2×1; Stride: 1</td>
              </tr>
              <tr>
                <td>BiGRU layer</td>
                <td>Forward GRU hidden units: 4; Backward GRU hidden units: 4</td>
              </tr>
              <tr>
                <td rowspan="5">CNN-SVM Model</td>
                <td>Convolutional layer 1</td>
                <td>Number of kernels: 32; Kernel size: 3×1; Input channels per kernel: 1; Stride: 1</td>
              </tr>
              <tr>
                <td>Pooling layer 1</td>
                <td>Size: 2×1; Stride: 1</td>
              </tr>
              <tr>
                <td>Convolutional layer 2</td>
                <td>Number of kernels: 32; Kernel size: 2×1; Input channels per kernel: 32; Stride: 1</td>
              </tr>
              <tr>
                <td>Pooling layer 2</td>
                <td>Size: 2×1; Stride: 1</td>
              </tr>
              <tr>
                <td>SVM layer</td>
                <td>Kernel function: Sigmoid function</td>
              </tr>
              <tr>
                <td colspan="2">Weighted Probability</td>
                <td>Weight distribution ratio</td>
                <td>CNN-SVM : CNN-BiGRU : DBN-ELM = 5 : 4 : 1</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>After several iterations of training and experimental adjustments, the debugged integrated diagnostic model was employed to diagnose fault samples in the designated test dataset. The four evaluation metrics achieved an accuracy of 99 %, as shown in Figure 16. The confusion matrix for the diagnostic model shows that only 0.67% of the samples were misclassified when distinguishing between a single array aging failure (Label 3) and a concurrent failure involving both component shading and array aging (Label 7).</p>
        <fig id="fig16">
          <label>Figure 16</label>
          <caption><p>Confusion matrix for the integrated model.</p></caption>
          <graphic xlink:href="obj/ff/39/ff39852e2ac83dc170fd838ca0571bd6a5ed2f21db47587147296972f269a52b"/>
        </fig>
        <p>Comparative performance tests were also conducted between the integrated model and several other models, and the results demonstrated that the integrated model significantly outperformed the others, as illustrated in Figure 17.</p>
        <fig id="fig17">
          <label>Figure 17</label>
          <caption><p>Comparison of evaluation indicators.</p></caption>
          <graphic xlink:href="obj/99/0d/990d331a6833d449217a89fea684e23009c38b0aa7ab7b76accb8cf899635c37"/>
        </fig>
        <p>A systematic comparative analysis was conducted between the integrated model and the five fault diagnosis models mentioned. During the experiments, the overall evaluation metrics for each model and the sub-metrics for each fault category were calculated. The results show that, under the same dataset and testing conditions, the overall diagnostic accuracy rates for the five models—CNN, CNN-LSTM, DBN-ELM, CNN-BiGRU, and CNN-SVM—were 84.3 %, 86.4 %, 90.8 %, 92.3 %, and 94.7%, respectively. The performance of the ensemble model is significantly better than that of a single model.</p>
      </sec>
      <sec id="sec13">
        <title>Experimental verification</title>
        <p>The integrated diagnostic model developed in this paper was applied to a small-scale, standalone off-grid photovoltaic experimental system to comprehensively evaluate the model’s performance under actual operating conditions. The performance evaluation adopted a modular design approach, integrating photovoltaic array power generation, fault simulation, and data acquisition into a single system. Data collection spanned a period of three months, and the collected data was used to conduct a comprehensive assessment of the integrated diagnostic model’s performance.</p>
        <p>By applying the integrated diagnostic model to the small-scale, standalone off-grid photovoltaic experimental system that has been constructed as shown in Figure 18, this study aims to comprehensively evaluate the model’s performance under actual operating conditions. The performance evaluation adopts a modular design approach, integrating photovoltaic array power generation, fault simulation, and data acquisition into a single system. Data collection spanned a period of three months, and the collected data was used to conduct a comprehensive assessment of the integrated diagnostic model’s performance.</p>
        <fig id="fig18">
          <label>Figure 18</label>
          <caption><p>Photovoltaic array.</p></caption>
          <graphic xlink:href="obj/69/95/699554569655c2db82312f8a452ba34edeeaa003a6fc622d781635b2e5c401c3"/>
        </fig>
        <p>The fault simulation device comprises four single-fault modules and three concurrent-fault modules. The four single-fault configurations are shown in figure 19, and their specific construction and operating principles are as follows: Surface shading simulation is achieved by partially obscuring the photovoltaic module with a cardboard sheet having 0% light transmittance; the shaded area can be flexibly adjusted within the range of 30% to 90%. Module short-circuit simulation is achieved by directly shorting the module’s positive and negative terminals using a double-ended shorting lead; String open-circuit simulation is achieved by disconnecting the wiring of a single PV string; array aging simulation is performed by connecting a sliding resistor in series within the array and adjusting its resistance to simulate varying degrees of aging and The three concurrent fault simulations are based on the integration of the aforementioned single-fault modules. By simultaneously triggering multiple fault types, they simulate complex fault scenarios encountered during actual operation.</p>
        <fig id="fig19">
          <label>Figure 19</label>
          <caption><p>Array Failure Settings.</p></caption>
          <graphic xlink:href="obj/ae/de/aede91e1505905c966cb36473c238bb2550afbca6c132e7c77669c53d9e0bbd5"/>
        </fig>
        <p>During data collection, with the photovoltaic array left unchanged under both sunny and cloudy conditions, modules representing seven different fault states were introduced, and the data acquisition system recorded the readings. Data was collected at 15-minute intervals. A portion of the collected data is shown in the Table 6.</p>
        <table-wrap id="tbl6">
          <label>Table 6</label>
          <caption><p>Application Results</p></caption>
          <table>
            <thead>
              <tr>
                <th></th>
                <th><bold>Accuracy rate /%</bold></th>
                <th><bold>Recall rate/%</bold></th>
                <th><bold>Accuracy /%</bold></th>
                <th><bold>F1score/%</bold></th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>overall</td>
                <td>96.5</td>
                <td>96.7</td>
                <td>98.7</td>
                <td>97.7</td>
              </tr>
              <tr>
                <td>label1</td>
                <td>100.0</td>
                <td>100.0</td>
                <td>100.0</td>
                <td>100.0</td>
              </tr>
              <tr>
                <td>label2</td>
                <td>98.3</td>
                <td>98.3</td>
                <td>100.0</td>
                <td>99.2</td>
              </tr>
              <tr>
                <td>label3</td>
                <td>93.3</td>
                <td>93.3</td>
                <td>100.0</td>
                <td>96.6</td>
              </tr>
              <tr>
                <td>label4</td>
                <td>100.0</td>
                <td>100.0</td>
                <td>100.0</td>
                <td>100.0</td>
              </tr>
              <tr>
                <td>label5</td>
                <td>100.0</td>
                <td>100.0</td>
                <td>100.0</td>
                <td>100.0</td>
              </tr>
              <tr>
                <td>label6</td>
                <td>100.0</td>
                <td>100.0</td>
                <td>98.4</td>
                <td>99.2</td>
              </tr>
              <tr>
                <td>label7</td>
                <td>80.0</td>
                <td>80.0</td>
                <td>92.3</td>
                <td>85.7</td>
              </tr>
              <tr>
                <td>label8</td>
                <td>100.0</td>
                <td>100.0</td>
                <td>100.0</td>
                <td>100.0</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>The integrated fault diagnosis model, which leverages multi-source data fusion, maintains high accuracy and strong robustness in real-world environments, achieving an overall diagnostic accuracy rate of 96.5%—a decrease of only 2.5 percentage points compared to simulation environments. The model demonstrates excellent adaptability to complex operating conditions and equipment anomalies, providing reliable technical support for the operation and maintenance of off-grid photovoltaic systems.</p>
      </sec>
    </sec>
    <sec id="sec14">
      <title>5．Conclusion</title>
      <p>This paper addresses the fault diagnosis problem of photovoltaic arrays by constructing an 8-label classification system and analyzing corresponding output characteristics. A fault diagnosis method is proposed for photovoltaic arrays based on a weighted probabilistic averaging ensemble model. This method achieves a high recognition rate for photovoltaic array faults as validated by experiments. The main conclusions are as follows:</p>
      <list list-type="order">
        <list-item><p>A fault dataset containing 4000 samples was constructed, with the training set and test set divided in a 7:3 ratio. Specifically, the training set consisted of 2800 samples, while the test set contained 1200 samples. For each of the eight operating conditions, there were 350 samples in the training set and 150 samples in the test set.</p></list-item>
        <list-item><p>A photovoltaic array fault diagnosis model based on the weighted probability average ensemble learning algorithm is constructed. The model integrates the advantages of CNN-SVM, CNN-BiGRU, and DBN-ELM three base models, and by weighting and summing the judgment probabilities of the outputs of these three base models, the fault type with the highest weighted probability sum is finally determined as the diagnosis result.</p></list-item>
        <list-item><p>Accuracy, recall, precision, and F1-Score were selected as effective evaluation metrics for the model. The proposed diagnostic model achieved a score of 99.0% on all four metrics, demonstrating a high level of accuracy in identifying both single and multiple faults.</p></list-item>
        <list-item><p>The diagnostic model proposed in this paper achieves a high diagnostic accuracy rate of 96.5% in actual off-grid photovoltaic systems, which is only 2.5 percentage points lower than its performance on simulated data, fully validating its feasibility and practicality in real-world applications.</p></list-item>
      </list>
    </sec>
  </body>
  <back>
    <ack><p>This research was supported by National Key R&amp;D Program of China (2023YFC3806100).</p></ack>
    <fn-group>
      <fn fn-type="con"><p>&lt;strong&gt;Chunmei Guo&lt;/strong&gt;: Conceptualisation: Developed the overarching themes and objectives of the manuscript. &lt;strong&gt;Weijin Sun&lt;/strong&gt;: Writing – Original Draft: Wrote the initial manuscript draft, including key sections. &lt;strong&gt;Yang Li&lt;/strong&gt;: Data Curation: Organized and synthesised data from selected studies for inclusion in the manuscript. &lt;strong&gt;Yuwen You&lt;/strong&gt;: Methodology: Designed the review framework and criteria for literature selection. &lt;strong&gt;Zhonglu He&lt;/strong&gt;: Writing – Review &amp; Editing: Assisted in editing and refining the final manuscript, ensuring accuracy and completeness</p></fn>
      <fn fn-type="conflict"><p>The authors declare that they have no known competing financial interests or personal relationships that could have appeared to influence the work reported in this paper.</p></fn>
      <fn fn-type="data-availability"><p>The raw experimental data, MATLAB simulation codes and parametric calculation files supporting the findings of this study are available from the corresponding author upon reasonable request.</p></fn>
      <fn fn-type="ethics"><p>Ethical approval is not applicable as this work contains no human or animal related experiments.</p></fn>
      <fn fn-type="editorial-independence"><p>All research work in this paper was completed independently by the authors. No editors or editorial staff intervened in the design, experiment, simulation and writing of this study.</p></fn>
    </fn-group>
    <ref-list>
      <ref id="ref-r2">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Ali</string-name>
            <string-name>Y.M., Ding</string-name>
            <string-name>L., Qin</string-name>
            <string-name>S.</string-name>
          </person-group>
          <article-title>An efficient approach for diagnosing faults in photovoltaic array using 1D-CNN and feature selection Techniques</article-title>
          <source>International Journal of Electrical Power &amp; Energy Systems</source>
          <year>2025</year>
          <volume>166</volume>
          <page-range>110526</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.ijepes.2025.110526</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r1">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Aljafari</string-name>
            <string-name>B., Satpathy</string-name>
            <string-name>P.R., Thanikanti</string-name>
            <string-name>S.B., Nwulu</string-name>
            <string-name>N.</string-name>
          </person-group>
          <article-title>Supervised classification and fault detection in grid-connected PV systems using 1D-CNN: Simulation and real-time validation</article-title>
          <source>Energy Reports</source>
          <year>2024</year>
          <volume>12</volume>
          <page-range>2156-2178</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.egyr.2024.08.008</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r3">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Aziz</string-name>
            <string-name>F., Ul Haq</string-name>
            <string-name>A., Ahmad</string-name>
            <string-name>S., Mahmoud</string-name>
            <string-name>Y., Jalal</string-name>
            <string-name>M., Ali</string-name>
            <string-name>U.</string-name>
          </person-group>
          <article-title>A Novel Convolutional Neural Network-Based Approach for Fault Classification in Photovoltaic Arrays</article-title>
          <source>IEEE Access</source>
          <year>2020</year>
          <volume>8</volume>
          <page-range>41889-41904</page-range>
          <publisher-name>Institute of Electrical and Electronics Engineers (IEEE)</publisher-name>
          <pub-id pub-id-type="doi">10.1109/ACCESS.2020.2977116</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r4">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Fu</string-name>
            <string-name>H., Liu</string-name>
            <string-name>H., Xie</string-name>
            <string-name>S., Liu</string-name>
            <string-name>S., Han</string-name>
            <string-name>H., Ma</string-name>
            <string-name>J.</string-name>
          </person-group>
          <article-title>Multi-coupling fault detection and diagnosis of photovoltaic arrays with improved slime mould algorithm and PolyCatBoost</article-title>
          <source>Process Safety and Environmental Protection</source>
          <year>2025</year>
          <volume>194</volume>
          <page-range>523-541</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.psep.2024.11.135</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r5">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Gao</string-name>
            <string-name>X.</string-name>
            <string-name>Qian, Y</string-name>
          </person-group>
          <article-title>Fault diagnosis of photovoltaic arrays based on VMD-SABO-KELM</article-title>
          <source>Information Technology and Informatization</source>
          <year>2024</year>
        </element-citation>
      </ref>
      <ref id="ref-r6">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Hajji</string-name>
            <string-name>M., Harkat</string-name>
            <string-name>M.F., Kouadri</string-name>
            <string-name>A., Abodayeh</string-name>
            <string-name>K., Mansouri</string-name>
            <string-name>M., Nounou</string-name>
            <string-name>H., Nounou</string-name>
            <string-name>M.</string-name>
          </person-group>
          <article-title>Multivariate feature extraction based supervised machine learning for fault detection and diagnosis in photovoltaic systems</article-title>
          <source>European Journal of Control</source>
          <year>2021</year>
          <volume>59</volume>
          <page-range>313-321</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.ejcon.2020.03.004</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r7">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Karmacharya</string-name>
            <string-name>I., Gokaraju</string-name>
            <string-name>R.</string-name>
          </person-group>
          <article-title>Fault Location in Ungrounded Photovoltaic System Using Wavelets and ANN</article-title>
          <source>2019 IEEE Power &amp; Energy Society General Meeting (PESGM)</source>
          <year>2018</year>
          <page-range>1-1</page-range>
          <publisher-name>IEEE</publisher-name>
          <pub-id pub-id-type="doi">10.1109/PESGM40551.2019.8973821</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r8">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Lin</string-name>
            <string-name>P., Guo</string-name>
            <string-name>F., Lu</string-name>
            <string-name>X., Zheng</string-name>
            <string-name>Q., Cheng</string-name>
            <string-name>S., Lin</string-name>
            <string-name>Y., Chen</string-name>
            <string-name>Z., Wu</string-name>
            <string-name>L., Qian</string-name>
            <string-name>Z.</string-name>
          </person-group>
          <article-title>A compound fault diagnosis model for photovoltaic array based on 1D VoVNet-SVDD by considering unknown faults</article-title>
          <source>Solar Energy</source>
          <year>2024</year>
          <volume>267</volume>
          <page-range>112155</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.solener.2023.112155</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r9">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Liu</string-name>
            <string-name>Y., Ding</string-name>
            <string-name>K., Zhang</string-name>
            <string-name>J., Li</string-name>
            <string-name>Y., Yang</string-name>
            <string-name>Z., Zheng</string-name>
            <string-name>W., Chen</string-name>
            <string-name>X.</string-name>
          </person-group>
          <article-title>Fault diagnosis approach for photovoltaic array based on the stacked auto-encoder and clustering with I-V curves</article-title>
          <source>Energy Conversion and Management</source>
          <year>2021</year>
          <volume>245</volume>
          <page-range>114603</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.enconman.2021.114603</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r11">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Lu, Xiaoyang</string-name>
            <string-name>Lin, Yaohai</string-name>
            <string-name>Lin, Peijie</string-name>
            <string-name>He, Xiangjian</string-name>
            <string-name>Fang, Gengfa</string-name>
            <string-name>Cheng, Shuying</string-name>
            <string-name>Chen, Zhicong</string-name>
            <string-name>Wu, Lijun</string-name>
          </person-group>
          <article-title>Efficient fault diagnosis approach for solar photovoltaic array using a convolutional neural network in combination of generative adversarial network under small dataset</article-title>
          <source>Solar Energy</source>
          <year>2023</year>
          <volume>253</volume>
          <page-range>360-374</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.solener.2022.12.037</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r10">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Lu</string-name>
            <string-name>S.D., Liu</string-name>
            <string-name>H.D., Wang</string-name>
            <string-name>M.H., Wu</string-name>
            <string-name>C.C.</string-name>
          </person-group>
          <article-title>A novel strategy for multitype fault diagnosis in photovoltaic systems using multiple regression analysis and support vector machines</article-title>
          <source>Energy Reports</source>
          <year>2024</year>
          <volume>12</volume>
          <page-range>2824-2844</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.egyr.2024.08.074</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r12">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Mustafa, Zain</string-name>
            <string-name>Awad, Ahmed S.A.</string-name>
            <string-name>Azzouz, Maher</string-name>
            <string-name>Azab, Ahmed</string-name>
          </person-group>
          <article-title>Fault identification for photovoltaic systems using a multi-output deep learning approach</article-title>
          <source>Expert Systems with Applications</source>
          <year>2023</year>
          <volume>211</volume>
          <page-range>118551</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.eswa.2022.118551</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r13">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Patthi</string-name>
            <string-name>S., Murali Krishna</string-name>
            <string-name>V., Reddy</string-name>
            <string-name>L., Arandhakar</string-name>
            <string-name>S.</string-name>
          </person-group>
          <article-title>Photovoltaic string fault optimization using multi-layer neural network technique</article-title>
          <source>Results in Engineering</source>
          <year>2024</year>
          <volume>22</volume>
          <page-range>102299</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.rineng.2024.102299</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r14">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Turhal</string-name>
            <string-name>U.C., Onal</string-name>
            <string-name>Y., Turhal</string-name>
            <string-name>K.</string-name>
          </person-group>
          <article-title>Enhanced Fault Detection and Diagnosis in Photovoltaic Arrays Using a Hybrid NCA-CNN Model</article-title>
          <source>Computer Modeling in Engineering &amp; Sciences</source>
          <year>2025</year>
          <volume>143</volume>
          <issue>2</issue>
          <page-range>2307-2332</page-range>
          <publisher-name>Tech Science Press</publisher-name>
          <pub-id pub-id-type="doi">10.32604/cmes.2025.064269</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r15">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Voutsinas</string-name>
            <string-name>S., Karolidis</string-name>
            <string-name>D., Voyiatzis</string-name>
            <string-name>I., Samarakou</string-name>
            <string-name>M.</string-name>
          </person-group>
          <article-title>Development of a multi-output feed-forward neural network for fault detection in Photovoltaic Systems</article-title>
          <source>Energy Reports</source>
          <year>2022</year>
          <volume>8</volume>
          <page-range>33-42</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.egyr.2022.06.107</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r16">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Wang</string-name>
            <string-name>X.x., Dong</string-name>
            <string-name>L., Liu</string-name>
            <string-name>S.y., Hao</string-name>
            <string-name>Y., Wang</string-name>
            <string-name>B.</string-name>
          </person-group>
          <article-title>A Fault Classification Method of Photovoltaic Array Based on Probabilistic Neural Network</article-title>
          <source>2019 Chinese Control And Decision Conference (CCDC)</source>
          <year>2019</year>
          <page-range>5260-5265</page-range>
          <publisher-name>IEEE</publisher-name>
          <pub-id pub-id-type="doi">10.1109/CCDC.2019.8832338</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r17">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Yahyaoui</string-name>
            <string-name>Z., Hajji</string-name>
            <string-name>M., Mansouri</string-name>
            <string-name>M., Kouadri</string-name>
            <string-name>A., Bouzrara</string-name>
            <string-name>K., Nounou</string-name>
            <string-name>H.</string-name>
          </person-group>
          <article-title>Enhancing Fault Diagnosis of Uncertain Grid-Connected Photovoltaic Systems using Deep GRU-based Bayesian optimization</article-title>
          <source>IFAC-PapersOnLine</source>
          <year>2024</year>
          <volume>58</volume>
          <issue>4</issue>
          <page-range>449-454</page-range>
          <publisher-name>Elsevier BV</publisher-name>
          <pub-id pub-id-type="doi">10.1016/j.ifacol.2024.07.259</pub-id>
        </element-citation>
      </ref>
      <ref id="ref-r18">
        <element-citation publication-type="journal">
          <person-group person-group-type="author">
            <string-name>Zhong</string-name>
            <string-name>S., Chen</string-name>
            <string-name>Z., Wu, L</string-name>
          </person-group>
          <article-title>Fault diagnosis of photovoltaic arrays based on an improved SqueezeNet</article-title>
          <source>Power Electronics Technology</source>
          <year>2024</year>
        </element-citation>
      </ref>
    </ref-list>
  </back>
</article>
