非凸、离散、还耦合:论文里的求解方法是一条四步流水线
把工程问题写成优化式之后,最常见的下一步是:把所有变量一起交给求解器,等它给出答案。
然后失败会以三种具体的方式出现。
第一种:目标函数非凸。 解取决于初始点,换个起点就是另一个答案,于是谁也不能声明"这是最优解"2。无线系统里的联合设计问题经常长这样:功率、波束、轨迹、时隙同时出现,目标与约束里带着比值、对数与乘积,凸性在第一眼就不成立1。
第二种:变量里混着离散选择。 例如"感知放在哪个时隙"就是一个离散决策。它和连续的波束、功率出现在同一个问题里时,问题被刻画成非凸混合整数非线性规划3,而混合整数本身就意味着可行组合随变量数快速增长------搜索树还没展开完,时间已经用完。
第三种:变量之间互相牵制。 这是最难靠"换个求解器"解决的一种:发射波束成形向量与无人机动力学高度耦合,一个变了,另一个的最优值就跟着变2。你把波束调好,轨迹的最优位置变了;把轨迹调回去,刚才那组波束又不合适。任何单变量调优都会被下一步推翻。
这三种难通常同时出现。也正因为如此,论文里的"求解方法"很少是某一个算法,而是一条分工固定的流水线:每一步解决一个不同的问题------让子问题可解、让子问题变凸、让子问题有解、让整体停下来。
一、耦合不是形容词:它落在变量表和系统结构上

图 1 是一个很典型的系统结构:基站同时接收上行用户的数据、又对潜在的窃听者做感知,通信链路与感知回波共用同一套收发资源1。把它写成优化式,联合优化的变量会包括无人机轨迹、速度、通信波束、感知波束功率与悬停时间3;换一篇论文,变量表变成波束成形、用户关联、感知时隙选择与轨迹4。
变量表越长,耦合的来源越清楚:这些变量不是各自对应一个指标,而是同一组变量同时决定多个指标 。感知时隙的选择改变了可用于通信的时间;轨迹的改变同时改变通信信道与回波强度;波束功率怎么分配,等于在通信速率与感知质量之间来回搬运。这解释了一个常见现象:单独看每个变量都"还有余量",合在一起却没有任何一个能动------约束不是分别绑在每个变量上的,而是绑在整组变量上的。
二、四步流水线
把几篇论文的求解过程叠在一起看,会发现它们在做同样四件事。这四个步骤不是为统一记号而起的名字,每一步都在消除一种具体的求解障碍。

