96SEO 2026-02-20 02:21 0
随着对低延迟需求的增加边缘计算或雾计算逐渐成为主流。

当前最先进的技术假设边缘服务器上的总资源利用率等于从边缘服务器提供的所有服务的资源利用率的总和。
然而边缘服务器的资源利用率与服务请求数量之间通常存在高度非线性的关系尤其CPU-GPU协同执行使资源利用率的数学建模异常复杂。
Motivation目前用于解决边缘用户分配EUA问题的算法普遍假设服务的资源利用率与边缘服务器上提供的服务数呈线性关系假设服务器的总资源利用率是每个服务请求的资源占用量的累积总和。
然而实际服务过程中资源使用量是高度动态的难以通过数学建模精确描述。
Method提出一种设备端深度强化学习DRL框架来解决边缘用户分配EUA问题基于与
Agent在服务延迟阈值约束下学习在某边缘服务器上服务的用户数量。
DRL
Agent通过同时观察系统参数直接从边缘服务器中学习非线性依赖关系。
Conclusion实验评估表明DRL框架在用户分配数量方面优于传统的确定性方法。
非线性关系YOLO的执行时间与CPU和GPU参数之间的关系是非线性的。
表明执行时间不仅仅取决于单一的参数变化还受到许多隐含因素的影响例如CPU/GPU的可用性。
复杂性由于存在多个隐藏参数精确建模YOLO执行时间与系统资源之间的关系是相对困难的。
•可用处理器资源和执行时间之间的非线性关系:可用处理器资源和执行时间之间存在非线性关系内核数量少时减少内核数量对执行时间的影响更显著在高工作负载情况下增加后台工作负载会显著减慢执行速度。
跨时间的变化相同配置的同一台机器上执行时间也存在显着差异受服务调用模式和温度等多个隐藏参数影响。
之一用户U1、U2、U4和U6请求服务s1其余用户请求服务s2每个边缘服务器由一个资源向量4
秒用仅考虑服务单个请求的执行时间的确定性方法将U1、U2和U3分配给e1只会给s1分配2个用户每个用户3.12s给s2分配1个用户6.32s
数据驱动方法基于实际的执行时间数据和更精确的资源利用模型进行用户到服务器的分配克服确定性方法的缺点提供更有效的资源分配。
MEC环境中每个边缘服务器的覆盖率半径为。
边缘服务器覆盖半径内的移动users
分配策略目标是在遵守服务执行的延迟阈值Γ的同时尽可能多满足服务请求。
传统的确定性方法依赖历史数据预测执行时间但由于执行时间的动态特性可能导致资源分配过度或不足。
提出的RL学习框架通过从边缘服务器的实际经验中学习服务执行模式实时优化用户-服务器绑定决策更有效地应对动态环境。
框架中的Agent通过探索环境并从动作接收反馈来学习环境以选择更好的动作选择RL可以在不需要大量标记数据的情况下学习底层环境。
框架中Agent不断地与边缘服务器交互以采取行动执行多个服务请求并根据执行占用空间获得相应的奖励。
u2*100#查找与当前状态和动作匹配的记录fetch_state
fetch_state.empty:#找不到匹配的状态信息则返回较大的负奖励表示这是一个不利的动作选择return
fetch_state.sample().iloc[0][time_yolo]
fetch_state.sample().iloc[0][time_mnet]#获取
spaces.Discrete(self.n_actions)
spaces.Box(lownp.array([0,0,0,0,0,0]),
Workloadself.seed()self.current_obs
self.df[workload_gpu].multiply(1/80).round(0).astype(int)
self.df.cores.unique()self.workload_cpu
self.df.workload_cpu.unique()print(self.df)
self.action_space.contains(action)
State:{self.current_obs})#compute
u2*100#查找与当前状态和动作匹配的记录fetch_state
fetch_state.empty:#找不到匹配的状态信息则返回较大的负奖励表示这是一个不利的动作选择return
fetch_state.sample().iloc[0][time_yolo]
fetch_state.sample().iloc[0][time_mnet]#获取
get_random_state(self):#generate
np.random.choice(self.workload_cpu,
fetch_state.sample().iloc[0][workload_gpu]
stable_baselines3.common.monitor
stable_baselines3.common.vec_env
exploration_final_eps0.07)begin
model.learn(total_timesteps500000)
rl_algo():#对于每台服务器使用RL预测每个服务器的容量server_capacity
model_rl.predict(np.array(state),
model_exp.predict(np.array(state),
(u1-1)*5server_capacity[server_id][0]
outputserver_capacity[server_id][1]
np.array([np.sum(ngb,axis1)])col2
np.array([np.arange(U)])sorted_ngb
sorted_ngb[np.argsort(sorted_ngb[:,
遍历用户根据用户连接的服务器列表和服务请求选择最大预测容量的服务器分配。
服务器有足够容量则更新服务器容量并记录分配结果for
server_list[np.argmax(server_capacity[server_list,
server_capacity[choosen_server][ser]
#将用户分配给choosen_serverserver_capacity[choosen_server][ser]
{}.format(len(rl_allocation)))return
使用历史服务执行数据的平均值确定边缘服务器上服务的执行时间进而确定可以分配到边缘服务器的用户数量的相应代码allocation.ipynb
generate_server_state(num_server)
ngb[user_ix][server_ix]1:return
gamma[j][int(service[i])]*x[i][j]
latency_threshold-network_latency[j]
#alloc.write(test-model.lp)#Start
Optimizationalloc.optimize(max_seconds25)#
Solutions:{qoe.num_solutions})ilp_allocation
Solutions:{qoe.num_solutions})#print(fObjective
Value:{qoe.objective_value})allocated_num_users
{}.format(allocated_num_users))#
range(U):#获取与用户连接的服务器列表server_ngb_list
[server.iloc[i][geometry].centroid.distance(user.iloc[user_id][geometry])
sorted_distance_list[0].astype(int)#
gamma[server_id][int(service[user_id])]#根据用户请求的服务类型和服务器获取相应的服务延迟if
latency_threshold-network_latency[server_id]:server_capacity[server_id]
{}.format(len(rl_allocation)))return
对于不同用户数量先拿到用户和服务器之间的邻居矩阵ngb并计算网络延迟network_latency
generate_server_state(num_server)
timeit.default_timer()execution_time_ilp
timeit.default_timer()greedy_aloc
timeit.default_timer()execution_time_greedy
timeit.default_timer()execution_time_rl
execution_time_ilp,len(greedy_aloc),
execution_time_greedy,len(rl_aloc),
result_user.columns)result_user
epoch)result_user.to_csv(result_file,
generate_server_state(num_server):#生成服务器状态计算每个服务器的
df[ram].div(1000).round(0).astype(int)
df[workload_cpu].div(10).round(0).astype(int)df[workload_gpu]
df[workload_gpu].multiply(1/80).round(0).astype(int)
df[users_yolo].div(100).round(0).astype(int)
df[users_mnet].div(100).round(0).astype(int)#get
df.workload_cpu.unique()server_state
range(num_server):#对于每一个服务器随机选择一个
fetch_state.sample().iloc[0][workload_gpu]
server.iloc[n].geometry.contains(user.iloc[u].geometry):neighbourhood[u,n]1#邻居矩阵中相应位置设为
server.iloc[n].geometry.centroid.distance(user.iloc[u].geometry)rep_lat
fetch_network_lat(int(distance),
rep_lat:#最大可能延迟network_latency[n]
rep_latelse:neighbourhood[u,n]0service
1:server_service[n][int(service[u])]
np.loadtxt(eua/PlanetLabData_1)[np.tril_indices(490)]ldata
np.unique(ldata)#去重并重置数据大小使其符合150行的矩阵格式np.set_printoptions(suppressTrue)length
latency_col*latency_row)latency
ldata.reshape(latency_row,-1)return
np.random.choice(latency_data[distance],
replaceTrue)#根据距离从延迟数据中随机选择一个延迟值return
load_users(num_of_users):user_raw
pd.read_csv(eua/users.csv)user_raw
user_raw.rename_axis(UID)#将数据框的索引轴重命名为
user_raw.sample(num_of_users)#随机抽样指定数量的用户数据
创建地理数据框使用Longitude和Latitude列创建点几何对象并转换坐标参考系统CRSgdf
geopandas.points_from_xy(df.Longitude,
pd.read_csv(eua/servers.csv)server_raw
server_raw.rename_axis(SID)#将数据框的索引轴重命名为
server_raw.sample(num_of_servers)
geopandas.points_from_xy(df.LONGITUDE,
series.geometry.buffer(radius)series[radius]
InlineBackend.figure_formatretina%matplotlib
figsize(15,10))ax.set_aspect(equal)ax.set_xlim(319400,
zorder1)server.centroid.plot(axax,
Melbourne(Australia))ax.legend(bbox_to_anchor(1,
rl_algo_prop()和rl_algo_und()只是用了两个不同程度训练的agent模型其余部分完全一致这里只展示rl_algo_prop()。
DQN.load(trained_agents/edge_agent_under_train)
DQN.load(trained_agents/edge_agent_proper_train)
rl_algo_prop():#...同rl_algo()#换个模型就OK
model_prop.predict(np.array(state),
deterministicTrue)print(Actionprop:
outputserver_capacity[server_id][1]
model_act.predict(np.array(state),
deterministicTrue)print(Actionact:
outputserver_capacity[server_id][1]
model_thres10.predict(np.array(state),
deterministicTrue)print(Actionthres10:
(u1-1)*5server_capacity[server_id][0]
outputserver_capacity[server_id][1]
对于训练不同回合数rl_algo_prop中动作空间的量化大小
每次agent预测出action之后从中还原出两个服务s1、s2上的服务请求数动作使用的方法不同
于是我暂且认为2指的是量化后的动作空间中的一个动作代表原来动作空间中的两个动作也就是第一个动作中的
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback