非凸、离散、还耦合:论文里的求解方法是一条四步流水线

非凸、离散、还耦合:论文里的求解方法是一条四步流水线

把工程问题写成优化式之后,最常见的下一步是:把所有变量一起交给求解器,等它给出答案。

然后失败会以三种具体的方式出现。

第一种:目标函数非凸。 解取决于初始点,换个起点就是另一个答案,于是谁也不能声明"这是最优解"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.

相关推荐
虚无的纽扣2 小时前
【力扣刷题】第二天:无重复字符的最长字串、移动零问题
算法·leetcode·排序算法
程序员cxuan2 小时前
真没想到,AI 圈又杀出来一匹黑马!
人工智能·后端·程序员
richard_first2 小时前
第3章 PTQ:不用重新训练也能量化 LLM
人工智能·深度学习·语言模型·自然语言处理·transformer
萌新小码农‍2 小时前
KL散度的介绍
人工智能·深度学习·机器学习
张祥6422889042 小时前
牛顿迭代法求解开普勒方程:从RTKLIB源码到数值分析
人工智能·算法·机器学习
Niuguangshuo2 小时前
论文解读:Deep Speech 2,工业级英中端到端 ASR 系统报告
算法·音视频·语音识别
tq10862 小时前
归属感产生临境创造性
人工智能
Theo_xx2 小时前
声学感知基础:8.Range Bin、Range Profile 与 Range-Time Map
人工智能·无线感知·声学感知
欣欣之王来了2 小时前
AI合规学习:核心知识点梳理与学习路径规划
人工智能