美文网首页
多链路数据分流算法与平分算法时延对比

多链路数据分流算法与平分算法时延对比

作者: 天涯的尽头s风沙 | 来源:发表于2020-11-15 04:03 被阅读0次

    分流算法:根据不同链路的效率比分配数据包
    平分算法:等比划分数据包大小

    import java.util.Random;
    class Untitled {
        public static void main(String[] args) {
            myFunction();
        }
        public static double getAvgV(double[] vs, Random random) {
            double result = 0;
            for (double v : vs) {
                v = v * 1000 * 1000 / 8 / 1024 / 1024;
                if (random.nextBoolean()) {
                    result += v * (1 + random.nextDouble() / 10);
                } else {
                    result += v * (1 - random.nextDouble() / 10);
                }
            }
            return result / vs.length;
        }
        public static void myFunction(){
            double[] array = {1, 1.5, 2, 2.5, 3, 3.5, 4};  //多链路数据分流算法分流比例
            double[] array2 = {1, 1, 1, 1, 1, 1, 1};       //多链路数据平分算法平分比例
            double size = 90;  //固定比例分配的数据大小
            double size2 = 10;  //误差导致的分配数据大小
            double[] vs = {87.15, 78.02, 70.55, 60.48, 53.12, 52.12};   //不同信号强度的速率
            Random random = new Random();
            double v = getAvgV(vs, random);  //不同信号强度的速率平均值,正常应该是每种信号强度速率测20遍,取所有信号强度(丢包率为0的信号强度)速率的平均值
            System.out.println("平均速率" +v);
            double[] result = new double[array.length];   //多链路数据分流算法输出结果
            double[] result2 = new double[array2.length]; //多链路数据平分算法输出结果
            for (int i = 0; i < array.length; i++) {
                double d = random.nextDouble();  //随机数,链路A和链路B数据分配存在的误差值
                double sizeA = (size / (array[i] + 1)) + (size2 * d);  //链路数据分流算法链路A接收数据大小
                double sizeB = (size / (array[i] * (array[i] + 1))) + (size2 * (1 - d));  ////链路数据分流算法链路B接收数据大小
                d = random.nextDouble();  //同上
                double sizeA2 = (size / (array2[i] + 1)) + (size2 * d);  //多链路数据平分算法链路A接收数据大小
                double sizeB2 = (size / (array2[i] * (array2[i] + 1))) + (size2 * (1 - d)); ////多链路数据平分算法链路B接收数据大小
                result[i] = Math.max(sizeA / v, sizeB / v);  //由于两条链路同时传输,所以取耗时最长的时间为接收完数据的最终时间
                result2[i] = Math.max(sizeA2 / v, sizeB2 / v);
            }
            System.out.println("链路数据分流算法:");
            for (double x : result) {
                System.out.print(x + " ");
            }
            System.out.println("\n多链路数据平分算法:");
            for (double x : result2) {
                System.out.print(x + " ");
            }
        }
    }
    

    运行结果:(每次结果不一样)

    平均速率7.573186534987189
    链路数据分流算法:
    6.794903690780155 6.021106974387808 5.110256355937014 4.679775962058876 3.8554335717442387 2.670316944094455 3.450134949619518 
    多链路数据平分算法:
    7.162718961502581 7.117080467937154 7.071036514391218 7.240359882634017 6.968370101559047 7.0666407455843 6.802022213666387
    

    实验结果测试了从-10dbm到-60dbm不同信号强度下的速率,横坐标选取的速率比例分别为1、1.5、2、2.5、3、3.5和4,纵坐标为两种算法的时延,单位为秒,其中接收的数据内容大小固定为100MB,Wi-Fi链路和LTE链路分别接收50MB数据

    相关文章

      网友评论

          本文标题:多链路数据分流算法与平分算法时延对比

          本文链接:https://www.haomeiwen.com/subject/ypggbktx.html