21.3D surface
3D surface
"""
@File : 05-decoding-Major
@Name : 3d_surface.py
@Author : lyq
@Date : 2024/11/16 23:10
@Envi : PyCharm
@Description: files details
"""
import numpy as np
import matplotlib.pyplot as plt
# 设置全局默认字体为Times New Roman
plt.rcParams['font.family'] = 'Times New Roman'
def test_dynamic_performance(alpha, beta, gamma, T, N, scenario_fluctuation=0.2):
q_n_t = np.random.uniform(1, 5, (N, T)) # Simulated quality levels
dynamic_fluctuations = np.random.uniform(1 - scenario_fluctuation, 1 + scenario_fluctuation, (N, T))
QoE = 0
variances = []
for t in range(T):
quality = np.mean(q_n_t[:, t] * dynamic_fluctuations[:, t]) # Add dynamic fluctuation to quality
delay = np.mean([0.1 * q * (1 + 0.1 * np.sin(10 * gamma)) for q in q_n_t[:, t]])
variance = np.var(q_n_t[:, t] * dynamic_fluctuations[:, t])
decoding = np.mean([0.05 * q * (1 + 0.05 * np.cos(7 * gamma)) for q in q_n_t[:, t]])
variances.append(variance)
QoE += (quality - alpha * delay - beta * variance - gamma * decoding)
QoE_normalized = (QoE / (T * 5)) * 10 # Normalize QoE to 0-10 range
variance_scaled = (np.mean(variances) / (5 ** 2)) * 1 # Scale Variance to target ~1
return QoE_normalized, variance_scaled
# Generate a grid of alpha, beta, and gamma values for the QoE surface
alpha_range = np.linspace(0.08, 0.12, 10) # Around fixed alpha = 0.1
beta_range = np.linspace(0.45, 0.55, 10) # Around fixed beta = 0.5
gamma_range = np.linspace(0.045, 0.055, 10) # Around target gamma range
# Create meshgrid for alpha, beta, and gamma
alpha_grid, beta_grid, gamma_grid = np.meshgrid(alpha_range, beta_range, gamma_range)
# Compute QoE for each combination of alpha, beta, and gamma
qoe_surface = np.zeros_like(alpha_grid)
T = 100 # Time steps
N = 5 # Number of users
for i in range(alpha_grid.shape[0]):
for j in range(alpha_grid.shape[1]):
for k in range(alpha_grid.shape[2]):
alpha = alpha_grid[i, j, k]
beta = beta_grid[i, j, k]
gamma = gamma_grid[i, j, k]
qoe, _ = test_dynamic_performance(alpha, beta, gamma, T, N)
qoe_surface[i, j, k] = qoe
# Plot 3D QoE surface for fixed gamma slice
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
# Select a slice of gamma for visualization
gamma_index = len(gamma_range) // 2 # Middle gamma value
qoe_slice = qoe_surface[:, :, gamma_index]
alpha_slice = alpha_grid[:, :, gamma_index]
beta_slice = beta_grid[:, :, gamma_index]
surf = ax.plot_surface(alpha_slice, beta_slice, qoe_slice, cmap='viridis')
ax.set_title(f"3D QoE Surface (Gamma = {gamma_range[gamma_index]:.3f})")
ax.set_xlabel("Alpha (X-axis)")
ax.set_ylabel("Beta (Y-axis)")
ax.set_zlabel("QoE")
fig.colorbar(surf, shrink=0.5, aspect=10, label='QoE')
plt.autoscale(tight=True)
plt.savefig('3D_QoE_Surface.pdf')
plt.show()
原文地址:https://blog.csdn.net/u014217137/article/details/143825510
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!