数据可视化展示了以下信息:
用户计算需求分布:以不同颜色的点表示,颜色深浅代表不同的计算需求量。这些点分布在整个区域中,显示了每个位置的计算需求。
边缘服务器候选位置:用红色方形标记表示。这些位置是部署边缘服务器的潜在选项,每个位置都有相应的固定成本。
云服务器位置:用蓝色星形标记表示。云服务器的位置是固定的,其计算资源容量被认为是无限的
下面进行数据分析
计算需求分布:需求分布不均,有些区域的需求量显著高于其他区域。在决定边缘服务器的部署位置时,这些高需求区域应被优先考虑。
边缘服务器的位置选择:候选位置的选择需要考虑覆盖高需求区域的能力以及与这些区域的距离,因为传输成本与距离成正比。
成本效益分析:在选择部署边缘服务器的位置时,需要权衡固定成本和计算成本。位置越靠近用户,传输成本越低,但也可能意味着较高的固定成本。
· 目标函数:目标函数需要最小化总成本,包括固定成本、计算成本和传输成本。
·约束条件:
每个用户只能连接到一个服务器。
边缘服务器的计算资源容量不得超过其限制。
下面进行代码编写和分析
固定成本:每个候选边缘服务器位置的固定成本直接添加到QUBO矩阵的对应位置。
计算成本和传输成本:需要根据用户与服务器之间的连接决策来计算。这可能涉及到复杂的计算,尤其是在处理用户到边缘服务器和边缘服务器到云服务器的传输成本时。
约束条件:确保每个用户只连接到一个服务器,并且边缘服务器的计算资源容量不被超过。
构建完整的QUBO模型涉及到大量的计算和逻辑判断,考虑到模型的复杂性,可能需要进行一些简化或近似,以确保模型可以有效地被求解器处理。
完整的问题二求解代码
首先,我们需要定义一些辅助函数来计算距离和成本
def euclidean_distance(x1, y1, x2, y2):
“”“计算两点之间的欧几里得距离”“”
return round(((x1 - x2)**2 + (y1 - y2)**2)**0.5, 2)
def compute_cost(QUBO, solution, data_user, data_edge, data_cloud):
“”“计算给定解决方案的总成本”“”
total_cost = 0
N = len(data_edge)
M = len(data_user)
cloud_x, cloud_y = data_cloud.iloc[0][‘X-axis’], data_cloud.iloc[0][‘Y-axis’]
# 固定成本和计算成本
for i in range(N):
if solution == 1:
total_cost += data_edge.iloc['Fixed Cost']
for j in range(M):
if solution[N + i * M + j] == 1:
total_cost += 2 * data_user.iloc[j]['Amount of Computational Demands'] # 边缘服务器计算成本
# 传输成本
for j in range(M):
user_x, user_y = data_user.iloc[j]['X-axis'], data_user.iloc[j]['Y-axis']
connected_to_edge = False
for i in range(N):
if solution[N + i * M + j] == 1:
edge_x, edge_y = data_edge.iloc['X-axis'], data_edge.iloc['Y-axis']
total_cost += euclidean_distance(user_x, user_y, edge_x, edge_y) * data_user.iloc[j]['Amount of Computational Demands'] # 用户到边缘的传输成本
total_cost += euclidean_distance(edge_x, edge_y, cloud_x, cloud_y) * data_user.iloc[j]['Amount of Computational Demands'] # 边缘到云的传输成本
connected_to_edge = True
break
if not connected_to_edge:
total_cost += 2 * euclidean_distance(user_x, user_y, cloud_x, cloud_y) * data_user.iloc[j]['Amount of Computational Demands'] # 用户到云的传输成本
return total_cost