<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors</journal-id>
<journal-title>Sensors</journal-title>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name></publisher></journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3390/s110403611</article-id>
<article-id pub-id-type="publisher-id">sensors-11-03611</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Optimal Rate Allocation in Cluster-Tree WSNs</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Morell</surname><given-names>Antoni</given-names></name><xref ref-type="aff" rid="af1-sensors-11-03611"><sup>1</sup></xref><xref ref-type="corresp" rid="c1-sensors-11-03611"><sup>★</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Vicario</surname><given-names>Jose Lopez</given-names></name><xref ref-type="aff" rid="af1-sensors-11-03611"><sup>1</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Vilajosana</surname><given-names>Xavier</given-names></name><xref ref-type="aff" rid="af2-sensors-11-03611"><sup>2</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Vilajosana</surname><given-names>Ignasi</given-names></name><xref ref-type="aff" rid="af3-sensors-11-03611"><sup>3</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Seco-Granados</surname><given-names>Gonzalo</given-names></name><xref ref-type="aff" rid="af1-sensors-11-03611"><sup>1</sup></xref></contrib></contrib-group>
<aff id="af1-sensors-11-03611">
<label>1</label> Telecommunications and Systems Engineering Department, Universitat Autònoma de Barcelona, UAB Campus, 08193 Cerdanyola del Vallès, Spain; E-Mails: <email>jose.vicario@uab.cat</email> (J.L.V.); <email>gonzalo.seco@uab.cat</email> (G.S.-G.)</aff>
<aff id="af2-sensors-11-03611">
<label>2</label> IT, Multimedia and Telecommunications Department, Universitat Oberta de Catalunya, Rambla Poblenou, 156, 08018 Barcelona, Spain; E-Mail: <email>xvilajosana@uoc.edu</email></aff>
<aff id="af3-sensors-11-03611">
<label>3</label> World Sensing S.L., Baixada Gomis, 1, 08023 Barcelona, Spain; E-Mail: <email>ivilajosana@worldsensing.com</email></aff>
<author-notes>
<corresp id="c1-sensors-11-03611">
<label>★</label> Author to whom correspondence should be addressed; E-Mail: <email>antoni.morell@uab.cat</email>; Tel.: +34-93-586-82-39.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2011</year></pub-date>
<pub-date pub-type="epub">
<day>25</day>
<month>3</month>
<year>2011</year></pub-date>
<volume>11</volume>
<issue>4</issue>
<fpage>3611</fpage>
<lpage>3639</lpage>
<history>
<date date-type="received">
<day>26</day>
<month>1</month>
<year>2011</year></date>
<date date-type="rev-recd">
<day>21</day>
<month>3</month>
<year>2011</year></date>
<date date-type="accepted">
<day>23</day>
<month>3</month>
<year>2011</year></date></history>
<permissions>
<copyright-statement>© 2011 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2011</copyright-year>
<license>
<p>This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (http://creativecommons.org/licenses/by/3.0/).</p></license></permissions>
<abstract>
<p>In this paper, we propose a solution to the problem of guaranteed time slot allocation in cluster-tree WSNs. Our design uses the so-called Network Utility Maximization (NUM) approach as far as we aim to provide a fair distribution of the available resources. From the point of view of implementation, we extend here the authors’ proposed Coupled-Decompositions Method (CDM) in order to compute the NUM problem inside the cluster tree topology and we prove the optimality of this new extended version of the method. As a result, we obtain a distributed solution that reduces the total amount of signalling information in the network up to a factor of 500 with respect to the classical techniques, that is, primal and dual decomposition. This is possible because the CDM finds the optimal solution with a small number of iterations. Furthermore, when we compare our solution to the standard-proposed First Come First Serve (FCFS) policy, we realize that FCFS becomes pretty unfair as the traffic load in the network increases and thus, a fair allocation of resources can be considered whenever the price to pay in terms of signalling and computational complexity is controlled.</p></abstract>
<kwd-group>
<kwd>wireless sensor networks</kwd>
<kwd>contention free access</kwd>
<kwd>fair time slot allocation</kwd>
<kwd>distributed optimization</kwd>
<kwd>reduced signalling</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>Wireless Sensor Networks (WSN) have attracted the attention of the scientific community in the last years. This interest is mainly driven by the large amount of industrial applications that have appeared thanks to the cost reduction of the sensors. In this kind of networks, the standard IEEE 802.15.4 is usually adopted for the PHY and MAC layers [<xref ref-type="bibr" rid="b1-sensors-11-03611">1</xref>,<xref ref-type="bibr" rid="b2-sensors-11-03611">2</xref>]. This is because this standard has been specially designed with the aim of providing low cost devices with long battery life.</p>
<p>The IEEE 802.15.4 standard, in particular, offers two operating modes: the non-beacon mode and the beacon mode. In the first mode, nodes in the network are not synchronized and access the channel via unslotted Carrier Sense Multiple Access/Collision Avoidance (CSMA/CA). In the beacon-enabled mode, on the other hand, the network is synchronized by means of the beacons transmitted by a node acting as network coordinator and transmissions are organized in time slots. Apart from allowing the nodes to access the channel via contention (with slotted CSMA/CA in this case), this mode also provides guaranteed service to the nodes by allocating Guaranteed Time Slot (GTS) by means of a scheduling strategy. The adoption of GTS is included in order to assure QoS requirements in situations where CSMA/CA is less effective (e.g., under high traffic load). In that sense, new versions of the IEEE 802.15.4 standard such as IEEE 802.15.4e [<xref ref-type="bibr" rid="b3-sensors-11-03611">3</xref>] or other coming standards such as WirelessHART [<xref ref-type="bibr" rid="b4-sensors-11-03611">4</xref>] or ISA 100.11a [<xref ref-type="bibr" rid="b5-sensors-11-03611">5</xref>] evolve with a clear definition of resources in order to manage the Quality of Service (QoS) of the ongoing connections. For example, IEEE 802.15.4e will be mostly based on GTS.</p>
<p>Concerning GTS management, the IEEE 802.15.4 standard follows a first-come-first-served (FCFS) strategy. The problem of such strategy is that the bandwidth allocation is not optimized, large delays can occur and fairness between users is not assured. In order to improve this strategy, several studies in the literature address the problem of bandwidth allocation and scheduling. The problem, however, is usually solved for star topologies (e.g., [<xref ref-type="bibr" rid="b6-sensors-11-03611">6</xref>]) and further research is needed for the multi-hop case (mesh and tree-based networks). In [<xref ref-type="bibr" rid="b7-sensors-11-03611">7</xref>], for instance, a review of scheduling strategies is presented but most of the algorithms are suboptimal and/or heuristic. Besides, the allocation problem for multi-hop networks presented in [<xref ref-type="bibr" rid="b7-sensors-11-03611">7</xref>] is not efficiently solved and the studies referred in this work are related to generic wireless networks (instead of wireless sensor networks). Even in the case of the upcoming standards (IEEE802.15.4e, WirelessHART and ISA100.11a), where the use of guaranteed resources is emphasized, their allocation is still an open issue.</p>
<p>The main problem of multi-hop networks in the beacon-enabled mode is that this mode suffers from beacon collisions between different coordinators in the network. In a tree-deployed WSN, in particular, each parent in the network acts as a coordinator of its respective children. Therefore, each parent is in charge of its local synchronization by sending its own beacons and, then, collisions between the different beacon frames can appear if the system is not organized. In order to solve this issue, IEEE 802.15.4b Task Group presents several collision avoidance strategies [<xref ref-type="bibr" rid="b8-sensors-11-03611">8</xref>]. Among all of them, it is of special relevance one strategy based on a time division approach as it is adopted by the Zigbee specification [<xref ref-type="bibr" rid="b9-sensors-11-03611">9</xref>]. In particular, this approach consists in dividing time in such a way that the beacon frame of each coordinator is sent during the inactive periods of the rest of coordinators. It is worth noting, however, that the proposed techniques are focused on the beacon collision avoidance problem and that the slot allocation problem is not really solved. Indeed, some works in the literature depart from these strategies to introduce beacon frame scheduling techniques (see [<xref ref-type="bibr" rid="b10-sensors-11-03611">10</xref>] for instance) but the scheduling of GTS slots inside each beacon frame is not directly addressed.</p>
<p>In this paper, we propose a resource allocation algorithm for distributing GTS slots in a tree-deployed wireless sensor network based on the IEEE 802.15.4 standard. Nevertheless, our approach is general and can be applied to other standards that define resources and provide means to share them among the sensors. In other words, although our results have considered the current version of the IEEE 802.15.4 standard, the contribution in this paper is not limited to it. More specifically, we derive a distributed algorithm that provides the optimal slot allocation based on a fair strategy that accounts for both the demand and the priorities of the different nodes. To do so, the problem is formulated as a Network Utility Maximization (NUM) problem, where the fairness among the different nodes can be adjusted, and the optimal solution is derived by means of a novel convex decomposition technique obtained by the authors [<xref ref-type="bibr" rid="b11-sensors-11-03611">11</xref>,<xref ref-type="bibr" rid="b12-sensors-11-03611">12</xref>]. In particular, this novel technique, referred to as the Coupled-Decompositions Method (CDM), has been extended here to the cluster-tree topology with the aim of efficiently addressing the distributed nature of the network. This extension raised new challenges, such as the computation of the primal and dual projections in a distributed manner or the convergence proof of the method. The main characteristics of the proposed approach are the following: (i) it is able to obtain the optimal solution in a distributed way (<italic>i.e.</italic>, the solution is obtained by distributing the optimization problem through the different nodes in the network), (ii) it converges with a significantly lower number of iterations than other state of the art techniques, and (iii) it requires a lower amount of signaling in the network. It is worth noting that the optimization problem is first formulated in a generic way in order not to restrict the solution to a given scenario. Indeed, the proposed algorithm can be easily extrapolated to perform the joint allocation of time and frequency, which is completely aligned with the philosophy of near future systems (e.g., IEEE 802.15.4e). After that, we focus on the beacon enabled mode of IEEE 802.15.4 with a cluster-tree topology and solve the GTS slot allocation problem by adapting the proposed strategy to this scenario. Our method is compared with the first-come-first-served (FCFS) strategy adopted by the standard, showing that our solution provides a significant improvement in terms of fairness performance as the traffic in the network grows.</p>
<p>The rest of the paper is distributed as follows. In Section 2, the resource allocation problem is formulated as a NUM problem and the proposed Coupled-Decompositions Method is described. After that, in Section 3, the proposed strategy is adapted to a realistic scenario based on IEEE 802.15.4 and numerical results are provided. Finally, the conclusions of the paper are presented in Section 5.</p></sec>
<sec>
<label>2.</label>
<title>Distributed Fair Rate Allocation Algorithm</title>
<p>Let us assume a large-scale Wireless Sensor Network with <italic>N</italic> nodes that is monitoring a certain area. The mission of the network, as usual, is to gather the node measurements at the sink, where the information is processed. Let us assume that the nodes find their routes to the sink using best-effort solutions such as the Routing Protocol for Low Power and Lossy Networks (RPL) [<xref ref-type="bibr" rid="b13-sensors-11-03611">13</xref>] or alternatives [<xref ref-type="bibr" rid="b14-sensors-11-03611">14</xref>,<xref ref-type="bibr" rid="b15-sensors-11-03611">15</xref>]. As a result, the initial graph of the network turns into a minimum spanning tree. Note that these techniques are very interesting in the context of WSNs since they keep the complexity of the routing protocol reduced, even given that they are suboptimal according to a certain performance metric. As important as routing is the Multiple Access Control (MAC) protocol, that is, how the sensors gain access to the wireless channel and how the available rate is finally distributed among the nodes. As discussed previously, two different families of approaches are being considered: (i) contention-based (e.g., CSMA/CA) and (ii) demand-based techniques (e.g., GTS allocation). The former is usually implemented due to its simplicity but it becomes inefficient in terms of throughput as the traffic load grows. The latter gives us the optimal solution once a global cost function is determined but it suffers from computational complexity and signalling requirements. In this paper, we propose a distributed algorithm for the second approach that converges fast to the optimal solution, which implies a reduced amount of signalling in the network. Furthermore, it is computationally lightweight.</p>
<p>In the following, we assume that all the nodes in the network first make a rate request according to the amount of information they have to send. After running the distributed allocation algorithm, all of them get a certain transmission rate. The allocation depends on the rate requests, the priorities of the sensors, the minimum guaranteed rates and the maximum transmission rate at each level of the tree topology. All these parameters are known beforehand and the goal is to provide a fair rate distribution so that all the sensors in the network receive their transmission opportunities. On the contrary, note that a solution that maximizes the network throughput may prevent users with bad channel condition from transmitting. In practice, our solution is adequate for Frequency Division Multiple Access (FDMA) or Time Division Multiple Access (TDMA) since in both cases, it is possible to make an arbitrary division of the available total transmission rate in terms of bandwidth and time, respectively. <xref ref-type="fig" rid="f1-sensors-11-03611">Figure 1</xref> provides a general view of our demand-based solution, where each dashed box represents one multiple-user communication channel between the parent node and its child nodes. Furthermore, a circle represents a node (sensor) and a line between two nodes simply indicates that they can communicate (using the corresponding multi-user channel).</p>
<sec>
<label>2.1.</label>
<title>Problem Formulation under Fairness Considerations</title>
<p>Let us consider the following optimization problem [<xref ref-type="bibr" rid="b16-sensors-11-03611">16</xref>]
<disp-formula id="FD1">
<label>(1)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow/></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">Ar</mml:mtext>
<mml:mo>≼</mml:mo>
<mml:mtext mathvariant="bold-italic">c</mml:mtext></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow/></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>with variables <italic>r<sub>j</sub></italic> ∈ ℝ<sup>+</sup> that represent the rate allocated to the j-th sensor. The functions <italic>U<sub>j</sub></italic> : ℝ<sup>+</sup> → ℝ are strictly concave, increasing and differentiable in {<italic>r<sub>j</sub></italic> | <italic>m<sub>j</sub></italic> ≤ <italic>r<sub>j</sub></italic> ≤ <italic>M<sub>j</sub></italic>}, where <italic>M<sub>j</sub></italic> &gt; <italic>m<sub>j</sub></italic>, <italic>m<sub>j</sub></italic> ∈ ℝ<sup>+</sup>. The vector <bold><italic>c</italic></bold> = [<italic>c</italic><sub>1</sub>, . . ., <italic>c<sub>L</sub></italic>]<italic><sup>T</sup></italic> contains the maximum transmission rate in the <italic>L</italic> channels of the network and the matrix <bold><italic>A</italic></bold> represents the network topology. Note that each wireless channel connects one parent node to its child nodes and that each entry <italic>A</italic><sub><italic>k</italic>,<italic>j</italic></sub> is either 1 if the flow from the j-th sensor crosses the k-th channel or 0 otherwise. Note also that Problem (1) defines a convex optimization problem [<xref ref-type="bibr" rid="b17-sensors-11-03611">17</xref>,<xref ref-type="bibr" rid="b18-sensors-11-03611">18</xref>]. Finally, we assume that there exists at least one strictly feasible solution to the problem, <italic>i.e.</italic>, a point that satisfies <bold><italic>Ar</italic></bold> ≺ <bold><italic>c</italic></bold> and <italic>m<sub>j</sub></italic> &lt; <italic>r<sub>j</sub></italic> &lt; <italic>M<sub>j</sub></italic> ∀<italic>j</italic>, so that Slater’s constraint qualifications [<xref ref-type="bibr" rid="b18-sensors-11-03611">18</xref>] (Section 5.2.3) are fulfilled and thus strong duality holds.</p>
<p>The optimization framework in Problem (1) is known to provide a fair distribution of resources if the utility functions <italic>U<sub>j</sub></italic> are adequately chosen [<xref ref-type="bibr" rid="b19-sensors-11-03611">19</xref>,<xref ref-type="bibr" rid="b20-sensors-11-03611">20</xref>]. Moreover, we can specify the desired degree of fairness by fixing the parameter <italic>γ</italic> in the following family of utility functions [<xref ref-type="bibr" rid="b21-sensors-11-03611">21</xref>] (Lemma 2) in <xref ref-type="disp-formula" rid="FD2">Equation (2)</xref>. Furthermore, <italic>w<sub>j</sub></italic> ∈ ℝ<sup>+</sup> is defined as the priority of the j-th flow and it is used to balance the flow allocation towards the j-th sensor once the value of <italic>γ</italic> is fixed (the higher the value of <italic>w<sub>j</sub></italic>, the larger the allocation).
<disp-formula id="FD2">
<label>(2)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>γ</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mtext>log</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi>γ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi>γ</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi>γ</mml:mi></mml:mrow></mml:mfrac>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi>γ</mml:mi>
<mml:mo>≠</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula>Roughly speaking, with <italic>γ</italic> → ∞ we get a max-min fair solution, that is, we do not allow to increase the rate of the i-th flow in the network if it implies (due to the constraints) decreasing the j-th flow given that initially <italic>r<sub>j</sub></italic> &lt; <italic>r<sub>i</sub></italic>. That is the most stringent definition of fairness. The opposite situation is for <italic>γ</italic> = 0 and then the goal is to maximize the weighted network throughput. This solution is totally unfair since, depending on the network constraints, some sensors would have no transmission opportunities at all. An intermediate and well-established solution is obtained with <italic>γ</italic> = 1, a.k.a., proportional fairness. In this case, a small rate decrease in one flow is accepted if it implies a significant increase in other flows so that the network throughput is less penalized. For further details on fairness formulations, please refer to [<xref ref-type="bibr" rid="b21-sensors-11-03611">21</xref>] and references therein. Note, however, that except for <italic>γ</italic> = 0, increasing the rate Δ<italic>r</italic> produces a bigger increase in utility when the sensor has a small rate allocation than when it is high.</p>
<p>In our WSN scenario, we assume that the network is built-up so that each sensor knows the route to the sink inside the cluster tree. Furthermore, each parent node has the information about the maximum transmission rate of its cluster, which is given by its own superframe configuration, and each sensor has evaluated its radio link quality, e.g., by means of the Packet Delivery Ratio (PDR). Given all this information, the goal is to compute a fair distribution of the available rate among the sensors. In the following, we focus our attention in the resolution of Problem (1) and we leave the practical implementation issues to Section 3. From the point of view of the optimization mechanism, note that one possibility is to gather all the requests at the sink node, compute there the optimal rate allocation and send it back to the sensors. Although there exist very efficient methods in the literature to solve generic convex problems, e.g., the so-called interior point methods [<xref ref-type="bibr" rid="b18-sensors-11-03611">18</xref>] (Section 11.7), this approach is impractical in large-scale sensor networks as far as it implies an excess of signalling information. Therefore, there is a big interest in solving the problem as efficiently as possible, in a distributed manner. Efficient here means that: (i) the amount of signalling in the network and (ii) the computational load at the sensors must be kept small.</p></sec>
<sec>
<label>2.2.</label>
<title>Existing Work</title>
<p>The problem we have formulated in Problem (1) is known in the literature as the Network Utility Maximization (NUM) problem [<xref ref-type="bibr" rid="b22-sensors-11-03611">22</xref>] and several authors have employed classical decompositions, <italic>i.e.</italic>, primal decomposition [<xref ref-type="bibr" rid="b17-sensors-11-03611">17</xref>] (Section 6.4.2) and dual decomposition [<xref ref-type="bibr" rid="b17-sensors-11-03611">17</xref>] (Section 6.4.1) to solve it. Dual decomposition is usually preferred since it naturally provides a full distributed solution [<xref ref-type="bibr" rid="b23-sensors-11-03611">23</xref>,<xref ref-type="bibr" rid="b24-sensors-11-03611">24</xref>]. Indeed, the Active Queue Management (AQM) policy employed in the Transport Control Protocol (TCP) can be viewed as a convex optimization problem that is distributedly solved using a dual decomposition approach. Notwithstanding, optimally solving Problem (1) in a distributed manner is now time and signalling consuming due to the fact that the algorithms are based in a projected subgradient approach [<xref ref-type="bibr" rid="b17-sensors-11-03611">17</xref>] (Section 2.3). In general, the convergence of the algorithms is slow and furthermore, it depends on a user-adjusted step-size, which is not necessarily optimally fixed.</p>
<p>In order to overcome these drawbacks, we have proposed the Coupled-Decompositions Method (CDM) [<xref ref-type="bibr" rid="b11-sensors-11-03611">11</xref>,<xref ref-type="bibr" rid="b12-sensors-11-03611">12</xref>]. It simultaneously intertwines primal and dual decomposition techniques in a single approach, converges much faster to the optimal solution and avoids the choice of a user-defined step-size. Note that there exist other primal-dual convex methods in the literature that are different to our approach. Some of them do not take into account the separability of the problem and thus are not true decomposition-based techniques [<xref ref-type="bibr" rid="b25-sensors-11-03611">25</xref>,<xref ref-type="bibr" rid="b26-sensors-11-03611">26</xref>]. Other works use primal and dual domains as well as the separability of the problem but they concatenate primal and dual domains in their algorithms instead of really mixing them [<xref ref-type="bibr" rid="b22-sensors-11-03611">22</xref>,<xref ref-type="bibr" rid="b27-sensors-11-03611">27</xref>,<xref ref-type="bibr" rid="b28-sensors-11-03611">28</xref>], as we do in our CDM. In the following, we briefly review the classical decomposition methods. Afterwards, we extend the formulation of the CDM to rate allocation problems that exhibit a tree topology thus obtaining a novel distributed version of the method.</p></sec>
<sec>
<label>2.3.</label>
<title>Review of Primal and Dual Decompositions</title>
<p>Let us consider the following equivalent version of Problem (1), which contains the additional variables <bold><italic>y</italic></bold> = [<italic>y</italic><sub>1</sub>, . . ., <italic>y<sub>N</sub></italic>]<italic><sup>T</sup></italic> with <bold><italic>y</italic></bold> ∈ ℝ<italic><sup>N</sup></italic>,
<disp-formula id="FD3">
<label>(3)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow/></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Ay</mml:mi>
<mml:mo>≼</mml:mo>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow/></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>Under this transformation, it is clear that given <bold><italic>y</italic></bold>, Problem (3) can be separated into <italic>N</italic> independent problems, which are referred to as the primal subproblems in the specialized literature. In our particular case, these primal subproblems are
<disp-formula id="FD4">
<label>(4)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula>Notwithstanding, we still need to find the optimal values in <bold><italic>y</italic></bold>, that is, <bold><italic>y</italic><sup>*</sup></bold>. Fortunately, it is known that the primal subproblems define a convex function on the variables <italic>y<sub>j</sub></italic> and that the Lagrange dual variable <italic>λ<sub>j</sub></italic> associated with the constraint <italic>r<sub>j</sub></italic> ≤ <italic>y<sub>j</sub></italic> is a subgradient [<xref ref-type="bibr" rid="b29-sensors-11-03611">29</xref>] of <italic>p<sub>j</sub></italic> at the point <italic>y<sub>j</sub></italic> [<xref ref-type="bibr" rid="b17-sensors-11-03611">17</xref>] (Section 5.4.4).</p>
<p>On the other hand, the primal master problem is defined as
<disp-formula id="FD5">
<label>(5)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Ay</mml:mi>
<mml:mo>≼</mml:mo>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>and the goal here is to find the optimal values of <bold><italic>y</italic></bold>. Given that the subgradients of the subproblems are readily found once they are solved, the primal master problem can be computed using a projected gradient approach [<xref ref-type="bibr" rid="b17-sensors-11-03611">17</xref>] (Section 2.3). In other words, <bold><italic>s</italic></bold><italic><sub>p</sub></italic> = −[<italic>λ</italic><sub>1</sub>(<italic>y</italic><sub>1</sub>), . . ., <italic>λ<sub>N</sub></italic> (<italic>y<sub>N</sub></italic>)]<italic><sup>T</sup></italic> = − <bold><italic>λ</italic></bold>(<bold><italic>y</italic></bold>) is a subgradient of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> at <bold><italic>y,</italic></bold> where <italic>λ<sub>j</sub></italic>(<italic>y<sub>j</sub></italic>) is the value of the inner Lagrange multiplier of <italic>p<sub>j</sub></italic> given the value of <italic>y<sub>j</sub></italic>, and the following recursion converges to <bold><italic>y</italic></bold><italic><sup>*</sup></italic>,
<disp-formula id="FD6">
<label>(6)</label>
<mml:math display="block">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">s</mml:mi></mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mo>†</mml:mo></mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">λ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mo>†</mml:mo></mml:msup></mml:mrow></mml:math></disp-formula>where <italic>k</italic> indexes iterations, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is the user-defined step-size in primal decomposition and [·]<sup>†</sup> is the projection to the set {<bold><italic>y</italic></bold> ∈ ℝ<italic><sup>N</sup></italic> | <bold><italic>Ay</italic></bold> ≼ <bold><italic>c</italic></bold>}.</p>
<p>Dual decomposition is the dual-domain version of primal decomposition and, in this occasion, we focus on the dual problem [<xref ref-type="bibr" rid="b18-sensors-11-03611">18</xref>] (Section 5.2). In particular, we relax only the coupling constraint <bold><italic>Ay</italic></bold> ≼ <bold><italic>c</italic></bold> in Problem (3) thus defining the following dual master problem,
<disp-formula id="FD7">
<label>(7)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow>
<mml:mi>μ</mml:mi></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">μ</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi>
<mml:mo>≽</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>where <italic>d<sub>j</sub></italic>(<bold><italic>μ</italic></bold>) are the dual subproblems, defined as
<disp-formula id="FD8">
<label>(8)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">μ</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mi mathvariant="bold-italic">μ</mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula>where [<bold><italic>A</italic></bold><italic><sup>T</sup></italic>]<italic><sub>j</sub></italic> stands for the j-th row of <bold><italic>A</italic></bold><italic><sup>T</sup></italic>. As in primal decomposition, a subgradient of a dual subproblem is found at no cost once <italic>d<sub>j</sub></italic>(<bold><italic>μ</italic></bold>) is computed [<xref ref-type="bibr" rid="b17-sensors-11-03611">17</xref>] (Section 6.1) and under some non-restrictive conditions, that subgradient is in fact the gradient (see [<xref ref-type="bibr" rid="b17-sensors-11-03611">17</xref>] (Section 6.1.1)). In our case, a subgradient is obtained as [<xref ref-type="bibr" rid="b30-sensors-11-03611">30</xref>] 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">δ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">μ</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, where 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>*</mml:mo></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">μ</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> is the optimal value of <italic>y<sub>j</sub></italic> given <bold><italic>μ</italic></bold>. Therefore, a subgradient of the dual master problem at <bold><italic>μ</italic></bold> is <bold><italic>s</italic></bold><italic><sub>d</sub></italic> = <bold><italic>Ay</italic><sup>*</sup></bold>(<bold><italic>μ</italic></bold>) − <bold><italic>c.</italic></bold> Finally, the recursion
<disp-formula id="FD9">
<label>(9)</label>
<mml:math display="block">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo mathvariant="bold">*</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi></mml:mrow></mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mo>+</mml:mo></mml:msup>
<mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>where [<italic>a</italic>]<sup>+</sup> = max{0, <italic>a</italic>} and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is the step-size in dual decomposition, leads to <bold><italic>μ</italic></bold><sup>*</sup>.</p>
<p>Taking into account that we consider cluster-tree WSNs in this paper, both primal and dual decompositions can be used to deploy distributed flow optimization solutions. However, these techniques suffer from convergence speed and the need of adjusting 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> or 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, as discussed before. In the next subsection, we extend the authors’ proposed Coupled-Decompositions Method (CDM) [<xref ref-type="bibr" rid="b11-sensors-11-03611">11</xref>,<xref ref-type="bibr" rid="b12-sensors-11-03611">12</xref>] to provide a fully distributed solution in cluster-tree WSNs. Different to [<xref ref-type="bibr" rid="b11-sensors-11-03611">11</xref>], we propose here a single stage algorithm where each iteration of the technique takes into account all the nodes. In [<xref ref-type="bibr" rid="b11-sensors-11-03611">11</xref>], the proposed solution had several stages and in each stage, the nodes that belonged to the same network level were optimized thus involving several iterations. Therefore, the total number of iterations grew exponentially with the number of levels in the network. This drawback is overcome in the enhanced version of the method that we describe next.</p></sec>
<sec>
<label>2.4.</label>
<title>Proposed Algorithm</title>
<p>Let us consider the problem formulation in Problem (3) and let us define <italic>λ<sub>j</sub></italic> as the Lagrange multiplier (equivalently, dual variable) associated with the constraint <italic>r<sub>j</sub></italic> ≤ <italic>y<sub>j</sub></italic> for all <italic>j</italic>. As in dual decomposition, we keep <bold><italic>μ</italic></bold> = [<italic>μ</italic><sub>1</sub>, . . ., <italic>μ<sub>L</sub></italic>]<italic><sup>T</sup></italic> as the multipliers associated with the constraints in <bold><italic>Ay</italic></bold> ≼ <bold><italic>c</italic></bold>. The technique we propose here intertwines primal and dual decompositions in a single approach and it is composed of four building blocks, namely: (i) dual subproblems; (ii) primal projection; (iii) primal subproblems and (iv) dual projection (see <xref ref-type="fig" rid="f2-sensors-11-03611">Figure 2</xref>). Before going to a more detailed description of the method, let us sketch out the four steps in the <xref ref-type="fig" rid="f2-sensors-11-03611">Figure 2</xref>, that form a complete iteration of the CDM, using a resource-price interpretation. From a practical point of view, this overview together with the contents of Section 2.5 shall suffice to develop our solution in real networks.</p>
<p>It is usual in convex optimization to think of primal variables as resources and dual variables as the prices to be paid for them. Let us assume that <bold><italic>μ</italic></bold><italic><sup>k</sup></italic> fixes, at time instant <italic>k</italic>, the cost of transmitting one unit of rate through each of the available multiple-user channels. Note that the more congested the channel, the higher the cost is and that the cost for a non-congested channel is 0. Given <bold><italic>μ</italic></bold><italic><sup>k</sup></italic>, each sensor obtains 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> as the sum of the prices in the multiple-user channels it uses. When the sensor computes the dual subproblem from 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, it decides how many resources to buy, <italic>i.e.</italic>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, which essentially depends on its own utility function. However, the overall rate acquisition may violate the constraints in the network and it must be corrected. This is the task of the primal projection, that is, it gathers all the values in 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and modifies them to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> in order to satisfy the network constraints. Thereafter, the primal subproblems estimate the price they will pay for the new allocation, <italic>i.e.</italic>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. Finally, the dual projection looks at all the individual prices and tries to find a new consensus price <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup>. The entire process is repeated until all the sensors agree on the prices of the multiple-access channels.</p>
<p>Next, we describe one iteration of the method that starts with <bold><italic>μ</italic></bold><italic><sup>k</sup></italic> and ends up with <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup>. Afterwards, we prove in Section 2.8 that <bold><italic>μ</italic></bold><italic><sup>k</sup></italic> → <bold><italic>μ</italic>*</bold>. In the following, a star as in <bold><italic>y</italic>*</bold> or <bold><italic>μ</italic>*</bold> indicates optimal values and a superindex <italic>k</italic> as in <bold><italic>y</italic></bold><italic><sup>k</sup></italic> or <bold><italic>μ</italic></bold><italic><sup>k</sup></italic> indexes iterations. Furthermore, we make use of some of the Karush-Kuhn-Tucker optimality conditions [<xref ref-type="bibr" rid="b18-sensors-11-03611">18</xref>] (Section 5.5.3) of Problem (3). These are
<disp-formula id="FD10">
<label>(10)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD11">
<label>(11)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mi mathvariant="bold-italic">A</mml:mi>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>   </mml:mo>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>   </mml:mo>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>L</mml:mi></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD12">
<label>(12)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi>
<mml:mo>≽</mml:mo>
<mml:mn mathvariant="bold-italic">0</mml:mn></mml:mrow></mml:math></disp-formula>where [<bold><italic>A</italic></bold><italic><sup>T</sup></italic>]<italic><sub>j</sub></italic> is the j-th row of <bold><italic>A</italic></bold><italic><sup>T</sup></italic>. Note that <xref ref-type="disp-formula" rid="FD11">Equation (11)</xref> are the slackness conditions [<xref ref-type="bibr" rid="b18-sensors-11-03611">18</xref>] (Section 5.5.2) related to the constraints <bold><italic>Ay</italic></bold> ≼ <bold><italic>c</italic></bold> in Problem (3).</p>
<sec>
<label>2.4.1.</label>
<title>Dual Subproblems</title>
<p>From <bold><italic>μ</italic></bold><italic><sup>k</sup></italic>, each sensor computes 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> as in <xref ref-type="disp-formula" rid="FD10">Equation (10)</xref>. Thereafter, the sensor solves the following optimization problem,
<disp-formula id="FD13">
<label>(13)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula>Note that Problem (13) coincides with Problem (8) if we take <xref ref-type="disp-formula" rid="FD10">Equation (10)</xref> into account and thus we keep the nomenclature, that is, we refer to Problem (13) as the dual subproblems of the CDM. As a result of computing the dual subproblems, the optimal values of the inner optimization variables 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> given 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, <italic>i.e.</italic>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mo>*</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi></mml:mrow></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> are found as well. However, these values are not necessarily primal feasible, <italic>i.e.</italic>, they may not satisfy <bold><italic>Ay</italic></bold> ≼ <bold><italic>c</italic></bold>, and there is no guarantee that they accomplish the necessary slackness conditions in <xref ref-type="disp-formula" rid="FD11">Equation (11)</xref>. In the second step of the method, called the primal projection, we modify the resulting allocation <bold><italic>y</italic></bold><italic><sup>k</sup></italic> in order to satisfy both conditions.</p></sec>
<sec>
<label>2.4.2.</label>
<title>Primal Projection</title>
<p>In primal projection, the following optimization problem is solved,
<disp-formula id="FD14">
<label>(14)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow/></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi mathvariant="bold-italic">A</mml:mi>
<mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∀</mml:mo></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow/></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi mathvariant="bold-italic">A</mml:mi>
<mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∀</mml:mo></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>&gt;</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>and we get the modified variables <bold><italic>ŷ</italic></bold><italic><sup>k</sup></italic> as the optimal solution of Problem (14). As it is discussed in Section 2.8, the algorithm guarantees that Problem (14) has at least one feasible point so that Problem (14) is well-defined. However, we need a distributed solution of the primal projection in order to avoid sending all the information to the sink node and computing Problem (14) there. Fortunately, we can benefit from the tree structure of the network to find the optimal solution of Problem (14) distributedly. Note that in cluster-tree topologies, the subset of nodes associated with the i-th constraint is always a subset of the nodes related to the constraint immediately above <italic>c<sub>i</sub></italic>. See this in the small network example of <xref ref-type="fig" rid="f3-sensors-11-03611">Figure 3</xref>, where
<disp-formula id="FD15">
<label>(15)</label>
<mml:math display="block">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>≽</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mn>4</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>For the sake of brevity, we describe the distributed computation of Problem (14) using the example in <xref ref-type="fig" rid="f3-sensors-11-03611">Figure 3</xref>, which can be easily extended to the general case. Let us assume that [<bold><italic>A</italic></bold>]<sub>1</sub> <bold><italic>ŷ</italic></bold> = <italic>c</italic><sub>1</sub> (this is usually the case) and [<bold><italic>A</italic></bold>]<sub>2</sub> <bold><italic>ŷ</italic></bold> ≤ <italic>c</italic><sub>2</sub> [<xref ref-type="bibr" rid="b31-sensors-11-03611">31</xref>]. For the sake of simplicity, we omit the index <italic>k</italic> in this example. As depicted in <xref ref-type="fig" rid="f3-sensors-11-03611">Figure 3</xref>, the idea is to compute the projection at the parent nodes, that is, first the sink allocates <italic>ŷ</italic><sub>1</sub> and <italic>ŷ</italic><sub>2,<italic>ag</italic></sub> and thereafter, sensor 2 allocates <italic>ŷ</italic><sub>2,<italic>ag</italic></sub> to sensors 3–4 and itself, thus obtaining <italic>ŷ</italic><sub>2</sub>, <italic>ŷ</italic><sub>3</sub> and <italic>ŷ</italic><sub>4</sub>. On the other hand, the application of the KKT optimality conditions to our simplified problem reveals us that the optimal solution must satisfy
<disp-formula id="FD16">
<label>(16)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>4</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>where <italic>μ</italic><sub>1</sub> ∈ ℝ forces ∑<sub><italic>i</italic></sub> <italic>ŷ<sub>i</sub></italic> = <italic>c</italic><sub>1</sub> and <italic>μ</italic><sub>2</sub> ∈ ℝ<sup>+</sup> ∪ {0} prevents <italic>ŷ</italic><sub>3</sub> + <italic>ŷ</italic><sub>4</sub> from exceeding <italic>c</italic><sub>2</sub>. In other words, <italic>μ</italic><sub>2</sub> is bigger than 0 only when the constraint <italic>ŷ</italic><sub>3</sub> + <italic>ŷ</italic><sub>4</sub> ≤ <italic>c</italic><sub>2</sub> is violated given <italic>μ</italic><sub>1</sub>. Therefore, there are only two possible projections, that is, either i) <italic>ŷ</italic><sub>3</sub> + <italic>ŷ</italic><sub>4</sub> <italic>&lt; c</italic><sub>2</sub> or ii) <italic>ŷ</italic><sub>3</sub> + <italic>ŷ</italic><sub>4</sub> = <italic>c</italic><sub>2</sub>. Let us consider a virtual sensor 2<italic><sub>ag</sub></italic> that groups sensors 2–4 with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mn>4</mml:mn></mml:msubsup>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mrow></mml:math></inline-formula> as in <xref ref-type="fig" rid="f3-sensors-11-03611">Figure 3</xref>. In case (i), the projection is straightforwardly computed [<xref ref-type="bibr" rid="b18-sensors-11-03611">18</xref>] (Section 8.1.1) as
<disp-formula id="FD17">
<label>(17)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:math></disp-formula>where <bold><italic>ŷ</italic></bold><italic><sub>ag</sub></italic> = [<italic>ŷ</italic><sub>1,<italic>ag</italic></sub>, <italic>ŷ</italic><sub>2,<italic>ag</italic></sub>]<italic><sup>T</sup></italic> is the aggregated allocation to the virtual sensors, <bold><italic>y</italic></bold><italic><sub>ag</sub></italic> = [<italic>y</italic><sub>1,<italic>ag</italic></sub>, <italic>y</italic><sub>2,<italic>ag</italic></sub>]<italic><sup>T</sup></italic> is their aggregated demand and <bold><italic>n</italic></bold><italic><sub>ag</sub></italic> = [<italic>n</italic><sub>1,<italic>ag</italic></sub>, <italic>n</italic><sub>2,<italic>ag</italic></sub>]<italic><sup>T</sup></italic> is the number of sensors inside each virtual sensor. In our example, <bold><italic>n</italic></bold><italic><sub>ag</sub></italic> = [<xref ref-type="bibr" rid="b1-sensors-11-03611">1</xref>, <xref ref-type="bibr" rid="b3-sensors-11-03611">3</xref>]<italic><sup>T</sup></italic>. However, if (ii) is the case, we allocate <italic>c</italic><sub>1</sub> − <italic>c</italic><sub>2</sub> to sensors 1–2 similarly as in <xref ref-type="disp-formula" rid="FD17">Equation (17)</xref>, as well as <italic>c</italic><sub>2</sub> to sensors 3–4. Finally, we need to distinguish between situations (i) and (ii), which can be done using the following threshold for virtual node 2<italic><sub>ag</sub></italic>,
<disp-formula id="FD18">
<label>(18)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">th</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:mfrac>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>This value is the minimum necessary allocation to virtual node 2<italic><sub>ag</sub></italic> so that the inner rate constraint, <italic>i.e.</italic>, <italic>ŷ</italic><sub>3</sub> + <italic>ŷ</italic><sub>4</sub> ≤ <italic>c</italic><sub>2</sub>, is satisfied with equality.</p>
<p>In summary, the primal projection is distributedly found as follows. First, we compute the initial allocation with <xref ref-type="disp-formula" rid="FD17">Equation (17)</xref>. If 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">th</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>, then we allocate <italic>ŷ</italic><sub>2,<italic>ag</italic></sub> to sensors 2–4 and we are done. If not, we allocate <italic>c</italic><sub>1</sub> − <italic>c</italic><sub>2</sub> to sensors 1–2 and <italic>c</italic><sub>2</sub> to sensors 3–4. Finally, this approach can be scaled to any tree-deployed sensor network. In general, a parent node has to signal at most <italic>m<sub>l</sub></italic> 4-tuples, where <italic>m<sub>l</sub></italic> is the number of network levels below it. Each 4-tuple contains an aggregated rate demand, the number of nodes involved in that demand, a threshold value and the rate absorbed once the allocation is above it. Note that this threshold value indicates the maximum possible allocation for a given hypothesis, that is, which channels are congested and which not. Therefore, the absorbed rate must correspond to this specific hypothesis. Once this information is available at the sink node, it can make the first-level allocation and successively, all parent nodes can compute their own allocations.</p></sec>
<sec>
<label>2.4.3.</label>
<title>Primal Subproblems</title>
<p>Once the sensors receive the corrected allocation 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, they solve the following optimization problem,
<disp-formula id="FD19">
<label>(19)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula>As above, note that Problem (19) coincides with the subproblems of a plain primal decomposition [<xref ref-type="bibr" rid="b22-sensors-11-03611">22</xref>], thus we keep the nomenclature. As a result of computing Problem (19), the inner Lagrange multiplier 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> associated with the constraint 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is obtained. In the dual projection, we use the values of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> from all the subproblems to update the values of <bold><italic>μ</italic></bold>, that is, to obtain <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup>.</p></sec>
<sec>
<label>2.4.4.</label>
<title>Dual Projection</title>
<p>The dual projection is the last step of the method and its mission is to update <bold><italic>μ</italic></bold> having the information in <italic><bold>λ̂</bold><sup>k</sup></italic>. We already know that one of the optimality conditions of our problem is <xref ref-type="disp-formula" rid="FD10">Equation (10)</xref>. However, this linear system of equations is in general overdetermined and we can not use it to guess <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> from <italic><bold>λ̂</bold><sup>k</sup></italic>. Fortunately, it is possible to choose some of the entries in <italic><bold>λ̂</bold><sup>k</sup></italic> to obtain an alternative system of equations, say 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">λ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>, that determines the non-zero values in <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup>. Note that due to <xref ref-type="disp-formula" rid="FD11">Equation (11)</xref>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> is necessarily 0 if the corrected allocation after the primal projection verifies [<bold><italic>A</italic></bold>]<italic><sub>j</sub></italic><bold><italic>ŷ</italic></bold><italic><sup>k</sup></italic> − <italic>c<sub>j</sub> &lt;</italic> 0. In the following, we describe how 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">λ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> are constructed.</p>
<p>First of all, let us define the subsets of nodes 𝒤<italic><sub>m</sub></italic> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. The subset 𝒤<italic><sub>m</sub></italic> does not depend on the iteration number and includes all the nodes using the m-th wireless channel except for the parent node. On the contrary, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> depends on the subset of active constraints [<xref ref-type="bibr" rid="b32-sensors-11-03611">32</xref>] in the network, which evolves on time. Specifically, if the n-th channel is congested, the subset 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is the union of 𝒤<italic><sub>n</sub></italic> with all the subsets 𝒤<italic><sub>m</sub></italic> that accomplish: (i) the path from any of the nodes in 𝒤<italic><sub>m</sub></italic> to the sink goes through one of the nodes in 𝒤<italic><sub>n</sub></italic> and (ii) none of these paths makes use a congested channel, that is, the channels in the path do not attain their rate constraints with equality. If the n-th channel is not congested, we do not define 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. A simple example can be found in <xref ref-type="fig" rid="f4-sensors-11-03611">Figure 4</xref>, where 𝒤<sub>1</sub> = {1, 2, 3}, 𝒤<sub>2</sub> = {4, 5, 6} and 𝒤<sub>3</sub> = {7, 8, 9}. In this example, we transmit at the maximum possible rate only in channels 1 and 3 whereas channel 2 is not congested. Therefore, we define 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>𝒤</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>∪</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>𝒤</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>𝒤</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> but not <bold>𝒜</bold><sub>2</sub>.</p>
<p>Once the subsets {
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>} are identified, we select one sensor from each group using the following selection rules:
<list list-type="simple">
<list-item>
<p>(SR1) Choose the node with the value of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> that is closest to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> (note that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> if <italic>i</italic>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>) and that verifies (SR2).</p></list-item>
<list-item>
<p>(SR1) The corresponding value in 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> attains 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> (as shown in Proposition 3, there is at least one value of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> inside the interval).</p></list-item></list>(SR1) forces the smallest update from 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> whereas (SR2) is necessary to have the required linear dependance between <italic><bold>λ</bold></italic> and <bold><italic>μ</italic></bold>; otherwise there exist more dual variables that come into the equation as shown in Section 2.8. Finally, the linear system of equations 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">λ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> is constructed by gathering all the selected values of <bold>λ̂</bold><italic><sup>k</sup></italic> in 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">λ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and the corresponding rows of <bold><italic>A</italic></bold><italic><sup>T</sup></italic> in 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. Note that since 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> does not include the values of <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> that are known to be zero beforehand, it is necessary to discard the corresponding rows of <bold><italic>A</italic></bold><italic><sup>T</sup></italic> when building 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. An example can be found in <xref ref-type="fig" rid="f5-sensors-11-03611">Figure 5</xref>, where we assume that the selected value from 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mn>5</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and that the selected value from 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mn>8</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. Therefore, we take into account only rows 5 and 8 of <bold><italic>A</italic></bold><italic><sup>T</sup></italic> in order to obtain 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. Furthermore, since channel 2 is not congested (that’s why we have not defined 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>), we already know that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mn>2</mml:mn>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula>. Consequently, we also discard the second column of <bold><italic>A</italic></bold><italic><sup>T</sup></italic>. The resulting linear system of equations is determined and allows us to obtain 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>D</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mn>3</mml:mn>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>D</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>. However, we want <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> to verify <xref ref-type="disp-formula" rid="FD12">Equation (12)</xref> and thus, we propose next a distributed approach to compute <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> and <italic><bold>λ</bold></italic><sup><italic>k</italic>+1</sup> in a cluster-tree WSN. Our mechanism solves 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">λ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> if 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mo>≽</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:math></inline-formula> and finds an alternative positive solution otherwise, which guarantees the convergence of the method (see Section 2.8). Note that, due to the specific structure of <bold><italic>A</italic></bold><italic><sup>T</sup></italic> and also of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, we can apply some sort of Gauss elimination as discussed next.</p>
<p>The proposed solution has two phases. The first phase begins at the lowest levels of the cluster-tree and each node sends its current value of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to its parent. The parent, in turn, first checks if the channel with its child nodes is congested. If true, it sends its own value of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. If false, it takes the values from the child nodes and also its own value and selects one candidate according to (SR1)-(SR2). This is the value that is sent to the parent in this second case. This process is successively applied until the sink node is reached. Thereafter, the second phase begins. The sink node checks if it attains its own rate constraint. If true, it selects one value taking into account (SR1)-(SR2), fixes <italic>μ</italic><sub>1</sub> to that value and sends it to its child nodes. If false, it fixes <italic>μ</italic><sub>1</sub> = 0 and sends it. When the child nodes receive that value, say <italic>v<sub>i</sub></italic>, select one 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> among its gathered values using again (SR1)-(SR2) and compute <italic>μ<sub>i</sub></italic> (the dual multiplier associated with its rate constraint) as 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. If the resulting <italic>μ<sub>i</sub></italic> ≥ 0, the parent node sends 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to its child nodes; if <italic>μ<sub>i</sub></italic> &lt; 0 or if the channel between the node and its children is not congested, the parent fixes <italic>μ<sub>i</sub></italic> = 0 and sends the received <italic>v<sub>i</sub></italic> to its child nodes. This process is repeated until all the values in <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> are updated. Note that, as a result of the proposed distributed dual projection, each parent node only knows one value in <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> but each node receives its own 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> so that the next iteration of the method can begin.</p>
<p>Finally, we have to decide when to stop the iterations of the CDM, that is, when the current solution is close enough to the optimum. One possibility is to monitor the distance between <bold><italic>y</italic></bold><italic><sup>k</sup></italic> and <bold><italic>ŷ</italic></bold><italic><sup>k</sup></italic> and to stop when the relative distance between both quantities drops below a predefined value <italic>ε</italic>, that is, when
<disp-formula id="FD20">
<label>(20)</label>
<mml:math display="block">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msup></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mfrac>
<mml:mo>&lt;</mml:mo>
<mml:mo>ε</mml:mo></mml:mrow></mml:math></disp-formula>However, this approach requires some signalling because we do not have all the necessary data available at a single node. An alternative approach with a very reduced signalling, which is preferred, is to compute the same relative distance at the sink node taking into account aggregated rate values of the child nodes. In this case, we use the previous definitions of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> as the aggregated allocation demand (before the primal projection) at the j-th node and the k-th iteration and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> as the aggregated allocation, <italic>i.e.</italic>, after the primal projection. For example, in the small network in <xref ref-type="fig" rid="f3-sensors-11-03611">Figure 3</xref>, we have 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mn>4</mml:mn></mml:msubsup>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:mrow></mml:math></inline-formula>. Then, we collect at the sink node the values of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> for all its child nodes in the vectors 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, respectively. Using these vectors, we compute the relative distance between them as in In <xref ref-type="disp-formula" rid="FD20">equation (20)</xref>. Note that using this approach, we do not introduce additional signalling as far as these quantities are necessary in the primal projection of the method. Furthermore, the decision to stop or continue with the iterations of the CDM can be piggybacked in the messages that send the values of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi mathvariant="italic">ag</mml:mi></mml:msub></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> from the parent nodes to the child nodes and thus, the impact in the signalling requirements of the method is very small.</p></sec></sec>
<sec>
<label>2.5.</label>
<title>Algorithmic Form</title>
<p>The CDM can be summarized in algorithmic form as follows:
<table-wrap id="t1-sensors-11-03611" position="anchor">
<label>Algorithm.</label>
<caption>
<p>Coupled-Decompositions Method.</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="left" valign="top">Start with <italic>k</italic> = 0, <bold><italic>μ</italic></bold><sup>0</sup> = <bold>0</bold> and repeat:</td></tr>
<tr>
<td align="left" valign="top">  <italic>Dual Subproblems</italic></td></tr>
<tr>
<td align="left" valign="top">  1⃞ Using 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, compute
<disp-formula>
<mml:math display="block">
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>λ</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>U</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mi>λ</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:math></disp-formula><break/>    and get 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> as the inner maximizer.</td></tr>
<tr>
<td align="left" valign="top">  <italic>Primal Projection</italic></td></tr>
<tr>
<td align="left" valign="top">  2⃞ Solve
<disp-formula>
<mml:math display="block">
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow/></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi mathvariant="bold-italic">A</mml:mi>
<mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mo>∀</mml:mo>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>|</mml:mo>
<mml:msubsup>
<mml:mi>μ</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi mathvariant="bold-italic">A</mml:mi>
<mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mo>∀</mml:mo>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>|</mml:mo>
<mml:msubsup>
<mml:mi>μ</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>&gt;</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula><break/>    distributedly as sketched in Section 2.4 in order to get 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</td></tr>
<tr>
<td align="left" valign="top">  <italic>Primal Subproblems</italic></td></tr>
<tr>
<td align="left" valign="top">  3⃞ Solve
<disp-formula>
<mml:math display="block">
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>U</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:math></disp-formula><break/>    and get 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> as the dual multiplier associated with the constraint 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</td></tr>
<tr>
<td align="left" valign="top">  <italic>Dual Projection</italic></td></tr>
<tr>
<td align="left" valign="top">  4⃞ <italic>Phase I</italic>. The lowest level nodes send 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to their parents. Then repeat:
<list list-type="alpha-lower">
<list-item>
<p>Each parent node checks the congestion status of the channel between it and its children. If it is congested, the parent sends its own value of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to its own parent. Otherwise, it considers also the values received from its child nodes, selects one candidate using (SR1)-(SR2) and sends it.</p></list-item></list><break/>    Until the sink node has received one value of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> from each of its child nodes.<break/>    <italic>Phase II</italic>. Start at the sink node with <italic>v</italic><sub>1</sub> = 0 and repeat:
<list list-type="alpha-lower">
<list-item>
<p>If the channel between the node and its children is congested, use (SR1)-(SR2) to select one candidate among the values received in Phase I, say 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. Otherwise, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula>.</p></list-item>
<list-item>
<p>Compute 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> (<italic>v<sub>i</sub></italic> is the message received from the parent node in Phase II, <italic>i</italic> is the channel index).</p></list-item>
<list-item>
<p>If the resulting value 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> satisfies 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mo>≥</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula>, send 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to the child nodes. Otherwise, fix 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula> and send <italic>v<sub>i</sub></italic>.</p></list-item>
<list-item>
<p>Set the next update of <italic>λ<sub>j</sub></italic> at the child nodes, <italic>i.e.</italic>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula>, to the received value, either 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> or <italic>v<sub>i</sub></italic>.</p></list-item></list><break/>    Until all the values in <bold><italic>μ</italic></bold><italic><sup>k</sup></italic> are determined and all the values in <bold><italic>λ</italic></bold><italic><sup>k</sup></italic> are updated to <bold><italic>λ</italic></bold><sup><italic>k</italic>+1</sup>.</td></tr>
<tr>
<td align="left" valign="top">Until convergence.</td></tr></tbody></table></table-wrap></p>
<p>Furthermore, <xref ref-type="fig" rid="f6-sensors-11-03611">Figure 6</xref> summarizes in a flowchart all the tasks that a sensor has to execute in order to obtain its optimal rate allocation.</p></sec>
<sec>
<label>2.6.</label>
<title>Signalling in the Coupled-Decompositions Method</title>
<p>In distributed implementations such as the one proposed in this paper, signalling plays a crucial role. In the following, we review a complete iteration of the proposed method from the point of view of signalling and we represent it graphically in <xref ref-type="fig" rid="f7-sensors-11-03611">Figure 7</xref>. Let us assume that at the k-th iteration, all the nodes know the values of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and use them to compute the dual subproblems. As a result, they locally obtain the values of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> involving no signalling. Thereafter, in primal projection, the parent nodes must send their aggregated request 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">ag</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, <italic>i.e.</italic>, the sum of the values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> that belong to their subtree, possibly together with a list that includes allocation threshold values and absorbed rates, as discussed in <xref ref-type="disp-formula" rid="FD17">Equations (17)</xref> and <xref ref-type="disp-formula" rid="FD18">(18)</xref>. Note that the size of the list scales linearly with the number of levels in the subtree. Once the request reaches the sink node, it allocates resources to the first level of the tree. In turn, the nodes at the first level allocate their resources to the nodes at the second level and so forth. When all the nodes have received the corresponding value 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, they locally compute the primal subproblems and obtain the values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. Finally, in order to compute the dual projection, the nodes send the values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to their parent nodes. Thereafter, the sink node computes <italic>μ</italic><sub>1</sub> and broadcasts the value 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> to their child nodes (note that all the child nodes receive the same value). In turn, the parent nodes compute their own value <italic>μ<sub>j</sub></italic> and broadcast 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> to their child nodes. This process is successively applied until all the nodes receive the updated value of the dual variable, which completes one iteration of the proposed CDM.</p></sec>
<sec>
<label>2.7.</label>
<title>Differences with Classical Decompositions</title>
<p>From the point of view of the algorithm, two of the building blocks in the proposed method are the same as in the classical decompositions, that is, the definition of the primal and the dual subproblems has not been modified. On the contrary, the primal and the dual projections differ from the primal and dual master problems as far as subgradients are no longer used. Notwithstanding, the primal projection resembles the projection that appears in the primal master problem. The difference is that we force the constraints in <bold><italic>Ay</italic></bold> ≼ <bold><italic>c</italic></bold> to be attained with equality when the corresponding dual variable in <bold><italic>μ</italic></bold> is not zero. Finally, the dual projection is completely different from the master dual problem and is indeed the key block in our proposal.</p>
<p>From the point of view of signalling, one iteration in traditional primal decomposition algorithms is equivalent to the first two steps in the proposed method. In other words, from 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> the nodes compute the primal subproblems and calculate 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, which requires no signalling. Thereafter, the projection [·]<sup>†</sup> in traditional primal decomposition algorithms requires the same amount of signalling as in the worst-case of the primal projection at the CDM, that is, when [<bold><italic>A</italic></bold>]<italic><sub>j</sub></italic><bold><italic>y</italic></bold> ≼ <italic>c<sub>j</sub></italic>, ∀<italic>j</italic>. Similarly, one iteration in the traditional dual decomposition is equivalent to the last two steps of the CDM. That is, from <bold><italic>μ</italic></bold><sup><italic>k</italic></sup>, the nodes implementing the traditional dual decomposition approach obtain 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, which requires no signalling, and afterwards send these values to the parent nodes. Using that information the parent nodes can extract the values of <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> and send the required linear combination of the values in <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> back to the child nodes. In this case, the total amount of signalling is exactly the same as in the dual projection of the CDM, where the nodes send the current allocation, the parent nodes compute the required subgradient and send the updates of the values in <italic><bold>λ</bold></italic> afterwards.</p>
<p>In summary, the key step that allows us to combine traditional primal and dual decompositions in a single algorithm, the CDM, is the dual projection. Conceptually, the big difference is to interpret the primal variables <bold><italic>y</italic></bold><italic><sup>k</sup></italic>, <bold><italic>ŷ</italic></bold><italic><sup>k</sup></italic> and the dual variables <italic><bold>λ</bold><sup>k</sup></italic>, <bold>λ̂</bold><italic><sup>k</sup></italic> as candidates to the optimal solution that must accomplish the well-known KKT optimality conditions. In terms of signalling, one iteration of the CDM is equivalent to two iterations of the traditional decomposition algorithms.</p></sec>
<sec>
<label>2.8.</label>
<title>Convergence to the Optimal Rate Allocation</title>
<p>Let us start the iterations of the proposed CDM with <bold><italic>μ</italic></bold><sup>0</sup> = <bold>0</bold>. In the following we show that <bold><italic>μ</italic></bold><italic><sup>k</sup></italic> → <bold><italic>μ</italic>*</bold> as <italic>k</italic> increases. Initially, we assume that at the k-th iteration 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>&gt;</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula> only if 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup>
<mml:mo>&gt;</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula>, that is, the active constraints (<italic>i.e.</italic>, attained with equality) at the k-th iteration are exactly the same as in the optimal solution and we prove that the algorithm converges to <bold><italic>μ</italic>*</bold>. Afterwards, we describe the mechanism used by the CDM in order to activate or deactivate constraints until the subset of active constraints in the optimal solution is found out.</p>
<sec>
<title/>
<sec>
<title>Convergence to the Optimal Solution Given the Subset of Active Constraints at the Optimum</title>
<p>Let us first recall in Proposition 1, a known result that establishes the relationship between primal and dual variables in the primal and dual subproblems [<xref ref-type="bibr" rid="b11-sensors-11-03611">11</xref>,<xref ref-type="bibr" rid="b12-sensors-11-03611">12</xref>].</p>
<p><bold>Proposition 1</bold> <italic>Let us consider the j-th primal subproblem</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> <italic>in Problem (19) and the j-th dual subproblem</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> <italic>in Problem (13) of the CDM. Then, the inner optimization variable</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>is a decreasing function of</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>in the primal subproblems and the inner optimization variable</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>is a decreasing function of</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>in the dual subproblems.</italic></p>
<p><bold>Proof</bold> See [<xref ref-type="bibr" rid="b12-sensors-11-03611">12</xref>] (Lemma 2).</p>
<p>Note, in particular, that if 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mo mathvariant="bold">*</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> as a result of the primal subproblems, then it is true that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≥</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> and vice versa. Similarly, if 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> as a result of the dual subproblems, then 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≥</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mo mathvariant="bold">*</mml:mo></mml:msup></mml:mrow></mml:math></inline-formula> and vice versa. Note also that given <bold><italic>μ</italic></bold><italic><sup>k</sup></italic>, all the values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> with <italic>j</italic> ∈ 𝒤<italic><sub>i</sub></italic> attain either 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≥</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> or 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> as far as [<bold><italic>A</italic></bold><italic><sup>T</sup></italic>]<italic><sub>j</sub></italic> is exactly the same for all <italic>j</italic> ∈ 𝒤<italic><sub>i</sub></italic>. That is, if we start an iteration of the CDM with <italic><bold>λ</bold><sup>k</sup></italic> in the dual subproblems, it holds that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≥</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> for all <italic>j</italic> ∈ 𝒤<italic><sub>k</sub></italic> if 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> and vice versa due to Proposition 1.</p>
<p>Once we obtain the values <bold><italic>y</italic></bold><italic><sup>k</sup></italic> from the dual subproblems, the primal projection in Problem (14) is computed. Since we assume that Slater’s condition holds, Problem (14) defines a convex program where strong duality is fulfilled. Therefore, KKT optimality conditions can be applied and the solution to the primal projection can be expressed as
<disp-formula id="FD21">
<label>(21)</label>
<mml:math display="block">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>−</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi mathvariant="bold-italic">γ</mml:mi></mml:mrow></mml:math></disp-formula>where <italic>γ<sub>i</sub></italic> ≥ 0 if [<bold><italic>A</italic></bold>]<italic><sub>i</sub></italic><bold><italic>ŷ</italic></bold> ≤ <italic>c<sub>i</sub></italic> and <italic>γ<sub>j</sub></italic> ∈ ℝ if [<bold><italic>A</italic></bold>]<italic><sub>j</sub></italic><bold><italic>ŷ</italic></bold>= <italic>c<sub>j</sub></italic>. In the first case, <italic>γ<sub>i</sub></italic> = 0 if the corresponding rate constraint is not exceeded and <italic>γ<sub>i</sub> &gt;</italic> 0 if the opposite situation occurs in order to satisfy it with equality. In the second case, <italic>γ<sub>j</sub></italic> can take any value in order to satisfy the corresponding constraint. As a result of the primal projection, it is clear that all the nodes in every subset 𝒤<italic><sub>i</sub></italic> either increase or decrease the initial allocation 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> in order to obtain 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. In other words, if <italic>m</italic>, <italic>n</italic> ∈ 𝒤<italic><sub>i</sub></italic>, then it is impossible, for example, that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> with <italic>a</italic><sub>1</sub>, <italic>a</italic><sub>2</sub> ≥ 0. Moreover, if <bold><italic>μ</italic></bold><italic><sup>k</sup></italic> is close enough to the optimal solution and assuming that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>&gt;</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula> only if 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup>
<mml:mo>&gt;</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula>, the constraints that are attained with equality after the primal projection correspond only to the values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>&gt;</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula>.</p>
<p>In that situation and given the tree structure of the network, it is verified that
<disp-formula id="FD22">
<label>(22)</label>
<mml:math display="block">
<mml:mrow>
<mml:munder>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:munder>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo></mml:mrow>
<mml:munder>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:munder>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:mrow></mml:math></disp-formula>For example, in <xref ref-type="fig" rid="f4-sensors-11-03611">Figure 4</xref> we immediately notice that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:msub>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:msub>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:mrow></mml:math></inline-formula>. Therefore, we can conclude that i) some values of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> attain 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≥</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> while the rest accomplish 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> and ii) all the values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> either increase or decrese after the primal projection. This result is easily extrapolated to the dual values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> obtained from the primal subproblems when 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> are the inputs if we take into account Proposition 1. We write it down in the following proposition.</p>
<p><bold>Proposition 2</bold> <italic>The dual values</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>that result from the computation of the primal subproblems of the CDM at the k-th iteration accomplish: (i) some values of</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>with</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>attain</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≥</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>while the rest accomplish</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≤</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>and (ii) all the values</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>with</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>either increase or decrease with respect to</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> <italic>(note that</italic> 
<inline-formula>
<mml:math>
<mml:msubsup>
<mml:mi>λ</mml:mi>
<mml:mi>l</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mi>λ</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:math></inline-formula> <italic>if l,</italic> 
<inline-formula>
<mml:math>
<mml:mi>n</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:math></inline-formula><italic>).</italic></p>
<p>In the dual projection, we choose one value 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> from each subset 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. In particular, the selected value has to accomplish (SR1)-(SR2), that is: (i) the corresponding 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> verifies 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> and (ii) it is the closest value in the subset to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> for any 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. The following proposition guarantees the existence of the required value.</p>
<p><bold>Proposition 3</bold> <italic>Let</italic> <bold><italic>y</italic></bold><italic><sup>k</sup> be the result of the dual subproblems of the CDM at the k-th iteration. Then, the primal projection provides at least one node with</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> <italic>at each subset</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</p>
<p><bold>Proof</bold> See the <xref ref-type="app" rid="app1">Appendix</xref>.</p>
<p>Given that <italic>U<sub>j</sub></italic>(<italic>r<sub>j</sub></italic>) is concave and strictly increasing, it is straightforward to see that <italic>y<sub>j</sub></italic> must equal <italic>r<sub>j</sub></italic> in Problem (3). Furthermore, some of the KKT optimality conditions of the problem reveal us that
<disp-formula id="FD23">
<label>(23)</label>
<mml:math display="block">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>β</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD24">
<label>(24)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">A</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mi mathvariant="bold-italic">μ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD25">
<label>(25)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD26">
<label>(26)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>β</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></disp-formula>where <italic>α<sub>j</sub></italic> and <italic>β<sub>j</sub></italic> are the dual variables associated with the constraints <italic>r<sub>j</sub></italic> ≥ <italic>m<sub>j</sub></italic> and <italic>r<sub>j</sub></italic> ≤ <italic>M<sub>j</sub></italic>, respectively. Therefore, if we fix <italic>y<sub>j</sub></italic> equal to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, then <italic>α<sub>j</sub></italic> and <italic>β<sub>j</sub></italic> must be 0 due to the slackness constraints, <italic>i.e</italic>, <xref ref-type="disp-formula" rid="FD25">Equations (25</xref>–<xref ref-type="disp-formula" rid="FD26">26)</xref>. Applying this observation and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to <xref ref-type="disp-formula" rid="FD23">Equation (23)</xref>, we realize that <italic>λ<sub>j</sub></italic> is uniquely determined. Besides, taking also <xref ref-type="disp-formula" rid="FD24">Equation (24)</xref> into account, we can conclude that a good election of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> provides us useful information about the linear combination [<bold><italic>A</italic></bold><italic><sup>T</sup></italic>]<italic><sub>j</sub></italic><bold><italic>μ</italic></bold>. In the CDM, this argumentation justifies our interest in the values of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> that attain 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>. Otherwise the values of <italic>α<sub>j</sub></italic> and <italic>β<sub>j</sub></italic> are unknown and we can not use 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to determine <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup>.</p>
<p>Finally, in the dual projection we construct the determined linear system 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">λ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> with the selected values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, thus computing the values in <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> corresponding to the active constraints (the remaining ones are fixed to zero). Combining the results in Proposition 2 with (SR1)-(SR2), we realize that each dual candidate 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>λ</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> approaches 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> (w.r.t. 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>) without overtaking it and that the candidate is valid to determine some of the variables in <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup>. Since in the dual projection we obtain a determined linear system using these dual candidates, the new update <italic><bold>λ</bold><sup>k+1</sup></italic> = [<bold><italic>A</italic></bold>]<italic><sup>T</sup></italic> <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup> necessarily approaches <italic><bold>λ</bold><sup>k</sup></italic> = [<bold><italic>A</italic></bold>]<italic><sup>T</sup></italic> <bold><italic>μ</italic></bold><italic><sup>k</sup></italic>. Hence, we can state that <bold><italic>μ</italic></bold><italic><sup>k</sup></italic> → <bold><italic>μ</italic>*</bold>. We summarize this result in the following lemma.</p>
<p><bold>Lemma 1</bold> <italic>The iterations of the CDM satisfy</italic> 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mover>
<mml:mo stretchy="true">→</mml:mo>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>→</mml:mo>
<mml:mo>∞</mml:mo></mml:mrow></mml:mover>
<mml:mi mathvariant="bold-italic">μ</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:mrow></mml:math></inline-formula> <italic>given the subset of active constrains at the optimum.</italic></p></sec>
<sec>
<title>Activation/Deactivation of Constraints</title>
<p>In the following, we use the partial result obtained in Lemma 1 to show that the proposed version of the CDM converges to the optimal solution. Let us state this in the following theorem.</p>
<p><bold>Theorem 1</bold> <italic>The proposed CDM is able to determine the subset of active constraints of Problem (3) at the optimal solution. Hence, the method converges to the optimal solution.</italic></p>
<p><bold>Proof</bold> We have proved in Lemma 1 that, given the subset of active constraints at the optimum, the CDM converges to <bold><italic>μ</italic>*</bold>. Therefore, we need to prove that this subset is eventually found out. Let us start with the activation of a non-active constraint and let us assume that the l-th constraint is active at the optimal solution but not at the k-th iteration. This implies that, if we remove the constraint [<bold><italic>A</italic></bold>]<italic><sub>l</sub></italic><bold><italic>y</italic></bold> ≤ <italic>c<sub>l</sub></italic> from the original problem formulation in Problem (3), then the optimal solution to the modified problem <bold><italic>y</italic></bold><sup>‡</sup> would satisfy [<bold><italic>A</italic></bold>]<italic><sub>l</sub></italic><bold><italic>y</italic></bold><sup>‡</sup> ≥ <italic>c<sub>l</sub></italic>. In other words, the successive updates of the CDM tend to <bold><italic>y</italic></bold><sup>‡</sup> when the l-th constraint is not included in the active subset of constraints. However, there will be an iteration <italic>q</italic> where [<bold><italic>A</italic></bold>]<italic><sub>l</sub></italic><bold><italic>y</italic></bold><italic><sup>q</sup></italic> ≥ <italic>c<sub>l</sub></italic> so that the primal projection will detect that constraint violation, correct it and the l-th constraint will be activated.</p>
<p>The opposite situation arises when the l-th constraint is active at the k-th iteration but not at the optimal solution. In that case, if the l-th constraint is not deactivated, <italic>i.e.</italic>, the primal projection keeps forcing <bold><italic>Ay</italic></bold> = <italic>c<sub>l</sub></italic>, the CDM would converge to a solution <bold><italic>μ</italic><sup>★</sup></bold> with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo mathvariant="bold">★</mml:mo></mml:msubsup>
<mml:mo>&lt;</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula> (assuming that the dual projection allows negative values). Note that the allocation to the variables involved in the l-th constraint increases with respect to the optimum whereas the allocation to the remaining variables is reduced or remains unchanged in order to satisfy the rate constraints. Looking at the situation from the dual point of view, that is, taking into account Proposition 1, we notice that the values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">★</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> involved in the l-th constraint must converge to a value that is below 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula>. Also, the remaining values remain unchanged or above the corresponding 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula>. If we compare those values with <bold><italic>λ</italic>*</bold> = <bold><italic>A</italic></bold><italic><sup>T</sup></italic> <bold><italic>μ</italic>*</bold> and we know that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula>, then we realize that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo mathvariant="bold">★</mml:mo></mml:msubsup>
<mml:mo>&lt;</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula>. At this point, let us compute one more iteration of the CDM, thus obtaining <italic><bold>λ</bold></italic><sup><bold>★</bold>+1</sup>. In this case, since the values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mo mathvariant="bold">★</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> involved in the l-th constraint increase with respect to <bold>λ<sup>★</sup></bold> = <bold><italic>A</italic></bold><italic><sup>T</sup></italic> <bold><italic>μ</italic><sup>★</sup></bold> because 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>μ</mml:mi></mml:mrow>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mo mathvariant="bold">★</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> is now 0, the corresponding values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mo mathvariant="bold">★</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> decrease. Therefore the l-th rate constraint will not be exceeded, preventing its reactivation at the next primal projection.</p></sec></sec></sec></sec>
<sec>
<label>3.</label>
<title>Application to Cluster-Tree Wireless Sensor Networks</title>
<p>The algorithm developed in the previous section can be applied to cluster-tree WSNs with the aim of providing global fair resource allocations with a reduced impact in terms of energy consumption due to signalling. In this work, in particular, we focus on the beacon-enabled mode of IEEE 802.15.4 [<xref ref-type="bibr" rid="b1-sensors-11-03611">1</xref>]. This mode divides the transmission through time slots and, besides, two periods are defined depending on the kind of access used by the nodes in the network: contention access period (CAP), where slotted CSMA/CA is adopted, and contention-free period (CFP), where GTS slots are distributed to the nodes (see <xref ref-type="fig" rid="f8-sensors-11-03611">Figure 8</xref>). Since time slots can have different sizes from one cluster to another, we distribute resources in terms of rate, <italic>i.e.</italic>, <italic>r<sub>j</sub></italic> is the rate allocated to the j-th sensor. Thereafter, we use these rates to derive the time slot allocation. Note that depending on each specific Superframe (SF) configuration, the maximum transmission rate in each cluster changes. Furthermore, we will also take into account the quality of the radio links by means of the Packet Delivery Ratio (PDR), that is, <italic>PDR<sub>j</sub></italic> is the ratio between correctly received packets and sent packets at the j-th sensor. As previously commented, beacon collision problems can appear in a cluster-tree WSN based on the beacon enabled mode. For that reason, we take into account a beacon collision mechanism. In particular, we consider the time-division approach adopted by the Zigbee specification [<xref ref-type="bibr" rid="b9-sensors-11-03611">9</xref>], <italic>i.e.</italic>, time is divided in such a way that the beacon frame of each coordinator is sent during the inactive periods of the rest of coordinators (see <xref ref-type="fig" rid="f9-sensors-11-03611">Figure 9</xref>).</p>
<p>Given the sensor demands in <bold><italic>M</italic></bold> = [<italic>M</italic><sub>1</sub>, . . ., <italic>M<sub>N</sub></italic> ]<italic><sup>T</sup></italic> and the minimum guaranteed allocation in <bold><italic>m</italic></bold>= [<italic>m</italic><sub>1</sub>, . . ., <italic>m<sub>N</sub></italic> ]<italic><sup>T</sup></italic> (both in terms of rate), the optimum allocation is computed by solving the following optimization problem using the CDM,
<disp-formula id="FD27">
<label>(27)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:munder></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>·</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">PDR</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>γ</mml:mi></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow/></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>m</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow/></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Ar</mml:mi>
<mml:mo>≼</mml:mo>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow/></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>where the priority values <italic>w<sub>j</sub></italic> allow us to balance the allocation towards some sensors in the network and <italic>γ</italic> fixes the degree of fairness as discussed in <xref ref-type="disp-formula" rid="FD2">Equation (2)</xref>. Moreover, the radio link qualities are also considered as far a <italic>r<sub>j</sub></italic> · <italic>PDR<sub>j</sub></italic> is the effective data rate assigned to the j-th user. In particular, note that when <italic>U<sub>j</sub></italic>(<italic>r<sub>j</sub></italic>) = <italic>w<sub>j</sub></italic> log(<italic>r<sub>j</sub></italic> · <italic>PDR<sub>j</sub></italic>) the resulting allocation is insensitive to <italic>PDR<sub>j</sub></italic> because <italic>U<sub>j</sub></italic>(<italic>r<sub>j</sub></italic> · <italic>PDR<sub>j</sub></italic>) = <italic>w<sub>j</sub></italic>[log(<italic>PDR<sub>j</sub></italic>) + log(<italic>r<sub>j</sub></italic>)] and thus, proportional fairness does not benefit sensors with bad channel condition. If we fix <italic>γ</italic> &gt; 1 instead, the resulting allocation is balanced towards the bad sensors. Note that in the limit, <italic>i.e.</italic>, with <italic>γ</italic> → ∞, max-min fairness does not admit low effective data rates even if this implies a significant reduction in terms of the network throughput.</p>
<p>Once the optimal allocation is obtained, it has to be mapped onto a time slot assignment. Since the WSN scenario can be assumed quasi-static in most of the real-life applications, it is reasonable to sustain an allocation for a given number of Beacon Intervals (BI), say <italic>nBI</italic>. Therefore, the real-valued number of time slots assigned to the j-th sensor on the <italic>nBI</italic> periods is
<disp-formula id="FD28">
<label>(28)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">TS</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>′</mml:mo></mml:msubsup>
<mml:mo>·</mml:mo>
<mml:mi mathvariant="italic">nBI</mml:mi>
<mml:mo>·</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">BI</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:math></disp-formula>where <italic>r′<sub>j</sub></italic> is the rate across the j-th sensor, that is, its own rate plus the rate of all the nodes below it. Furthermore, <italic>T<sub>BI</sub></italic> is the BI duration and <italic>b<sub>j</sub></italic> is the packet size in bits at the j-th sensor. Since <italic>TS<sub>j</sub></italic> in <xref ref-type="disp-formula" rid="FD28">Equation (28)</xref> is real-valued, the cluster head has to round the allocation of its nodes. We propose to allocate first ⌊<italic>TS<sub>j</sub></italic>⌋ time slots to each node and then successively allocate one extra time slot to the sensors with the biggest value of <italic>TS<sub>j</sub></italic> − ⌊<italic>TS<sub>j</sub></italic>⌋, where ⌊·⌋ represents the floor function. Note that the higher the <italic>nBI</italic>, the higher the optimality of the time slot allocation. However, if the network is substantially dynamic, we shall fix <italic>nBI</italic> = 1 and implement other rounding strategies that are out the scope of this paper. In any case, we need algorithms that converge fast to the optimal solution if we want to track the changes in the network efficiently. This is achieved with the proposed CDM as shown in the next simulation results.</p></sec>
<sec sec-type="results">
<label>4.</label>
<title>Numerical Results</title>
<p>Let us consider the network configuration depicted in <xref ref-type="fig" rid="f10-sensors-11-03611">Figure 10</xref>, with 15 sensor nodes, one sink node and 5 capacity constraints that deploy a three-level cluster tree. Note that the following results can be extrapolated to WSNs with a larger number of nodes and a larger number of levels and thus, our simplified example has no loss in generality. Specifically, the Superframe (SF) is configured as follows: <italic>T<sub>BI</sub></italic> is set to 245.76 ms and is the same at all levels; the SF duration is 61.44 ms at the highest level, 30.72 ms at the intermediate level and 15.36 ms at the lowest level. According to [<xref ref-type="bibr" rid="b33-sensors-11-03611">33</xref>], this configuration provides 9.38 kbps, 10.94 kbps and 13.02 kbps of data rate, respectively. Furthermore, if we consider 15 slots per BI dedicated to the Guaranteed Time Slot (GTS) allocation, the size of the slots in bits is 9, 21 and 50, respectively. Accordingly, the rate capacities of the clusters are set to <bold><italic>c</italic></bold> = [3.0516, 1.2820, 1.2820, 1.2820, 0.5496]<italic><sup>T</sup></italic> kbps.</p>
<p>In our simulations, we compare our CDM-based approach to the widely-used First Come First Serve (FCFS) policy. We assume, without loss of generality, that the values of <italic>w<sub>j</sub></italic> and <italic>P DR<sub>j</sub></italic> are set to 1 and that all the sensors are of the same type and thus, all of them need to transmit <italic>n</italic> bits per BI. However, the rate requests are quantized by the time slot duration at each sensor so that each node asks for <italic>n̄<sub>i</sub>/T<sub>BI</sub></italic> kbps, where <italic>n̄<sub>i</sub></italic> is the nearest multiple (above) of the packet size in bits at the i-th node. <xref ref-type="fig" rid="f11-sensors-11-03611">Figure 11</xref> shows an allocation example for <italic>n</italic> = 20 bits. We notice that the CDM-based policy provides a rate allocation that is very close to the optimal, whereas the FCFS solution does not guarantee a fair resource allocation, even when the throughput is not penalized. Note that, in the example under consideration, there exists no trade-off between fairness and throughput because we have set error-free links. Note also that our proposed time slot allocation does not provide the optimum fair rate allocation due to the rounding effects.</p>
<p>In order to study the fairness degree provided by both solutions, we plot in <xref ref-type="fig" rid="f12-sensors-11-03611">Figure 12</xref> the Fairness Index (FI) as a function of the requested bits <italic>n</italic>. The FI takes values between 0 and 1 and measures how far is a certain resource allocation with respect to the one that is considered optimal or most fair. If <italic>FI</italic> = 0 the allocation is totally unfair and if <italic>FI</italic> = 1, the resulting allocation is completely fair. A value that is in-between such as 0.6 may be interpreted as follows: the 60% of allocations are considered fair in mean. The FI is computed as [<xref ref-type="bibr" rid="b34-sensors-11-03611">34</xref>]
<disp-formula id="FD29">
<label>(29)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="italic">FI</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mrow></mml:math></disp-formula>where 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mi>z</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:mfrac></mml:mrow></mml:math></inline-formula>, being 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> the optimal fair allocation and <italic>x<sub>j</sub></italic> the allocation under test. Therefore, <italic>x<sub>j</sub></italic> represents the rate allocation that results from either our CDM-based time slot distribution or the standard-proposed FCFS approach. Furthermore, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>r</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo mathvariant="bold">*</mml:mo></mml:msubsup></mml:mrow></mml:math></inline-formula> is the real-valued optimal rate allocation, that is, without rounding. Note in the figure that the CDM-based approach provides a solution that is very close to the optimal whereas the FCFS allocation tends to be more unfair as the transmission requirements of the sensors grow until it stabilizes around 0.5, which is pretty unfair. Therefore, FCFS is an acceptable strategy for small traffic loads, that is, when the network resources suffice to satisfy all the sensor requirements. However, the allocation is unfair at high loads because the mechanism does not distinguish sensors that are parents of a sub-cluster tree from sensors that are not. Since the two receive the same amount of resources in mean, the sensors in the sub-cluster tree (including the parent node) are thus penalized. In our example, the routing policy of a sensor is to first relay the packets with a lower time stamp and then send its own packets, which explains the higher allocation of sensors 1 and 2 in <xref ref-type="fig" rid="f11-sensors-11-03611">Figure 11</xref>.</p>
<p>Finally, signalling is a very important aspect to take into account when considering distributed optimization techniques. The advantage is clear: the network operates at the desired optimal point (proportional fairness in our examples). Notwithstanding, as opposite to other policies such as FCFS, sensors need to exchange information thus draining the sensor batteries. Therefore, distributed optimization approaches make sense if the amount of signalling information is kept small. In <xref ref-type="fig" rid="f13-sensors-11-03611">Figure 13</xref> we compare the proposed CDM against the classical dual decomposition approach in terms of iterations required to converge to the optimal solution. In this example, requests, maximum transmission rates, minimum guaranteed rates and sensor priorities are picked at random using uniform distributions. In particular, <italic>d<sub>i</sub></italic>, <italic>c<sub>i</sub></italic> ∼ 𝒰[0, 50] kbps, <italic>m<sub>i</sub></italic> ∼ 𝒰[0, 0.5] kbps and <italic>p<sub>i</sub></italic> ∼ 𝒰[0, 2]. In our simulations, the step-size in dual decomposition is adjusted to provide good performance in general, fixing it to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msup>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>0.5</mml:mn></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mi>k</mml:mi></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow></mml:math></inline-formula> (note that the CDM has no parameter to configure). See in <xref ref-type="fig" rid="f13-sensors-11-03611">Figure 13</xref> one numerical example. Note that although one iteration of the CDM implies twice the amount of signalling required in one iteration of dual decomposition, the number of iterations in the latter is excessively large and makes the technique impractical in the WSN context. On the contrary, the CDM finds the optimal solution using 10–30 iterations in general. In other words, the CDM requires about 40 <italic>N</italic> to 120 <italic>N</italic> messages to achieve a fair distribution of the available rate whereas the so-called dual decomposition solution needs to exchange up to 5, 000 <italic>N</italic> in our example. If we consider 32-bit messages, our solution requires 56.25 kb in total whereas the dual decomposition approach needs 2343.75 kb of signalling.</p></sec>
<sec sec-type="conclusions">
<label>5.</label>
<title>Conclusions</title>
<p>In this paper, we present a resource allocation technique that is designed to fairly distribute the available time slots among the sensors of a cluster-tree WSN. Our solution is based in convex decomposition and, in particular, it combines the so-called primal and dual decompositions in a single algorithm that provides superior performance in terms of convergence speed. Thanks to the proposed Network Utility Maximization (NUM) formulation, it is possible to choose the most adequate definition of fairness in our application, going from max-min fairness to max-sum rate. As shown in the document, the standard-proposed First Come First Serve policy provides pretty unfair allocations when the traffic load in the network increases and proportional fairness is considered. Moreover, the NUM formulation takes into account the different rate capacities in the network, which are due to different superframe configurations, as well as the radio link qualities by means of the Packet Delivery Ratio.</p>
<p>Throughout the document, we focus our attention on the practical application of the proposed method. On one hand, the conversion form rate (required by the algorithm) to time slots is addressed. On the other hand, the signalling involved in the computation of the global optimal solution is detailed. Specifically, our method requires the double amount of signalling per iteration when compared to dual decomposition. Notwithstanding, the number of iterations can be reduced up to a factor of 1,000 so that the total amount of signalling is reduced about 500 times. Besides, the CDM has no parameter to be adjusted, which is a true impairment in practice.</p>
<p>In summary, we can conclude that the most remarkable benefits of our solution are:
<list list-type="bullet">
<list-item>
<p>The network can be adjusted to operate with several fairness definitions by fixing the value of <italic>γ</italic>.</p></list-item>
<list-item>
<p>The optimal solution is distributedly computed in the cluster-tree network.</p></list-item>
<list-item>
<p>The price to pay to compute that optimal solution in terms of signalling is minimized with respect to existing techniques.</p></list-item></list></p></sec></body>
<back>
<ack>
<p>This work was supported by the Spanish Government Project TEC2008-06305/TEC, the Catalan Government under Grant 2009 SGR 298, and the Chair of Knowledge and Technology Transfer Parc de Recerca UAB—Santander. I.V. is partially funded by Torres Quevedo grant from the Ministerio de Ciencia e Innovación 2008-03-08109. We are also grateful to the HAROSA Knowledge Community (<ext-link xlink:href="http://dpcs.uoc.edu/" ext-link-type="uri">http://dpcs.uoc.edu/</ext-link>) and to FP7-IAPP-SWAP EU contract number 251557 that partially funded our research.</p></ack>
<ref-list>
<title>References and Notes</title>
<ref id="b1-sensors-11-03611"><label>1.</label><citation citation-type="book"><person-group person-group-type="author"><collab>IEEE</collab></person-group><source>Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks (LR-WPANs)</source><comment>IEEE Std 802.15.4;</comment><publisher-name>IEEE</publisher-name><publisher-loc>New York, NY, USA</publisher-loc><year>2006</year></citation></ref>
<ref id="b2-sensors-11-03611"><label>2.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Koubaa</surname><given-names>A</given-names></name><name><surname>Alves</surname><given-names>M</given-names></name><name><surname>Tovar</surname><given-names>E</given-names></name></person-group><source>IEEE 802.15.4 for Wireless Sensor Networks: A Technical Overview</source><comment>IPP-HURRAY Technical Report; HURRAY-TR-050702;</comment><publisher-name>Polytechnic Institute of Porto</publisher-name><publisher-loc>Porto, Portugal</publisher-loc><year>2005</year></citation></ref>
<ref id="b3-sensors-11-03611"><label>3.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Chen</surname><given-names>F</given-names></name><name><surname>German</surname><given-names>R</given-names></name><name><surname>Dressler</surname><given-names>F</given-names></name></person-group><article-title>Towards IEEE 802.15.4e: A Study of Performance Aspects</article-title><conf-name>Proceedings of 8th IEEE PERCOM</conf-name><conf-loc>Mannheim, Germany</conf-loc><conf-date>29 March–2 April 2010</conf-date></citation></ref>
<ref id="b4-sensors-11-03611"><label>4.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Kim</surname><given-names>A</given-names></name><name><surname>Hekland</surname><given-names>F</given-names></name><name><surname>Petersen</surname><given-names>S</given-names></name><name><surname>Doyle</surname><given-names>P</given-names></name></person-group><article-title>When HART Goes Wireless: Understanding and Implementing the WirelessHART Standard</article-title><conf-name>Proceedings of IEEE ETFA</conf-name><conf-loc>Hamburg, Germany</conf-loc><conf-date>15–18 September 2008</conf-date></citation></ref>
<ref id="b5-sensors-11-03611"><label>5.</label><citation citation-type="book"><person-group person-group-type="author"><collab>ISA</collab></person-group><source>Wireless Systems for Industrial Automation: Process Control and Related Applications</source><publisher-name>ISA</publisher-name><publisher-loc>Research Triangle Park, NC, USA</publisher-loc><year>2009</year></citation></ref>
<ref id="b6-sensors-11-03611"><label>6.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Mishra</surname><given-names>A</given-names></name><name><surname>Chewoo</surname><given-names>N</given-names></name><name><surname>Rosenburgh</surname><given-names>D</given-names></name></person-group><article-title>On Scheduling Guaranteed Time Slots for Time Sensitive Transactions in IEEE 802.15.4 Networks</article-title><conf-name>Proceedings of IEEE MILCOM</conf-name><conf-loc>Orlando, FL, USA</conf-loc><conf-date>29–31 October 2007</conf-date></citation></ref>
<ref id="b7-sensors-11-03611"><label>7.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Chitnis</surname><given-names>M</given-names></name><name><surname>Pagano</surname><given-names>P</given-names></name><name><surname>Lipari</surname><given-names>G</given-names></name><name><surname>Liang</surname><given-names>Y</given-names></name></person-group><article-title>A Survey on Bandwidth Resource Allocation and Scheduling in Wireless Sensor Networks</article-title><conf-name>Proceedings of IEEE International Conference on Network-Based Information Systems</conf-name><conf-loc>Indianapolis, IN, USA</conf-loc><conf-date>19–21 August 2009</conf-date></citation></ref>
<ref id="b8-sensors-11-03611"><label>8.</label><citation citation-type="web"><article-title>IEEE 802.15 WPAN™ Task Group 4b</article-title><comment>Available online: <ext-link xlink:href="http://grouper.ieee.org/groups/802/15/pub/TG4b.html" ext-link-type="uri">http://grouper.ieee.org/groups/802/15/pub/TG4b.html</ext-link> (accessed on 21 March 2011).</comment></citation></ref>
<ref id="b9-sensors-11-03611"><label>9.</label><citation citation-type="web"><person-group person-group-type="author"><collab>Zigbee-Alliance</collab></person-group><article-title>ZigBee Specification</article-title><comment>Available online: <ext-link xlink:href="http://www.zigbee.org" ext-link-type="uri">http://www.zigbee.org</ext-link> (accessed on 21 March 2011).</comment></citation></ref>
<ref id="b10-sensors-11-03611"><label>10.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Koubaa</surname><given-names>A</given-names></name><name><surname>Alves</surname><given-names>M</given-names></name><name><surname>Attia</surname><given-names>M</given-names></name><name><surname>Van Nieuwenhuyse</surname><given-names>A</given-names></name></person-group><article-title>Collision-Free Beacon Scheduling Mechanisms for IEEE 802.15.4/Zigbee Cluster-Tree Wireless Sensor Networks</article-title><conf-name>Proceedings of 7th International Workshop on Applications and Services in Wireless Networks</conf-name><conf-loc>Santander, Spain</conf-loc><conf-date>24–25 May 2007</conf-date></citation></ref>
<ref id="b11-sensors-11-03611"><label>11.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Morell</surname><given-names>A</given-names></name><name><surname>Seco-Granados</surname><given-names>G</given-names></name><name><surname>Vicario</surname><given-names>J</given-names></name></person-group><article-title>Fair Adaptive Bandwidth and Subchannel Allocation in the WiMAX Uplink</article-title><source>EURASIP J Wireless Communications and Networking</source><year>2009</year><pub-id pub-id-type="doi">10.1155/2009/918261</pub-id></citation></ref>
<ref id="b12-sensors-11-03611"><label>12.</label><citation citation-type="web"><person-group person-group-type="author"><name><surname>Morell</surname><given-names>A</given-names></name></person-group><source>A Convex Decomposition Perspective on Dynamic Bandwidth Allocation and Applications</source><comment>Ph.D. Thesis,</comment><year>2008</year><comment>Available online: <ext-link xlink:href="http://spcomnav.uab.es" ext-link-type="uri">http://spcomnav.uab.es</ext-link> (accessed on 21 March 2011).</comment></citation></ref>
<ref id="b13-sensors-11-03611"><label>13.</label><citation citation-type="web"><person-group person-group-type="author"><collab>The ROLL Design Team</collab></person-group><article-title>RPL: Routing Protocol for Low Power and Lossy Networks (work in progress)</article-title><year>2010</year><comment>Available online: <ext-link xlink:href="http://tools.ietf.org/html/draft-ietf-roll-rpl-17" ext-link-type="uri">http://tools.ietf.org/html/draft-ietf-roll-rpl-17</ext-link> (accessed on 21 March 2011).</comment></citation></ref>
<ref id="b14-sensors-11-03611"><label>14.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Gnawali</surname><given-names>O</given-names></name><name><surname>Fonseca</surname><given-names>R</given-names></name><name><surname>Jamieson</surname><given-names>K</given-names></name><name><surname>Moss</surname><given-names>D</given-names></name><name><surname>Levis</surname><given-names>P</given-names></name></person-group><article-title>The Collection Tree Protocol (CTP)</article-title><conf-name>Proceedings of 7th ACM Conference on Embedded Networked Sensor Systems (SenSys)</conf-name><conf-loc>Berkeley, CA, USA</conf-loc><conf-date>4–6 November 2009</conf-date></citation></ref>
<ref id="b15-sensors-11-03611"><label>15.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Vilajosana</surname><given-names>X</given-names></name><name><surname>Llosa</surname><given-names>J</given-names></name><name><surname>Pacho</surname><given-names>J</given-names></name><name><surname>Vilajosana</surname><given-names>I</given-names></name><name><surname>Juan</surname><given-names>AA</given-names></name><name><surname>Vicario</surname><given-names>J</given-names></name><name><surname>Morell</surname><given-names>A</given-names></name></person-group><article-title>ZERO: Probabilistic Routing for Deploy and Forget Wireless Sensor Networks</article-title><source>Sensors</source><year>2010</year><volume>10</volume><fpage>8920</fpage><lpage>8937</lpage><pub-id pub-id-type="doi">10.3390/s101008920</pub-id><pub-id pub-id-type="pmid">22163388</pub-id></citation></ref>
<ref id="b16-sensors-11-03611"><label>16.</label><citation citation-type="other"><comment>Notation: ≼, <italic>≺</italic>,≽ and <italic>≺</italic> stand for component-wise inequalities.</comment></citation></ref>
<ref id="b17-sensors-11-03611"><label>17.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Bertsekas</surname><given-names>D</given-names></name></person-group><source>Nonlinear Programming</source><publisher-name>Athena Scientific</publisher-name><publisher-loc>Belmont, MA, USA</publisher-loc><year>1999</year></citation></ref>
<ref id="b18-sensors-11-03611"><label>18.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Boyd</surname><given-names>L</given-names></name><name><surname>Vandenberghe</surname><given-names>S</given-names></name></person-group><source>Convex Optimization</source><publisher-name>Cambridge University Press</publisher-name><publisher-loc>Cmbridge, UK</publisher-loc><year>2004</year></citation></ref>
<ref id="b19-sensors-11-03611"><label>19.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kelly</surname><given-names>F</given-names></name></person-group><article-title>Charging and Rate Control for Elastic Traffic</article-title><source>Eur. Trans. Telecommun</source><year>1997</year><volume>8</volume><fpage>33</fpage><lpage>37</lpage><pub-id pub-id-type="doi">10.1002/ett.4460080106</pub-id></citation></ref>
<ref id="b20-sensors-11-03611"><label>20.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kelly</surname><given-names>F</given-names></name><name><surname>Maulloo</surname><given-names>A</given-names></name><name><surname>Tan</surname><given-names>D</given-names></name></person-group><article-title>Rate Control for Communication Networks: Shadow Prices, Proportional Fairness and Stability</article-title><source>J. Oper. Res. Soc</source><year>1998</year><volume>49</volume><fpage>237</fpage><lpage>252</lpage></citation></ref>
<ref id="b21-sensors-11-03611"><label>21.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mo</surname><given-names>J</given-names></name><name><surname>Walrand</surname><given-names>J</given-names></name></person-group><article-title>Fair End-to-End Window-based Congestion Control</article-title><source>IEEE/ACM Trans. Netw</source><year>2000</year><volume>8</volume><fpage>556</fpage><lpage>567</lpage><pub-id pub-id-type="doi">10.1109/90.879343</pub-id></citation></ref>
<ref id="b22-sensors-11-03611"><label>22.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Palomar</surname><given-names>D</given-names></name><name><surname>Chiang</surname><given-names>M</given-names></name></person-group><article-title>Alternative Decompositions for Distributed Maximization of Network Utility: Framework and Applications</article-title><source>IEEE Trans. Autom. Control</source><year>2007</year><volume>52</volume><fpage>2254</fpage><lpage>2269</lpage><pub-id pub-id-type="doi">10.1109/TAC.2007.910665</pub-id></citation></ref>
<ref id="b23-sensors-11-03611"><label>23.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Xiao</surname><given-names>L</given-names></name><name><surname>Johansson</surname><given-names>M</given-names></name><name><surname>Boyd</surname><given-names>S</given-names></name></person-group><article-title>Simulatenous Routing and Resource Allocation via Dual Decomposition</article-title><source>IEEE Trans. Commun</source><year>2004</year><volume>52</volume><fpage>1136</fpage><lpage>1144</lpage></citation></ref>
<ref id="b24-sensors-11-03611"><label>24.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Lee</surname><given-names>J</given-names></name><name><surname>Chiang</surname><given-names>M</given-names></name><name><surname>Calderbank</surname><given-names>A</given-names></name></person-group><article-title>Network Utility Maximization and Price-Based Distributed Algorithms for Rate-Reliability Tradeoff</article-title><conf-name>Proceedings of IEEE Infocom</conf-name><conf-loc>Barcelona, Spain</conf-loc><conf-date>23–29 April 2006</conf-date></citation></ref>
<ref id="b25-sensors-11-03611"><label>25.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Tseng</surname><given-names>P</given-names></name><name><surname>Bertsekas</surname><given-names>D</given-names></name></person-group><article-title>On the Convergence of the Exponential Multipliers Method for Convex Programming</article-title><source>Math. Program</source><year>1993</year><volume>60</volume><fpage>1</fpage><lpage>19</lpage><pub-id pub-id-type="doi">10.1007/BF01580598</pub-id></citation></ref>
<ref id="b26-sensors-11-03611"><label>26.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Polyak</surname><given-names>R</given-names></name></person-group><article-title>Primal-Dual Exterior Point Method for Convex Optimization</article-title><source>Optim. Method. Softw</source><year>2008</year><volume>23</volume><fpage>141</fpage><lpage>160</lpage><pub-id pub-id-type="doi">10.1080/10556780701363065</pub-id></citation></ref>
<ref id="b27-sensors-11-03611"><label>27.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Holmberg</surname><given-names>K</given-names></name></person-group><article-title>Primal and Dual Decomposition as Organizational Design: Price and/or Resource Directive Decomposition</article-title><source>Design Models for Hierarchical Organizations: Computation, Information, and Decentralization</source><publisher-name>Kluwer Academic Publishers</publisher-name><publisher-loc>Boston, MA, USA</publisher-loc><year>1995</year><fpage>61</fpage><lpage>92</lpage></citation></ref>
<ref id="b28-sensors-11-03611"><label>28.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Nedic</surname><given-names>A</given-names></name><name><surname>Ozdaglar</surname><given-names>A</given-names></name></person-group><article-title>Subgradient Methods for Saddle-Point Problems</article-title><source>JOTA</source><year>2009</year><volume>142</volume><fpage>205</fpage><lpage>228</lpage><pub-id pub-id-type="doi">10.1007/s10957-009-9522-7</pub-id></citation></ref>
<ref id="b29-sensors-11-03611"><label>29.</label><citation citation-type="other"><comment>The vector <bold><italic>s</italic></bold> is a subgradient of the function <bold><italic>f</italic></bold>: ℝ<italic><sup>n</sup></italic> → ℝ at <bold><italic>x</italic></bold> ∈ ℝ<italic><sup>n</sup></italic> if <bold><italic>f</italic></bold>(<bold><italic>y</italic></bold>) ≥ <bold><italic>f</italic></bold>(<bold><italic>x</italic></bold>) + (<bold><italic>y</italic></bold> − <bold><italic>x</italic></bold>)<italic><sup>T</sup></italic> <bold><italic>s</italic>,</bold> ∀<bold><italic>y</italic></bold> ∈ ℝ<italic><sup>n</sup></italic>. If <bold><italic>f</italic></bold> is differentiable at <bold><italic>x</italic></bold>, the subgradient <bold><italic>s</italic></bold> and the gradient <bold>∇<italic>f</italic></bold>(<bold><italic>x</italic></bold>) coincide. Otherwise, there exist many subgradients.</comment></citation></ref>
<ref id="b30-sensors-11-03611"><label>30.</label><citation citation-type="other"><comment>Notation: <bold><italic>δ</italic></bold><italic><sub>j</sub></italic> is a zero-valued column vector with its j-th entry equal to 1.</comment></citation></ref>
<ref id="b31-sensors-11-03611"><label>31.</label><citation citation-type="other"><comment>Note that in the case [<bold><italic>A</italic></bold>]<sub>2</sub><bold><italic>ŷ</italic></bold> = <italic>c</italic><sub>2</sub>, Problem (14) is splitted into 2 independent projections: (i) distribute <italic>c</italic><sub>2</sub> between sensors 3 and 4 and (ii) distribute <italic>c</italic><sub>1</sub> − <italic>c</italic><sub>2</sub> between sensors 1 and 2.</comment></citation></ref>
<ref id="b32-sensors-11-03611"><label>32.</label><citation citation-type="other"><comment>We say that a constraint is active when it is attained with equality.</comment></citation></ref>
<ref id="b33-sensors-11-03611"><label>33.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Koubaa</surname><given-names>A</given-names></name><name><surname>Alves</surname><given-names>M</given-names></name><name><surname>Tovar</surname><given-names>E</given-names></name></person-group><article-title>GTS Allocation Analysis in IEEE 802.15.4 for Real-Time Wireless Sensor Networks</article-title><conf-name>Proceedings of Parallel and Distributed Processing Symposium (IPDPS)</conf-name><conf-loc>Rhodes Island, Greece</conf-loc><conf-date>25–29 April 2006</conf-date></citation></ref>
<ref id="b34-sensors-11-03611"><label>34.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Jain</surname><given-names>R</given-names></name><name><surname>Chiu</surname><given-names>D</given-names></name><name><surname>Hawe</surname><given-names>W</given-names></name></person-group><source>A Quantitative Measure of Fairness and Discrimination for Resource Allocation in Shared Systems</source><comment>Technical Report; DEC TR-301;</comment><publisher-name>Digital Equipment Corp.</publisher-name><publisher-loc>Littleton, MA, USA</publisher-loc><year>1984</year></citation></ref></ref-list>
<app-group>
<app id="app1">
<title>Appendix</title>
<sec>
<title>Proof of Proposition 3</title>
<p>As it is discussed after Problem (21), the step from <bold><italic>y</italic></bold><italic><sup>k</sup></italic> to <bold><italic>ŷ</italic></bold><italic><sup>k</sup></italic> forces all the values in each subset 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to either increase or decrease their allocation in order to fulfill the corresponding rate constraint. Let us consider the first case, <italic>i.e.</italic>, all the values of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> satisfy 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>&lt;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. Since 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:mo stretchy="false">[</mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">]</mml:mo></mml:mrow></mml:math></inline-formula>, it is straightforward to see that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>&lt;</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. However, it is possible that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mo>∀</mml:mo></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. Notwithstanding, this implies that there is no strictly feasible point in the original problem, which contradicts the initial hypothesis. Note that we need to increase all the values in 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> to reach a strictly feasible point but this violates the rate constraint. Therefore, there is at least one value that accomplishes 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>M</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>.</p>
<p>Similarly, we can consider the second case, that is, the values of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> are increased in the primal projection. In this occasion, if the resulting point 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> verifies 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>≥</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mo>∀</mml:mo></mml:mrow>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>∈</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, it implies that the associated constraint is not really necessary. However, this contradicts our hypothesis that the subset of active constraints at the optimum is known. This concludes the proof of the proposition.</p></sec></app></app-group>
<sec sec-type="display-objects">
<title>Figures</title>
<fig id="f1-sensors-11-03611" position="float">
<label>Figure 1.</label>
<caption>
<p>Demand-based multiple access. Rate grants are emitted and depend on the requests and on the rate capacities {<italic>c<sub>i</sub></italic>} inside each cluster.</p></caption>
<graphic xlink:href="sensors-11-03611f1.gif"/></fig>
<fig id="f2-sensors-11-03611" position="float">
<label>Figure 2.</label>
<caption>
<p>Block diagram of the CDM. The primal variables <bold><italic>y</italic></bold><italic><sup>k</sup></italic>, <bold><italic>ŷ</italic></bold><italic><sup>k</sup></italic> and the dual variables <italic><bold>λ</bold><sup>k</sup>,</italic> <italic><bold>λ</bold></italic>̂<italic><sup>k</sup></italic>, <bold><italic>μ</italic></bold><italic><sup>k</sup></italic> are exchanged among the building boxes of the proposed CDM.</p></caption>
<graphic xlink:href="sensors-11-03611f2.gif"/></fig>
<fig id="f3-sensors-11-03611" position="float">
<label>Figure 3.</label>
<caption>
<p>Distributed primal projection. Initially, nodes 2, 3 and 4 are grouped together into the supernode 2’. The first allocation distributes <italic>c</italic><sub>1</sub> between 1 and 2’. Then, the second allocation distributes the rate granted to 2’ among nodes 2, 3 and 4 taking into account the maximum rate <italic>c</italic><sub>2</sub>.</p></caption>
<graphic xlink:href="sensors-11-03611f3.gif"/></fig>
<fig id="f4-sensors-11-03611" position="float">
<label>Figure 4.</label>
<caption>
<p>The subsets 𝒤<italic><sub>m</sub></italic> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">𝒜</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</p></caption>
<graphic xlink:href="sensors-11-03611f4.gif"/></fig>
<fig id="f5-sensors-11-03611" position="float">
<label>Figure 5.</label>
<caption>
<p>Dual projection example. The reduced system of equations 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">λ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">B</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>k</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">μ</mml:mi></mml:mrow>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> is constructed and used in the dual projection to update the non-zero values in <bold><italic>μ</italic></bold><sup><italic>k</italic>+1</sup>.</p></caption>
<graphic xlink:href="sensors-11-03611f5.gif"/></fig>
<fig id="f6-sensors-11-03611" position="float">
<label>Figure 6.</label>
<caption>
<p>Flowchart of the tasks performed by the sensor.</p></caption>
<graphic xlink:href="sensors-11-03611f6.gif"/></fig>
<fig id="f7-sensors-11-03611" position="float">
<label>Figure 7.</label>
<caption>
<p>A complete iteration of the CDM from the point of view of signalling.</p></caption>
<graphic xlink:href="sensors-11-03611f7.gif"/></fig>
<fig id="f8-sensors-11-03611" position="float">
<label>Figure 8.</label>
<caption>
<p>Beacon frame configuration adopted by the IEEE 802.15.4 standard [<xref ref-type="bibr" rid="b1-sensors-11-03611">1</xref>].</p></caption>
<graphic xlink:href="sensors-11-03611f8.gif"/></fig>
<fig id="f9-sensors-11-03611" position="float">
<label>Figure 9.</label>
<caption>
<p>Beacon frame collision avoidance based on the time division approach adopted by the Zigbee specification [<xref ref-type="bibr" rid="b9-sensors-11-03611">9</xref>].</p></caption>
<graphic xlink:href="sensors-11-03611f9.gif"/></fig>
<fig id="f10-sensors-11-03611" position="float">
<label>Figure 10.</label>
<caption>
<p>Network configuration used in the numerical results.</p></caption>
<graphic xlink:href="sensors-11-03611f10.gif"/></fig>
<fig id="f11-sensors-11-03611" position="float">
<label>Figure 11.</label>
<caption>
<p>Allocation example for <italic>n</italic> = 20 bits.</p></caption>
<graphic xlink:href="sensors-11-03611f11.gif"/></fig>
<fig id="f12-sensors-11-03611" position="float">
<label>Figure 12.</label>
<caption>
<p>Fairness comparison.</p></caption>
<graphic xlink:href="sensors-11-03611f12.gif"/></fig>
<fig id="f13-sensors-11-03611" position="float">
<label>Figure 13.</label>
<caption>
<p>Comparison between the CDM and the dual decomposition.</p></caption>
<graphic xlink:href="sensors-11-03611f13.gif"/></fig></sec></back></article>
