PureEdgeSim -locationmanager包-MobilityModel文件

MobilityModel

移动管理器模块的主类,为不同的边缘设备生成移动路径。

当前设备的位置

    protected Location currentLocation;

设备是否移动

    protected boolean isMobile = false;

最小暂停持续时间

	protected double minPauseDuration;

最大暂停持续时间

	protected double maxPauseDuration;

最大移动持续时间

	protected double maxMobilityDuration;

最小移动持续时间

	protected double minMobilityDuration;

速度

	protected double speed;

仿真管理器

	protected SimulationManager simulationManager;

最近的边缘数据中心

	protected ComputingNode closestEdgeDataCenter = ComputingNode.NULL;

每过一个时间间隔的位置

	Map<Integer, Location> path = new LinkedHashMap<>(
			(int) (SimulationParameters.simulationDuration / SimulationParameters.updateInterval));

每过一个间隔的最近的边缘数据中心

	Map<Integer, ComputingNode> datacentersMap = new LinkedHashMap<>(
			(int) (SimulationParameters.simulationDuration / SimulationParameters.updateInterval));

初始化空移动模型,防止空指针

	/**
	 * An attribute that implements the Null Object Design Pattern to avoid
	 * NullPointerException when using the NULL object instead of attributing null
	 * to MobilityModel variables.
	 */
	public static final MobilityModel NULL = new MobilityModelNull();

初始化对象

	protected MobilityModel(SimulationManager simulationManager, Location location) {
		currentLocation = location;
		setSimulationManager(simulationManager);
	}
	protected MobilityModel() {
	}

返回下一一时刻XY位置

	protected abstract Location getNextLocation(Location location);

更新位置

	public Location updateLocation(double time) {
		if (time <= SimulationParameters.simulationDuration)
			currentLocation = path.get((int) time * 1000);
		return currentLocation;
	}

得到当前位置

	public Location getCurrentLocation() {
		return currentLocation;
	}

获得是否是移动模型

	public boolean isMobile() {
		return isMobile;
	}

设置是否是移动模型

	public MobilityModel setMobile(boolean mobile) {
		isMobile = mobile;
		return this;
	}

得到最小的连续暂停周期

	public double getMinPauseDuration() {
		return minPauseDuration;
	}

设置最小的连续暂停周期

	public MobilityModel setMinPauseDuration(double minPauseDuration) {
		this.minPauseDuration = minPauseDuration;
		return this;
	}

得到最大暂停周期

	public double getMaxPauseDuration() {
		return maxPauseDuration;
	}

设置最大暂停持续时间

	public MobilityModel setMaxPauseDuration(double maxPauseDuration) {
		this.maxPauseDuration = maxPauseDuration;
		return this;
	}

得到最小移动持续时间

	public double getMinMobilityDuration() {
		return minMobilityDuration;
	}

设置最小移动持续时间

	public MobilityModel setMinMobilityDuration(double minMobilityDuration) {
		this.minMobilityDuration = minMobilityDuration;
		return this;
	}

得到最大移动持续时间

	public double getMaxMobilityDuration() {
		return maxMobilityDuration;
	}

设置最大移动持续时间

	public MobilityModel setMaxMobilityDuration(double maxMobilityDuration) {
		this.maxMobilityDuration = maxMobilityDuration;
		return this;
	}

得到速度

	public double getSpeed() {
		return speed;
	}

设置速度

	public MobilityModel setSpeed(double speed) {
		this.speed = speed;
		return this;
	}

计算节点的距离

	public double distanceTo(ComputingNode device2) {
		return Math.abs(Math.sqrt(Math
				.pow((getCurrentLocation().getXPos() - device2.getMobilityModel().getCurrentLocation().getXPos()), 2)
				+ Math.pow((getCurrentLocation().getYPos() - device2.getMobilityModel().getCurrentLocation().getYPos()),
						2)));
	}

得到仿真管理器

	public SimulationManager getSimulationManager() {
		return simulationManager;
	}

设置仿真管理器

	public void setSimulationManager(SimulationManager simulationManager) {
		this.simulationManager = simulationManager;
	}

生成路径

	public void generatePath() {

        closestEdgeDataCenter = getDataCenter();

        if (!isMobile())
            return;
        Location newLocation = getCurrentLocation();//获得当前位置

        // Working around the double imprecision
        int interval = (int) (SimulationParameters.updateInterval * 1000);//计算更新间隔
        int simulationTime = (int) (SimulationParameters.simulationDuration * 1000);//计算仿真时间

        for (int i = 0; i <= simulationTime; i = i + interval) {
            path.put(i, newLocation);//每过一个间隔在路径上插入新的位置
            newLocation = getNextLocation(newLocation);
            datacentersMap.put(i, getDataCenter());
        }
	}

得到最近距离的计算节点(内部函数调用)

	 protected ComputingNode getDataCenter() {
        List<ComputingNode> list = getSimulationManager().getDataCentersManager().getComputingNodesGenerator()
                .getEdgeOnlyList();//得到边缘数据中心列表

        double range = SimulationParameters.edgeDataCentersRange;//边缘数据中心连接范围
        ComputingNode closestDC = ComputingNode.NULL;

        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).isPeripheral() && distanceTo(list.get(i)) <= range) {//在边缘数据中心的传输范围内
                range = distanceTo(list.get(i));
                closestDC = list.get(i);
                //循环找到最小距离的边缘数据中心
            }
        }
        return closestDC;
    }

得到最近的计算节点(自己调用用这个)

	 public ComputingNode getClosestEdgeDataCenter() {
        return (isMobile //是否是移动设备
                && getSimulationManager().getSimulation().clock() <= SimulationParameters.simulationDuration)//是否在仿真时间内
                ? datacentersMap.get((int) (getSimulationManager().getSimulation().clock() * 1000))//得到当前位置最近的边缘数据中心
                : closestEdgeDataCenter;//最后时间最近数据中心的位置
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值