第一步:分块。 把变量按"给定其余块就能解"切开。常见的切法是把波束成形与无人机动态变量分开,各自单独优化,然后交替进行12。分块的目的不是让问题变小,而是让每个子问题落在已经有解法的形式上。切错了,子问题依然无解------所以分块的依据必须来自问题结构,而不是来自变量名的直觉。
第二步:凸化。 子问题通常还是不凸。这一步把难约束或难项换成可解形式,半定松弛、大 M 法、惩罚方法与连续凸近似是一组常见的组合3。要注意"换"这个字:半定松弛会把秩一约束暂时去掉1。换句话说,这一步换来的是可解性,付出的是"解不再自动满足原约束"------这笔账要在第四步还。
第三步:闭式解与下界。 对结构特殊的变量可以直接推出闭式解:接收合并向量的信干噪比可以写成两个二次型之比,最大化它等价于一个广义特征值问题,于是有现成公式1。另一条路是给难处理项一个紧下界,用下界替换之后再支撑其余变量的设计,最后用两层罚函数算法求解4。闭式解只对特定结构成立,下界替换优化的是下界而不是原目标------两者都是用结构换速度。
第四步:迭代与停止。 分块之后交替更新,一直迭代到收敛1。停止判据是需要写清楚的一个选择,一种做法是比较目标函数的相对增量,低于阈值就停1。这一步还必须把前面松弛掉的东西还原回来:秩一解要用奇异值分解与高斯随机化取出1,否则迭代结束时手上的矩阵解可能不对应任何真实波束。
| 变换手段 | 把什么变简单 | 代价:多出来的步骤或假设 | 来源 |
|---|---|---|---|
| 半定松弛 | 带秩一约束的矩阵变量问题化为凸问题 | 秩一约束被暂时去掉,收敛后要用奇异值分解与随机化还原 | 1 |
| 连续凸近似 | 用一串凸子问题逼近非凸项 | 需要辅助变量与逐轮更新,近似只在当前点附近成立 | 13 |
| 大 M 法 | 把离散选择写进连续约束 | 引入一个事先给定的常数,它的取值直接进入约束强度 | 3 |
| 惩罚方法 | 把难约束搬进目标函数再一起优化 | 权重需要选择;两层结构还要区分内外层各自负责什么 | 34 |
| 闭式解 | 对结构特殊的变量直接给出公式 | 只对特定结构成立,结构一变公式就失效 | 14 |
| 下界替换 | 用可处理的下界替换难项,支撑其余变量 | 优化的是下界,与原子问题之间始终存在差距 | 4 |
| 按阶段分解 | 把长过程拆成若干阶段分别设计 | 阶段划分依赖对问题的先验知识,换问题就要重划 | 5 |
还需要区分"分解"的两种粒度。上面讲的是按变量分块;也有论文按阶段分解,把轨迹设计拆成多个阶段来提高建模精度,再用迭代算法求局部最优轨迹5。粒度可以不同,但分工的目的相同:把一个大到无法直接求解的问题,换成若干个可以求解、并且能互相提供输入的步骤。
三、把流水线写成一个循环(概念性伪代码)
下面这段是概念性伪代码,只描述流程骨架,用来把四步之间的依赖关系写清楚;具体问题里的变换选择与参数设定不在其中。
text
# 概念性伪代码:分块交替求解骨架(概念性伪代码,不是任何论文算法框的逐行翻译)
Input:
variables # 待求解的变量集合
blocks # 把 variables 分成若干块,每块可独立求解
feasible_start # 一个满足全部约束的初始点
eps # 停机阈值
Output:
x_best # 原问题的一个可行解(通常只能声明为局部最优或次优)
x <- feasible_start
f_prev <- objective(x) # 状态:上一轮的目标值
repeat:
for each block b in blocks: # 循环:逐块更新
sub <- build_subproblem(x, b) # 固定其余块,构造第 b 块的子问题
if sub is nonconvex: # 判断:子问题不凸时先凸化
sub <- convexify(sub) # 松弛 / 近似 / 把难约束搬进目标
if closed_form_exists(sub): # 判断:有闭式解就直接更新
x[b] <- closed_form_step(sub)
else:
x[b] <- solve_convex(sub) # 否则解一个凸子问题
if relaxation_was_used: # 判断:用过松弛就必须还原
x[b] <- recover_feasible(x[b])
x <- project_to_feasible(x) # 状态更新:投影回可行域
f_now <- objective(x) # 状态更新:本轮目标值
if abs(f_now - f_prev) / max(1, abs(f_prev)) <= eps:
break # 判断:相对增量足够小则停机
f_prev <- f_now
return x_best <- x
四、一个最小可运行示例
下面的 Python 代码是一个最小可运行示例(仅用标准库),它把"分块交替"这件事压到最小:目标函数里有一个乘积项 x * y,所以两个变量耦合;但只要固定其中一个,另一个的最优值就有闭式解。
python
"""分块交替最小化的最小可运行示例。
目标:f(x, y) = (x*y - 1)**2 + 0.05 * (x**2 + y**2)
乘积项让两个变量耦合;固定任一个变量后,另一个的最优值有闭式解。
"""
import math
def objective(x, y):
return (x * y - 1.0) ** 2 + 0.05 * (x * x + y * y)
def best_x(y):
"""固定 y 时使 f 最小的 x(解一元二次方程的一阶条件)。"""
return y / (y * y + 0.05)
def best_y(x):
"""固定 x 时使 f 最小的 y。"""
return x / (x * x + 0.05)
def alternate(x, y, rounds=60):
"""交替更新两个块,返回轨迹与每轮目标值。"""
trace, values = [(x, y)], [objective(x, y)]
for _ in range(rounds):
x = best_x(y) # 块 1:闭式解
y = best_y(x) # 块 2:闭式解
trace.append((x, y))
values.append(objective(x, y))
return trace, values
def report(name, x0, y0):
trace, values = alternate(x0, y0)
monotone = all(b <= a + 1e-12 for a, b in zip(values, values[1:]))
print(f"{name}: 起点=({x0}, {y0}) 终点=({trace[-1][0]:.4f}, {trace[-1][1]:.4f}) "
f"目标={values[-1]:.4f} 每步不劣化={monotone}")
report("起点A", 0.0, 0.0)
report("起点B", 0.5, 2.0)
# 停机点是交替映射的不动点,未必是原问题的极小点:沿两个方向各走一小步看看
for label, (x, y) in {"沿 x=y 方向": (0.05, 0.05), "沿 x=-y 方向": (0.05, -0.05)}.items():
print(f"{label} 走一小步: 目标={objective(x, y):.4f}(起点A 的停机点目标为 1.0000)")
print("两个起点是否收敛到同一点:", math.isclose(alternate(0.0, 0.0)[0][-1][0],
alternate(0.5, 2.0)[0][-1][0], abs_tol=1e-9))
运行它会看到三件事:每一步的目标值都不会变大;不同初始点停在不同的稳定点;其中一个稳定点沿着某个方向走一小步目标反而更低------也就是说,交替更新收敛到的点只是一个"没人能动"的点。
五、拿去读论文的三个问题

