Spaces:
Runtime error
Runtime error
File size: 12,003 Bytes
ccba775 | 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 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 | <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>STRANGE β’ Graphics</title>
<link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
<style>
*{margin:0;padding:0;box-sizing:border-box}
:root{
--bg:#000; --fg:#fff; --muted:rgba(255,255,255,.62);
--card:rgba(255,255,255,.04); --stroke:rgba(255,255,255,.10); --glass:rgba(0,0,0,.38);
--accent:#8cb4ff;
}
body{font-family:Inter,system-ui,Segoe UI,Roboto,Arial;background:var(--bg);color:var(--fg);overflow-x:hidden}
#quantumField{position:fixed;inset:0;width:100vw;height:100vh;z-index:-10;background:#000}
nav{position:fixed;top:0;left:0;right:0;z-index:1000;padding:14px 24px;background:var(--glass);backdrop-filter:blur(12px);border-bottom:1px solid rgba(255,255,255,.06)}
.nav-inner{max-width:1200px;margin:0 auto;display:flex;align-items:center;gap:16px}
.brand{font-weight:700;font-size:1.1rem}
.nav-links{display:flex;gap:10px;margin-left:18px}
.nav-links a{text-decoration:none;color:var(--fg);padding:8px 12px;border:1px solid rgba(255,255,255,.12);border-radius:999px;font-size:.9rem;opacity:.86;transition:.15s ease;white-space:nowrap}
.nav-links a:hover{opacity:1;background:rgba(255,255,255,.06)}
.spacer{flex:1}
.menu-btn{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.18);border-radius:12px;cursor:pointer;background:rgba(255,255,255,.02)}
.menu-btn span{display:block;width:18px;height:2px;background:#fff;position:relative}
.menu-btn span::before,.menu-btn span::after{content:"";position:absolute;left:0;width:18px;height:2px;background:#fff}
.menu-btn span::before{top:-6px} .menu-btn span::after{top:6px}
.menu{position:absolute;top:60px;right:24px;min-width:220px;padding:10px;border-radius:14px;background:var(--glass);backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.10);box-shadow:0 0 30px rgba(0,0,0,.6);display:none}
.menu.open{display:block}
.menu a{display:block;padding:10px 10px;border-radius:10px;text-decoration:none;color:var(--fg);opacity:.9}
.menu a:hover{background:rgba(255,255,255,.06);opacity:1}
.menu .sep{height:1px;background:rgba(255,255,255,.10);margin:8px 2px}
.wrap{max-width:1100px;margin:0 auto;padding:110px 6vw 70px}
.h{font-size:1.35rem;font-weight:650}
.sub{color:var(--muted);margin-top:10px;line-height:1.6;max-width:980px}
.viewer{margin-top:20px;display:grid;gap:18px;justify-items:center}
/* 15% smaller */
img{
width:85%;
max-width:850px;
max-height:60vh;
object-fit:contain;
border-radius:14px;
background:rgba(255,255,255,.03);
border:1px solid rgba(255,255,255,.10)
}
/* controls: centered + cleaner spacing */
.controls{
display:flex;
justify-content:center;
align-items:center;
gap:18px;
margin-top:6px;
}
.btn{text-decoration:none;color:var(--fg);padding:10px 14px;border-radius:999px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.03);opacity:.92;transition:.15s ease}
.btn:hover{opacity:1;background:rgba(255,255,255,.07)}
.kbd{font-family:ui-monospace,Menlo,Consolas,monospace;background:#15151b;border:1px solid #2a2a33;border-radius:6px;padding:2px 6px;font-size:.85em;color:var(--muted)}
.cap{color:var(--muted);max-width:980px;line-height:1.55;text-align:center}
.cap strong{color:rgba(255,255,255,.9)}
.rule{border:0;border-top:1px solid rgba(255,255,255,.10);margin:22px 0}
.interp{color:var(--muted);max-width:980px;line-height:1.65}
</style>
</head>
<body>
<canvas id="quantumField"></canvas>
<nav>
<div class="nav-inner">
<div class="brand">TwoQuarks</div>
<div class="nav-links">
<a href="../../../index.html#down">DOWN</a>
<a href="../../../index.html#strange">STRANGE</a>
<a href="../../../index.html#top">TOP</a>
<a href="../../../index.html#charm">CHARM</a>
<a href="../../../index.html#up">UP</a>
<a href="../../../index.html#bottom">BOTTOM</a>
</div>
<div class="spacer"></div>
<div class="menu-btn" id="menuBtn"><span></span></div>
<div class="menu" id="siteMenu">
<a href="../../../index.html#about">ABOUT</a>
<a href="../../../quarkslab.html">QuarksLab</a>
<div class="sep"></div>
<a href="../../../quarks/bottom/resume.pdf">Resume</a>
<a href="../../../summary.pdf">Summary</a>
</div>
</div>
</nav>
<div class="wrap">
<div class="h">STRANGE Β· Visual Diagnostics</div>
<div class="sub">
Use keyboard arrows or the buttons below to navigate.
</div>
<div class="viewer">
<img id="img" src="graphics/strange_episode_return.png" alt="figure"/>
<div class="controls">
<a class="btn" href="javascript:void(0)" onclick="prev()">β Previous</a>
<a class="btn" href="javascript:void(0)" onclick="next()">Next β</a>
</div>
<div class="cap" id="cap"><strong>Strange</strong> β Episode Return</div>
</div>
<hr class="rule"/>
<div class="interp" id="interp">
Interpretation will appear here.
</div>
</div>
<!-- STARFIELD -->
<script>
const canvas = document.getElementById('quantumField');
const ctx = canvas.getContext('2d');
function resize(){ canvas.width = innerWidth; canvas.height = innerHeight; }
resize(); addEventListener('resize', resize);
const stars = Array.from({length: 650}, () => ({
x: (Math.random()-0.5) * canvas.width,
y: (Math.random()-0.5) * canvas.height,
z: Math.random() * canvas.width
}));
function animate(){
ctx.clearRect(0,0,canvas.width,canvas.height);
for(const s of stars){
s.z -= 2.2;
if (s.z < 1){
s.x = (Math.random()-0.7) * canvas.width;
s.y = (Math.random()-0.7) * canvas.height;
s.z = canvas.width;
}
const k = 128 / s.z;
const x = s.x * k + canvas.width/2;
const y = s.y * k + canvas.height/2;
const r = (1 - s.z/canvas.width) * 1.2;
ctx.beginPath();
ctx.fillStyle = "rgba(140,180,255,0.85)";
ctx.arc(x,y,r,0,Math.PI*2);
ctx.fill();
}
requestAnimationFrame(animate);
}
animate();
</script>
<!-- MENU + VIEWER -->
<script>
const menuBtn = document.getElementById('menuBtn');
const siteMenu = document.getElementById('siteMenu');
if(menuBtn && siteMenu){
menuBtn.addEventListener('click', (e)=>{ e.stopPropagation(); siteMenu.classList.toggle('open'); });
document.addEventListener('click', ()=> siteMenu.classList.remove('open'));
siteMenu.addEventListener('click', (e)=> e.stopPropagation());
}
/*
Assumption:
index.html is in the model folder and PNGs are in ./graphics/
*/
const figures = [
// --- STRANGE ---
{ src:"graphics/strange_episode_return.png", title:"Strange β Episode Return",
interpretation:"Episode-level return over time. Look for trend (improving/flat/declining) and variability (stable band vs frequent deep drops)." },
{ src:"graphics/strange_stability.png", title:"Strange β Stability",
interpretation:"A stability score across episodes. Higher/steadier values indicate consistent behavior; sharp oscillations suggest regime switching or instability." },
{ src:"graphics/strange_diversity.png", title:"Strange β Diversity",
interpretation:"A diversity / exploration footprint. Decreasing diversity can indicate convergence; persistently high diversity can indicate continued exploration or thrashing." },
{ src:"graphics/strange_progress.png", title:"Strange β Progress",
interpretation:"A progress proxy (learning signal). Saturation can indicate convergence or a plateau; strong oscillations suggest sensitivity to noise or non-stationarity." },
{ src:"graphics/strange_phase.png", title:"Strange β Phase",
interpretation:"A phase/regime indicator. Stable bands imply consistent mode; frequent jumps imply switching between behaviors or unstable dynamics." },
{ src:"graphics/strange_H_swarm.png", title:"Strange β H_swarm",
interpretation:"An entropy/dispersion-like signal. A gradual decrease often corresponds to consolidation; persistent elevation suggests diffuse behavior." },
{ src:"graphics/strange_S_t.png", title:"Strange β S_t",
interpretation:"Tracked signal S_t over time. Bounded drift suggests controlled dynamics; sudden spikes/drops can indicate shocks or measurement sensitivity." },
{ src:"graphics/strange_T.png", title:"Strange β T",
interpretation:"Temporal/transition signal T. Spikes typically correspond to abrupt changes; smoother traces indicate gradual adaptation." },
{ src:"graphics/strange_w_t.png", title:"Strange β w_t",
interpretation:"Parameter/weight trace w_t. Slow drift suggests stable optimization; erratic movement or jumps can indicate unstable updates or scaling issues." },
// --- ANTISTRANGE ---
{ src:"graphics/antistrange_episode_return.png", title:"AntiStrange β Episode Return",
interpretation:"Episode return for the AntiStrange variant. Compare trend and variance versus Strange to see symmetry/asymmetry in learning dynamics." },
{ src:"graphics/antistrange_stability.png", title:"AntiStrange β Stability",
interpretation:"Stability score for AntiStrange. Differences relative to Strange highlight how robust/fragile the dynamics are under the anti-variant." },
{ src:"graphics/antistrange_diversity.png", title:"AntiStrange β Diversity",
interpretation:"Exploration diversity for AntiStrange. High diversity with flat returns can indicate diffuse search; low diversity with flat returns can indicate getting stuck." },
{ src:"graphics/antistrange_progress.png", title:"AntiStrange β Progress",
interpretation:"Progress proxy for AntiStrange. Divergence between progress and return can indicate proxy optimization (improving metric without return gains)." },
{ src:"graphics/antistrange_phase.png", title:"AntiStrange β Phase",
interpretation:"Phase/regime indicator for AntiStrange. Frequent jumps suggest unstable mode switching; stable ranges suggest a consistent operating regime." },
{ src:"graphics/antistrange_H_swarm.png", title:"AntiStrange β H_swarm",
interpretation:"Entropy/dispersion-like signal for AntiStrange. Compare with Strange to see whether the anti-variant consolidates or remains diffuse." },
{ src:"graphics/antistrange_S_t.png", title:"AntiStrange β S_t",
interpretation:"Tracked signal S_t for AntiStrange. Large excursions versus Strange can indicate stronger sensitivity or less damping." },
{ src:"graphics/antistrange_T.png", title:"AntiStrange β T",
interpretation:"Temporal/transition signal T for AntiStrange. Spikes reflect abrupt transitions; a late rising band can indicate increasing volatility." },
{ src:"graphics/antistrange_w_t.png", title:"AntiStrange β w_t",
interpretation:"Parameter/weight trace w_t for AntiStrange. More jitter or drift indicates less stable optimization relative to Strange." },
// --- DUAL ---
{ src:"graphics/dual_episode_return.png", title:"Dual β Episode Return (Strange vs AntiStrange)",
interpretation:"Overlay of episode returns for both variants. A persistent gap suggests asymmetric performance; repeated crossings suggest similar behavior under noise." },
{ src:"graphics/dual_stability.png", title:"Dual β Stability (Strange vs AntiStrange)",
interpretation:"Overlay of stability scores. Separation indicates differing robustness; similar bands indicate comparable stability under the same conditions." }
];
let idx = 0;
function renderFigure(){
const f = figures[idx];
document.getElementById("img").src = f.src;
document.getElementById("cap").innerHTML = `<strong>${f.title}</strong>`;
document.getElementById("interp").innerHTML =
`<strong>Interpretation</strong><br/>${f.interpretation}`;
}
function next(){ idx = (idx + 1) % figures.length; renderFigure(); }
function prev(){ idx = (idx - 1 + figures.length) % figures.length; renderFigure(); }
document.addEventListener("keydown", e => {
if (e.key === "ArrowRight") next();
if (e.key === "ArrowLeft") prev();
});
renderFigure();
</script>
</body>
</html>
|