经典的SDR算法(下):SDR的具体使用细节与相关代码

前言

在上一篇博客 经典的SDR算法: 用半正定松弛法 ( Semidefinite Relaxation) 求解二次优化问题 我们介绍了SDR算法的基本思想。 本文中, 我们重点再针对SDR具体使用时的细节进行阐述。 这里简单回顾下, 原QCQP问题为:
min ⁡ x ∈ R n      x T C x  s.t.  x T A i x ⊵ i b i , i = 1 , … , m (1) \begin{aligned} \min _{x \in \mathbb{R}^{n}} & \;\;x^{T} C x \\ \text { s.t. } & x^{T} A_{i} x \unrhd_{i} b_{i}, \quad i=1, \ldots, m \end{aligned}\tag{1} xRnmin s.t. xTCxxTAixibi,i=1,,m(1)
通过引入一个新的变量 X = x x T X = xx^T X=xxT, 并以此为优化变量, 那么问题(1)可以被写为:
min ⁡ X ∈ S n Tr ⁡ ( C X )  s.t.  Tr ⁡ ( A i X ) ⊵ i b i , i = 1 , … , m , X ⪰ 0 , rank ⁡ ( X ) = 1 (2) \begin{aligned} \min _{X \in \mathbb{S}^{n}} & \operatorname{Tr}(C X) \\ \text { s.t. } & \operatorname{Tr}\left(A_{i} X\right)\unrhd_{i} b_{i}, \quad i=1, \ldots, m, \\ & X \succeq 0, \operatorname{rank}(X)=1 \end{aligned}\tag{2} XSnmin s.t. Tr(CX)Tr(AiX)ibi,i=1,,m,X0,rank(X)=1(2)
再通过放松掉 r a n k ( X ) = 1 \mathrm{rank}(X)=1 rank(X)=1限制后, 可以直接使用CVX求解这一凸问题, 得到最优解 X ⋆ X^{\star} X。 这一篇博客我们主要围绕 如何从一个并不满足秩为1的矩阵 X ⋆ X^{\star} X中, 恢复出原QCQP问题所需要的向量 x x x

EVD分解

一种最直观的想法就是, 要从 X ⋆ X^\star X 中恢复 x x x, 可以通过求解如下的问题:
min ⁡ x ∈ R n ∥ X ⋆ − x x T ∥ F 2 \begin{aligned} \min _{x \in \mathbb{R}^{n}} & \|X^\star-xx^T\|_F^2 \end{aligned} xRnminXxxTF2
来获得一个次优解。 而这个问题的最优解, 则 x x x 等于 X ⋆ X^\star X 的 最大 特征向量 乘以 最大特征值的 根 给出。对应的matlab代码为:

 [V,D] = eig(X);
 [value,num] = max(diag(D));
 x = sqrt(value)*V(:,num);

因此 对 X ⋆ X^\star X 做 EVD 分解得到其最大特征向量, 则是一种直截了当的 SDR恢复方式。 在 Xianghao Yu 博士的经典论文 Alternating Minimization Algorithms for Hybrid Precoding in Millimeter Wave MIMO Systems 中 的 SDR算法部分, 使用的就是 EVD分解的方式。

这里插一段和主题看上去不太有关的话, 就是这个问题,为什么最优解是 最大特征向量? 可以延伸到一个更general的问题, 即低秩矩阵近似问题
min ⁡ Z ∈ R M × L ∥ X − Z ∥ F 2  s.t.  r a n k ( Z ) ≤ N \begin{aligned} \min _{Z\in\mathbb{R}^{M\times L}} & \|X -Z\|_F^2\\ \text { s.t. } & \mathrm{rank}(Z) \le N \end{aligned} ZRM×Lmin s.t. XZF2rank(Z)N
那么上面的问题, 就是现在这个低秩矩阵近似问题的 N = 1 N=1 N=1 时的特例。 ( r a n k ( Z ) = 1 \mathrm{rank}(Z)=1 rank(Z)=1 的可行集 和 x x T xx^T xxT的值域是一致的。) 我们首先可以将 Z Z Z拆分为 Z = C Y Z = CY Z=CY, 其中 C ∈ R M × N C\in\mathbb{R}^{M\times N} CRM×N C T C = I C^TC=I CTC=I, Y ∈ R N × L Y\in\mathbb{R}^{N\times L} YRN×L。此时可以把优化问题等价转化为:

( C ⋆ , Y ⋆ ) = arg ⁡ min ⁡ C T C = I { min ⁡ Y ∥ C Y − X ∥ F 2 } (C^\star, Y^\star) = \arg\min_{C^TC= I}\{\min_Y \|CY-X\|_F^2\} (C,Y)=argCTC=Imin{YminCYXF2}

