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

2020-11-15  本文已影响0人  天涯的尽头s风沙

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

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数据

上一篇 下一篇

猜你喜欢

热点阅读