File size: 4,821 Bytes
02655d9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/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)