FedPCD is a federated adaptation of Priority-Constrained Descent (PCD), a method for problems in which one objective matters more than the others. Here the FedAvg update takes the primary role, and each client's own update defines a secondary constraint.
Each participating client returns its model displacement Δi,t after K local steps, as in FedAvg. The server divides it by the local learning rate to obtain a pseudo-gradient, and aggregates these with the FedAvg weights:
\[ g_{i,t} \;=\; \frac{\Delta_{i,t}}{\eta_\ell} \;=\; \frac{\theta_t-\theta_{i,t}^{(K)}}{\eta_\ell}, \qquad \bar g_t \;=\; \sum_{i\in\mathcal{S}_t} \bar p_{i,t}\, g_{i,t} \]
The aggregate and every client direction are then normalized:
\[ \tilde g_{0,t} \;=\; \frac{\bar g_t}{\lVert\bar g_t\rVert+\varepsilon}, \qquad \tilde g_{i,t} \;=\; \frac{g_{i,t}}{\lVert g_{i,t}\rVert+\varepsilon} \]
The update is the direction closest to the normalized average that still makes a τ-fraction of progress along every client's direction:
\[ \tilde d_t^\star \;=\; \arg\min_{\tilde d}\; \frac{1}{2}\left\lVert \tilde d-\tilde g_{0,t}\right\rVert^2 \quad \mathrm{s.t.} \quad \tilde g_{i,t}^{\top}\tilde d \;\geq\; \tau \lVert \tilde g_{i,t}\rVert^2, \qquad i\in\mathcal{S}_t \]
Each constraint is a half-space of acceptable directions. This small convex quadratic program is therefore the Euclidean projection of the FedAvg direction onto their intersection, and its solution is unique. Its optimality conditions give it one revealing form:
\[ \tilde d_t^\star \;=\; \tilde g_{0,t} \;+\; \sum_{i\in\mathcal{A}} \mu_i^\star\, \tilde g_{i,t}, \qquad \mu_i^\star \geq 0 \]
The average keeps a coefficient of one. A client enters only through a non-negative multiplier, and that multiplier is zero unless the client's constraint is active. FedPCD does not replace the global update with a reweighted or symmetric multi-objective direction. It retains the average as the primary direction and applies the minimal correction that the clients require.
Because the program works with normalized directions, the server rescales the solution to the length of the aggregate before taking the step:
\[ d_t \;=\; \frac{\lVert \bar g_t\rVert}{\lVert \tilde d_t^\star\rVert}\,\tilde d_t^\star, \qquad \theta_{t+1} \;=\; \theta_t-\eta_g\, d_t \]
When nothing needs fixing. If the average already satisfies every constraint, then d̃⋆ = g̃0, and the rescaling gives dt = ḡt. FedPCD introduces no directional correction in that round.