You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CPLEX建模求助:如何随机生成流服务链及λf等相关参数

CPLEX 流与服务链参数随机生成实现

对应论文核心定义:

  • 流$f \in F$是从源到目的的数据包序列,发送速率为$\lambda_f$
  • 流$f$的服务链为有序NF序列$\vec{S}[f] = (S[1][f], S[2][f], ..., S[J[f]][f])$,$J[f]$为服务链长度,每个$S[j][f] \in V$为链上第j个网络功能类型

你已经完成的基础集合定义无需修改,后续参数按规则生成的完整OPL代码如下:

// 已完成的基础参数定义
int F = 50;
range Nuflow = 1..F;
int V = 5;
range Nuvnf = 1..V;

// 随机数初始化:固定种子可复现实验结果,不需要可删除
int random_seed = 202406;
execute {
    opl.setRandomSeed(random_seed);
}

// --------------------------
// 参数1:流到达速率lambda[f],服从均值0.5的对数正态分布
// 对数正态分布参数换算:取对数后服从正态分布N(ln_mu, sigma^2)
// 网络流量建模场景下sigma取常用值0.2,若论文给定方差可直接修改该值
float sigma = 0.2;
float ln_mu = Math.log(0.5) - sigma*sigma/2;
float lambda[Nuflow];

execute {
    for (var f in Nuflow) {
        // Box-Muller法将0-1均匀分布随机数转换为标准正态分布
        var u1 = opl.rand();
        var u2 = opl.rand();
        var std_norm = Math.sqrt(-2*Math.log(u1)) * Math.cos(2*Math.PI*u2);
        // 转换为目标对数正态分布
        lambda[f] = Math.exp(ln_mu + sigma * std_norm);
    }
}

// --------------------------
// 参数2:服务链长度J[f],取值范围2-4的随机整数
int max_chain_length = 4;
int J[Nuflow];
execute {
    for (var f in Nuflow) {
        // opl.rand(3)生成0/1/2随机整数,加2后得到2/3/4
        J[f] = 2 + opl.rand(3);
    }
}

// --------------------------
// 参数3:服务链序列S[j][f],每个位置从V种NF中随机选取
range ChainPos = 1..max_chain_length;
int S[ChainPos][Nuflow];
execute {
    for (var f in Nuflow) {
        // 填充有效服务链位置
        for (var j=1; j<=J[f]; j++) {
            // opl.rand(V)生成0~V-1随机整数,加1匹配1~V的NF索引
            S[j][f] = 1 + opl.rand(V);
        }
        // 超出实际链长的位置标记为0,作为无效位后续建模跳过即可
        for (var j=J[f]+1; j<=max_chain_length; j++) {
            S[j][f] = 0;
        }
    }
}

实现注意事项

  • 固定随机种子是学术实验的通用做法,保证多次运行代码生成的拓扑、流量参数完全一致,方便结果复现;如果需要每次生成不同的随机参数,删除setRandomSeed相关代码即可。
  • 服务链存储采用固定最大长度的二维数组,不需要实现OPL中较复杂的可变长数组结构,后续写约束时只需要遍历到J[f]位置,或者增加S[j][f] != 0的判断即可跳过无效位。
  • 当前实现允许同一条服务链中出现重复类型的NF,如果论文要求服务链内NF类型不重复,只需要在生成S[j][f]的循环中增加去重判断,排除已经选过的NF类型即可。
  • 如果论文中明确给出了对数正态分布的标准差/方差参数,只需要修改代码中sigma的取值,重新计算ln_mu即可匹配要求的分布。

内容的提问来源于stack exchange,提问作者Mahsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:31:08