这里用到了两个结论, 以至于两个问题是完全等价的, 即 Z ⋆ = C ⋆ Y ⋆ Z^\star = C^\star Y^\star Z=CY。 首先是 Z Z Z C Y CY CY 的值域完全一致, 拆分不损失最优性。 其次, 有如下结论:
inf ⁡ y , z f ( y , z ) = inf ⁡ y { inf ⁡ z f ( y , z ) } . \inf_{y,z}f(y,z)=\inf_y\{\inf_zf(y,z)\}. y,zinff(y,z)=yinf{zinff(y,z)}.
这使得我们可以先固定 C C C 求取 Y Y Y 的闭式解。 而这时, 问题对于 单变量 C C C Y Y Y 而言,都是凸问题, 因此可以简单地使用求导为0的方式求取。 得到:
C ⋆ = arg ⁡ min ⁡ C T C = I t r ( ( I − C C T ) X X T ) Y ⋆ = C ⋆ X C^\star = \arg\min_{C^TC=I}\mathrm{tr}((I-CC^T)XX^T)\\ Y^\star = C^\star X C=argCTC=Imintr((ICCT)XXT)Y=CX
那么问题就变为:
arg ⁡ min ⁡ C T C = I t r ( − C X X T C T ) \arg\min_{C^TC=I}\mathrm{tr}(-CXX^TC^T) argCTC=Imintr(CXXTCT)
这就是瑞利熵问题, 其解就是由 X X T XX^T XXT的最大的几个特征向量为列组成的矩阵。 关于瑞利熵问题, 我们已经在瑞丽熵 (Rayleigh quotient) 两种启发式证明 中进行了讲述。

高斯随机化

EVD分解法虽然简单, 但显然有着较高的误差,从而带来不可避免的损失。 那么类似于常见于梯度下降法中, 使用多组随机初始点,再挑选性能最优的作为解 这样的 “枚举思想”, SDR也有类似的并不高明但行之有效的性能优化手段。

其做法为: 生成 L L L 组随机向量
ξ ℓ ∼ N ( 0 , X ⋆ ) (3) \xi_{\ell} \sim N\left(0, X^{\star}\right)\tag{3} ξN(0,X)(3)
然后再取 ξ ⋆ = arg ⁡ min ⁡ ℓ ξ ℓ T C ξ ℓ \xi^{\star}=\arg\min_{\ell}\xi_{\ell}^TC\xi_{\ell} ξ=argminξTCξ.
但需要指出的是, 如果 ξ l \xi_l ξl 不满足原QCQP问题中的约束, 那么需要进行稍微的“魔改”,使得满足原限制条件。 如假设原问题要求 x i 2 = 1 x_i^2=1 xi2=1, 这常出现在二元检测中。 那么此时, 我们先要对 (3) 中生成的 ξ ℓ \xi_{\ell} ξ进行如下操作:
[ ξ ℓ ] i = s g n ( [ ξ ℓ ] i ) [\xi_\ell]_i = \mathrm{sgn}([\xi_\ell]_i ) [ξ]i=sgn([ξ]i)
再求其所得的函数值。 可以看出, 针对不同的问题, 我们可能需要不同的“魔改”。 另一个例子, 如果原问题的限制条件为 x T A i x ≥ 1 , ∀ i x^TA_ix\ge 1, \forall i xTAix1,i, 那么我们需要进行的操作就是:
ξ = ξ min ⁡ i ξ T A i ξ \xi=\frac{\xi}{\sqrt{\min_i \xi^{T} A_{i} \xi}} ξ=miniξTAiξ ξ
可见,作为一种启发式算法, 魔改的方式不唯一, 也不固定, 核心要义是要随机出来的向量能满足原问题的限制条件。 再比如大家很关心的在HBF问题和IRS问题中大放异彩的 恒模约束, 魔改方式可以为:
[ ξ ℓ ] i = [ ξ ℓ ] i ∣ [ ξ ℓ ] i ∣ [\xi_\ell]_i = \frac{[\xi_\ell]_i}{|[\xi_\ell]_i|} [ξ]i=[ξ]i[ξ]i

总结以下流程:

  • 求解SDP问题得到 X ⋆ X^\star X
  • 生成 L L L ξ ℓ ∼ N ( 0 , X ⋆ ) \xi_{\ell} \sim N\left(0, X^{\star}\right) ξN(0,X)
  • ξ ℓ \xi_{\ell} ξ 魔改为 原 QCQP问题的可行解
  • ξ ⋆ = arg ⁡ min ⁡ ℓ ξ ℓ T C ξ ℓ \xi^{\star}=\arg\min_{\ell}\xi_{\ell}^TC\xi_{\ell} ξ=argminξTCξ
  • x = ξ ⋆ x=\xi^{\star} x=ξ

