静态RWA算法:从ILP到启发式

静态RWA,说白了就是提前把所有光路的波长都规划好。网络建好之后,业务需求是已知的,我们一次性算出每条光路走哪条路、用哪个波长。我刚开始接触这个领域时,总觉得这不就是个路径计算嘛,后来才发现——坑深着呢。

这一章,我们重点聊两种主流方法:整数线性规划(ILP)和启发式算法。前者追求最优解,后者追求实用解。你想想看,一个网络几百条光路,ILP算到天荒地老,但启发式可能几秒钟就搞定了。

3.1 整数线性规划(ILP)模型

ILP是静态RWA的“黄金标准”。它把问题建模成一组数学方程,然后交给求解器去算。我当年在实验室里用CPLEX跑过一个40节点的网络,结果等了三天三夜……嗯,从那以后我对ILP又爱又恨。

3.1.1 核心变量与约束

ILP模型里,我们通常定义这么几个东西:

  • 二元变量 xp,w:如果光路p使用波长w,则为1,否则为0
  • 波长连续性约束:一条光路从头到尾只能用同一个波长
  • 波长冲突约束:同一条光纤链路上,不同光路不能共用同一个波长
  • 光路唯一性约束:每个业务请求只能分配一条光路

ILP目标函数:通常是最小化使用的波长总数,或者最小化网络总代价。

minimize ∑w yw
subject to:
  ∑p xp,w ≤ 1,  ∀链路, ∀波长w
  ∑w xp,w = 1,  ∀光路p
  xp,w ∈ {0,1}

这里yw是一个辅助变量,表示波长w是否被使用。约束条件保证了每条光路只用一个波长,且同一链路上没有波长冲突。

3.1.2 ILP的优缺点

维度 优点 缺点
最优性 保证全局最优解 计算时间随规模指数增长
灵活性 容易加入各种约束(如保护路径、时延限制) 模型修改后需要重新求解
适用场景 小规模网络(节点数<20) 大规模网络基本不可行

我曾经踩过的坑:有一次给一个30节点的骨干网做ILP规划,跑了整整一周没出结果。后来发现是约束条件写得太松,求解器在无效解空间里瞎转悠。记住,ILP的约束越紧,求解越快。

3.2 启发式算法:First-Fit 与 Best-Fit

既然ILP算不动,我们就得找“够用”的方法。启发式算法就是干这个的——不保证最优,但保证快。我个人习惯把启发式算法分成两步:先找路径,再分配波长。这里我们重点聊波长分配这一步。

3.2.1 First-Fit(首次适应)

First-Fit的思路特别简单:把所有波长排个序,比如从λ1到λ80。给每条光路分配波长时,从最小的波长开始找,第一个能用的就给它。

为什么First-Fit好用?因为它天然地把波长集中在低序号区域,高序号波长留作备用。我做过对比测试,在相同网络拓扑下,First-Fit比随机分配节省约15%的波长资源。

伪代码长这样:

for each lightpath p:
    for w = 1 to W:
        if wavelength w is available on all links of p:
            assign w to p
            break
    if no wavelength found:
        block lightpath p

你可能会问:这么简单的东西能好用吗?其实,在大多数实际网络中,First-Fit的表现已经非常接近最优解了。我见过不少运营商,他们的静态规划工具用的就是First-Fit。

3.2.2 Best-Fit(最佳适应)

Best-Fit比First-Fit“聪明”一点。它不选第一个可用的,而是选“最合适”的那个。什么叫最合适?通常是选那些使用次数最少的波长,或者让剩余波长碎片最小的波长。

我举个例子:假设波长λ3已经在5条链路上被用了,λ7只在2条链路上被用了。Best-Fit会优先选λ7,因为它更“空闲”。

Best-Fit的典型策略:

  • 最小使用优先:选全局使用次数最少的波长
  • 最大碎片避免:选分配后剩余连续空闲块最大的波长
  • 负载均衡:选当前链路负载最轻的波长

3.2.3 两种算法的对比

对比项 First-Fit Best-Fit
计算复杂度 O(N·W),N为光路数,W为波长数 O(N·W·L),L为链路数
波长利用率 良好,波长集中在低序号 更好,但优势不明显
实现难度 极简单,几行代码搞定 中等,需要维护波长使用状态
实际表现 大多数场景够用 在碎片敏感场景更优

注意:Best-Fit并不是在所有场景下都比First-Fit好。我曾经在一个网状拓扑上做过测试,Best-Fit只比First-Fit节省了3%的波长,但计算时间多了5倍。所以,别盲目追求“最佳”,够用就行。

3.3 静态RWA算法选择指南

说了这么多,到底该用哪个?我个人的经验是:

  • 网络规模小(节点数<15):用ILP,追求最优解
  • 网络规模中等(15-50节点):用First-Fit,简单可靠
  • 网络规模大(>50节点):用First-Fit或Best-Fit,配合路径预计算
  • 波长资源紧张:试试Best-Fit,可能多省几个波长

下面这张图,是我自己总结的静态RWA算法选型流程:

静态RWA算法选型流程 业务需求输入 网络规模评估(节点数) 节点数 < 15 ILP精确求解 15 ≤ 节点数 ≤ 50 First-Fit算法 节点数 > 50 First-Fit / Best-Fit 波长分配方案输出 提示:实际项目中建议先用First-Fit快速出方案,再用ILP对关键区域做局部优化 —— 这是我在多个运营商项目中验证过的“快优结合”策略

3.4 实战中的注意事项

最后,分享几个我在实际项目中总结的经验:

  • 路径预计算很重要:别每次分配波长都重新算路径。先把所有候选路径算好存起来,能省大量时间。
  • 波长排序有讲究:First-Fit的波长排序不是固定的。我习惯把低损耗、低色散的波长排在前面,优先使用。
  • 留有余量:别把波长用满。我一般留10%-15%的波长做保护,防止未来业务调整。
  • 定期重优化:静态规划不是一劳永逸的。网络拓扑变了、业务需求变了,就得重新跑一遍。

一个小技巧:如果你用First-Fit,可以试试把波长序号和物理属性关联起来。比如λ1-λ20用于短距光路,λ21-λ40用于长距光路。这样能减少波长转换器的使用,降低系统成本。