import { Cpu, Layers, Target, TrendingUp, Database, Brain } from 'lucide-react'; interface OptimizerStatePanelProps { sampler?: string; nTrials: number; completedTrials: number; feaTrials?: number; nnTrials?: number; objectives?: Array<{ name: string; direction: string }>; isMultiObjective: boolean; paretoSize?: number; } export function OptimizerStatePanel({ sampler = 'TPESampler', nTrials, completedTrials, feaTrials = 0, nnTrials = 0, objectives = [], isMultiObjective, paretoSize = 0 }: OptimizerStatePanelProps) { // Determine optimizer phase based on progress const getPhase = () => { if (completedTrials === 0) return 'Initializing'; if (completedTrials < 10) return 'Exploration'; if (completedTrials < nTrials * 0.5) return 'Exploitation'; if (completedTrials < nTrials * 0.9) return 'Refinement'; return 'Convergence'; }; const phase = getPhase(); // Format sampler name for display const formatSampler = (s: string) => { const samplers: Record = { 'TPESampler': 'TPE (Bayesian)', 'NSGAIISampler': 'NSGA-II', 'NSGAIIISampler': 'NSGA-III', 'CmaEsSampler': 'CMA-ES', 'RandomSampler': 'Random', 'GridSampler': 'Grid', 'QMCSampler': 'Quasi-Monte Carlo' }; return samplers[s] || s; }; return (
{/* Header */}
Optimizer State
{/* Main Stats Grid */}
{/* Sampler */}
Sampler
{formatSampler(sampler)}
{/* Phase */}
Phase
{phase}
{/* FEA vs NN Trials (for hybrid optimizations) */} {(feaTrials > 0 || nnTrials > 0) && (
Trial Sources
{feaTrials}
FEA
{nnTrials}
Neural Net
{nnTrials > 0 && (
{((nnTrials / (feaTrials + nnTrials)) * 100).toFixed(0)}% acceleration from surrogate
)}
)} {/* Objectives */} {objectives.length > 0 && (
{isMultiObjective ? 'Multi-Objective' : 'Single Objective'}
{objectives.slice(0, 3).map((obj, idx) => (
{obj.name.length > 20 ? obj.name.slice(0, 18) + '...' : obj.name} {obj.direction === 'minimize' ? 'min' : 'max'}
))} {objectives.length > 3 && (
+{objectives.length - 3} more
)}
)} {/* Pareto Front Size (for multi-objective) */} {isMultiObjective && paretoSize > 0 && (
Pareto Front Size {paretoSize} solutions
)}
); }