那么matlab代码方面, 关键点则在于 如何生成 一个 服从 N ( 0 , X ⋆ ) N\left(0, X^{\star}\right) N(0,X) 的向量呢?
我们知道, v = randn(n)可以得到一个 服从 N ( 0 , I ) N\left(0, I\right) N(0,I) n n n 维向量 v v v。 那现在我们对它进行乘法操作 v = A v v = Av v=Av, 其分布则变为: N ( 0 , A A H ) N\left(0, AA^H\right) N(0,AAH)。 也就是说, 我们只需要找到能使得 A A H = X ⋆ AA^H=X^\star AAH=X A A A, 就可以轻松地使用 v = A v v = Av v=Av 获得 满足分布的 v v v 向量了。 而获得这样的 A, 则只需要对 X ⋆ X^\star X 做 Cholesky 分解即可, 对一个半正定矩阵 X X X 作该分解为:
X = L L H \mathbf{X}=\mathbf{L} \mathbf{L}^{H} X=LLH
那么具体的代码就可以如下给出:

for i = 1 : L
	v = randn(n);
	A = chol(Xstar); # chol 是内置matlab函数, 得到的是 L^H
	V(:, i) = A' * v;
end

再举一篇论文的实例, 作为本节的结束。 在论文 Intelligent Reflecting Surface Enhanced Wireless Network: Joint Active and Passive Beamforming Design 中, 作者给出了一种 高斯随机化的方法。 其原问题为:
max ⁡ v ˉ v ‾ H R v ˉ  s.t.  ∣ v ˉ n ∣ = 1 , ∀ n = 1 , ⋯   , N + 1 \begin{array}{cl} \max _{\bar{v}} & \overline{\boldsymbol{v}}^{H} \boldsymbol{R} \bar{v} \\ \text { s.t. } & \left|\bar{v}_{n}\right|=1, \forall n=1, \cdots, N+1 \end{array} maxvˉ s.t. vHRvˉvˉn=1,n=1,,N+1
SDR 问题为:
max ⁡ V tr ⁡ ( R V )  s.t.  V n , n = 1 , ∀ n = 1 , ⋯   , N + 1 V ⪰ 0 \begin{array}{cl} \max _{\boldsymbol{V}} & \operatorname{tr}(\boldsymbol{R} \boldsymbol{V}) \\ \text { s.t. } & \boldsymbol{V}_{n, n}=1, \forall n=1, \cdots, N+1 \\ & \boldsymbol{V} \succeq 0 \end{array} maxV s.t. tr(RV)Vn,n=1,n=1,,N+1V0

而他的做法是, 求出 V V V后, 对其作 EVD分解 得到 V = U Σ U H \boldsymbol{V}=\boldsymbol{U} \Sigma \boldsymbol{U}^{H} V=UΣUH, 然后获得向量 v ˉ = U Σ 1 / 2 r \bar{\boldsymbol{v}}= \boldsymbol{U} \Sigma^{1 / 2} \boldsymbol{r} vˉ=UΣ1/2r, 其中 r ∈ C N ( 0 , I N + 1 ) \boldsymbol{r} \in \mathcal{C} \mathcal{N}\left(\mathbf{0}, \boldsymbol{I}_{N+1}\right) rCN(0,IN+1)。 再从由不同的 r \boldsymbol{r} r得到的所有 v ˉ \bar{\boldsymbol{v}} vˉ 中, 选出最大化 v ‾ H R v ˉ \overline{\boldsymbol{v}}^{H} \boldsymbol{R} \bar{\boldsymbol{v}} vHRvˉ v ˉ \bar{\boldsymbol{v}} vˉ, 最后再人为地将 v = e j arg ⁡ ( [ v ˉ v ˉ N + 1 ] ( 1 : N ) ) \boldsymbol{v}=e^{j \arg \left(\left[\frac{\bar{v}}{\bar{v}_{N+1}}\right]_{(1: N)}\right)} v=ejarg([vˉN+1vˉ](1:N)), 即满足恒模约束。

其实在 V = U Σ U H \boldsymbol{V}=\boldsymbol{U} \Sigma \boldsymbol{U}^{H} V=UΣUH 中, 作者得到的 v ˉ \bar{\boldsymbol{v}} vˉ 满足的分布就是 C N ( 0 , V ) \mathcal{C} \mathcal{N}\left(\mathbf{0}, \boldsymbol{V}\right) CN(0,V), 这和我们刚刚说的高斯随机化的思想是一致的。 重要的差别在于, 罗老师原作中提到的方法应该是 先魔改, 再选最优。 而这篇paper中却是先求最优, 再魔改。 这是一点小小的区别。

