Quantum-ScalingRL / visualizations /Backend_Performance_Comparison.py
Nurcholish's picture
Upload 20 files
02655d9 verified
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Backend Performance Comparison Visualization
Compares IBM vs Russian backends across languages using mean reward and standard deviation
"""
import matplotlib.pyplot as plt
import numpy as np
from typing import Dict, List
def plot_backend_performance_comparison(backend_performance: Dict[str, List[float]],
output_file: str = 'backend_comparison.png'):
"""
Create bar chart comparing backend performance with error bars
Args:
backend_performance: Dict mapping backend names to reward lists
output_file: Output filename for the plot
"""
backends = list(backend_performance.keys())
means = [np.mean(backend_performance[b]) if backend_performance[b] else 0
for b in backends]
stds = [np.std(backend_performance[b]) if backend_performance[b] else 0
for b in backends]
fig, ax = plt.subplots(figsize=(10, 6))
x = np.arange(len(backends))
width = 0.6
bars = ax.bar(x, means, width, yerr=stds, capsize=10,
color=['#3498db', '#e74c3c'], alpha=0.8, edgecolor='black')
ax.set_xlabel('Backend', fontsize=12, fontweight='bold')
ax.set_ylabel('Mean Reward', fontsize=12, fontweight='bold')
ax.set_title('Backend Performance Comparison\n(IBM vs Russian)',
fontsize=14, fontweight='bold')
ax.set_xticks(x)
ax.set_xticklabels(backends)
ax.grid(axis='y', alpha=0.3, linestyle='--')
ax.set_ylim(0, 1.0)
# Add value labels on bars
for i, (bar, mean, std) in enumerate(zip(bars, means, stds)):
height = bar.get_height()
ax.text(bar.get_x() + bar.get_width()/2., height + std + 0.02,
f'{mean:.3f}±{std:.3f}',
ha='center', va='bottom', fontweight='bold')
plt.tight_layout()
plt.savefig(output_file, dpi=300, bbox_inches='tight')
print(f"✓ Backend comparison saved to {output_file}")
plt.close()
def plot_backend_performance_by_language(learned_heuristics: Dict[str, Dict],
backend_performance: Dict[str, List[float]],
output_file: str = 'backend_by_language.png'):
"""
Create grouped bar chart showing backend performance per language
Args:
learned_heuristics: Dict mapping languages to heuristic info
backend_performance: Dict mapping backend names to reward lists
output_file: Output filename for the plot
"""
languages = list(learned_heuristics.keys())
backends = list(backend_performance.keys())
# Organize data by language and backend
data = {backend: [] for backend in backends}
for lang in languages:
preferred = learned_heuristics[lang]['preferred_backend']
avg_reward = learned_heuristics[lang]['avg_reward']
data[preferred].append(avg_reward)
fig, ax = plt.subplots(figsize=(12, 6))
x = np.arange(len(languages))
width = 0.35
# Create bars for each backend
for i, backend in enumerate(backends):
rewards = [learned_heuristics[lang]['avg_reward']
if learned_heuristics[lang]['preferred_backend'] == backend
else 0 for lang in languages]
offset = width * (i - len(backends)/2 + 0.5)
ax.bar(x + offset, rewards, width, label=backend, alpha=0.8)
ax.set_xlabel('Language', fontsize=12, fontweight='bold')
ax.set_ylabel('Average Reward', fontsize=12, fontweight='bold')
ax.set_title('Backend Performance by Language', fontsize=14, fontweight='bold')
ax.set_xticks(x)
ax.set_xticklabels(languages)
ax.legend()
ax.grid(axis='y', alpha=0.3, linestyle='--')
ax.set_ylim(0, 1.0)
plt.tight_layout()
plt.savefig(output_file, dpi=300, bbox_inches='tight')
print(f"✓ Backend by language saved to {output_file}")
plt.close()
if __name__ == '__main__':
# Example usage
backend_performance = {
'ibm': [0.807, 0.785, 0.820, 0.795, 0.830],
'russian': [0.825, 0.810, 0.840, 0.815, 0.835]
}
learned_heuristics = {
'ru': {'preferred_backend': 'ibm', 'avg_reward': 0.807},
'zh': {'preferred_backend': 'russian', 'avg_reward': 0.814},
'es': {'preferred_backend': 'russian', 'avg_reward': 0.853},
'fr': {'preferred_backend': 'russian', 'avg_reward': 0.842},
'en': {'preferred_backend': 'russian', 'avg_reward': 0.803}
}
plot_backend_performance_comparison(backend_performance)
plot_backend_performance_by_language(learned_heuristics, backend_performance)