<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article">
 <front>
  <journal-meta>
   <journal-id journal-id-type="publisher-id">
    ojop
   </journal-id>
   <journal-title-group>
    <journal-title>
     Open Journal of Optimization
    </journal-title>
   </journal-title-group>
   <issn pub-type="epub">
    2325-7105
   </issn>
   <issn publication-format="print">
    2325-7091
   </issn>
   <publisher>
    <publisher-name>
     Scientific Research Publishing
    </publisher-name>
   </publisher>
  </journal-meta>
  <article-meta>
   <article-id pub-id-type="doi">
    10.4236/ojop.2025.142005
   </article-id>
   <article-id pub-id-type="publisher-id">
    ojop-143618
   </article-id>
   <article-categories>
    <subj-group subj-group-type="heading">
     <subject>
      Articles
     </subject>
    </subj-group>
    <subj-group subj-group-type="Discipline-v2">
     <subject>
      Computer Science 
     </subject>
     <subject>
       Communications, Engineering, Physics 
     </subject>
     <subject>
       Mathematics
     </subject>
    </subj-group>
   </article-categories>
   <title-group>
    Tabu Search Technique for Optimisation of Biomass Waste to Energy Technology
   </title-group>
   <contrib-group>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       David
      </surname>
      <given-names>
       Makumbi
      </given-names>
     </name>
    </contrib>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       Afam
      </surname>
      <given-names>
       Uzorka
      </given-names>
     </name>
    </contrib>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       John Kelechi
      </surname>
      <given-names>
       Ukagwu
      </given-names>
     </name>
    </contrib>
   </contrib-group> 
   <aff id="affnull">
    <addr-line>
     aDepartment of Physical Sciences, Kampala International University, Kampala, Uganda
    </addr-line> 
   </aff> 
   <pub-date pub-type="epub">
    <day>
     13
    </day> 
    <month>
     06
    </month>
    <year>
     2025
    </year>
   </pub-date> 
   <volume>
    14
   </volume> 
   <issue>
    02
   </issue>
   <fpage>
    63
   </fpage>
   <lpage>
    92
   </lpage>
   <history>
    <date date-type="received">
     <day>
      28,
     </day>
     <month>
      March
     </month>
     <year>
      2025
     </year>
    </date>
    <date date-type="published">
     <day>
      24,
     </day>
     <month>
      March
     </month>
     <year>
      2025
     </year> 
    </date> 
    <date date-type="accepted">
     <day>
      24,
     </day>
     <month>
      June
     </month>
     <year>
      2025
     </year> 
    </date>
   </history>
   <permissions>
    <copyright-statement>
     © Copyright 2014 by authors and Scientific Research Publishing Inc. 
    </copyright-statement>
    <copyright-year>
     2014
    </copyright-year>
    <license>
     <license-p>
      This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/
     </license-p>
    </license>
   </permissions>
   <abstract>
    The Tabu Search heuristic can be used to optimise the WET (waste to energy technology). Developments were made to the basic Tabu Search to adapt it to the optimisation problem. This paper explains the contribution made in development of the adaptations to the basic Tabu Search. The principle of Tabu Search is explained, followed by the statement of the optimisation problem, the description of the optimisation of WET is given, the Tabu Search algorithm is described and the experiments and results are discussed. It was found out that initial thresholds of infeasibility should be set and these should be varied during the optimisation. The multi-objective, multi-period function should be evaluated on a Pareto incumbent front. Different strategies should be used for minimisation of cost and minimisation of infeasibility, and diversification should be done by performing random restarts with the incumbent solution.
   </abstract>
   <kwd-group> 
    <kwd>
     Tabu Search
    </kwd> 
    <kwd>
      Optimization
    </kwd> 
    <kwd>
      WET
    </kwd> 
    <kwd>
      Technique
    </kwd>
   </kwd-group>
  </article-meta>
 </front>
 <body>
  <sec id="s1">
   <title>1. Introduction</title>
   <p>The global pursuit of sustainable energy solutions has intensified the need to harness renewable resources more efficiently. One promising approach is the conversion of biomass waste into usable energy, a process that not only provides an alternative energy source but also addresses environmental concerns related to waste management. Optimising the operation of Waste-to-Energy Technologies (WET) is a complex yet critical task that involves managing multiple objectives, such as minimising operational costs, reducing environmental impact, and maximising energy yield. The WET optimisation problem, therefore, requires careful consideration of diverse factors across multiple time periods and under varying constraints of feasibility.</p>
   <p>This paper explores the application and adaptation of the Tabu Search (TS) heuristic to optimise the WET system. Before describing the principle of Tabu Search, the terms used to describe the Tabu Search are defined. A heuristic is an iterative rule used to find an optimum solution that terminates as soon as no immediately accessible solutions can improve the incumbent solution <xref ref-type="bibr" rid="scirp.143618-1">
     [1]
    </xref>-<xref ref-type="bibr" rid="scirp.143618-3">
     [3]
    </xref>. A metaheuristic is a master strategy that modifies other heuristics, to produce solutions beyond those that are generated when searching a local optimum <xref ref-type="bibr" rid="scirp.143618-3">
     [3]
    </xref>-<xref ref-type="bibr" rid="scirp.143618-5">
     [5]
    </xref>. As such, Tabu Search is a meta-heuristic <xref ref-type="bibr" rid="scirp.143618-6">
     [6]
    </xref>-<xref ref-type="bibr" rid="scirp.143618-8">
     [8]
    </xref>, which guides a local heuristic search procedure to explore the solution space beyond a local optimum <xref ref-type="bibr" rid="scirp.143618-3">
     [3]
    </xref> <xref ref-type="bibr" rid="scirp.143618-9">
     [9]
    </xref> <xref ref-type="bibr" rid="scirp.143618-10">
     [10]
    </xref>.</p>
   <p>In Tabu Search, the optimisation problem is formulated as <xref ref-type="bibr" rid="scirp.143618-8">
     [8]
    </xref>:</p>
   <p>minimize 
    <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
      <mi>
        f 
      </mi> 
      <mrow> 
       <mo>
         ( 
       </mo> 
       <mi>
         u 
       </mi> 
       <mo>
         ) 
       </mo> 
      </mrow> 
      <mo> 
      </mo> 
      <mo>
        : 
      </mo> 
      <mi>
        u 
      </mi> 
      <mo>
        ∈ 
      </mo> 
      <mi>
        U 
      </mi> 
      <mo>
        , 
      </mo> 
     </mrow> 
    </math> (1)</p>
   <p>where f(u) is the objective function, and u is selected from a set of constraints U. A move n leads from one solution to the next. The move is defined as <xref ref-type="bibr" rid="scirp.143618-8">
     [8]
    </xref>:</p>
   <p>
    <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
      <mi>
        n 
      </mi> 
      <mo> 
      </mo> 
      <mo>
        : 
      </mo> 
      <mi>
        U 
      </mi> 
      <mrow> 
       <mo>
         ( 
       </mo> 
       <mi>
         n 
       </mi> 
       <mo>
         ) 
       </mo> 
      </mrow> 
      <mo>
        → 
      </mo> 
      <mi>
        U 
      </mi> 
      <mo>
        . 
      </mo> 
     </mrow> 
    </math> (2)</p>
   <p>The moves n 
    <math xmlns="http://www.w3.org/1998/Math/MathML"> <mo>
       ∈ 
     </mo> 
    </math> Ɲ that can be applied to u form a set denoted by Ɲ(u), and termed the neighbourhood of u <xref ref-type="bibr" rid="scirp.143618-8">
     [8]
    </xref>. A characteristic of the Tabu Search is to Ɲ constrain the search by restricting moves <xref ref-type="bibr" rid="scirp.143618-8">
     [8]
    </xref>. This leads to creation of an element of memory that is managed using a Tabu list. Moves that result in a good solution, are used to update the current solution and are stored in the Tabu list. The reverse moves are also stored in the Tabu list. Use of memory in the form of a Tabu list prevents cycling, which occurs if a solution is stuck in a local optimum. In the basic Tabu Search, moves that are in the Tabu list are not allowed during the optimisation, during a given number of iterations <xref ref-type="bibr" rid="scirp.143618-8">
     [8]
    </xref> <xref ref-type="bibr" rid="scirp.143618-11">
     [11]
    </xref> <xref ref-type="bibr" rid="scirp.143618-12">
     [12]
    </xref>. The Tabu list is updated by removing older entries and adding new entries with every move. The length of the Tabu list or the number of iterations for which a move is Tabu, is dependent on the optimisation strategy. The basic Tabu Search algorithm is described in Algorithm 1.</p>
   <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
    <tr> 
     <td class="custom-bottom-td aleft" width="123.05%" colspan="2"><p style="text-align:left">Algorithm 1 Basic Tabu Search</p></td> 
    </tr> 
    <tr> 
     <td class="custom-top-td acenter" width="8.10%"><p style="text-align:center">1.</p></td> 
     <td class="custom-top-td aleft" width="114.95%"><p style="text-align:left">Select an initial solution u 
       <math xmlns="http://www.w3.org/1998/Math/MathML"> <mo>
          ∈ 
        </mo> 
       </math> U</p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">2.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left">Set u<sup>incumbent</sup> ← u</p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">3.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left">Set iter ← 0</p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">4.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left">Initialise the Tabu list: T<sup>list</sup> ← 
       <math xmlns="http://www.w3.org/1998/Math/MathML"> <mo>
          ∅ 
        </mo> 
       </math></p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">5.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left">while stopping condition is not reached do</p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">6.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left"> Find the best admissible solution u 
       <math xmlns="http://www.w3.org/1998/Math/MathML"> <mo>
          ∈ 
        </mo> 
       </math> Ɲ(u) with respect to f(u)</p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">7.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left"> if f(u) &lt; f(u<sup>incumbent</sup>) then</p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">8.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left"> Update the incumbent solution u<sup>incumbent</sup> ← u</p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">9.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left"> Update the Tabu list</p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">10.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left"> end if</p></td> 
    </tr> 
    <tr> 
     <td class="acenter" width="8.10%"><p style="text-align:center">11.</p></td> 
     <td class="aleft" width="114.95%"><p style="text-align:left">end while</p></td> 
    </tr> 
   </table>
   <p>where u is the current solution, U is the constraints set, u<sup>incumbent</sup> is the incumbent solution, iter is the iteration counter, T is the Tabu list, Ɲ(u) is the neighbourhood of solution u and f(u) is the objective function.</p>
   <p>The following is an explanation of the choice of Tabu Search over other metaheuristics for solving the optimisation problem. The successful implementation of a metaheuristic is dependent on how well it is modified for the problem being solved <xref ref-type="bibr" rid="scirp.143618-13">
     [13]
    </xref>-<xref ref-type="bibr" rid="scirp.143618-15">
     [15]
    </xref>. The waste to energy technology (WET) is a complex model constituting of components that model the energy conversion processes. The digester model, the internal combustion engine model and the induction machine models use complex non-linear differential equations. Each of the models of the WET is a difficult non-linear optimization problem that is treated as a black box. As such a metaheuristic is selected for solving the optimisation problem. The reasons for the choice of Tabu are: (i) it uses a deterministic approach for optimisation, (ii) it moves aggressively to a local optimum and (iii) it can easily be tailored to the optimisation problem. The following is an explanation of these reasons.</p>
   <p>Tabu Search uses a deterministic approach to search the solution space, which shortens the computational time. The other metaheuristics like genetic algorithms and simulated annealing perform a random search of the solution space. This results in long computational times, making simulated annealing and genetic algorithms less suited to complex problems like the optimisation of WET. Three metaheuristics namely: Tabu Search, simulated annealing, and genetic algorithms were compared in solving facility location problems, under time-limited, solution-limited, and unrestricted conditions <xref ref-type="bibr" rid="scirp.143618-16">
     [16]
    </xref>-<xref ref-type="bibr" rid="scirp.143618-18">
     [18]
    </xref>. Tabu Search showed good performance in most of the facility location problems experimented with, compared to the simulated annealing and genetic algorithm.</p>
   <p>Again, compared to simulated annealing, Tabu Search moves aggressively to a local optimum. Simulated annealing works on the premise that a slow decent will lead to a local optimum that is closer to a global optimum. With Tabu Search the best available move is made at each iteration, and the search does not spend time in regions whose solution are less attractive <xref ref-type="bibr" rid="scirp.143618-8">
     [8]
    </xref> <xref ref-type="bibr" rid="scirp.143618-12">
     [12]
    </xref>. In <xref ref-type="bibr" rid="scirp.143618-19">
     [19]
    </xref>, a Tabu Search algorithm that diversifies the search by using 3 different neighborhoods was developed for solving a flowshop scheduling problem. The Tabu Search was compared with an ant colony algorithm that was used to solve the same problem. The Tabu Search performed better than the ant colony algorithm.</p>
   <p>The third reason for selection of Tabu Search, is that Tabu Search can easily be tailored to take into account the nature of the optimisation problem. This is done by proper selection of variables, handling of constraints and parameter tuning. The success of Tabu Search is as a result of tuning its parameters to the problem being solved <xref ref-type="bibr" rid="scirp.143618-20">
     [20]
    </xref>-<xref ref-type="bibr" rid="scirp.143618-22">
     [22]
    </xref>. A multiple Tabu Search algorithm was developed by <xref ref-type="bibr" rid="scirp.143618-23">
     [23]
    </xref> to solve a dynamic economic generator dispatch problem. The multiple Tabu Search algorithm used additional strategies for initialisation, carried out adaptive and multiple searches, crossover and restarts. The performance of the Tabu Search was compared with that of simulated annealing, a genetic algorithm and particle swarm optimisation, in solving the problem. A higher quality solution was obtained, with better computational efficiency using the multiple Tabu Search algorithm.</p>
  </sec><sec id="s2">
   <title>2. Statement of the Optimisation of WET</title>
   <sec id="s2_1">
    <title>2.1. Outline of the Problem</title>
    <p>The optimisation problem consists in dimensioning the WET for a given manure input in a given time period 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>. M is a set of the number of months in the multi-period dimensioning problem. The WET under study is shown in <xref ref-type="fig" rid="fig1">
      Figure 1
     </xref>, for a farm with n<sub>herd</sub> cattle. Dimensioning is carried out with an adapted monthly setup, for: the backup propane flow rate, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, the split of biogas between the internal combustion engine (ICE) and the boiler, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and the volume flow rate of manure from the lagoon, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>.</p>
    <fig id="fig1" position="float">
     <label>Figure 1</label>
     <caption>
      <title>Figure 1. Waste to energy technology.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId34.jpeg?20250630113854" />
    </fig>
    <p>
     <xref ref-type="bibr" rid="scirp.143618-"></xref>This is subject to the constraint of operating the WET such that the electricity and heating demands of the farm and the digester are met, while maximising revenue from the system. Manure from the livestock at a volume flow rate 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> in goes into a lagoon, where it is stored. The manure from the lagoon is fed to a digester at a volume flow rate, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. In the digester, the manure undergoes anaerobic digestion to produce biogas at a mass flow rate, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          m 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, air-fuel ratio, AF<sup>m</sup> and lower heating value, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         L 
       </mi> 
       <mi>
         H 
       </mi> 
       <msubsup> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The biogas produced is to be shared between an internal combustion engine and a boiler, at a ratio determined by the variable 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The mass flow rate of biogas going into the internal combustion engine is 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mn>
           1 
         </mn> 
         <mo>
           − 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            2 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <msub> 
        <mi>
          m 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math> and that going into the boiler is 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          m 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
       </msub> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>.</p>
    <p>The biogas is combusted in the internal combustion engine generating a torque 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          T 
        </mi> 
        <mtext>
          L 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The torque 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mo> 
       </mo> 
       <msubsup> 
        <mi>
          T 
        </mi> 
        <mtext>
          L 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is applied to an induction machine (IM) to generate electricity, output 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The electricity is used by the farm to meet the electricity load 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          e 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. If excess electricity is produced by the WET it is sent to the electricity grid. The electricity sent to the grid is designated by 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          e 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         − 
       </mo> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. If the electricity generated by the WET is insufficient to meet the demand of the farm, electricity is obtained from the grid and is designated by 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          e 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         − 
       </mo> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. Combustion of biogas in the internal combustion engine produces exhaust gases at a mass flow rate and temperature denoted by 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          m 
        </mi> 
        <mrow> 
         <mtext>
           exh 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          T 
        </mi> 
        <mrow> 
         <mtext>
           exh 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> respectively. Heat from the exhaustgases is captured by the heat exchanger (HEX) and forms the heat output 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         a 
       </mi> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The biogas that goes into the boiler is combusted to generate heat, denoted by 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mn>
           1 
         </mn> 
         <mo>
           − 
         </mo> 
         <mi>
           a 
         </mi> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The total heat output 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> has to meet the heating demand of both the digester 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         b 
       </mi> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          h 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and the farm 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mn>
           1 
         </mn> 
         <mo>
           − 
         </mo> 
         <mi>
           b 
         </mi> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mi>
         b 
       </mi> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          h 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The heating demand of the digester is calculated taking into consideration the heat losses from the walls, floor and roof of the digester, and the heat required to raise the temperature of the influent manure to the digester’s operating temperature. When the boiler does not generate enough heat to meet the total heating load, propane will also be combusted in the boiler. The propane is supplied as a backup fuel from a propane tank, at a mass flow rate 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and lower heating value LHV<sub>propane</sub>.</p>
    <p>The optimisation of the WET described is done with the objective of maximizing revenue. The optimisation problem is expressed as a cost minimisation problem by:</p>
    <p>min 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msup> 
        <mi>
          f 
        </mi> 
        <mrow> 
         <mtext>
           cost 
         </mtext> 
        </mrow> 
       </msup> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            1 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            2 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            3 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
      </mrow> 
     </math> for a given manure input 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math>, (3)</p>
    <p>subject to: 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           WET 
         </mtext> 
        </mrow> 
       </msub> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            1 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            2 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            3 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         ≤ 
       </mo> 
       <mn>
         0 
       </mn> 
      </mrow> 
     </math> for 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>, (4)</p>
    <p>such that: 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         ∈ 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mrow> 
         <mn>
           0 
         </mn> 
         <mo>
           , 
         </mo> 
         <mn>
           0.0001 
         </mn> 
         <mo>
           , 
         </mo> 
         <mn>
           0.0002 
         </mn> 
         <mo>
           , 
         </mo> 
         <mn>
           0.0003 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           ⋯ 
         </mo> 
         <mo>
           , 
         </mo> 
         <mn>
           0.0036 
         </mn> 
        </mrow> 
        <mo>
          } 
        </mo> 
       </mrow> 
      </mrow> 
     </math> for 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>, (5)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mo> 
       </mo> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         ∈ 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mrow> 
         <mn>
           0 
         </mn> 
         <mo>
           , 
         </mo> 
         <mn>
           0.01 
         </mn> 
         <mo>
           , 
         </mo> 
         <mn>
           0.02 
         </mn> 
         <mo>
           , 
         </mo> 
         <mn>
           0.03 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           ⋯ 
         </mo> 
         <mo>
           , 
         </mo> 
         <mn>
           0.099 
         </mn> 
        </mrow> 
        <mo>
          } 
        </mo> 
       </mrow> 
      </mrow> 
     </math> for 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>, (6)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         ∈ 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mrow> 
         <mn>
           1 
         </mn> 
         <mo>
           , 
         </mo> 
         <mn>
           2 
         </mn> 
         <mo>
           , 
         </mo> 
         <mn>
           3 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           ⋯ 
         </mo> 
         <mo>
           , 
         </mo> 
         <mn>
           59 
         </mn> 
        </mrow> 
        <mo>
          } 
        </mo> 
       </mrow> 
      </mrow> 
     </math> for 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>, (7)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         u 
       </mi> 
       <mo>
         = 
       </mo> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            1 
          </mn> 
          <mn>
            1 
          </mn> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            2 
          </mn> 
          <mn>
            1 
          </mn> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            3 
          </mn> 
          <mn>
            1 
          </mn> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            1 
          </mn> 
          <mn>
            2 
          </mn> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            2 
          </mn> 
          <mn>
            2 
          </mn> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            3 
          </mn> 
          <mn>
            2 
          </mn> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <mo>
           ⋯ 
         </mo> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            1 
          </mn> 
          <mrow> 
           <mrow> 
            <mo>
              | 
            </mo> 
            <mi>
              m 
            </mi> 
            <mo>
              | 
            </mo> 
           </mrow> 
          </mrow> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            2 
          </mn> 
          <mrow> 
           <mrow> 
            <mo>
              | 
            </mo> 
            <mi>
              m 
            </mi> 
            <mo>
              | 
            </mo> 
           </mrow> 
          </mrow> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            3 
          </mn> 
          <mrow> 
           <mrow> 
            <mo>
              | 
            </mo> 
            <mi>
              m 
            </mi> 
            <mo>
              | 
            </mo> 
           </mrow> 
          </mrow> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
      </mrow> 
     </math> for 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>, (8)</p>
    <p>Where 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         , 
       </mo> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> are the v1ariables: backup propane mass flow rate, biogas sharing ratio and volume flow rate of manure going into the digester respectively. C<sub>WET</sub> denotes a set of global constraints, some of which are linear and others non-linear. u denotes the solution of the optimisation problem as described in the Tabu Search (see Algorithm 2).</p>
    <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
     <tr> 
      <td class="custom-bottom-td aleft" width="100.00%" colspan="2"><p style="text-align:left">Algorithm 2 Optimisation of a WET</p></td> 
     </tr> 
     <tr> 
      <td class="custom-bottom-td custom-top-td acenter" width="6.60%"><p style="text-align:center"></p></td> 
      <td class="custom-bottom-td custom-top-td aleft" width="93.40%"><p style="text-align:left">Initialization</p></td> 
     </tr> 
     <tr> 
      <td class="custom-top-td acenter" width="6.60%"><p style="text-align:center">1.</p></td> 
      <td class="custom-top-td aleft" width="93.40%"><p style="text-align:left">Inputs: 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msub> 
           <mi>
             n 
           </mi> 
           <mrow> 
            <mtext>
              herd 
            </mtext> 
           </mrow> 
          </msub> 
         </mrow> 
        </math>, 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             1 
           </mn> 
           <mi>
             m 
           </mi> 
          </msubsup> 
         </mrow> 
        </math>, 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             2 
           </mn> 
           <mi>
             m 
           </mi> 
          </msubsup> 
         </mrow> 
        </math>, 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             3 
           </mn> 
           <mi>
             m 
           </mi> 
          </msubsup> 
         </mrow> 
        </math> for 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            m 
          </mi> 
          <mo>
            ∈ 
          </mo> 
          <mi>
            M 
          </mi> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">2.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">Initialize parameters: 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             V 
           </mi> 
           <mrow> 
            <mtext>
              lagoon 
            </mtext> 
           </mrow> 
           <mn>
             0 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <mi>
            a 
          </mi> 
          <mo>
            , 
          </mo> 
          <mi>
            b 
          </mi> 
          <mo>
            , 
          </mo> 
          <msub> 
           <mi>
             η 
           </mi> 
           <mrow> 
            <mtext>
              THEX 
            </mtext> 
           </mrow> 
          </msub> 
          <mo>
            , 
          </mo> 
          <msub> 
           <mi>
             η 
           </mi> 
           <mrow> 
            <mtext>
              boiler 
            </mtext> 
           </mrow> 
          </msub> 
          <mo>
            , 
          </mo> 
          <msub> 
           <mi>
             T 
           </mi> 
           <mrow> 
            <mtext>
              water 
            </mtext> 
           </mrow> 
          </msub> 
          <mo>
            , 
          </mo> 
          <mi>
            L 
          </mi> 
          <mi>
            H 
          </mi> 
          <msub> 
           <mi>
             V 
           </mi> 
           <mrow> 
            <mtext>
              propane 
            </mtext> 
           </mrow> 
          </msub> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">3.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">for 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            m 
          </mi> 
          <mo>
            ∈ 
          </mo> 
          <mi>
            M 
          </mi> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">4.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">Build an initial solution ( 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             1 
           </mn> 
           <mi>
             m 
           </mi> 
          </msubsup> 
         </mrow> 
        </math>, 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             2 
           </mn> 
           <mi>
             m 
           </mi> 
          </msubsup> 
         </mrow> 
        </math>, 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             3 
           </mn> 
           <mi>
             m 
           </mi> 
          </msubsup> 
         </mrow> 
        </math>) for 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            m 
          </mi> 
          <mo>
            ∈ 
          </mo> 
          <mi>
            M 
          </mi> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">5.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">Calculate the outputs of the WET model components</p><p style="text-align:left"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <msubsup> 
             <mi>
               V 
             </mi> 
             <mrow> 
              <mtext>
                lagoon 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               3 
             </mn> 
             <mi>
               m 
             </mi> 
            </msubsup> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
          <mo>
            = 
          </mo> 
          <mtext>
            LAGOON 
          </mtext> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <msubsup> 
             <mi>
               v 
             </mi> 
             <mrow> 
              <mtext>
                in 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               V 
             </mi> 
             <mrow> 
              <mtext>
                lagoon 
              </mtext> 
             </mrow> 
             <mrow> 
              <mi>
                m 
              </mi> 
              <mo>
                − 
              </mo> 
              <mn>
                1 
              </mn> 
             </mrow> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msub> 
             <mi>
               n 
             </mi> 
             <mrow> 
              <mtext>
                herd 
              </mtext> 
             </mrow> 
            </msub> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math></p><p style="text-align:left"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <mi>
              A 
            </mi> 
            <msup> 
             <mi>
               F 
             </mi> 
             <mi>
               m 
             </mi> 
            </msup> 
            <mo>
              , 
            </mo> 
            <mi>
              L 
            </mi> 
            <mi>
              H 
            </mi> 
            <msubsup> 
             <mi>
               V 
             </mi> 
             <mrow> 
              <mtext>
                biogas 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               m 
             </mi> 
             <mrow> 
              <mtext>
                biogas 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
          <mo>
            = 
          </mo> 
          <mtext>
            DIGESTER 
          </mtext> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               3 
             </mn> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <mi>
              b 
            </mi> 
            <msubsup> 
             <mi>
               d 
             </mi> 
             <mtext>
               h 
             </mtext> 
             <mi>
               m 
             </mi> 
            </msubsup> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math></p></td> 
     </tr> 
    </table>
    <p>Continued</p>
    <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">5.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <msubsup> 
             <mi>
               T 
             </mi> 
             <mtext>
               L 
             </mtext> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               m 
             </mi> 
             <mrow> 
              <mtext>
                exh 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               T 
             </mi> 
             <mrow> 
              <mtext>
                exh 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <mi>
              c 
            </mi> 
            <msubsup> 
             <mi>
               p 
             </mi> 
             <mrow> 
              <mtext>
                exh 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
          <mo>
            = 
          </mo> 
          <mtext>
            ICE 
          </mtext> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <msubsup> 
             <mi>
               m 
             </mi> 
             <mrow> 
              <mtext>
                biogas 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <mrow> 
             <mo>
               ( 
             </mo> 
             <mrow> 
              <mn>
                1 
              </mn> 
              <mo>
                − 
              </mo> 
              <msubsup> 
               <mi>
                 u 
               </mi> 
               <mn>
                 2 
               </mn> 
               <mi>
                 m 
               </mi> 
              </msubsup> 
             </mrow> 
             <mo>
               ) 
             </mo> 
            </mrow> 
            <mo>
              , 
            </mo> 
            <mi>
              A 
            </mi> 
            <msup> 
             <mi>
               F 
             </mi> 
             <mi>
               m 
             </mi> 
            </msup> 
            <mo>
              , 
            </mo> 
            <mi>
              L 
            </mi> 
            <mi>
              H 
            </mi> 
            <msubsup> 
             <mi>
               V 
             </mi> 
             <mrow> 
              <mtext>
                biogas 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math></p><p style="text-align:left"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             y 
           </mi> 
           <mn>
             1 
           </mn> 
           <mi>
             m 
           </mi> 
          </msubsup> 
          <mo>
            = 
          </mo> 
          <mtext>
            IM 
          </mtext> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <msubsup> 
             <mi>
               T 
             </mi> 
             <mtext>
               L 
             </mtext> 
             <mi>
               m 
             </mi> 
            </msubsup> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math></p><p style="text-align:left"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            a 
          </mi> 
          <msubsup> 
           <mi>
             y 
           </mi> 
           <mn>
             2 
           </mn> 
           <mi>
             m 
           </mi> 
          </msubsup> 
          <mo>
            = 
          </mo> 
          <msub> 
           <mi>
             η 
           </mi> 
           <mrow> 
            <mtext>
              HEX 
            </mtext> 
           </mrow> 
          </msub> 
          <msubsup> 
           <mi>
             m 
           </mi> 
           <mrow> 
            <mtext>
              exh 
            </mtext> 
           </mrow> 
           <mi>
             m 
           </mi> 
          </msubsup> 
          <mi>
            c 
          </mi> 
          <msubsup> 
           <mi>
             p 
           </mi> 
           <mrow> 
            <mtext>
              exh 
            </mtext> 
           </mrow> 
           <mi>
             m 
           </mi> 
          </msubsup> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <msubsup> 
             <mi>
               T 
             </mi> 
             <mrow> 
              <mtext>
                exh 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              − 
            </mo> 
            <msub> 
             <mi>
               T 
             </mi> 
             <mrow> 
              <mtext>
                water 
              </mtext> 
             </mrow> 
            </msub> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math></p><p style="text-align:left"> 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <mn>
              1 
            </mn> 
            <mo>
              − 
            </mo> 
            <mi>
              a 
            </mi> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
          <msubsup> 
           <mi>
             y 
           </mi> 
           <mn>
             2 
           </mn> 
           <mi>
             m 
           </mi> 
          </msubsup> 
          <mo>
            = 
          </mo> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <mi>
              L 
            </mi> 
            <mi>
              H 
            </mi> 
            <msub> 
             <mi>
               V 
             </mi> 
             <mrow> 
              <mtext>
                propane 
              </mtext> 
             </mrow> 
            </msub> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               1 
             </mn> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mo>
              + 
            </mo> 
            <msubsup> 
             <mi>
               m 
             </mi> 
             <mrow> 
              <mtext>
                biogas 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <mi>
              L 
            </mi> 
            <mi>
              H 
            </mi> 
            <msubsup> 
             <mi>
               V 
             </mi> 
             <mrow> 
              <mtext>
                biogas 
              </mtext> 
             </mrow> 
             <mi>
               m 
             </mi> 
            </msubsup> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               2 
             </mn> 
             <mi>
               m 
             </mi> 
            </msubsup> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
          <msub> 
           <mi>
             η 
           </mi> 
           <mrow> 
            <mtext>
              boiler 
            </mtext> 
           </mrow> 
          </msub> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">6.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">end for</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">7.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">Evaluate the objective function 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msup> 
           <mi>
             f 
           </mi> 
           <mrow> 
            <mtext>
              cost 
            </mtext> 
           </mrow> 
          </msup> 
         </mrow> 
        </math></p><p style="text-align:left">Tabu Search Optimisation</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">8.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">iter ← 0</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">9.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">while iter ≤ max_iter do</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">10.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">Perform Tabu Search which includes evaluation of each of the WET model components</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">11.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">Evaluate iterative solutions and update the incumbent solutions accordingly</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="6.60%"><p style="text-align:center">12.</p></td> 
      <td class="aleft" width="93.40%"><p style="text-align:left">end while</p></td> 
     </tr> 
    </table>
   </sec>
   <sec id="s2_2">
    <title>2.2. Optimisation Process Flow</title>
    <p>Algorithm 2 describes the process flow of the optimisation. The inputs of the WET are: herd size n<sub>herd</sub>, electricity demand 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          e 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, heating demand 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          h 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and volume flow rate of manure from the cattle 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. These inputs are specified for each time period, 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>. The parameters of the optimisation are initialised, i.e., 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           lagoon 
         </mtext> 
        </mrow> 
        <mi>
          o 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, volume of manure in the lagoon, a, ratio of heating output, b, ratio of heating demand, η<sub>HEX</sub>, efficiency of the heat exchanger, η<sub>boiler</sub>, efficiency of the boiler, T<sub>water</sub>, water temperature and LHV<sub>propane</sub>, lower heating value of propane. An initial solution ( 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>) is built for each of the time periods 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>. This is done by calculating the outputs of the manure storage and the energy conversion processes in each component of the WET, using the functions: LAGOON, DIGESTER, ICE, IM, and the linear equations of the heat exchanger and the boiler. The function LAGOON is linear and calculates the storage of manure from the livestock, for each of the time periods 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>. The functions DIGESTER, ICE and IM include complex non-linear differential equations and are represented as component models in the WET optimization problem. Each of the component models of the functions DIGESTER, ICE and IM model a difficult nonlinear optimisation problem. A variable that determines the output of the energy conversion processes in each of these component models is selected to define the solution ( 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>), as shown in Algorithm 2. As such the non-linear optimization problems of the component models are solved by optimisation of the WET, with the solution ( 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>). The inputs and outputs of the component models and equations are defined in <xref ref-type="table" rid="table1">
      Table 1
     </xref>. The electricity and heat outputs, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, respectively, are obtained and used in computation of the objective function. Once an initial solution has been found and the objective function computed, the Tabu Search optimisation is carried out to determine the near optimal solutions.</p>
    <table-wrap id="table1">
     <label>
      <xref ref-type="table" rid="table1">
       Table 1
      </xref></label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.143618-"></xref>Table 1. Inputs and outputs of the model components.</title>
     </caption>
     <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <td class="custom-bottom-td acenter" width="29.56%"><p style="text-align:center">Input/Output</p></td> 
       <td class="custom-bottom-td acenter" width="81.56%"><p style="text-align:center">Description</p></td> 
      </tr> 
      <tr> 
       <td class="custom-top-td acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msub> 
            <mi>
              n 
            </mi> 
            <mrow> 
             <mtext>
               herd 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="custom-top-td acenter" width="81.56%"><p style="text-align:center">herd size</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              d 
            </mi> 
            <mtext>
              e 
            </mtext> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">electrical demand of the farm</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              d 
            </mi> 
            <mtext>
              h 
            </mtext> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">heat demand</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              v 
            </mi> 
            <mrow> 
             <mtext>
               in 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">volume flow rate of the manure from the livestock</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              V 
            </mi> 
            <mrow> 
             <mtext>
               lagoon 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">volume of the manure in the lagoon</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              m 
            </mi> 
            <mrow> 
             <mtext>
               biogas 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">mass flow rate of the biogas from the digester</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              m 
            </mi> 
            <mrow> 
             <mtext>
               exh 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">mass flow rate of the exhaust gases</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              T 
            </mi> 
            <mrow> 
             <mtext>
               exh 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">temperature of the exhaust gases</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <mi>
             c 
           </mi> 
           <msub> 
            <mi>
              p 
            </mi> 
            <mrow> 
             <mtext>
               exh 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">specific heat capacity of the exhaust gases</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <mi>
             A 
           </mi> 
           <msup> 
            <mi>
              F 
            </mi> 
            <mi>
              m 
            </mi> 
           </msup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">air-fuel ratio of the biogas</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <mi>
             L 
           </mi> 
           <mi>
             H 
           </mi> 
           <msubsup> 
            <mi>
              V 
            </mi> 
            <mrow> 
             <mtext>
               biogas 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">Lower Heating Value of the biogas</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              T 
            </mi> 
            <mtext>
              L 
            </mtext> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">output torque of the internal combustion engine</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              y 
            </mi> 
            <mn>
              1 
            </mn> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">electricity output</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="29.56%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              y 
            </mi> 
            <mn>
              2 
            </mn> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="81.56%"><p style="text-align:center">heat output</p></td> 
      </tr> 
     </table>
    </table-wrap>
   </sec>
  </sec><sec id="s3">
   <title>3. Description of the Optimisation of WET</title>
   <p>The optimisation problem involves evaluation of the biogas production and electricity and heat production from the volume flow rate of manure, 
    <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
      <msubsup> 
       <mi>
         v 
       </mi> 
       <mrow> 
        <mtext>
          in 
        </mtext> 
       </mrow> 
       <mi>
         m 
       </mi> 
      </msubsup> 
     </mrow> 
    </math> for 
    <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
      <mi>
        m 
      </mi> 
      <mo>
        ∈ 
      </mo> 
      <mi>
        M 
      </mi> 
     </mrow> 
    </math>. Starting with 
    <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
      <msubsup> 
       <mi>
         v 
       </mi> 
       <mrow> 
        <mtext>
          in 
        </mtext> 
       </mrow> 
       <mi>
         m 
       </mi> 
      </msubsup> 
     </mrow> 
    </math>, the inputs and outputs of the WET components are calculated in turn using the functions, LAGOON, DIGESTER, ICE, IM and the linear equations of the boiler and the heat exchanger. The functions of the respective WET components are indicated in <xref ref-type="fig" rid="fig1">
     Figure 1
    </xref>, together with the inputs and outputs. This section describes the objective function and the constraints of the optimisation, followed by an outline of the process flow of the optimisation problem.</p>
   <sec id="s3_1">
    <title>3.1. Objective Function</title>
    <p>The formulation of the optimisation problem maximises revenue from a WET subject to meeting the heating demand of the farm and the digester. The objective function has four components; the cost of capital, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           capital 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, the cost of propane, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           propane 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, the cost of incentives, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           incentives 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and the cost of grid electricity, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           grid_electricity 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> for 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>. The following is a description of the components of the objective function.</p>
    <p>The cost of capital 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           capital 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is calculated from the capital expenditure on the digester, lagoon, boiler and engine-generator set. The capital expenditure on these items is dependent on their sizes, which in turn depends on the herd size. The size of the digester and the lagoon are dependent on the volume flow rate of manure from the livestock, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The cost of the boiler and engine-generator set are dependent on the ratings of the respective equipment. This capital expenditure is amortized monthly to obtain the cost of capital 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           capital 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The cost of capital is calculated using the non-linear function (9).</p>
    <p>
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mtable columnalign="left"> 
       <mtr> 
        <mtd> 
         <msubsup> 
          <mi>
            C 
          </mi> 
          <mrow> 
           <mtext>
             capital 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           = 
         </mo> 
         <mtext>
           CAPITAL 
         </mtext> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <mtext>
             HRT 
           </mtext> 
           <mo>
             , 
           </mo> 
           <msub> 
            <mi>
              c 
            </mi> 
            <mrow> 
             <mtext>
               digester 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
           <msub> 
            <mi>
              c 
            </mi> 
            <mrow> 
             <mtext>
               lagoon 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
           <msub> 
            <mi>
              P 
            </mi> 
            <mrow> 
             <mtext>
               rated 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
           <msub> 
            <mi>
              c 
            </mi> 
            <mrow> 
             <mtext>
               engine 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
           <msub> 
            <mi>
              c 
            </mi> 
            <mrow> 
             <mtext>
               boiler 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
           <msub> 
            <mi>
              C 
            </mi> 
            <mrow> 
             <mtext>
               cap_incentive 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
          </mrow> 
         </mrow> 
        </mtd> 
       </mtr> 
       <mtr> 
        <mtd> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mrow> 
          <mrow> 
           <msub> 
            <mi>
              i 
            </mi> 
            <mrow> 
             <mtext>
               rate 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
           <msub> 
            <mi>
              n 
            </mi> 
            <mrow> 
             <mtext>
               period 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
           <msubsup> 
            <mi>
              v 
            </mi> 
            <mrow> 
             <mtext>
               in 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <mo>
             , 
           </mo> 
           <msub> 
            <mi>
              V 
            </mi> 
            <mrow> 
             <mtext>
               lagoon_storage 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
           <msubsup> 
            <mi>
              d 
            </mi> 
            <mtext>
              h 
            </mtext> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <mo>
             , 
           </mo> 
           <mi>
             a 
           </mi> 
           <msubsup> 
            <mi>
              y 
            </mi> 
            <mn>
              2 
            </mn> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
         <mtext>
             
         </mtext> 
         <mtext>
             
         </mtext> 
         <mtext>
           for 
         </mtext> 
         <mtext>
             
         </mtext> 
         <mi>
           m 
         </mi> 
         <mo>
           ∈ 
         </mo> 
         <mi>
           M 
         </mi> 
         <mo>
           . 
         </mo> 
        </mtd> 
       </mtr> 
      </mtable> 
     </math> (9)</p>
    <p>where CAPITAL is the function for calculation of the cost of capital, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the volume flow rate of manure from the livestock, HRT is the hydraulic retention time, c<sub>digester</sub> is the cost of the digester, V<sub>lagoon_storage</sub> is the storage capacity of the lagoon, c<sub>lagoon</sub> is the unit cost of the lagoon, P<sub>rated</sub> is the power rating of the induction machine, c<sub>engine</sub> is the cost of the engine-generator set, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          h 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the heating load, a is the ratio of heat output from the heat exchanger, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the heat output, c<sub>boiler</sub> is the cost of the boiler, C<sub>cap</sub><sub>_incentive </sub>is the capacity incentive, i<sub>rate</sub> is the interest rate and n<sub>period</sub> is the number of periods over which the interest is charged.</p>
    <p>The monthly cost of propane, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           propane 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is a linear function of the backup propane mass flow rate, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and is given by (10).</p>
    <p>
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           proppane 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mtext>
         PROPANE 
       </mtext> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msub> 
          <mi>
            c 
          </mi> 
          <mrow> 
           <mtext>
             propane 
           </mtext> 
          </mrow> 
         </msub> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            1 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mtext>
           
       </mtext> 
       <mtext>
           
       </mtext> 
       <mtext>
         for 
       </mtext> 
       <mtext>
           
       </mtext> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (10)</p>
    <p>where PROPANE is the function for calculating the cost of propane, c<sub>propane</sub> is the unit cost of propane and 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the backup propane mass flow rate.</p>
    <p>A performance incentive is given for generation of renewable energy. This incentive is included in the objective function and is calculated by a linear function (11).</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           incentives 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mtext>
         INCENTIVES 
       </mtext> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msub> 
          <mi>
            c 
          </mi> 
          <mrow> 
           <mtext>
             incentives 
           </mtext> 
          </mrow> 
         </msub> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            y 
          </mi> 
          <mn>
            1 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mtext>
           
       </mtext> 
       <mtext>
           
       </mtext> 
       <mtext>
         for 
       </mtext> 
       <mtext>
           
       </mtext> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (11)</p>
    <p>where 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           incentives 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the cost of incentives, INCENTIVES is the function for calculating the cost of incentives, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the electricity output and c<sub>incentives</sub> is the unit cost of incentives.</p>
    <p>The cost of grid electricity, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           grid_electricity 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is a non-linear function of the electricity output, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> (12).</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          C 
        </mi> 
        <mrow> 
         <mtext>
           grid_electricity 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mtext>
         GRID_ELECTRICTY 
       </mtext> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msub> 
          <mi>
            c 
          </mi> 
          <mrow> 
           <mtext>
             tariff 
           </mtext> 
          </mrow> 
         </msub> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            d 
          </mi> 
          <mi>
            e 
          </mi> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <msubsup> 
          <mi>
            y 
          </mi> 
          <mn>
            1 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mtext>
           
       </mtext> 
       <mtext>
           
       </mtext> 
       <mtext>
         for 
       </mtext> 
       <mtext>
           
       </mtext> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (12)</p>
    <p>The four cost components of the objective function form a multi-objective optimization problem. With the Tabu Search method used, sampling of the neighbourhood results in many solutions. Each of these solutions is to be evaluated using the multiobjective function. The incumbent solution is to be selected as the one with the minimum overall cost. In determination of a solution that will minimise the overall objective, an easy way is to compute the overall cost as:</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         z 
       </mi> 
       <mo>
         = 
       </mo> 
       <munderover> 
        <mstyle mathsize="140%" displaystyle="true"> 
         <mo>
           ∑ 
         </mo> 
        </mstyle> 
        <mrow> 
         <mi>
           m 
         </mi> 
         <mo>
           = 
         </mo> 
         <mn>
           1 
         </mn> 
        </mrow> 
        <mi>
          M 
        </mi> 
       </munderover> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msubsup> 
          <mi>
            C 
          </mi> 
          <mrow> 
           <mtext>
             capital 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           + 
         </mo> 
         <msubsup> 
          <mi>
            C 
          </mi> 
          <mrow> 
           <mtext>
             proppane 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           − 
         </mo> 
         <msubsup> 
          <mi>
            C 
          </mi> 
          <mrow> 
           <mtext>
             incentives 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           + 
         </mo> 
         <msubsup> 
          <mi>
            C 
          </mi> 
          <mrow> 
           <mtext>
             grid_electricity 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mtext>
           
       </mtext> 
       <mtext>
           
       </mtext> 
       <mtext>
         for 
       </mtext> 
       <mtext>
           
       </mtext> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (13)</p>
    <p>The drawback of (13) is the different ranges of the values of the cost components. This means that the overall objective will largely be minimising the cost components with the highest value. This can be overcome by the use of weights, but it is difficult to find the proper weights. A better method is to express the objective function as a cost vector of the components, resulting in a cost vector for each of the solutions.</p>
    <p>Let</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          f 
        </mi> 
        <mi>
          k 
        </mi> 
        <mrow> 
         <mo>
           → 
         </mo> 
         <mtext>
           cost 
         </mtext> 
        </mrow> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mrow> 
        <mo>
          [ 
        </mo> 
        <mrow> 
         <munderover> 
          <mstyle mathsize="140%" displaystyle="true"> 
           <mo>
             ∑ 
           </mo> 
          </mstyle> 
          <mrow> 
           <mi>
             m 
           </mi> 
           <mo>
             = 
           </mo> 
           <mn>
             1 
           </mn> 
          </mrow> 
          <mi>
            M 
          </mi> 
         </munderover> 
         <mtext>
             
         </mtext> 
         <msubsup> 
          <mi>
            C 
          </mi> 
          <mrow> 
           <mtext>
             capital 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <munderover> 
          <mstyle mathsize="140%" displaystyle="true"> 
           <mo>
             ∑ 
           </mo> 
          </mstyle> 
          <mrow> 
           <mi>
             m 
           </mi> 
           <mo>
             = 
           </mo> 
           <mn>
             1 
           </mn> 
          </mrow> 
          <mi>
            M 
          </mi> 
         </munderover> 
         <mtext>
             
         </mtext> 
         <msubsup> 
          <mi>
            C 
          </mi> 
          <mrow> 
           <mtext>
             propane 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <munderover> 
          <mstyle mathsize="140%" displaystyle="true"> 
           <mo>
             ∑ 
           </mo> 
          </mstyle> 
          <mrow> 
           <mi>
             m 
           </mi> 
           <mo>
             = 
           </mo> 
           <mn>
             1 
           </mn> 
          </mrow> 
          <mi>
            M 
          </mi> 
         </munderover> 
         <mtext>
             
         </mtext> 
         <msubsup> 
          <mi>
            C 
          </mi> 
          <mrow> 
           <mtext>
             incentives 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           , 
         </mo> 
         <munderover> 
          <mstyle mathsize="140%" displaystyle="true"> 
           <mo>
             ∑ 
           </mo> 
          </mstyle> 
          <mrow> 
           <mi>
             m 
           </mi> 
           <mo>
             = 
           </mo> 
           <mn>
             1 
           </mn> 
          </mrow> 
          <mi>
            M 
          </mi> 
         </munderover> 
         <mtext>
             
         </mtext> 
         <msubsup> 
          <mi>
            C 
          </mi> 
          <mrow> 
           <mtext>
             grid_electricity 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ] 
        </mo> 
       </mrow> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> or 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         k 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         K 
       </mi> 
      </mrow> 
     </math> and 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math> (14)</p>
    <p>be the set of solutions. The individual cost components of the solution vectors are compared for dominance. The vectors with the non-dominant cost components form a Pareto incumbent front. The solutions on the Pareto incumbent front are selected as the incumbent solutions. There are several incumbent solutions, all of which are retained, as shown in <xref ref-type="fig" rid="fig2">
      Figure 2
     </xref> for the comparison of the cost of propane and the cost of grid electricity.</p>
    <fig id="fig2" position="float">
     <label>Figure 2</label>
     <caption>
      <title>Figure 2. Illustration of pareto incumbent front.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId262.jpeg?20250630113903" />
    </fig>
   </sec>
   <sec id="s3_2">
    <title>3.2. Global Constraints</title>
    <p>This section describes the global constraints, C<sub>WET</sub>, and how they are derived from the optimisation problem. The initial solution described in Algorithm 2 satisfies the global constraints. In the Tabu Search optimisation that follows, the solution ( 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         , 
       </mo> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         , 
       </mo> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>) has to be checked for satisfaction of the global constraints. These constraints are defined as:</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mn>
         0 
       </mn> 
       <mo>
         ≤ 
       </mo> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msubsup> 
          <mi>
            v 
          </mi> 
          <mrow> 
           <mtext>
             in 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <msubsup> 
          <mi>
            n 
          </mi> 
          <mrow> 
           <mtext>
             days 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           + 
         </mo> 
         <msubsup> 
          <mi>
            V 
          </mi> 
          <mrow> 
           <mtext>
             lagoon_manure 
           </mtext> 
          </mrow> 
          <mrow> 
           <mi>
             m 
           </mi> 
           <mo>
             − 
           </mo> 
           <mn>
             1 
           </mn> 
          </mrow> 
         </msubsup> 
         <mo>
           − 
         </mo> 
         <msubsup> 
          <mi>
            n 
          </mi> 
          <mrow> 
           <mtext>
             days 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            3 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         ≤ 
       </mo> 
       <msub> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_storage 
         </mtext> 
        </mrow> 
       </msub> 
       <msubsup> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (15)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msub> 
          <mi>
            V 
          </mi> 
          <mtext>
            D 
          </mtext> 
         </msub> 
         <mo>
           − 
         </mo> 
         <mtext>
           HRT 
         </mtext> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mn>
            3 
          </mn> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         ≥ 
       </mo> 
       <mn>
         0 
       </mn> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (16)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mrow> 
          <mrow> 
           <msub> 
            <mi>
              P 
            </mi> 
            <mrow> 
             <mtext>
               rated 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
          <mo>
            / 
          </mo> 
          <mrow> 
           <msub> 
            <mi>
              ω 
            </mi> 
            <mrow> 
             <mtext>
               mech 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </mrow> 
         <mo>
           − 
         </mo> 
         <mtext>
           ICE 
         </mtext> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <mi>
             L 
           </mi> 
           <mi>
             H 
           </mi> 
           <msubsup> 
            <mi>
              V 
            </mi> 
            <mrow> 
             <mtext>
               biogas 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <mo>
             , 
           </mo> 
           <msub> 
            <mi>
              ω 
            </mi> 
            <mrow> 
             <mtext>
               mech 
             </mtext> 
            </mrow> 
           </msub> 
           <mo>
             , 
           </mo> 
           <mrow> 
            <mo>
              ( 
            </mo> 
            <mrow> 
             <mn>
               1 
             </mn> 
             <mo>
               − 
             </mo> 
             <msubsup> 
              <mi>
                u 
              </mi> 
              <mn>
                2 
              </mn> 
              <mi>
                m 
              </mi> 
             </msubsup> 
            </mrow> 
            <mo>
              ) 
            </mo> 
           </mrow> 
           <msubsup> 
            <mi>
              m 
            </mi> 
            <mrow> 
             <mtext>
               biogas 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         ≥ 
       </mo> 
       <mn>
         0 
       </mn> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (17)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          h 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         ≤ 
       </mo> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msub> 
          <mi>
            η 
          </mi> 
          <mrow> 
           <mtext>
             HEX 
           </mtext> 
          </mrow> 
         </msub> 
         <msubsup> 
          <mi>
            m 
          </mi> 
          <mrow> 
           <mtext>
             exh 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mi>
           c 
         </mi> 
         <msub> 
          <mi>
            p 
          </mi> 
          <mrow> 
           <mtext>
             exh 
           </mtext> 
          </mrow> 
         </msub> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <msubsup> 
            <mi>
              T 
            </mi> 
            <mrow> 
             <mtext>
               exh 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <mo>
             − 
           </mo> 
           <msub> 
            <mi>
              T 
            </mi> 
            <mrow> 
             <mtext>
               water 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
         <mo>
           + 
         </mo> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <mi>
             L 
           </mi> 
           <mi>
             H 
           </mi> 
           <msub> 
            <mi>
              V 
            </mi> 
            <mrow> 
             <mtext>
               propane 
             </mtext> 
            </mrow> 
           </msub> 
           <msubsup> 
            <mi>
              u 
            </mi> 
            <mn>
              1 
            </mn> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <mo>
             + 
           </mo> 
           <msubsup> 
            <mi>
              m 
            </mi> 
            <mrow> 
             <mtext>
               biogas 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <mi>
             L 
           </mi> 
           <mi>
             H 
           </mi> 
           <msubsup> 
            <mi>
              V 
            </mi> 
            <mrow> 
             <mtext>
               biogas 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <msubsup> 
            <mi>
              u 
            </mi> 
            <mn>
              2 
            </mn> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         ≤ 
       </mo> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msubsup> 
          <mi>
            d 
          </mi> 
          <mtext>
            h 
          </mtext> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           + 
         </mo> 
         <msub> 
          <mi>
            δ 
          </mi> 
          <mi>
            h 
          </mi> 
         </msub> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (18)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msub> 
          <mi>
            b 
          </mi> 
          <mi>
            r 
          </mi> 
         </msub> 
         <mo>
           − 
         </mo> 
         <msubsup> 
          <mi>
            d 
          </mi> 
          <mtext>
            h 
          </mtext> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           + 
         </mo> 
         <msub> 
          <mi>
            η 
          </mi> 
          <mrow> 
           <mtext>
             HEX 
           </mtext> 
          </mrow> 
         </msub> 
         <msubsup> 
          <mi>
            m 
          </mi> 
          <mrow> 
           <mtext>
             exh 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mi>
           c 
         </mi> 
         <msub> 
          <mi>
            p 
          </mi> 
          <mrow> 
           <mtext>
             exh 
           </mtext> 
          </mrow> 
         </msub> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <msubsup> 
            <mi>
              T 
            </mi> 
            <mrow> 
             <mtext>
               exh 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <mo>
             − 
           </mo> 
           <msub> 
            <mi>
              T 
            </mi> 
            <mrow> 
             <mtext>
               water 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         ≤ 
       </mo> 
       <mn>
         0 
       </mn> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> for 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math> (19)</p>
    <p>where 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the volume flow rate of manure from the cattle, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          n 
        </mi> 
        <mrow> 
         <mtext>
           days 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> are the number of days, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mo> 
       </mo> 
       <msubsup> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_manure 
         </mtext> 
        </mrow> 
        <mrow> 
         <mi>
           m 
         </mi> 
         <mo>
           − 
         </mo> 
         <mn>
           1 
         </mn> 
        </mrow> 
       </msubsup> 
      </mrow> 
     </math> is the volume of manure in the lagoon, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the volume flow rate of manure from the lagoon, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_storage 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math> is the storage capacity of the lagoon, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          V 
        </mi> 
        <mtext>
          D 
        </mtext> 
       </msub> 
      </mrow> 
     </math> is the volume of the digester, HRT is the hydraulic retention time of the digester, P<sub>rated</sub> is the power rating of the induction machine, ω<sub>mech</sub> is the speed of the internal combustion engine, ICE is the function for evaluation of the torque output of the internal combustion engine, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         L 
       </mi> 
       <mi>
         H 
       </mi> 
       <msubsup> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the lower heating value of biogas, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the biogas sharing ratio, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          m 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the mass flow rate of biogas, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          d 
        </mi> 
        <mtext>
          h 
        </mtext> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the heating demand, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          η 
        </mi> 
        <mrow> 
         <mtext>
           HEX 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math> is the efficiency of the heat exchanger, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          m 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the mass flow rate of the exhaust gases, cp<sub>exh</sub> is the specific heat capacity of the exhaust gases, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          T 
        </mi> 
        <mrow> 
         <mtext>
           exh 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the temperature of the exhaust gases, T<sub>water</sub> is the temperature of water, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the mass flow rate of backup propane, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         L 
       </mi> 
       <mi>
         H 
       </mi> 
       <msubsup> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           Propane 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the lower heating value of propane, η<sub>boiler</sub> is the efficiency of the boiler, δ<sub>h</sub> is an allowance for the heating constraint and b<sub>r</sub> is the boiler rating. The manure from the livestock is stored in a lagoon with a storage capacity of V<sub>lagoon_storage</sub> days. The volume flow rate of manure from the lagoon into the digester, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is varied to minimise the cost of the system. Constraint (15) is set to ensure that the net volume of manure in the lagoon is not negative. In a given month m, the volume of manure that goes into the lagoon 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mrow> 
         <mtext>
           day 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, should not be greater than the sum of the volume of the manure that was in the lagoon the previous month 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_manure 
         </mtext> 
        </mrow> 
        <mrow> 
         <mi>
           m 
         </mi> 
         <mo>
           − 
         </mo> 
         <mn>
           1 
         </mn> 
        </mrow> 
       </msubsup> 
      </mrow> 
     </math>, and the volume of manure from the cattle in month m. Constraint (15) also ensures that the volume of manure in the lagoon is not greater than the storage capacity of the lagoon. Constraint (17) is set to ensure that the volume of manure in the digester, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mtext>
         HRT 
       </mtext> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, is not greater than the volume of the digester V<sub>D</sub>. The digester is modeled using non-linear differential equations. The digester model is treated as a black box for purposes of optimisation. The differential equations in the black box, DIGESTER, used to calculate the mass flow rate, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          m 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, the air-fuel ratio, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         A 
       </mi> 
       <msup> 
        <mi>
          F 
        </mi> 
        <mi>
          m 
        </mi> 
       </msup> 
      </mrow> 
     </math> and the lower heating value of biogas, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         L 
       </mi> 
       <mi>
         H 
       </mi> 
       <msubsup> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> can be found in <xref ref-type="bibr" rid="scirp.143618-24">
      [24]
     </xref>. The output torque of the internal combustion engine is determined by applying the Newton-Raphson method to a two dimensional linear interpolation function. The linear interpolation function is multiplied by the available torque. The available torque is calculated from the mass flow rate of biogas to the internal combustion engine, the lower heating value of biogas, and the speed of the internal combustion engine. The internal combustion engine model is also treated as a black box of these functions (ICE). The details of the modeling of the internal combustion engine can be found in <xref ref-type="bibr" rid="scirp.143618-25">
      [25]
     </xref>. The internal combustion engine is coupled with an induction machine of rating, P<sub>rated</sub>, that generates electric power. The induction machine is modeled using non-linear differential equations detailed in <xref ref-type="bibr" rid="scirp.143618-26">
      [26]
     </xref>. The induction machine is also treated as a black box, IM, with the input as torque and the output as electricity, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          y 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>. The electricity generated is a function of the torque, which in turn is a function of the mass flow rate of biogas to the internal combustion engine. Constraint (18) is therefore set to limit the mass flow rate of biogas to not more than what is required to generate rated power, P<sub>rated</sub> in the induction machine.</p>
    <p>Sometimes the biogas generated by the digester may be insufficient for sharing between the internal combustion engine and the boiler. Priority is then given to the combustion of biogas in the internal combustion engine, and propane is combusted in the boiler. This is done to generate electricity that can be sold to the utility. The revenue from the sale of electricity to the utility will be greater than the cost savings from the avoided use of propane for heating. A propane tank that supplies propane at a mass flow rate, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is therefore included in the WET. The heat produced by the boiler is calculated from the mass flow rate of biogas to the boiler, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          m 
        </mi> 
        <mrow> 
         <mtext>
           biogas 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <msub> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
       </msub> 
      </mrow> 
     </math>, the mass flow rate of propane, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, the lower heating value of propane and the lower heating value of biogas. Exhaust heat is also produced as a result of the combustion process in the internal combustion engine. This exhaust heat is captured by the heat exchanger. Constraint (19) is set to ensure that the heat output of the WET meets the heating demand of the farm and the digester. Constraint (6.20) is set to ensure that the heat to be generated by the boiler is not greater than the boiler rating, b<sub>r</sub>. The contribution of the heat captured by the heat exchanger is subtracted from the heat output of the boiler in formulation of Constraint (20).</p>
    <p>Infeasible solutions arise if the constraints are not met. The measure of infeasibility of the solution is calculated as:</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msup> 
        <mi>
          f 
        </mi> 
        <mrow> 
         <mtext>
           infeas 
         </mtext> 
        </mrow> 
       </msup> 
       <mo>
         = 
       </mo> 
       <munderover> 
        <mstyle mathsize="140%" displaystyle="true"> 
         <mo>
           ∑ 
         </mo> 
        </mstyle> 
        <mrow> 
         <mi>
           m 
         </mi> 
         <mo>
           = 
         </mo> 
         <mn>
           1 
         </mn> 
        </mrow> 
        <mi>
          M 
        </mi> 
       </munderover> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msubsup> 
          <mi>
            S 
          </mi> 
          <mrow> 
           <mtext>
             lagoon_volume 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           + 
         </mo> 
         <msubsup> 
          <mi>
            S 
          </mi> 
          <mrow> 
           <mtext>
             digester_size 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           + 
         </mo> 
         <msubsup> 
          <mi>
            S 
          </mi> 
          <mrow> 
           <mtext>
             mbiogas 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           + 
         </mo> 
         <msubsup> 
          <mi>
            S 
          </mi> 
          <mrow> 
           <mtext>
             heating_demand 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
         <mo>
           + 
         </mo> 
         <msubsup> 
          <mi>
            S 
          </mi> 
          <mrow> 
           <mtext>
             boiler_rating 
           </mtext> 
          </mrow> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> for 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math> (20)</p>
    <p>where 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msup> 
        <mi>
          f 
        </mi> 
        <mrow> 
         <mtext>
           infeas 
         </mtext> 
        </mrow> 
       </msup> 
      </mrow> 
     </math> is the total measure of infeasibility, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_volume 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           digester_size 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           mbiogas 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           heating_demand 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> and 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           boiler_rating 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> are the measures of infeasibility of the volume of manure in the lagoon, the digester size, the mass flow rate of biogas to the engine-generator set, the total heat output and the boiler rating, respectively. The measures of infeasibility are derived from the respective Constraints (15), (17), (18), (19) and (20).</p>
    <p>Using the measure of infeasibility of the volume of manure in the lagoon as an example:</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          n 
        </mi> 
        <mrow> 
         <mtext>
           days 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         + 
       </mo> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_volume 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <msubsup> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_manure 
         </mtext> 
        </mrow> 
        <mrow> 
         <mi>
           m 
         </mi> 
         <mo>
           − 
         </mo> 
         <mn>
           1 
         </mn> 
        </mrow> 
       </msubsup> 
       <mo>
         − 
       </mo> 
       <msub> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_manure 
         </mtext> 
        </mrow> 
       </msub> 
       <msubsup> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         + 
       </mo> 
       <msubsup> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <msubsup> 
        <mi>
          n 
        </mi> 
        <mrow> 
         <mtext>
           days 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> for 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>, (21)</p>
    <p>The solution is feasible for 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_volume 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         ≥ 
       </mo> 
       <mn>
         0 
       </mn> 
      </mrow> 
     </math>.</p>
    <p>where 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          n 
        </mi> 
        <mrow> 
         <mtext>
           days 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> are the number of days, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the volume flow rate of manure from the lagoon, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_volume 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>, is the measure of infeasibility of the volume of manure in the lagoon, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_manure 
         </mtext> 
        </mrow> 
        <mrow> 
         <mi>
           m 
         </mi> 
         <mo>
           − 
         </mo> 
         <mn>
           1 
         </mn> 
        </mrow> 
       </msubsup> 
      </mrow> 
     </math> is the volume of manure in the lagoon, 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          V 
        </mi> 
        <mrow> 
         <mtext>
           lagoon_manure 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math> is the storage capacity of the lagoon and 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          v 
        </mi> 
        <mrow> 
         <mtext>
           in 
         </mtext> 
        </mrow> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the volume flow rate of manure from the livestock. The other measures of infeasibility are defined similarly.</p>
   </sec>
  </sec><sec id="s4">
   <title>4. Description of the Tabu Search Algorithm</title>
   <p>
    <xref ref-type="bibr" rid="scirp.143618-"></xref>This section describes the adaptations of the Tabu Search algorithm developed for optimisation of a WET. The Tabu Search is described in Algorithm 3. The notation and the parameters of the Tabu Search are given in <xref ref-type="table" rid="tableTables 2-3">
     Tables 2-3
    </xref> respectively.</p>
   <sec id="s4_1">
    <title>4.1. Basic Tabu Search Algorithm</title>
    <p>The basic Tabu Search defines a neighbourhood of moves that can be applied to the solution, keeps a list of the forbidden moves (Tabu list) and incorporates a stopping condition. These aspects of the basic Tabu Search included in the optimisation of the WET are discussed in this section.</p>
    <p>The neighbourhood of: 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mi>
          i 
        </mi> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is defined as</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         N 
       </mi> 
       <msup> 
        <mrow> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <msubsup> 
            <mi>
              u 
            </mi> 
            <mi>
              i 
            </mi> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
        <mrow> 
         <mi>
           n 
         </mi> 
         <mi>
           e 
         </mi> 
         <mi>
           w 
         </mi> 
        </mrow> 
       </msup> 
       <mo>
         = 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mtable columnalign="left"> 
         <mtr> 
          <mtd> 
           <mi>
             ν 
           </mi> 
           <mo>
             : 
           </mo> 
           <mi>
             ν 
           </mi> 
           <mo>
             = 
           </mo> 
           <msubsup> 
            <mi>
              u 
            </mi> 
            <mi>
              i 
            </mi> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <mo>
             + 
           </mo> 
           <msub> 
            <mi>
              δ 
            </mi> 
            <mi>
              i 
            </mi> 
           </msub> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mi>
             i 
           </mi> 
           <mo>
             = 
           </mo> 
           <mn>
             1 
           </mn> 
           <mo>
             , 
           </mo> 
           <mn>
             2 
           </mn> 
           <mo>
             , 
           </mo> 
           <mn>
             3 
           </mn> 
          </mtd> 
         </mtr> 
         <mtr> 
          <mtd> 
           <mtext>
               
           </mtext> 
           <mi>
             ν 
           </mi> 
           <mo>
             = 
           </mo> 
           <msubsup> 
            <mi>
              u 
            </mi> 
            <mi>
              i 
            </mi> 
            <mi>
              m 
            </mi> 
           </msubsup> 
           <mo>
             − 
           </mo> 
           <msub> 
            <mi>
              δ 
            </mi> 
            <mi>
              i 
            </mi> 
           </msub> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mi>
             m 
           </mi> 
           <mo>
             ∈ 
           </mo> 
           <mi>
             M 
           </mi> 
          </mtd> 
         </mtr> 
         <mtr> 
          <mtd> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mtext>
               
           </mtext> 
           <mi>
             u 
           </mi> 
           <mo>
             ∈ 
           </mo> 
           <msup> 
            <mi>
              U 
            </mi> 
            <mrow> 
             <mi>
               M 
             </mi> 
             <mi>
               O 
             </mi> 
             <mi>
               D 
             </mi> 
             <mi>
               E 
             </mi> 
             <mi>
               L 
             </mi> 
            </mrow> 
           </msup> 
           <mo>
             ∪ 
           </mo> 
           <msup> 
            <mi>
              U 
            </mi> 
            <mrow> 
             <msup> 
              <mrow></mrow> 
              <mrow> 
               <mi>
                 G 
               </mi> 
               <mi>
                 L 
               </mi> 
               <mi>
                 O 
               </mi> 
               <mi>
                 B 
               </mi> 
               <mi>
                 A 
               </mi> 
               <mi>
                 L 
               </mi> 
              </mrow> 
             </msup> 
            </mrow> 
           </msup> 
          </mtd> 
         </mtr> 
        </mtable> 
        <mo>
          } 
        </mo> 
       </mrow> 
      </mrow> 
     </math></p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         L 
       </mi> 
       <msub> 
        <mi>
          B 
        </mi> 
        <mi>
          ν 
        </mi> 
       </msub> 
       <mo>
         ≤ 
       </mo> 
       <mi>
         ν 
       </mi> 
       <mo>
         ≤ 
       </mo> 
       <mi>
         U 
       </mi> 
       <msub> 
        <mi>
          B 
        </mi> 
        <mi>
          ν 
        </mi> 
       </msub> 
       <mo>
         : 
       </mo> 
       <mi>
         ν 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         N 
       </mi> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <msubsup> 
          <mi>
            u 
          </mi> 
          <mi>
            i 
          </mi> 
          <mi>
            m 
          </mi> 
         </msubsup> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math></p>
    <p>where 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mi>
          i 
        </mi> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> is the optimisation variable, U<sup>MODEL</sup> is the set of constraints to be satisfied by the WET black box models, U<sup>GLOBAL</sup> is the set of global constraints to be satisfied by the optimisation, LB<sub>v</sub> is the lower bound of the neighbourhood and UB<sub>v</sub> is the upper bound of the neighbourhood. The move from 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mi>
          i 
        </mi> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> to 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mi>
          i 
        </mi> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         ± 
       </mo> 
       <msub> 
        <mi>
          δ 
        </mi> 
        <mi>
          i 
        </mi> 
       </msub> 
      </mrow> 
     </math> is selected within the specific limits and step sizes for the different variables.</p>
    <p>A Tabu list is formulated from moves that result in the current solution. Each entry of the Tabu list is a vector of the move from 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mi>
          i 
        </mi> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math> to 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mi>
          i 
        </mi> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         ± 
       </mo> 
       <msub> 
        <mi>
          δ 
        </mi> 
        <mi>
          i 
        </mi> 
       </msub> 
      </mrow> 
     </math>, and its associated month. Reverse moves are also included in the Tabu list. The Tabu list includes a random number N<sup>TL_length</sup>, selected within a given interval that decides for how many iterations a Tabu condition persists.</p>
    <p>The stopping condition of the Tabu Search algorithm is set to termination of the optimisation, if no improvement in the incumbent solution has been observed after max_iter iterations, following the application of diversification.</p>
    <table-wrap id="table2">
     <label>
      <xref ref-type="table" rid="table2">
       Table 2
      </xref></label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.143618-"></xref>Table 2. Tabu search notation.</title>
     </caption>
     <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <td class="custom-bottom-td acenter" width="28.16%"><p style="text-align:center">Input/Output</p></td> 
       <td class="custom-bottom-td acenter" width="102.04%"><p style="text-align:center">Description</p></td> 
      </tr> 
      <tr> 
       <td class="custom-top-td acenter" width="28.16%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              u 
            </mi> 
            <mi>
              i 
            </mi> 
            <mrow> 
             <mi>
               m 
             </mi> 
             <mo>
               , 
             </mo> 
             <mtext>
               init 
             </mtext> 
            </mrow> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="custom-top-td acenter" width="102.04%"><p style="text-align:center">initial solution</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="28.16%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              u 
            </mi> 
            <mi>
              i 
            </mi> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="102.04%"><p style="text-align:center">current solution</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="28.16%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msup> 
            <mi>
              S 
            </mi> 
            <mrow> 
             <mtext>
               best 
             </mtext> 
            </mrow> 
           </msup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="102.04%"><p style="text-align:center">set of the Pareto incumbent solutions</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="28.16%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msup> 
            <mi>
              S 
            </mi> 
            <mrow> 
             <mtext>
               current 
             </mtext> 
            </mrow> 
           </msup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="102.04%"><p style="text-align:center">set of the Pareto current solutions 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              u 
            </mi> 
            <mi>
              i 
            </mi> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="28.16%"><p style="text-align:center">Ɲ 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <mrow> 
            <mo>
              ( 
            </mo> 
            <mrow> 
             <msubsup> 
              <mi>
                u 
              </mi> 
              <mi>
                i 
              </mi> 
              <mi>
                m 
              </mi> 
             </msubsup> 
            </mrow> 
            <mo>
              ) 
            </mo> 
           </mrow> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="102.04%"><p style="text-align:center">neighbourhood of variable</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="28.16%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <mi>
             L 
           </mi> 
           <msub> 
            <mi>
              B 
            </mi> 
            <mi>
              v 
            </mi> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="102.04%"><p style="text-align:center">lower bound of neighbourhood</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="28.16%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <mi>
             U 
           </mi> 
           <msub> 
            <mi>
              B 
            </mi> 
            <mi>
              v 
            </mi> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="102.04%"><p style="text-align:center">upper bound of neighbourhood</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="28.16%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msup> 
            <mi>
              T 
            </mi> 
            <mrow> 
             <mtext>
               list 
             </mtext> 
            </mrow> 
           </msup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="102.04%"><p style="text-align:center">Tabu list</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="28.16%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msup> 
            <mi>
              U 
            </mi> 
            <mrow> 
             <mtext>
               MODEL 
             </mtext> 
            </mrow> 
           </msup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="102.04%"><p style="text-align:center">set of constraints to be satisfied by the WET black box models</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="28.16%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msup> 
            <mi>
              U 
            </mi> 
            <mrow> 
             <mtext>
               GLOBAL 
             </mtext> 
            </mrow> 
           </msup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="102.04%"><p style="text-align:center">set of global constraints to be satisfied by the optimization</p></td> 
      </tr> 
     </table>
    </table-wrap>
   </sec>
   <sec id="s4_2">
    <title>4.2. Adaptations of the Tabu Search</title>
    <p>Four aspects of the Tabu Search have been developed for adaptation to the problem being solved. These are: use of the Pareto optimal front method to evaluate the multi-period and multi-objective function, constraints handling, the multi-period optimisation strategy and the diversification strategy. The adaptations made to the basic Tabu Search algorithm in the context of the Waste-to-Energy Technology (WET) optimisation problem significantly enhance the algorithm’s ability to deal with the problem's inherent complexity. The WET problem is characterised by multiple objectives, multi-period variables, non-linear models treated as black boxes, and strict constraints that can conflict with cost reduction goals. The motivation behind each adaptation is rooted in addressing these specific challenges, making the modified Tabu Search more robust, flexible, and effective than the standard form. This section describes the adaptations developed.</p>
    <p>In the WET problem, multiple objectives must be optimised—primarily cost minimisation and constraint (infeasibility) reduction—over a series of time periods (months). Standard TS typically handles single-objective optimisation and lacks a mechanism to evaluate trade-offs among conflicting objectives or time-variant effects.</p>
    <p>During the Tabu Search optimisation a different variable is optimised for each time period, 
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         m 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         M 
       </mi> 
      </mrow> 
     </math>, for as long as the current solution is improving. This implies that only the cost components of the period for which the optimisation is carried out are modified, each time the objective function is evaluated. In order not to lose the benefit of the modified cost components, they are summed separately for all the periods to form the cost vector (15). The cost vectors are then checked for non-dominance and the non-dominated solutions form a Pareto incumbent front. Summing the cost components separately over all the periods, M, incorporates the multi-period nature of the optimisation into the evaluation of the objective function. The Pareto front method of evaluating multi-objective functions has therefore been modified to incorporate the multi-period nature of the optimisation problem.</p>
    <p>Standard TS retains a single best solution; this adaptation maintains a front of non-dominated solutions, enabling multi-objective, multi-period optimisation and better long-term decision-making.</p>
    <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
     <tr> 
      <td class="aleft" width="100.00%" colspan="2"><p style="text-align:left">Algorithm 3 Tabu Search </p></td> 
     </tr> 
     <tr> 
      <td class="custom-bottom-td custom-top-td aleft" width="7.65%"><p style="text-align:left"></p></td> 
      <td class="custom-bottom-td custom-top-td aleft" width="92.35%"><p style="text-align:left">Initialization</p></td> 
     </tr> 
     <tr> 
      <td class="custom-top-td aleft" width="7.65%"><p style="text-align:left">1.</p></td> 
      <td class="custom-top-td aleft" width="92.35%"><p style="text-align:left">Build a feasible initial solution 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mi>
             i 
           </mi> 
           <mrow> 
            <mi>
              m 
            </mi> 
            <mo>
              , 
            </mo> 
            <mtext>
              init 
            </mtext> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">2.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left">Set 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mi>
             i 
           </mi> 
           <mi>
             m 
           </mi> 
          </msubsup> 
          <mo>
            ← 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mi>
             i 
           </mi> 
           <mrow> 
            <mi>
              m 
            </mi> 
            <mo>
              , 
            </mo> 
            <mtext>
              init 
            </mtext> 
           </mrow> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msup> 
           <mi>
             S 
           </mi> 
           <mrow> 
            <mtext>
              best 
            </mtext> 
           </mrow> 
          </msup> 
          <mo>
            ← 
          </mo> 
          <mrow> 
           <mo>
             { 
           </mo> 
           <mrow> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mi>
               i 
             </mi> 
             <mrow> 
              <mi>
                m 
              </mi> 
              <mo>
                , 
              </mo> 
              <mtext>
                init 
              </mtext> 
             </mrow> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <mi>
              m 
            </mi> 
            <mo>
              ∈ 
            </mo> 
            <mi>
              M 
            </mi> 
            <mo>
              , 
            </mo> 
            <mi>
              i 
            </mi> 
            <mo>
              = 
            </mo> 
            <mn>
              1 
            </mn> 
            <mo>
              , 
            </mo> 
            <mn>
              2 
            </mn> 
            <mo>
              , 
            </mo> 
            <mn>
              3 
            </mn> 
           </mrow> 
           <mo>
             } 
           </mo> 
          </mrow> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">3.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left">Initialize the Tabu list: 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msup> 
           <mi>
             T 
           </mi> 
           <mrow> 
            <mtext>
              list 
            </mtext> 
           </mrow> 
          </msup> 
          <mo>
            ← 
          </mo> 
          <mo>
            ∅ 
          </mo> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">4.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left">Set the bounds </p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">5.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left">Evaluate 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mover accent="true"> 
            <mi>
              f 
            </mi> 
            <mo>
              → 
            </mo> 
           </mover> 
           <mrow> 
            <mtext>
              min 
            </mtext> 
           </mrow> 
           <mrow> 
            <mtext>
              cost 
            </mtext> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math>, 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mover accent="true"> 
            <mi>
              f 
            </mi> 
            <mo>
              → 
            </mo> 
           </mover> 
           <mrow> 
            <mtext>
              min 
            </mtext> 
           </mrow> 
           <mrow> 
            <mtext>
              infeas 
            </mtext> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math></p><p style="text-align:left">Tabu Search</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">6.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left">iter ← 0</p></td> 
     </tr> 
    </table>
    <p>Continued</p>
    <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">7.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left">while iter ≤ max iter do</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">8.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> while iter ≤ max_iter_div do</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">9.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> Phase 1: Minimize Cost</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">10.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> iter_opt ← 0</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">11.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> while iter opt ≤ max iter opt /*Attempt at finding a solution with a smaller cost regardless of the infeasibility*/do</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">12.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left">Perform a round robin search on the months : For a given month 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            m 
          </mi> 
          <mo>
            ∈ 
          </mo> 
          <mi>
            M 
          </mi> 
         </mrow> 
        </math>, select one variable with index i(m) : i(m) = i(m – 1) + 1 (mod 3)</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">13.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> Update the neighbourhood of the selected variable</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">14.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left">Evaluate all solutions 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mi>
             i 
           </mi> 
           <msup> 
            <mi>
              m 
            </mi> 
            <mo>
              ′ 
            </mo> 
           </msup> 
          </msubsup> 
         </mrow> 
        </math> in Ɲ 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mi>
               i 
             </mi> 
             <mi>
               m 
             </mi> 
            </msubsup> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math> with respect to 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mover accent="true"> 
            <mi>
              f 
            </mi> 
            <mo>
              → 
            </mo> 
           </mover> 
           <mrow> 
            <mtext>
              min 
            </mtext> 
           </mrow> 
           <mrow> 
            <mtext>
              cost 
            </mtext> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math>, 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mover accent="true"> 
            <mi>
              f 
            </mi> 
            <mo>
              → 
            </mo> 
           </mover> 
           <mrow> 
            <mtext>
              min 
            </mtext> 
           </mrow> 
           <mrow> 
            <mtext>
              infeas 
            </mtext> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math> (only for storage with solution)</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">15.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msup> 
           <mi>
             S 
           </mi> 
           <mrow> 
            <mtext>
              current 
            </mtext> 
           </mrow> 
          </msup> 
          <mo>
            ← 
          </mo> 
          <mtext>
            arg 
          </mtext> 
          <munder> 
           <mrow> 
            <mi>
              min 
            </mi> 
           </mrow> 
           <msup> 
            <mi>
              u 
            </mi> 
            <mo>
              ′ 
            </mo> 
           </msup> 
          </munder> 
          <msubsup> 
           <mover accent="true"> 
            <mi>
              f 
            </mi> 
            <mo>
              → 
            </mo> 
           </mover> 
           <mrow> 
            <mtext>
              min 
            </mtext> 
           </mrow> 
           <mrow> 
            <mtext>
              cost 
            </mtext> 
           </mrow> 
          </msubsup> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <msup> 
            <mi>
              u 
            </mi> 
            <mo>
              ′ 
            </mo> 
           </msup> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math> </p><p style="text-align:left">for 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            u 
          </mi> 
          <mo>
            = 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             1 
           </mn> 
           <mn>
             1 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             2 
           </mn> 
           <mn>
             1 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             3 
           </mn> 
           <mn>
             1 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             1 
           </mn> 
           <mn>
             2 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             2 
           </mn> 
           <mn>
             2 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             3 
           </mn> 
           <mn>
             2 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <mo>
            ⋯ 
          </mo> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             1 
           </mn> 
           <mrow> 
            <mrow> 
             <mo>
               | 
             </mo> 
             <mi>
               m 
             </mi> 
             <mo>
               | 
             </mo> 
            </mrow> 
           </mrow> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             2 
           </mn> 
           <mrow> 
            <mrow> 
             <mo>
               | 
             </mo> 
             <mi>
               m 
             </mi> 
             <mo>
               | 
             </mo> 
            </mrow> 
           </mrow> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             3 
           </mn> 
           <mrow> 
            <mrow> 
             <mo>
               | 
             </mo> 
             <mi>
               m 
             </mi> 
             <mo>
               | 
             </mo> 
            </mrow> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math> and 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            m 
          </mi> 
          <mo>
            ∈ 
          </mo> 
          <mi>
            M 
          </mi> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">16.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> end while</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">17.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> iter_feas ← 0</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">18.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> Phase 2: Minimize Infeasibility</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">19.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> while iter_feas ≤ max_iter_feas /* Reducing infeasibility*/do</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">20.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> Select the month 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            m 
          </mi> 
          <mo>
            ∈ 
          </mo> 
          <mi>
            M 
          </mi> 
         </mrow> 
        </math> for which the search is to be carried out :</p><p style="text-align:left"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            m 
          </mi> 
          <mo>
            ← 
          </mo> 
          <mtext>
            arg 
          </mtext> 
          <munder> 
           <mrow> 
            <mi>
              max 
            </mi> 
           </mrow> 
           <msup> 
            <mi>
              m 
            </mi> 
            <mo>
              ′ 
            </mo> 
           </msup> 
          </munder> 
          <msubsup> 
           <mover accent="true"> 
            <mi>
              f 
            </mi> 
            <mo>
              → 
            </mo> 
           </mover> 
           <mrow> 
            <mtext>
              min 
            </mtext> 
           </mrow> 
           <mrow> 
            <mtext>
              infeas 
            </mtext> 
           </mrow> 
          </msubsup> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <msup> 
            <mi>
              u 
            </mi> 
            <mo>
              ′ 
            </mo> 
           </msup> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math> for 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            u 
          </mi> 
          <mo>
            = 
          </mo> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <mrow> 
            <mi>
              u 
            </mi> 
            <mo>
              = 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               1 
             </mn> 
             <mn>
               1 
             </mn> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               2 
             </mn> 
             <mn>
               1 
             </mn> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               3 
             </mn> 
             <mn>
               1 
             </mn> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               1 
             </mn> 
             <mn>
               2 
             </mn> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               2 
             </mn> 
             <mn>
               2 
             </mn> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               3 
             </mn> 
             <mn>
               2 
             </mn> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <mo>
              ⋯ 
            </mo> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               1 
             </mn> 
             <mrow> 
              <mrow> 
               <mo>
                 | 
               </mo> 
               <mi>
                 m 
               </mi> 
               <mo>
                 | 
               </mo> 
              </mrow> 
             </mrow> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               2 
             </mn> 
             <mrow> 
              <mrow> 
               <mo>
                 | 
               </mo> 
               <mi>
                 m 
               </mi> 
               <mo>
                 | 
               </mo> 
              </mrow> 
             </mrow> 
            </msubsup> 
            <mo>
              , 
            </mo> 
            <msubsup> 
             <mi>
               u 
             </mi> 
             <mn>
               3 
             </mn> 
             <mrow> 
              <mrow> 
               <mo>
                 | 
               </mo> 
               <mi>
                 m 
               </mi> 
               <mo>
                 | 
               </mo> 
              </mrow> 
             </mrow> 
            </msubsup> 
           </mrow> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">21.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> Update the neighbourhood of the selected variable</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">22.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> Evaluate all solutions 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             1 
           </mn> 
           <msup> 
            <mi>
              m 
            </mi> 
            <mo>
              ′ 
            </mo> 
           </msup> 
          </msubsup> 
         </mrow> 
        </math> in Ɲ 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mi>
             i 
           </mi> 
           <mi>
             m 
           </mi> 
          </msubsup> 
         </mrow> 
        </math> with respect to 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mover accent="true"> 
            <mi>
              f 
            </mi> 
            <mo>
              → 
            </mo> 
           </mover> 
           <mrow> 
            <mtext>
              min 
            </mtext> 
           </mrow> 
           <mrow> 
            <mtext>
              cost 
            </mtext> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math>, 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mover accent="true"> 
            <mi>
              f 
            </mi> 
            <mo>
              → 
            </mo> 
           </mover> 
           <mrow> 
            <mtext>
              min 
            </mtext> 
           </mrow> 
           <mrow> 
            <mtext>
              infeas 
            </mtext> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math> (only for storage with solution)</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">23.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msup> 
           <mi>
             S 
           </mi> 
           <mrow> 
            <mtext>
              current 
            </mtext> 
           </mrow> 
          </msup> 
          <mo>
            ← 
          </mo> 
          <mtext>
            arg 
          </mtext> 
          <munder> 
           <mrow> 
            <mi>
              min 
            </mi> 
           </mrow> 
           <msup> 
            <mi>
              u 
            </mi> 
            <mo>
              ′ 
            </mo> 
           </msup> 
          </munder> 
          <msubsup> 
           <mover accent="true"> 
            <mi>
              f 
            </mi> 
            <mo>
              → 
            </mo> 
           </mover> 
           <mrow> 
            <mtext>
              min 
            </mtext> 
           </mrow> 
           <mrow> 
            <mtext>
              cost 
            </mtext> 
           </mrow> 
          </msubsup> 
          <mrow> 
           <mo>
             ( 
           </mo> 
           <msup> 
            <mi>
              u 
            </mi> 
            <mo>
              ′ 
            </mo> 
           </msup> 
           <mo>
             ) 
           </mo> 
          </mrow> 
         </mrow> 
        </math> </p><p style="text-align:left"> for 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            u 
          </mi> 
          <mo>
            = 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             1 
           </mn> 
           <mn>
             1 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             2 
           </mn> 
           <mn>
             1 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             3 
           </mn> 
           <mn>
             1 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             1 
           </mn> 
           <mn>
             2 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             2 
           </mn> 
           <mn>
             2 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             3 
           </mn> 
           <mn>
             2 
           </mn> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <mo>
            ⋯ 
          </mo> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             1 
           </mn> 
           <mrow> 
            <mrow> 
             <mo>
               | 
             </mo> 
             <mi>
               m 
             </mi> 
             <mo>
               | 
             </mo> 
            </mrow> 
           </mrow> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             2 
           </mn> 
           <mrow> 
            <mrow> 
             <mo>
               | 
             </mo> 
             <mi>
               m 
             </mi> 
             <mo>
               | 
             </mo> 
            </mrow> 
           </mrow> 
          </msubsup> 
          <mo>
            , 
          </mo> 
          <msubsup> 
           <mi>
             u 
           </mi> 
           <mn>
             3 
           </mn> 
           <mrow> 
            <mrow> 
             <mo>
               | 
             </mo> 
             <mi>
               m 
             </mi> 
             <mo>
               | 
             </mo> 
            </mrow> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math> and 
        <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <mi>
            m 
          </mi> 
          <mo>
            ∈ 
          </mo> 
          <mi>
            M 
          </mi> 
         </mrow> 
        </math></p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">24.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> end while</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">25.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> end while</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">26.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left"> Apply diversification</p></td> 
     </tr> 
     <tr> 
      <td class="aleft" width="7.65%"><p style="text-align:left">27.</p></td> 
      <td class="aleft" width="92.35%"><p style="text-align:left">end while</p></td> 
     </tr> 
    </table>
    <table-wrap id="table3">
     <label>
      <xref ref-type="table" rid="table3">
       Table 3
      </xref></label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.143618-"></xref>Table 3. Parameters of the Tabu search.</title>
     </caption>
     <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <td class="custom-bottom-td acenter" width="16.12%"><p style="text-align:center">Parameter</p></td> 
       <td class="custom-bottom-td acenter" width="61.01%"><p style="text-align:center">Description</p></td> 
       <td class="custom-bottom-td acenter" width="22.87%"><p style="text-align:center">Value</p></td> 
      </tr> 
      <tr> 
       <td class="custom-top-td acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msub> 
            <mi>
              V 
            </mi> 
            <mrow> 
             <mtext>
               lagoon_storage 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="custom-top-td acenter" width="61.01%"><p style="text-align:center">storage capacity of the lagoon (days)</p></td> 
       <td class="custom-top-td acenter" width="22.87%"><p style="text-align:center">35</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <mi>
             H 
           </mi> 
           <mi>
             R 
           </mi> 
           <mi>
             T 
           </mi> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">hydraulic retention time (days)</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">20</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msub> 
            <mi>
              n 
            </mi> 
            <mrow> 
             <mtext>
               herd 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">number of livestock</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">500 cows</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msubsup> 
            <mi>
              n 
            </mi> 
            <mrow> 
             <mtext>
               day 
             </mtext> 
            </mrow> 
            <mi>
              m 
            </mi> 
           </msubsup> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">number of days in a month</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">Varies</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msub> 
            <mi>
              P 
            </mi> 
            <mrow> 
             <mtext>
               rated 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">rating of the induction machine (hp)</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">150</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <mi>
             L 
           </mi> 
           <mi>
             H 
           </mi> 
           <msub> 
            <mi>
              V 
            </mi> 
            <mrow> 
             <mtext>
               propane 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">lower heating value of propane (kJ/kg)</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">46,300 <xref ref-type="bibr" rid="scirp.143618-27">
          [27]
         </xref></p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msub> 
            <mi>
              T 
            </mi> 
            <mrow> 
             <mtext>
               water 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">water temperature (˚C)</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">35</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msub> 
            <mi>
              η 
            </mi> 
            <mrow> 
             <mtext>
               HEX 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">heat exchanger efficiency (%)</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">70</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msub> 
            <mi>
              η 
            </mi> 
            <mrow> 
             <mtext>
               rated 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">boiler efficiency (%)</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">70</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msub> 
            <mi>
              c 
            </mi> 
            <mrow> 
             <mtext>
               lagoon 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">unit cost of lagoon (USD/m3)</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">2.47 <xref ref-type="bibr" rid="scirp.143618-28">
          [28]
         </xref></p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="16.12%"><p style="text-align:center"> 
         <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
           <msub> 
            <mi>
              c 
            </mi> 
            <mrow> 
             <mtext>
               propane 
             </mtext> 
            </mrow> 
           </msub> 
          </mrow> 
         </math></p></td> 
       <td class="acenter" width="61.01%"><p style="text-align:center">unit cost of propane (USD/m+)</p></td> 
       <td class="acenter" width="22.87%"><p style="text-align:center">1.98 <xref ref-type="bibr" rid="scirp.143618-29">
          [29]
         </xref></p></td> 
      </tr> 
     </table>
    </table-wrap>
    <p>Continued</p>
    <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msup> 
           <mi>
             n 
           </mi> 
           <mrow> 
            <mtext>
              rand_div 
            </mtext> 
           </mrow> 
          </msup> 
         </mrow> 
        </math></p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">consecutive random moves (diversification Strategy D1)</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">5</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msup> 
           <mi>
             n 
           </mi> 
           <mrow> 
            <mtext>
              nonimprov_div 
            </mtext> 
           </mrow> 
          </msup> 
         </mrow> 
        </math></p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">consecutive non-improving moves to apply diversification</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">5</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msup> 
           <mi>
             n 
           </mi> 
           <mrow> 
            <mtext>
              restart_div 
            </mtext> 
           </mrow> 
          </msup> 
         </mrow> 
        </math></p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">restarts with incumbent solution (diversification Strategy D2)</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">3</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center">max_iter_div</p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">number of iterations for application of diversification</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">100</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msub> 
           <mi>
             δ 
           </mi> 
           <mtext>
             h 
           </mtext> 
          </msub> 
         </mrow> 
        </math></p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">allowance for heat demand constraint (kW)</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">10</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center">max_iter</p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">number of iterations for the stopping condition</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">150</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center">max_iter_opt</p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">number of iterations for the minimisation of cost</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">50</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center">max_iter_feas</p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">number of iterations for the minimisation of infeasibility</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">25</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center">max_iter_div</p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">number of iterations for the application of diversification</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">100</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center"></p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center"></p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center"></p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msup> 
           <mi>
             S 
           </mi> 
           <mrow> 
            <mtext>
              infeas 
            </mtext> 
           </mrow> 
          </msup> 
         </mrow> 
        </math></p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">threshold of infeasibility</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">Varies</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="16.12%"><p style="text-align:center"> 
        <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
          <msubsup> 
           <mi>
             S 
           </mi> 
           <mn>
             0 
           </mn> 
           <mrow> 
            <mtext>
              infeas 
            </mtext> 
           </mrow> 
          </msubsup> 
         </mrow> 
        </math></p></td> 
      <td class="acenter" width="61.01%"><p style="text-align:center">initial threshold of infeasibility</p></td> 
      <td class="acenter" width="22.87%"><p style="text-align:center">varies</p></td> 
     </tr> 
    </table>
    <p>The WET system includes global constraints (U<sup>GLOBAL</sup>) such as energy balance or heat demand that must be met for a feasible solution. However, strict feasibility throughout the search can prevent reaching low-cost areas.</p>
    <p>There are two sets of constraints in the optimisation problem of the WET. U<sup>MODEL</sup> is the set of constraints to be satisfied by the models of the WET and U<sup>GLOBAL</sup> is the set of global constraints to be satisfied by the solution of the optimisation problem, i.e., CWET ( 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          1 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         , 
       </mo> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          2 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
       <mo>
         , 
       </mo> 
       <msubsup> 
        <mi>
          u 
        </mi> 
        <mn>
          3 
        </mn> 
        <mi>
          m 
        </mi> 
       </msubsup> 
      </mrow> 
     </math>) (4). The set of constraints to be satisfied by the models of the WET, U<sup>MODEL</sup> is not defined because the WET models are treated as black boxes in the optimization problem. The method of handling constraints discussed applies to the set of global constraints, U<sup>GLOBAL</sup>. Infeasible solutions result if the global constraints are not satisfied. Infeasible solutions are allowed in the Tabu Search optimisation in order to allow the search to move to low cost regions during the minimisation of cost. To ensure that the search goes back to a feasible region, a second objective function is introduced. The second objective function minimises infeasibility (20). The Tabu Search optimisation alternates between minimising cost (Phase 1) and minimising infeasibility (Phase 2). Thresholds are set for the extent to which infeasibility is allowed. These thresholds are progressively reduced during the course of the optimisation.</p>
    <p>Traditional TS avoids infeasible regions or uses penalty functions. This approach intentionally explores infeasible space and uses two separate objectives to alternate exploration and correction, improving convergence in constraint-heavy scenarios.</p>
    <p>WET operates over time (months), with different variables (e.g., feed rates, storage levels, energy outputs) for each period. Standard TS does not inherently support temporal decomposition or sequential optimisation.</p>
    <p>A multi-period optimisation strategy is developed to ensure a smooth transition from one period to the next during optimisation. Different strategies are used for the phase for minimisation of cost (Phase 1) and minimisation of infeasibility (Phase 2). The period is measured in months. The variables are optimised for each month. During the phase for minimisation of cost, optimisation is done based on a round robin strategy of the months, starting with the month of January. If a solution is encountered that is worse than the current solution, another variable is selected for optimisation, in the same month. If all three variables do not result in an improved solution, the current solution is not updated. This is repeated for the twelve months period. If the current solution does not improve over this 12 months period, it is updated with the least non-improving solution. The optimisation strategy during the phase for minimisation of infeasibility is such that the month with the most infeasible solution is selected for optimisation. This is in contrast to the phase of minimisation of cost, where the round robin method is used. Once a feasible solution is encountered during the phase of minimisation of infeasibility, the strategy reverts to minimisation of cost.</p>
    <p>This strategy introduces temporal awareness into the optimisation, allowing TS to behave more intelligently across time-dependent variables—something not considered in basic TS.</p>
    <p>Tabu Search is prone to getting trapped in local optima, especially in large, constrained, or multi-modal search spaces like those in WET. Diversification is essential to escape these regions.</p>
    <p>If the incumbent solution does not improve for max iter div iterations, diversification is applied. Diversification is applied by performing three consecutive restarts with the incumbent solution. For each restart performed, a different variable is selected for optimisation. Diversification is only applied if after the max_iter_div iteration, the current solution does not improve for n<sup>nonimprov_div</sup> consecutive iterations. The Tabu list is emptied on performing each of the restarts.</p>
    <p>Standard TS relies on diversification through long-term memory (e.g., frequency-based strategies), which may not be sufficient for highly constrained problems. This explicit restart mechanism with structured randomness ensures stronger exploration and reduces premature convergence. summary of key improvements of the tabu search is presented in <xref ref-type="table" rid="table4">
      Table 4
     </xref>.</p>
    <table-wrap id="table4">
     <label>
      <xref ref-type="table" rid="table4">
       Table 4
      </xref></label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.143618-"></xref>Table 4. Adaptations of the Tabu search.</title>
     </caption>
     <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <td class="custom-bottom-td acenter" width="31.03%"><p style="text-align:center">Adaptation</p></td> 
       <td class="custom-bottom-td acenter" width="35.59%"><p style="text-align:center">Motivation</p></td> 
       <td class="custom-bottom-td acenter" width="33.37%"><p style="text-align:center">Benefit over standard TS</p></td> 
      </tr> 
      <tr> 
       <td class="custom-top-td acenter" width="31.03%"><p style="text-align:center">Pareto Front for multi-objective</p></td> 
       <td class="custom-top-td acenter" width="35.59%"><p style="text-align:center">Handle trade-offs in cost/infeasibility across periods</p></td> 
       <td class="custom-top-td acenter" width="33.37%"><p style="text-align:center">Retains multiple diverse, non-dominated solutions</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="31.03%"><p style="text-align:center">Dual objective strategy</p></td> 
       <td class="acenter" width="35.59%"><p style="text-align:center">Navigate feasibility/cost conflict</p></td> 
       <td class="acenter" width="33.37%"><p style="text-align:center">Enables escape into low-cost regions and guided return to feasibility</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="31.03%"><p style="text-align:center">Multi-period Round-robin + feas-targeting</p></td> 
       <td class="acenter" width="35.59%"><p style="text-align:center">Reflect time dimension and focus effort effectively</p></td> 
       <td class="acenter" width="33.37%"><p style="text-align:center">Improves search balance and precision across temporal phases</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="31.03%"><p style="text-align:center">Diversification by incumbent restarts</p></td> 
       <td class="acenter" width="35.59%"><p style="text-align:center">Escape local optima in black-box models</p></td> 
       <td class="acenter" width="33.37%"><p style="text-align:center">Facilitates broader exploration with structured randomness</p></td> 
      </tr> 
     </table>
    </table-wrap>
    <p>These enhancements make the Tabu Search algorithm better suited for the real-world complexity, dynamic constraints, and trade-offs inherent in biomass WET optimisation, producing more reliable, diverse, and cost-effective solutions than the standard approach.</p>
   </sec>
  </sec><sec id="s5">
   <title>5. Experiments and Results</title>
   <p>This section begins with a description of the data instances and definitions of the experiments.</p>
   <sec id="s5_1">
    <title>5.1. Data Instances</title>
    <p>The data instance is obtained from a dairy farm of herd size 500 cows <xref ref-type="bibr" rid="scirp.143618-30">
      [30]
     </xref>.</p>
   </sec>
   <sec id="s5_2">
    <title>5.2. Descriptions of the Strategies of the Tabu Search Experiments</title>
    <p>The experiments carried out are grouped into strategies. Many strategies were tested and the most successful ones were reported. The strategies correspond to the aspects of the Tabu Search developed are defined below:</p>
    <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(i)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy C1, the threshold of infeasibility is adjusted to handle constraints;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(ii)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy C2, the number of iterations for minimisation of cost and minimization of infeasibility are varied to handle constraints;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(iii)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy C3, feasible and infeasible solutions are allowed during the phase for minimisation of infeasibility;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(iv)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy D1, diversification by consecutive random moves;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(v)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy D2, diversification by consecutive restarts with the incumbent solution;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(vi)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy MOBJ1, evaluation of Pareto incumbent solutions;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(vii)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy MOBJ2, summing cost components of the objective function;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(viii)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy MP1, round robin and updating current solution;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(ix)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy MP2, round robin and updating solution with improving solution only;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(x)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy MP3, round robin and updating solution with improving solution only,</p><p style="text-align:center">and sampling all variables in one month if required;</p></td> 
     </tr> 
     <tr> 
      <td class="acenter" width="10.34%"><p style="text-align:center">(xi)</p></td> 
      <td class="acenter" width="89.66%"><p style="text-align:center">Strategy MP4, round robin during the phase for minimisation of infeasibility;</p></td> 
     </tr> 
    </table>
    <p>Experiments with Strategies C1, C2 and C3 were developed to investigate the handling of constraints. Two diversification strategies D1 and D2 were experimented with. Experiments with Strategies MOBJ1 and MOBJ2 were developed to investigate the formation of Pareto incumbent solutions in the multi-objective and multiperiod optimisation problem. Handling of the multi-period nature of the problem was investigated in Strategies MP1, MP2, MP3 and MP4. Each of these strategies is explained in detail in the following sections.</p>
    <p>
     <xref ref-type="bibr" rid="scirp.143618-"></xref>The aim of the experiments for constraint handling carried out in Strategies C1, C2 and C3, is to show that allowing infeasibility for a given set of parameters aids in moving towards an optimal solution faster. Two parameters are experimented with: (i) thresholds of infeasibility and (ii) number of iterations for which the cost or the infeasibility is minimised. The threshold is a value that limits the extent of infeasibility. This is required to prevent the solution from becoming too infeasible and therefore unable to return to a feasible region. In Strategy C1 the threshold of infeasibility is fixed. Three fixed thresholds are experimented with. These are S<sup>infeas</sup> = −500, −200 and −100. The results of fixing the threshold of infeasibility to S<sup>infeas</sup> = −200 is shown in <xref ref-type="fig" rid="fig3(a)">
      Figure 3(a)
     </xref>.</p>
    <p>When the threshold is fixed to S<sup>infeas</sup> = −500, the cost reaches low values. However these low values are in the infeasible regions. The costs of grid electricity for the current solutions are −18,278, −18,197, −19,091 and −19,949 at the 50th, 100th, 200th iterations and at termination, respectively.</p>
    <fig-group id="fig3" position="float">
     <fig id="fig3" position="float">
      <label>Figure 3</label>
      <caption>
       <title>(a) Fixed Threshold Sinfeas = −200--(b) Varying Thresholds S o infeas =−200--(c) Varying Thresholds S O infeas =−300--Figure 3. Strategy C1.</title>
      </caption>
      <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId478.jpeg?20250630113920" />
     </fig>
     <fig id="fig3" position="float">
      <label>Figure 3</label>
      <caption>
       <title>(a) Fixed Threshold Sinfeas = −200--(b) Varying Thresholds S o infeas =−200--(c) Varying Thresholds S O infeas =−300--Figure 3. Strategy C1.</title>
      </caption>
      <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId479.jpeg?20250630113920" />
     </fig>
     <fig id="fig3" position="float">
      <label>Figure 3</label>
      <caption>
       <title>(a) Fixed Threshold Sinfeas = −200--(b) Varying Thresholds S o infeas =−200--(c) Varying Thresholds S O infeas =−300--Figure 3. Strategy C1.</title>
      </caption>
      <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId482.jpeg?20250630113920" />
     </fig>
    </fig-group>
    <p>Fixing the Threshold of infeasibility to a lower value of S<sup>infeas</sup> = −200, gives better incumbent solutions. The iterations 100, 200 and the termination conduction have costs of grid electricity for the incumbent solutions of −16,130, −16,627, -16,730 and −16,834. The current solution also reaches relatively low values of costs of grid electricity of −17,701 and −18,302 at the 50<sup>th</sup> and 100<sup>th</sup> iterations respectively. Fixing the threshold of infeasibility to a lower value of S<sup>infeas</sup> = −100 does not result in significantly better incumbent solutions. At S<sup>infeas</sup> = −100, the cost of grid electricity of the incumbent solution is −16,130. This is because S<sup>infeas</sup> = −100 is so low that it restricts the search to a local region. This is evidenced by the high values of the costs of grid electricity of the current solutions of −15,410, −13,739 and −13,022 at the 100th and 200th iterations, and at termination respectively, for the cows data instance. The respective values of infeasibility are −155, −99 and −139. The costs of grid electricity are higher than those at S<sup>infeas</sup> = −500 and −200, at the same number of iterations. From these experiments, a good starting point for the threshold of infeasibility is identified as S<sup>infeas</sup> = −200.</p>
    <p>Further investigation was required on the effect of varying the threshold of infeasibility, before a conclusion could be arrived at on the suitability of the strategy of fixing the threshold. Strategy C1 therefore also included experiments where the threshold of infeasibility was varied. The initial thresholds of infeasibility were set to 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mi>
          O 
        </mi> 
        <mrow> 
         <mtext>
           infeas 
         </mtext> 
        </mrow> 
       </msubsup> 
      </mrow> 
     </math> = −500, −300, −200 and −100. The thresholds of infeasibility were varied as follows:</p>
    <p>
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mi>
          O 
        </mi> 
        <mrow> 
         <mi mathvariant="normal">
           i 
         </mi> 
         <mtext>
           nfeas 
         </mtext> 
        </mrow> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mo>
         − 
       </mo> 
       <mn>
         500 
       </mn> 
       <mo>
         ; 
       </mo> 
       <msup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mi mathvariant="normal">
           i 
         </mi> 
         <mtext>
           nfeas 
         </mtext> 
        </mrow> 
       </msup> 
       <mo>
         ∈ 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mrow> 
         <mo>
           − 
         </mo> 
         <mn>
           500 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           400 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           300 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           200 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           100 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           50 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           40 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           ⋯ 
         </mo> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           10 
         </mn> 
        </mrow> 
        <mo>
          } 
        </mo> 
       </mrow> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (22)</p>
    <p>
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mi>
          O 
        </mi> 
        <mrow> 
         <mi mathvariant="normal">
           i 
         </mi> 
         <mtext>
           nfeas 
         </mtext> 
        </mrow> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mo>
         − 
       </mo> 
       <mn>
         300 
       </mn> 
       <mo>
         ; 
       </mo> 
       <msup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mi mathvariant="normal">
           i 
         </mi> 
         <mtext>
           nfeas 
         </mtext> 
        </mrow> 
       </msup> 
       <mo>
         ∈ 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mrow> 
         <mo>
           − 
         </mo> 
         <mn>
           300 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           200 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           100 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           50 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           40 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           30 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           20 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           10 
         </mn> 
        </mrow> 
        <mo>
          } 
        </mo> 
       </mrow> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (23)</p>
    <p>
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mi>
          O 
        </mi> 
        <mrow> 
         <mi mathvariant="normal">
           i 
         </mi> 
         <mtext>
           nfeas 
         </mtext> 
        </mrow> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mo>
         − 
       </mo> 
       <mn>
         200 
       </mn> 
       <mo>
         ; 
       </mo> 
       <msup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mi mathvariant="normal">
           i 
         </mi> 
         <mtext>
           nfeas 
         </mtext> 
        </mrow> 
       </msup> 
       <mo>
         ∈ 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mrow> 
         <mo>
           − 
         </mo> 
         <mn>
           200 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           150 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           100 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           90 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           80 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           70 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           60 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           ⋯ 
         </mo> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           10 
         </mn> 
        </mrow> 
        <mo>
          } 
        </mo> 
       </mrow> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (24)</p>
    <p>
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mi>
          O 
        </mi> 
        <mrow> 
         <mi mathvariant="normal">
           i 
         </mi> 
         <mtext>
           nfeas 
         </mtext> 
        </mrow> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mo>
         − 
       </mo> 
       <mn>
         100 
       </mn> 
       <mo>
         ; 
       </mo> 
       <msup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mi mathvariant="normal">
           i 
         </mi> 
         <mtext>
           nfeas 
         </mtext> 
        </mrow> 
       </msup> 
       <mo>
         ∈ 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mrow> 
         <mo>
           − 
         </mo> 
         <mn>
           100 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           90 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           80 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           70 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           60 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           50 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           40 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           30 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           ⋯ 
         </mo> 
         <mo>
           , 
         </mo> 
         <mo>
           − 
         </mo> 
         <mn>
           10 
         </mn> 
        </mrow> 
        <mo>
          } 
        </mo> 
       </mrow> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math> (25)</p>
    <p>where 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mi>
          O 
        </mi> 
        <mrow> 
         <mtext>
           infeas 
         </mtext> 
        </mrow> 
       </msubsup> 
      </mrow> 
     </math> is the initial threshold of infeasibility and 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           infeas 
         </mtext> 
        </mrow> 
       </msup> 
      </mrow> 
     </math> is the varying threshold of infeasibility. The results of these experiments are shown in <xref ref-type="fig" rid="figFigures 3 (b) and 3 (c)">
      Figures 3 (b) and 3 (c)
     </xref>.</p>
    <p>With regard to Strategy C1, a cost of grid electricity of −16,884 for the incumbent solution, is obtained, at 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mi>
          O 
        </mi> 
        <mrow> 
         <mtext>
           infeas 
         </mtext> 
        </mrow> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mo>
         − 
       </mo> 
       <mn>
         200 
       </mn> 
      </mrow> 
     </math>. 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msup> 
        <mi>
          S 
        </mi> 
        <mrow> 
         <mtext>
           infeas 
         </mtext> 
        </mrow> 
       </msup> 
       <mo>
         = 
       </mo> 
       <mo>
         − 
       </mo> 
       <mn>
         200 
       </mn> 
      </mrow> 
     </math> also gave the best incumbent solution, for the experiments of fixing the threshold of infeasibility. Varying the threshold of infeasibility gives a better incumbent solution compared to fixing the threshold of infeasibility.</p>
    <p>
     <xref ref-type="fig" rid="figFigures 3 (b)">
      Figures 3 (b)
     </xref>, show a move towards lower costs at the beginning of the iterations, for 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msubsup> 
        <mi>
          S 
        </mi> 
        <mi>
          O 
        </mi> 
        <mrow> 
         <mtext>
           infeas 
         </mtext> 
        </mrow> 
       </msubsup> 
       <mo>
         = 
       </mo> 
       <mo>
         − 
       </mo> 
       <mn>
         200 
       </mn> 
      </mrow> 
     </math>. As the iterations progress, the costs tend to increase. This is because of the progressive decrease in the threshold of infeasibility, leading to large decreases in infeasibility. Decreasing infeasibility has the reverse effect of increasing cost. The increasing cost means the solution is moving away from the optimal. Diversification Strategy D1 which involves making 5 consecutive random moves was being applied after 100 iterations, to move the search to a new region. This however did not impact the optimisation significantly and the incumbent solution was obtained before the 100th iteration (<xref ref-type="fig" rid="fig3 (b)">
      Figure 3 (b)
     </xref>). In order to obtain improving incumbent solutions after the 100th iteration, diversification Strategy D2 was developed and used for subsequent experiments of Strategies C2, C3, MOBJ1, MOBJ2, MP1, MP2, MP3 and MP4. In Strategy D2, a restart was made with the incumbent solution, if there was no improvement in the incumbent solution after max-iter_div iterations.</p>
    <p>In Strategy C2, the number of iterations for the minimisation of cost and minimisation of infeasibility were varied. In the first experiment done, the same number of iterations were allowed for minimisation of cost and minimisation of infeasibility, i.e. max_iter_opt = max_iter_feas = 50. The incumbent solutions are better with max_iter_opt = 50 and max_iter_feas = 25 than with max_iter_opt = max_iter_feas = 50.</p>
    <p>The experiments were repeated with: (i) max_iter_opt = 75 and max_iter_feas = 50, and (ii) max_iter_opt = max_iter_feas = 75. The best parameters for Strategy C2 were found to be max_iter_opt = 75 and max_iter_feas = 50 (<xref ref-type="fig" rid="fig4">
      Figure 4
     </xref>). The cost of grid electricity of the incumbent solution for max_iter_opt = 75 and max_iter_feas = 50 was −20,545, whereas that with max_iter_opt = 50 and max_iter_feas = 25 was −19,504.</p>
    <fig id="fig4" position="float">
     <label>Figure 4</label>
     <caption>
      <title>Figure 4. Strategy C2: Varying number of iterations for minimisation of cost and minimisation of infeasibility.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId505.jpeg?20250630113921" />
    </fig>
    <p>The handling of feasible solutions that arise during the phase of minimisation of infeasibility is investigated in Strategy C3. In this strategy, both feasible and infeasible solutions (within the threshold of infeasibility) are allowed during the phase of minimisation of infeasibility. This is compared to what is done in Strategy C2. Although Strategy C2 investigated the number of iterations for minimisation of cost and minimisation of infeasibility, it uses a different method from Strategy C3 for handling feasible solutions that arise during minimisation of infeasibility (<xref ref-type="fig" rid="fig5">
      Figure 5
     </xref>). A comparison can therefore be made between Strategy C3 and C2. In Strategy C2 only feasible solutions are allowed during the phase of minimisation of infeasibility as a first priority. If there are no feasible solutions, then infeasible solutions within the threshold of infeasibility are allowed. The results of the experiment for Strategy C3 are compared with those of Strategy C2. The cost of grid electricity of the incumbent solution for Strategy C3 is −18,308, whereas that of Strategy C2 with max_iter_opt = 75 and max_iter_feas = 50 is −20,545. It can be deduced that the strategy of allowing only feasible solutions as a first priority, during the minimisation of infeasibility (Strategy C3) is better than allowing both feasible and infeasible solutions.</p>
    <fig id="fig5" position="float">
     <label>Figure 5</label>
     <caption>
      <title>Figure 5. Strategy C3: Allowing all solutions within threshold during minimisation of infeasibility.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId506.jpeg?20250630113920" />
    </fig>
    <p>Two strategies were applied to test diversification. In the experiments of <xref ref-type="fig" rid="fig3">
      Figure 3
     </xref>, diversification Strategy D1 was applied. In Strategy D1, diversification was applied if the incumbent solution did not improve for 100 iterations. The diversification was also subject to the current solution not improving for 5 consecutive iterations. Diversification was applied by making 5 consecutive random moves. The results for Strategy D1 show that this type of diversification does not result in an improvement in the incumbent solution. Experiments were performed with Strategy D2, where three consecutive restarts with the incumbent solution were performed, if the solution did not improve for 100 iterations. Strategy D2 is described by Pseudocode 1. <xref ref-type="fig" rid="fig6">
      Figure 6
     </xref> shows that use of Strategy D2 for diversification results in an improvement in the incumbent solution. The cost of grid electricity of the incumbent solution is −16,884 with Strategy D1 and −19,504 with Strategy D2.</p>
    <fig id="fig6" position="float">
     <label>Figure 6</label>
     <caption>
      <title>Continued<p class="imgGroupCss_v"><img class=" imgMarkCss lazy" data-original="https://html.scirp.org/file/2730342-rId508.jpeg?20250630113921" /></p><xref ref-type="bibr" rid="scirp.143618-"></xref><p class="imgGroupCss_v"><img class=" imgMarkCss lazy" data-original="https://html.scirp.org/file/2730342-rId509.jpeg?20250630113921" /></p>Figure 6. Strategy D2 + C2: Diversification by restarting with the incumbent solution and varying number of iterations for minimisation of cost and minimisation of infeasibility.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId507.jpeg?20250630113921" />
    </fig>
    <p>The experiments in this section are to investigate Strategy MOBJ1, developed to evaluate the multi-objective function, on a Pareto incumbent front, while taking into consideration its multi-period nature. Strategy MOBJ1 is compared to Strategy MOBJ2. In Strategy MOBJ2, the sum of the cost components of the objective function is calculated and the solution with the least sum is selected as the current solution. In Strategy MOBJ1 the multi-period cost components of the objective function are evaluated for non-dominance and form a Pareto incumbent front. <xref ref-type="fig" rid="fig7">
      Figure 7
     </xref> shows the improvement in the incumbent solution using Strategy MOBJ1. The cost of grid electricity of the incumbent solution for Strategy MOBJ1 is −20,545, whereas there is no improvement in the incumbent solution with Strategy MOBJ2. As such, Strategy MOBJ1 where a Pareto incumbent front is used to evaluate the objective function is better than Strategy MOBJ2 which sums the cost components of the objective function.</p>
    <fig id="fig7" position="float">
     <label>Figure 7</label>
     <caption>
      <title>Figure 7. Strategy MOBJ1: Multi-objective optimisation using pareto incumbent front.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId510.jpeg?20250630113923" />
    </fig>
    <p>The aim of the experiments in this section is to investigate the strategies for handling the multi-period nature of the optimisation problem, in a manner that will ensure continuity from one period to the next. The Tabu Search has two phases: (i) minimization of cost and (ii) minimisation of infeasibility. Different strategies for handling multi-periodicity are applied to the different phases. Each of these strategies is discussed next under the appropriate phase of the Tabu Search.</p>
    <p>Round Robin in Phase 1 of Minimisation of Cost</p>
    <p>In Strategy MP1 round robin of the months is carried out while updating the current solution, whether it is improving or not as described in Pseudocode 2.</p>
    <p>In Strategy MP2, round robin of the months is carried out while updating the current solution with an improved solution only (Pseudocode 3). The results of experiments using Strategy MP2 are shown in <xref ref-type="fig" rid="fig8">
      Figure 8
     </xref>.</p>
    <fig id="fig8" position="float">
     <label>Figure 8</label>
     <caption>
      <title>Continued<p class="imgGroupCss_v"><img class=" imgMarkCss lazy" data-original="https://html.scirp.org/file/2730342-rId512.jpeg?20250630113924" /></p><xref ref-type="bibr" rid="scirp.143618-"></xref><p class="imgGroupCss_v"><img class=" imgMarkCss lazy" data-original="https://html.scirp.org/file/2730342-rId513.jpeg?20250630113924" /></p>Figure 8. Strategy MP2: Round robin &amp; updating current solution with an improving solution only.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId511.jpeg?20250630113924" />
    </fig>
    <p>The third multi-period strategy investigated is MP3, where round robin of the months is carried out and more than one variable is sampled in a given month, in order to obtain an improving solution. Strategy MP3 is described by Pseudocode 4. Strategy MP3 was investigated together with the Strategy C2 with max_iter_opt = 75 and max_iter_feas = 50.</p>
    <fig id="fig9" position="float">
     <label>Figure 9</label>
     <caption>
      <title>Continued<p class="imgGroupCss_v"><img class=" imgMarkCss lazy" data-original="https://html.scirp.org/file/2730342-rId515.jpeg?20250630113924" /></p>Strategies MP1 and MP2 are compared to Strategy MP3. Strategy MP3 gives the best cost of grid electricity of −20,545 for the incumbent solution. Strategies MP1 and MP2 give costs of grid electricity of −17,169 and −17,534, respectively.The best strategy with regard to round robin, during the phase of minimisation of cost is MP3, where the current solution is updated with improving solutions only. This is done while trying out all the variables in turn in the same month, until the current solution improves or until after 12 iterations. A non improving solution is allowed only after the current solution has not been updated for 12 iterations. This strategy ensures that there is an attempt to find an improving solution in every month, and tries to build continuity from one month to the next during the optimisation.Round Robin in Phase 2 of Minimisation of InfeasibilityRound robin is also investigated in Phase 2 where infeasibility is being minimized (Strategy MP4). The results are compared with those of Strategy MP3. Strategy MP3 also investigated the selection of the month for which to carry out the optimisation, during the phase for minimisation of infeasibility. In Strategy MP3 optimisation of the variables is done for the month with the least infeasible solution. The incumbent solution with Strategy MP3, is better than with Strategy MP4. −20,545 is obtained as the cost of grid electricity with Strategy MP3 and −16,691 with Strategy MP. During the minimisation of infeasibility, selection of the month with the most infeasible solution for optimisation (Strategy MP3) is therefore better than round robin of the months (Strategy MP4).6. Limitations and Future Research DirectionsWhile the proposed adaptations to the Tabu Search (TS) algorithm significantly improve its performance for the Waste-to-Energy Technology (WET) optimisation problem, certain limitations remain. These limitations stem from the algorithm’s design choices, inherent complexity of the problem domain, and practical implementation constraints. Identifying these shortcomings can guide further refinement and inspire new avenues of research.6.1. Sensitivity to Parameter SettingsThe algorithm depends heavily on various predefined parameters such as max_iter, max_iter_opt, S_infeas, diversification thresholds, and the structure of the neighbourhood search. These parameters are problem-specific and must be finely tuned to achieve optimal performance.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/2730342-rId514.jpeg?20250630113924" />
    </fig>
    <p>Improper tuning can lead to premature convergence, inefficient exploration, or failure to find feasible solutions.</p>
    <p>Incorporating learning-based or self-adaptive parameter adjustment strategies could allow the algorithm to dynamically fine-tune its behaviour during the search. In addition, a systematic study of parameter influence could help identify robust settings or provide guidelines for tuning in similar WET scenarios.</p>
   </sec>
   <sec id="s5_3">
    <title>6.2. Computational Cost in Multi-Period, Multi-Objective Evaluation</title>
    <p>The use of a Pareto incumbent front across multiple periods requires maintaining and evaluating a large number of non-dominated solutions. This becomes computationally intensive as the number of time periods and decision variables increases.</p>
    <p>Scalability may be limited for larger problem instances (e.g., multi-year planning, more variables per period), leading to long runtimes.</p>
    <p>Introducing surrogate (meta) models to approximate objective function evaluations can reduce computational burden. Also, combining TS with Genetic Algorithms (GA) or NSGA-II can improve scalability while maintaining diversity and exploration.</p>
   </sec>
   <sec id="s5_4">
    <title>6.3. Dependence on Black-Box WET Models</title>
    <p>The algorithm treats the WET models as black boxes, with no gradient or structural information used in the search. While this increases generality, it limits the efficiency of the search, especially in identifying and avoiding infeasible regions.Search may waste time evaluating infeasible or non-informative regions, particularly in large and sparse feasible spaces.</p>
    <p>Incorporate domain knowledge or partial model understanding (e.g., constraint bounds, sensitivity analysis) to guide search more intelligently. Also, the use machine learning to learn feasibility boundaries or infeasibility trends from historical evaluations.</p>
   </sec>
   <sec id="s5_5">
    <title>6.4. Limited Exploration Beyond Local Regions</title>
    <p>Although diversification strategies are introduced (e.g., restarts with incumbent solution), they are still based on the local region around the best-known solution. There is limited capability for global exploration or large structural changes in the solution space.</p>
    <p>The search may remain confined to local basins of attraction, especially in highly non-convex or discontinuous spaces.</p>
    <p>Introduce frequency-based memory or historical solution archives to promote broader exploration. Also, periodically apply large perturbations or problem-specific heuristics to explore distant regions of the search space.</p>
   </sec>
   <sec id="s5_6">
    <title>6.5. No Explicit Handling of Uncertainty or Dynamic Changes</title>
    <p>The current algorithm assumes deterministic input parameters and static operating conditions. In real-world WET scenarios, parameters such as feedstock availability, energy demand, and cost factors can vary over time or be uncertain.Solutions may be suboptimal or infeasible under real operating conditions if the model does not account for uncertainty.</p>
    <p>Adapt the algorithm to handle uncertainty by optimising expected performance or worst-case outcomes. In addition, use multiple demand or supply scenarios in the objective evaluation and solution comparison. The summary of limitations and research directions are presented in <xref ref-type="table" rid="table5">
      Table 5
     </xref>.</p>
    <table-wrap id="table5">
     <label>
      <xref ref-type="table" rid="table5">
       Table 5
      </xref></label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.143618-"></xref>Table 5. Summary of Limitations and Research Directions.</title>
     </caption>
     <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <td class="custom-bottom-td acenter" width="32.02%"><p style="text-align:center">Limitation</p></td> 
       <td class="custom-bottom-td acenter" width="31.35%"><p style="text-align:center">Impact</p></td> 
       <td class="custom-bottom-td acenter" width="36.63%"><p style="text-align:center">Suggested Future Work</p></td> 
      </tr> 
      <tr> 
       <td class="custom-top-td acenter" width="32.02%"><p style="text-align:center">Sensitivity to parameters</p></td> 
       <td class="custom-top-td acenter" width="31.35%"><p style="text-align:center">May cause inefficiency or convergence issues</p></td> 
       <td class="custom-top-td acenter" width="36.63%"><p style="text-align:center">Adaptive parameter tuning, sensitivity analysis</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="32.02%"><p style="text-align:center">Computational burden of Pareto evaluation</p></td> 
       <td class="acenter" width="31.35%"><p style="text-align:center">Limits scalability to large/multi-year problems</p></td> 
       <td class="acenter" width="36.63%"><p style="text-align:center">Surrogate models, hybridisation with GA or NSGA-II</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="32.02%"><p style="text-align:center">Black-box model treatment</p></td> 
       <td class="acenter" width="31.35%"><p style="text-align:center">Inefficient navigation of feasible space</p></td> 
       <td class="acenter" width="36.63%"><p style="text-align:center">Constraint learning, domain-informed guidance</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="32.02%"><p style="text-align:center">Limited global exploration</p></td> 
       <td class="acenter" width="31.35%"><p style="text-align:center">Risk of premature convergence to local optima</p></td> 
       <td class="acenter" width="36.63%"><p style="text-align:center">Long-term memory, Large Neighbourhood search</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="32.02%"><p style="text-align:center">Lack of uncertainty handling</p></td> 
       <td class="acenter" width="31.35%"><p style="text-align:center">Reduced real-world applicability</p></td> 
       <td class="acenter" width="36.63%"><p style="text-align:center">Robust/stochastic optimisation, scenario-based approaches</p></td> 
      </tr> 
     </table>
    </table-wrap>
   </sec>
  </sec><sec id="s6">
   <title>7. Conclusion</title>
   <p>The developments to the basic Tabu Search were designed to handle constraints, multi-objectives, multi-periods and diversification. Experiments were done, to test the adaptations developed. It was found out that for optimisation of WET, constraints are best handled by alternating between allowing feasible and infeasible solutions. The minimisation of cost should also be alternated with the minimisation of infeasibility, for different numbers of iterations. Diversification should be applied by performing restarts with the incumbent solution. It was also found out that evaluation of the multi-period cost components of the objective function on a Pareto incumbent front, is better than summing the cost components of the objective function. During minimization of cost, a round robin strategy of the months, should be applied, whereas during minimisation of infeasibility, the period with the most infeasible solution should be selected for optimisation.</p>
  </sec>
 </body><back>
  <ref-list>
   <title>References</title>
   <ref id="scirp.143618-ref1">
    <label>1</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Razali, M.K.M., Ayob, M., Rahman, A.H.A., Jarmin, R., Liu, C.Y., Maaya, M., et al. (2025) Unveiling Effective Heuristic Strategies: A Review of Cross-Domain Heuristic Search Challenge Algorithms. Computer Modeling in Engineering&amp;Sciences, 142, 1233-1288. &gt;https://doi.org/10.32604/cmes.2025.060481
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref2">
    <label>2</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Arık, O.A. (2024) Fuzzy Rule-Based Variable Neighborhood Search Algorithm for Single-Machine Weighted Earliness/Tardiness Scheduling with Common Due Date. Neural Computing and Applications, 37, 3355-3371. &gt;https://doi.org/10.1007/s00521-024-10844-5
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref3">
    <label>3</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Glover, F. and Laguna, M. (1997) Tabu Search. Kluwer Academic. &gt;https://doi.org/10.1007/978-1-4615-6089-0
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref4">
    <label>4</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Srivastava, S., Tripathi, A., Bansal, S. and Vuppuluri, P.P. (2025) Introduction to Optimization: Techniques and Applications in Engineering. In: Bansal, S., Tripathi, A., Srivastava, S. and Vuppuluri, P.P., Eds., Nature-Inspired Metaheuristic Algorithms, CRC Press, 1-28. &gt;https://doi.org/10.1201/9781003612858-1
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref5">
    <label>5</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Martí, R., Sevaux, M. and Sörensen, K. (2025) Fifty Years of Metaheuristics. European Journal of Operational Research, 321, 345-362. &gt;https://doi.org/10.1016/j.ejor.2024.04.004
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref6">
    <label>6</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Ben Abdellafou, K., Hadda, H. and Korbaa, O. (2018) An Improved Tabu Search Meta-Heuristic Approach for Solving Scheduling Problem with Non-Availability Constraints. Arabian Journal for Science and Engineering, 44, 3369-3379. &gt;https://doi.org/10.1007/s13369-018-3525-3
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref7">
    <label>7</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Sharma, S., Khanum, S., Madhumala, R.B., Maroju, A. and Aggarwal, S. (2025) Prioritization and Meta-Heuristic Approach for Efficient Congestion Control in Vehicular Ad Hoc Networks (VANETs). International Journal of Information Technology. &gt;https://doi.org/10.1007/s41870-025-02542-9
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref8">
    <label>8</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Glover, F. (1997) Tabu Search and Adaptive Memory Programming—Advances, Applications and Challenges. In: Barr, R.S., Helgason, R.V. and Kennington, J.L., Eds., Interfaces in Computer Science and Operations Research, Springer, 1-75. &gt;https://doi.org/10.1007/978-1-4615-4102-8_1
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref9">
    <label>9</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Laguna, M. (2018) Tabu Search. In: Martí, R., Pardalos, P. and Resende, M., Eds., Handbook of Heuristics, Springer, 741-758. &gt;https://doi.org/10.1007/978-3-319-07124-4_24
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref10">
    <label>10</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Zhou, X., Ma, H., Gu, J., Chen, H. and Deng, W. (2022) Parameter Adaptation-Based Ant Colony Optimization with Dynamic Hybrid Mechanism. Engineering Applications of Artificial Intelligence, 114, Article ID: 105139. &gt;https://doi.org/10.1016/j.engappai.2022.105139
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref11">
    <label>11</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Bou Saleh, M., Chariete, A., Schwartz, L., Grunder, O. and El Hassani, A.H. (2024) Reactive Tabu Search and Mixed-Integer Linear Programming for Multi-Day Assignment, Scheduling, and Routing Problems of Specialised Education and Home-Care Services. International Journal of Production Research, 63, 1779-1802. &gt;https://doi.org/10.1080/00207543.2024.2391947
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref12">
    <label>12</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     David, M., Uzorka, A. and Makeri, Y.A. (2022) Optimisation of a Renewable Energy System for Rural Electrification. Journal of Power and Energy Engineering, 10, 1-15. &gt;https://doi.org/10.4236/jpee.2022.1011001
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref13">
    <label>13</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Iliopoulou, C., Kepaptsoglou, K. and Vlahogianni, E. (2019) Metaheuristics for the Transit Route Network Design Problem: A Review and Comparative Analysis. Public Transport, 11, 487-521. &gt;https://doi.org/10.1007/s12469-019-00211-2
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref14">
    <label>14</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Pirim, H., Bayraktar, E. and Eksioglu, B. (2008) Tabu Search: A Comparative Study (Vol. 278). Intech Open Access Publisher. &gt;https://doi.org/10.5772/5637 
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref15">
    <label>15</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Makumbi, D., Uzorka, A. and Ajiji Makeri, Y. (2022) Number of Cattle for Commercialising Electricity from Cattle Waste to Energy Technology. International Research Journal of Applied Sciences, Engineering and Technology, 8, 1-14. &gt;https://cirdjournals.com/index.php/irjaset/article/view/824 
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref16">
    <label>16</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Arostegui, M.A., Kadipasaoglu, S.N. and Khumawala, B.M. (2006) An Empirical Comparison of Tabu Search, Simulated Annealing, and Genetic Algorithms for Facilities Location Problems. International Journal of Production Economics, 103, 742-754. &gt;https://doi.org/10.1016/j.ijpe.2005.08.010
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref17">
    <label>17</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Zhi, J. and Keskin, B.B. (2018) A Multi-Product Production/distribution System Design Problem with Direct Shipments and Lateral Transshipments. Networks and Spatial Economics, 18, 937-972. &gt;https://doi.org/10.1007/s11067-018-9436-8
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref18">
    <label>18</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Mota, A., Ávila, P., Bastos, J., Roque, L.A.C. and Pires, A. (2025) Comparative Analysis of Simulated Annealing and Tabu Search for Parallel Machine Scheduling. Procedia Computer Science, 256, 573-582. &gt;https://doi.org/10.1016/j.procs.2025.02.154
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref19">
    <label>19</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Ekşioğlu, B., Ekşioğlu, S.D. and Jain, P. (2008) A Tabu Search Algorithm for the Flowshop Scheduling Problem with Changing Neighborhoods. Computers&amp;Industrial Engineering, 54, 1-11. &gt;https://doi.org/10.1016/j.cie.2007.04.004
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref20">
    <label>20</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Ansótegui, C., Heymann, B., Pon, J., Sellmann, M. and Tierney, K. (2018) Hyper-reactive Tabu Search for MaxSAT. In: Battiti, R., Brunato, M., Kotsireas, I. and Pardalos, P., Eds., Learning and Intelligent Optimization, Springer, 309-325. &gt;https://doi.org/10.1007/978-3-030-05348-2_27
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref21">
    <label>21</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Chou, X., Gambardella, L.M. and Montemanni, R. (2021) A Tabu Search Algorithm for the Probabilistic Orienteering Problem. Computers&amp;Operations Research, 126, Article ID: 105107. &gt;https://doi.org/10.1016/j.cor.2020.105107
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref22">
    <label>22</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Uzorka, A., Kibirige, D., Mustafa, M.M. and Ukagwu, J.K. (2025) Design and Implementation of a Photovoltaic System for Health Facilities in Rural Areas of Uganda. Discover Applied Sciences, 7, Article No. 197. &gt;https://doi.org/10.1007/s42452-025-06640-y
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref23">
    <label>23</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Pothiya, S., Ngamroo, I. and Kongprawechnon, W. (2008) Application of Multiple Tabu Search Algorithm to Solve Dynamic Economic Dispatch Considering Generator Constraints. Energy Conversion and Management, 49, 506-516. &gt;https://doi.org/10.1016/j.enconman.2007.08.012
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref24">
    <label>24</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Batstone, D.J., Keller, J., Angelidaki, I., Kalyuzhnyi, S.V., Pavlostathis, S.G., Rozzi, A., et al. (2002) The IWA Anaerobic Digestion Model No 1 (ADM1). Water Science and Technology, 45, 65-73. &gt;https://doi.org/10.2166/wst.2002.0292
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref25">
    <label>25</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     National Renewable Energy Laboratory (2002) Advanced Vehicle&amp;Fuels Research.&gt;https://docs.nrel.gov/docs/fy02osti/31967.pdf 
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref26">
    <label>26</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Mohan, N. (2014) Advanced Electric Drives: Analysis, Control, and Modeling Using MATLAB/Simulink. John Wiley&amp;Sons. &gt;https://doi.org/10.1002/9781118910962
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref27">
    <label>27</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     National Gas (2022) Characteristics of LP Gas. &gt;https://nationalgasco.net/characteristics-of-lpg/ 
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref28">
    <label>28</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Lusk, P. (1998) Methane Recovery from Animal Manures. The Current Opportunities Casebook. &gt;https://docs.nrel.gov/docs/fy99osti/25145.pdf 
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref29">
    <label>29</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Burns, R. (2007) Status of Manure Anaerobic Digestion in the United States. International Conference on 21st Century Challenges to Sustainable Agri-Food Systems: Biotechnical, Environment, Nutrition, Trade and Policy, 15-17 March 2007, 476-481.
    </mixed-citation>
   </ref>
   <ref id="scirp.143618-ref30">
    <label>30</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     NYSERDA (2022) DG/CHP Integrated Data System. &gt;https://der.nyserda.ny.gov/data/
    </mixed-citation>
   </ref>
  </ref-list>
 </back>
</article>