代码

这里给大家推荐一份代码, 就是上一篇博客和本文中都提到的 Alternating Minimization Algorithms for Hybrid Precoding in Millimeter Wave MIMO Systems 一文作者 Xianghao Yu 博士给出的代码,
https://github.com/yuxianghao/Alternating-minimization-algorithms-for-hybrid-precoding-in-millimeter-wave-MIMO-systems
主函数为 SDR-Altmin. 当然在使用前, 需要自行前往 CVX 官网先下载安装 CVX 包, 由于相关安装教程已非常详尽, 便不再赘述。 这里简单摘录其中的SDR代码部分,可供参考:

cvx_begin quiet
        variable X(Ns*NRF+1,Ns*NRF+1) hermitian
        minimize(real(trace(C*X)));
        subject to
            trace(A1*X) == NRF*Ns;
            trace(A2*X) == 1;
        X == hermitian_semidefinite(Ns*NRF+1);
    cvx_end
    
 [V,D] = eig(X);
 [value,num] = max(diag(D));
x = sqrt(value)*V(:,num);

然后是一份我自己写的代码, 主要是以武庆庆老师的 Intelligent Reflecting Surface Enhanced Wireless Network: Joint Active and Passive Beamforming Design 为背景, 求解其 (P4) 所写的。 问题如下:
 (P4) :  max ⁡ v ˉ v ˉ H R v ˉ  s.t.  ∣ v ˉ n ∣ = 1 , ∀ n = 1 , ⋯   , N + 1 , \begin{aligned} \text { (P4) : } & \max _{\bar{v}} \quad \bar{v}^{H} \boldsymbol{R} \bar{v} \\ \text { s.t. } &\left|\bar{v}_{n}\right|=1, \forall n=1, \cdots, N+1, \end{aligned}  (P4) :  s.t. vˉmaxvˉHRvˉvˉn=1,n=1,,N+1,
在代码中,我使用了SDR方法,分为两种,分别对应上面所说的两种高斯随机化的方案。 又使用了元素迭代的方法作为对比, 思想就是每次固定向量的其他元素而单独优化一个元素。 最后的性能显示, 两种高斯随机化的方案性能差不多, 而元素迭代算法的性能是最好的。

代码如下:

Nt = 16;
M = 4;
L = 100; % number of Gaussian randomizations
G = sqrt(2) / 2 * (randn(M, Nt) + 1j * randn(M, Nt));
hr = sqrt(2) / 2 * (randn(M, 1) + 1j * randn(M, 1));
hd = sqrt(2) / 2 * (randn(Nt, 1) + 1j * randn(Nt, 1));
phi = diag(hr') * G;

R = [phi * phi' phi * hd; hd' * phi' 0];

cvx_begin sdp quiet
variable V(M+1, M+1) hermitian
maximize(real(trace(R*V)));
subject to
diag(V) == 1;
V >= 0;
cvx_end

%% method 1
max_F = 0;
max_v = 0;
[U, Sigma] = eig(V);
for l = 1 : L
    r = sqrt(2) / 2 * (randn(M+1, 1) + 1j * randn(M+1, 1));
    v = U * Sigma^(0.5) * r;
    if v' * R * v > max_F
        max_v = v;
        max_F = v' * R * v;
    end
end

v = exp(1j * angle(max_v / max_v(end)));
v = v(1 : M);
v' * phi * phi' * v

%% method 2
max_F = 0;
max_v = 0;
[U, Sigma] = eig(V);
for l = 1 : L
    r = sqrt(2) / 2 * (randn(M+1, 1) + 1j * randn(M+1, 1));
    v = U * Sigma^(0.5) * r;
    v = exp(1j * angle(v / v(end)));
    v = v(1 : M);
    if v' * phi * phi' * v > max_F
        max_v = v;
        max_F = v' * phi * phi' * v;
    end
end
max_v' * phi * phi' * max_v

%% method 3  element iteration
T = phi * phi';
v = sqrt(2) / 2 * (randn(M, 1) + 1j * randn(M, 1));
for n = 1 : 10
    for i = 1 : M
        tmp = 0;
        for j = 1 : M
            if i~= j
                tmp = tmp + T(i,j) * v(j);
            end
        end
        v(i) = exp(1j * angle(tmp));
    end
end
v' * phi * phi' * v


你可能感兴趣的:(通信中的常用数学,通信,5G,智能反射面)