Round-2 audit: UWCA (genie) label, legend dictionary ported into legacy plot scripts

This commit is contained in:
KiHoLee
2026-08-25 22:32:15 +09:00
parent ab1770c6d0
commit 344ae1b97d
4 changed files with 2392 additions and 2392 deletions
Binary file not shown.
+8 -8
View File
@@ -96,9 +96,9 @@ SCENARIOS = {
USER_COLORS = ['#1565C0', '#2E7D32', '#C62828', '#6A1B9A'] USER_COLORS = ['#1565C0', '#2E7D32', '#C62828', '#6A1B9A']
MCFG = { MCFG = {
'OFDMA': ('#546E7A', 's--', 1.5, 'OFDMA'), 'OFDMA': ('#546E7A', 's--', 1.5, 'OMA'),
'NOMA-SIC': ('#E65100', '^-', 1.5, 'NOMA'), 'NOMA-SIC': ('#E65100', '^-', 1.5, 'NOMA'),
'MAML+Attn': ('#1565C0', 'o-', 2.4, 'UWCA (proposed)'), 'MAML+Attn': ('#1565C0', 'o-', 2.4, 'UWCA (trained)'),
} }
CMAP_RHO = LinearSegmentedColormap.from_list('rho', ['#1565C0', '#FFFFFF', '#C62828'], N=256) CMAP_RHO = LinearSegmentedColormap.from_list('rho', ['#1565C0', '#FFFFFF', '#C62828'], N=256)
@@ -425,7 +425,7 @@ def _overlay_trained(ax, scenario_key: str):
return return
snr = tr['snr_db'] snr = tr['snr_db']
ax.semilogy(snr, tr['maml_ser'], 'o', ms=7, mfc='none', mec='#1565C0', ax.semilogy(snr, tr['maml_ser'], 'o', ms=7, mfc='none', mec='#1565C0',
mew=1.8, label='UWCA (Trained)', zorder=5) mew=1.8, label='UWCA (trained)', zorder=5)
def _snr_at_ser(ser_arr, snr_arr, target=0.30): def _snr_at_ser(ser_arr, snr_arr, target=0.30):
@@ -524,7 +524,7 @@ for sl, col, lbl in _groups:
'o-', lw=1.8, color=col, label=f'{lbl} — UWCA') 'o-', lw=1.8, color=col, label=f'{lbl} — UWCA')
# OFDMA: β-independent → single curve averaged over all users # OFDMA: β-independent → single curve averaged over all users
ax3.semilogy(SNR_DB, res['OFDMA']['sp'].mean(axis=1), ax3.semilogy(SNR_DB, res['OFDMA']['sp'].mean(axis=1),
's--', lw=1.2, color='#546E7A', label='OFDMA (reference)') 's--', lw=1.2, color='#546E7A', label='OMA')
# NOMA: power-allocation-dependent → single curve averaged over all users # NOMA: power-allocation-dependent → single curve averaged over all users
ax3.semilogy(SNR_DB, res['NOMA-SIC']['sp'].mean(axis=1), ax3.semilogy(SNR_DB, res['NOMA-SIC']['sp'].mean(axis=1),
'^-', lw=1.2, color='#E65100', label='NOMA (reference)') '^-', lw=1.2, color='#E65100', label='NOMA (reference)')
@@ -687,7 +687,7 @@ for U_val in _U_LIST_9:
# Unified legend: OFDMA + UWCA-SE per U value # Unified legend: OFDMA + UWCA-SE per U value
legend_handles = [ legend_handles = [
_L2D([0],[0], color='#546E7A', lw=1.6, ls='--', alpha=0.75, label='OFDMA (Analytical)'), _L2D([0],[0], color='#546E7A', lw=1.6, ls='--', alpha=0.75, label='OMA'),
_L2D([0],[0], color=_U_COLORS[1], lw=2.2, ls='-', label='UWCA ($U=1$)'), _L2D([0],[0], color=_U_COLORS[1], lw=2.2, ls='-', label='UWCA ($U=1$)'),
_L2D([0],[0], color=_U_COLORS[2], lw=2.2, ls='-', label='UWCA ($U=2$)'), _L2D([0],[0], color=_U_COLORS[2], lw=2.2, ls='-', label='UWCA ($U=2$)'),
_L2D([0],[0], color=_U_COLORS[4], lw=2.2, ls='-', label='UWCA ($U=4$)'), _L2D([0],[0], color=_U_COLORS[4], lw=2.2, ls='-', label='UWCA ($U=4$)'),
@@ -726,7 +726,7 @@ for U_val in MI_U_LIST:
_style_handles = [ _style_handles = [
Line2D([0], [0], color='k', lw=2.2, ls='-', label='UWCA (Analytical)'), Line2D([0], [0], color='k', lw=2.2, ls='-', label='UWCA (Analytical)'),
Line2D([0], [0], color='k', lw=1.6, ls='--', alpha=0.6, label='OFDMA (Analytical)'), Line2D([0], [0], color='k', lw=1.6, ls='--', alpha=0.6, label='OMA'),
] ]
_color_handles = [Line2D([0],[0], color=_U_COLORS[u], lw=2.2, label=f'U={u}') _color_handles = [Line2D([0],[0], color=_U_COLORS[u], lw=2.2, label=f'U={u}')
for u in MI_U_LIST] for u in MI_U_LIST]
@@ -848,7 +848,7 @@ ax11a.axhline(TAU_FAIR, color='gray', lw=0.8, ls=':', alpha=0.6)
ax11a.text(0.5, TAU_FAIR * 1.07, f'$\\tau={TAU_FAIR}$', fontsize=8, color='gray') ax11a.text(0.5, TAU_FAIR * 1.07, f'$\\tau={TAU_FAIR}$', fontsize=8, color='gray')
_lh_fair = [ _lh_fair = [
_L2D([0],[0], color='k', lw=1.5, ls='--', alpha=0.6, label='OFDMA (Analytical)'), _L2D([0],[0], color='k', lw=1.5, ls='--', alpha=0.6, label='OMA'),
_L2D([0],[0], color='k', lw=2.2, ls='-', label='UWCA (Analytical)'), _L2D([0],[0], color='k', lw=2.2, ls='-', label='UWCA (Analytical)'),
] + [ ] + [
_L2D([0],[0], color=_U_COLORS[u], lw=2.2, label=f'$U={u}$') for u in _U_LIST_F _L2D([0],[0], color=_U_COLORS[u], lw=2.2, label=f'$U={u}$') for u in _U_LIST_F
@@ -937,7 +937,7 @@ def _draw_panel12(ax, u_results, beta_label, panel_tag):
ax.grid(True, alpha=0.3); ax.set_xlim(0, 20) ax.grid(True, alpha=0.3); ax.set_xlim(0, 20)
_handles = [ _handles = [
_L2D([0],[0], color=_OFDMA_CLR12, lw=2.2, ls='-', _L2D([0],[0], color=_OFDMA_CLR12, lw=2.2, ls='-',
label='OFDMA'), label='OMA'),
_L2D([0],[0], color=_UWCA_CLRS12[1], lw=1.5, ls='-', _L2D([0],[0], color=_UWCA_CLRS12[1], lw=1.5, ls='-',
marker=_UWCA_MKRS12[1], ms=4, label='UWCA ($U=1$)'), marker=_UWCA_MKRS12[1], ms=4, label='UWCA ($U=1$)'),
_L2D([0],[0], color=_UWCA_CLRS12[2], lw=1.5, ls='-', _L2D([0],[0], color=_UWCA_CLRS12[2], lw=1.5, ls='-',
+2 -2
View File
@@ -2,7 +2,7 @@
for HIGH/LOW/MIX, parallel to the synthetic Fig. 2. for HIGH/LOW/MIX, parallel to the synthetic Fig. 2.
Curves per panel: Curves per panel:
- OMA, SFDMA, NOMA-SIC (analytical baselines) - OFDMA [division], SFDMA [feature div.], NOMA-SIC (analytical baselines)
- UWCA (analytical) : oracle-beta cross-attention (relevance SUPPLIED) -- dotted - UWCA (analytical) : oracle-beta cross-attention (relevance SUPPLIED) -- dotted
- UWCA w/o MAML : decoder TRAINED on real digits, no meta-learning (from realdata_train.json) - UWCA w/o MAML : decoder TRAINED on real digits, no meta-learning (from realdata_train.json)
- UWCA w/ MAML : decoder TRAINED on real digits with MAML (proposed) -- hollow circles - UWCA w/ MAML : decoder TRAINED on real digits with MAML (proposed) -- hollow circles
@@ -107,7 +107,7 @@ for j, s in enumerate(['HIGH', 'LOW', 'MIX']):
a.plot(SNR, ana[s]['OFDMA'], 's--', color=COL['OFDMA'], lw=2, ms=5, label='OMA') a.plot(SNR, ana[s]['OFDMA'], 's--', color=COL['OFDMA'], lw=2, ms=5, label='OMA')
a.plot(SNR, ana[s]['SFDMA'], 'v:', color=COL['SFDMA'], lw=2, ms=5, mfc='none', label='SFDMA') a.plot(SNR, ana[s]['SFDMA'], 'v:', color=COL['SFDMA'], lw=2, ms=5, mfc='none', label='SFDMA')
a.plot(SNR, ana[s]['NOMA-SIC'], '^-.', color=COL['NOMA-SIC'], lw=2, ms=5, label='NOMA-SIC') a.plot(SNR, ana[s]['NOMA-SIC'], '^-.', color=COL['NOMA-SIC'], lw=2, ms=5, label='NOMA-SIC')
a.plot(SNR, ana[s]['UWCA (analytical)'], ':', color=COL['UWCA (analytical)'], lw=2.4, label='UWCA (oracle)') a.plot(SNR, ana[s]['UWCA (analytical)'], ':', color=COL['UWCA (analytical)'], lw=2.4, label='UWCA (genie)')
a.plot(SNR, trained[s]['UWCA w/ MAML'], 'o-', color=COL['UWCA w/ MAML'], lw=1.6, ms=6, mfc='none', mew=1.6, label='UWCA (trained)') a.plot(SNR, trained[s]['UWCA w/ MAML'], 'o-', color=COL['UWCA w/ MAML'], lw=1.6, ms=6, mfc='none', mew=1.6, label='UWCA (trained)')
a.set_ylim(0.1, 1.02); a.set_xlim(0, 20); a.grid(alpha=.3); a.set_box_aspect(0.85) a.set_ylim(0.1, 1.02); a.set_xlim(0, 20); a.grid(alpha=.3); a.set_box_aspect(0.85)
a.set_xlabel('SNR (dB)', fontsize=10) a.set_xlabel('SNR (dB)', fontsize=10)
+1 -1
View File
@@ -176,7 +176,7 @@ USER_COLORS = ['#1565C0', '#2E7D32', '#C62828', '#6A1B9A']
# Method display config: color / marker+linestyle / linewidth / legend label # Method display config: color / marker+linestyle / linewidth / legend label
MCFG = { MCFG = {
'OFDMA': ('#546E7A', 's--', 1.5, 'OFDMA (Analytical)'), 'OFDMA': ('#546E7A', 's--', 1.5, 'OFDMA (Analytical)'),
'MAML+Attn': ('#1565C0', 'o-', 2.4, 'UWCA-SE (Analytical)'), 'MAML+Attn': ('#1565C0', 'o-', 2.4, 'UWCA (analytical)'),
} }