问题一:每个子问题真的可解吗? 分块不是随手切。要检查"固定其余块之后,这一块是否落在有解法的形式上":有闭式解最好,没有的话凸不凸。如果两个都不满足,说明分块切错了,或者还需要先做变换。
问题二:松弛和近似怎么还? 凡是用过松弛或近似,都要在流程里找到对应的还原步骤:秩一约束怎么恢复成向量解,下界替换带来的差距有多大,近似在离当前点较远时是否还成立。没有还原步骤的松弛,等价于在解一个更容易但不是原来的问题。
问题三:停下来的保证是什么? 交替更新能保证的通常只有"每步不劣化",而不是"到达最优"。停机点由初始点与分块方式共同决定,因此论文里"收敛"这个词需要追问:收敛到可行解、局部最优,还是全局最优?三种说法的证据强度完全不同。
六、这套流程的边界
下面这些内容不在这条流水线的讨论范围内:具体问题的变换推导、参数标定(例如大 M 的取值与惩罚权重怎么选)、复杂度分析与收敛速度证明。它们依赖具体问题的结构与尺度,换一个问题就要重新推导,不能从别的论文里搬。
需要保留的另一点是:四步流水线描述的是一种组织方式,而不是一张保证成功的配方。同样四步,分块粗细不同、凸化手段不同,得到的解与代价都会不同;论文之间也很难据此排出优劣------它们解决的问题结构并不相同。
参考文献
1 A. Tabeshnezhad, M. T. Mamaghani, A. L. Swindlehurst, T. Svensson, and E. Ström, "Robust Beamforming Design for Secure Uplink NOMA-ISAC," arXiv, 2026, doi: 10.48550/arXiv.2606.17306.
2 B. He, W. Mao, Y. Liu, W. Huangfu, Y. Xiao, F. Wang, and Y. Ji, "Energy-Efficient Joint Beamforming and Trajectory Optimization for UAV-Enabled Integrated Sensing and Communication," IEEE Transactions on Communications, vol. 73, no. 12, pp. 13426--13440, 2025, doi: 10.1109/TCOMM.2025.3599902.
3 A. Khalili, A. Rezaei, D. Xu, F. Dressler, and R. Schober, "Efficient UAV Hovering, Resource Allocation, and Trajectory Design for ISAC With Limited Backhaul Capacity," IEEE Transactions on Wireless Communications, vol. 23, no. 11, pp. 17635--17650, 2024, doi: 10.1109/TWC.2024.3455370.
4 K. Meng and Q. Wu, "Throughput Maximization for UAV-enabled Integrated Periodic Sensing and Communication," in 2022 IEEE International Conference on Communications Workshops (ICC Workshops), 2022, pp. 987--992, doi: 10.1109/ICCWorkshops53468.2022.9814705.
5 X. Jing, F. Liu, C. Masouros, and Y. Zeng, "ISAC From the Sky: UAV Trajectory Design for Joint Communication and Target Localization," IEEE Transactions on Wireless Communications, vol. 23, no. 10, pp. 12857--12872, 2024, doi: 10.1109/TWC.2024.3396571.