If C is a p * p-covariance matrix, v = diag(C) its diagonal (i. e. the vector of variances $v_i = c_{ii}$), $\tilde { C} = C - Diag(v)$ is the covariance matrix with 0s substituted in the diagonal and x = the vector $x_1, \dots ,x_n$ the educational testing problem is (see e. g., Al-Homidan 2008)$$\sum_{i=1}^p x_i \rightarrow \min$$
s.t. $$\tilde{ C} + Diag(x) \geq 0$$(i.e. positive semidefinite) and $x_i \leq v_i, i=1,\dots,p$. This is the same as minimizing the trace of the symmetric matrix
$$\tilde{ C}+diag(x)=\left(\begin{array}{llll}
x_1 & c_{12} & \ldots & c_{1p} \
c_{12} & x_2 & \ldots & c_{2p} \
\vdots & \vdots & \ddots & \vdots \
c_{1p} & c_{2p} & \ldots & x_p\
\end{array}\right)$$
s. t. $\tilde{ C} + Diag(x)$ is positive semidefinite and $x_i \leq v_i$.
The greatest lower bound to reliability is
$$\frac{\sum_{ij} \bar{c_{ij}} + \sum_i x_i}{\sum_{ij}c_{ij}}$$
Additionally, function glb.algebraic allows the user to change the upper bounds $x_i \leq v_i$ to
$x_i \leq u_i$ and add lower bounds $l_i \leq x_i$.
The greatest lower bound to reliability is applicable for tests with non-homogeneous items. It gives a sharp lower bound to the reliability of the total test score.
Caution: Though glb.algebraic gives exact lower bounds for exact covariance matrices, the estimates from empirical matrices may be strongly biased upwards for small and medium sample sizes.
glb.algebraic is wrapper for a call to function csdp of package Rcsdp (see its documentation).
If Cov is the covariance matrix of subtests/items with known lower bounds, rel, to their reliabilities (e. g. Cronbachs $\alpha$), LoBounds can be used to improve the lower bound to reliability by setting LoBounds <- rel*diag(Cov).
Changing UpBounds can be used to relax constraints $x_i \leq v_i$ or to fix $x_i$-values by setting LoBounds[i] < -z; UpBounds[i] <- z.