def obtain_wireless_signal_coverage(self):
        """
        According to the position of mobile devices and edge sites, judge whether mobile devices are covered by edge
        sites' wireless signal.

        :return: lists stored indices of connectable edge sites, power gains, and mobile devices, respectively, and
        distances from mobile devices to connectable edge sites
        """
        connectable_servers, connectable_distances, connectable_gains = [], [], []
        global_distances = [
        ]  # a 'N * M' matrix stored distances between each user and each edge site
        for i in range(len(self.__user_info)):
            tmp_s, tmp_d, tmp_g = [], [], []
            tmp_gains = []
            for j in range(len(self.__edge_info)):
                distance = ToolFunction.obtain_geo_distance(
                    self.__user_info[i], self.__edge_info[j])
                if distance <= self.__edge_info[j][2]:
                    # under signal coverage
                    tmp_s.append(j)
                    tmp_d.append(distance)
                    tmp_gains.append(
                        ToolFunction.obtain_channel_power_gain(
                            self.__path_loss_const, distance))
                tmp_g.append(distance)
            connectable_servers.append(tmp_s)
            connectable_distances.append(tmp_d)
            connectable_gains.append(tmp_gains)
            global_distances.append(tmp_g)

        connectable_users = []
        for j in range(len(self.__edge_info)):
            tmp_u = []
            for i in range(len(self.__user_info)):
                if global_distances[i][j] <= self.__edge_info[j][2]:
                    tmp_u.append(i)
            connectable_users.append(tmp_u)

        return connectable_servers, connectable_users, connectable_distances, connectable_gains, global_distances
Example #2
0
    def obtain_wireless_signal_coverage(user_info, edge_info):
        """
        According to the position of mobile devices and edge sites, judge whether mobile devices are covered by edge
        sites' wireless signal.

        :param user_info: a numpy array stored latitude and longitude of all mobile devices
        :param edge_info: a numpy array stored latitude, longitude and signal coverage radius of all edge sites
        :return: lists stored indices of connectable edge sites and mobile devices, respectively, and distances from
        mobile devices to connectable edge sites
        """
        connectable_servers, connectable_distances = [], []
        global_distances = [
        ]  # a N*M matrix stored distances between each user and each edge site
        for i in range(len(user_info)):
            tmp_s = [], tmp_d = [], tmp_g = []
            for j in range(len(edge_info)):
                distance = ToolFunction.obtain_geo_distance(
                    user_info[i], edge_info[j])
                if distance <= edge_info[j][2]:
                    # under signal coverage
                    tmp_s.append(j)
                    tmp_d.append(distance)
                tmp_g.append(distance)
            connectable_servers.append(tmp_s)
            connectable_distances.append(tmp_d)
            global_distances.append(tmp_g)

        connectable_users = []
        for j in range(len(edge_info)):
            tmp_u = []
            for i in range(len(user_info)):
                if global_distances[i][j] <= edge_info[j][2]:
                    tmp_u.append(i)
            connectable_users.append(tmp_u)

        return connectable_servers, connectable_users, connectable_distances, global_distances