237 lines
6.9 KiB
Markdown
237 lines
6.9 KiB
Markdown
|
|
# CRITICAL ISSUES - IMMEDIATE ACTION REQUIRED
|
||
|
|
|
||
|
|
**Date:** 2025-11-21
|
||
|
|
**Status:** 🚨 BLOCKING PRODUCTION USE
|
||
|
|
|
||
|
|
## Issue 1: Real-Time Tracking Files - **MANDATORY EVERY ITERATION**
|
||
|
|
|
||
|
|
### Current State ❌
|
||
|
|
- Intelligent optimizer only writes tracking files at END of optimization
|
||
|
|
- Dashboard cannot show real-time progress
|
||
|
|
- No visibility into optimizer state during execution
|
||
|
|
|
||
|
|
### Required Behavior ✅
|
||
|
|
```
|
||
|
|
AFTER EVERY SINGLE TRIAL:
|
||
|
|
1. Write optimizer_state.json (current strategy, confidence, phase)
|
||
|
|
2. Write strategy_history.json (append new recommendation)
|
||
|
|
3. Write landscape_snapshot.json (current analysis if available)
|
||
|
|
4. Write trial_log.json (append trial result with timestamp)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Implementation Plan
|
||
|
|
1. Create `RealtimeCallback` class that triggers after each trial
|
||
|
|
2. Hook into `study.optimize(..., callbacks=[realtime_callback])`
|
||
|
|
3. Write incremental JSON files to `intelligent_optimizer/` folder
|
||
|
|
4. Files must be atomic writes (temp file + rename)
|
||
|
|
|
||
|
|
### Files to Modify
|
||
|
|
- `optimization_engine/intelligent_optimizer.py` - Add callback system
|
||
|
|
- New file: `optimization_engine/realtime_tracking.py` - Callback implementation
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Issue 2: Dashboard - Complete Overhaul Required
|
||
|
|
|
||
|
|
###Current Problems ❌
|
||
|
|
1. **No Pareto front plot** for multi-objective
|
||
|
|
2. **No parallel coordinates** for high-dimensional visualization
|
||
|
|
3. **Units hardcoded/wrong** - should read from optimization_config.json
|
||
|
|
4. **Convergence plot backwards** - X-axis should be trial number (already is, but user reports issue)
|
||
|
|
5. **No objective normalization** - raw values make comparison difficult
|
||
|
|
6. **Missing intelligent optimizer panel** - no real-time strategy display
|
||
|
|
7. **Poor UX** - not professional looking
|
||
|
|
|
||
|
|
### Required Features ✅
|
||
|
|
|
||
|
|
#### A. Intelligent Optimizer Panel (NEW)
|
||
|
|
```typescript
|
||
|
|
<OptimizerPanel>
|
||
|
|
- Current Phase: "Characterization" | "Optimization" | "Refinement"
|
||
|
|
- Current Strategy: "TPE" | "CMA-ES" | "Random" | "GP-BO"
|
||
|
|
- Confidence: 0.95 (progress bar)
|
||
|
|
- Trials in Phase: 15/30
|
||
|
|
- Strategy Transitions: Timeline view
|
||
|
|
- Landscape Type: "Smooth Unimodal" | "Rugged Multi-modal" | etc.
|
||
|
|
</OptimizerPanel>
|
||
|
|
```
|
||
|
|
|
||
|
|
#### B. Pareto Front Plot (Multi-Objective)
|
||
|
|
```typescript
|
||
|
|
<ParetoPlot objectives={study.objectives}>
|
||
|
|
- 2D scatter: objective1 vs objective2
|
||
|
|
- Color by constraint satisfaction
|
||
|
|
- Interactive: click to see design variables
|
||
|
|
- Dominance regions shaded
|
||
|
|
</ParetoPlot>
|
||
|
|
```
|
||
|
|
|
||
|
|
#### C. Parallel Coordinates (Multi-Objective)
|
||
|
|
```typescript
|
||
|
|
<ParallelCoordinates>
|
||
|
|
- One axis per design variable + objectives
|
||
|
|
- Lines colored by Pareto front membership
|
||
|
|
- Interactive brushing to filter solutions
|
||
|
|
</ParallelCoordinates>
|
||
|
|
```
|
||
|
|
|
||
|
|
#### D. Dynamic Units & Metadata
|
||
|
|
```typescript
|
||
|
|
// Read from optimization_config.json
|
||
|
|
interface StudyMetadata {
|
||
|
|
objectives: Array<{name: string, type: 'minimize'|'maximize', unit?: string}>
|
||
|
|
design_variables: Array<{name: string, unit?: string, min: number, max: number}>
|
||
|
|
constraints: Array<{name: string, type: string, value: number}>
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### E. Normalized Objectives
|
||
|
|
```typescript
|
||
|
|
// Option 1: Min-Max normalization (0-1 scale)
|
||
|
|
normalized = (value - min) / (max - min)
|
||
|
|
|
||
|
|
// Option 2: Z-score normalization
|
||
|
|
normalized = (value - mean) / stddev
|
||
|
|
```
|
||
|
|
|
||
|
|
### Implementation Plan
|
||
|
|
1. **Backend:** Add `/api/studies/{id}/metadata` endpoint (read config)
|
||
|
|
2. **Backend:** Add `/api/studies/{id}/optimizer-state` endpoint (read real-time JSON)
|
||
|
|
3. **Frontend:** Create `<OptimizerPanel>` component
|
||
|
|
4. **Frontend:** Create `<ParetoPlot>` component (use Recharts)
|
||
|
|
5. **Frontend:** Create `<ParallelCoordinates>` component (use D3.js or Plotly)
|
||
|
|
6. **Frontend:** Refactor `Dashboard.tsx` with new layout
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Issue 3: Multi-Objective Strategy Selection (FIXED ✅)
|
||
|
|
|
||
|
|
**Status:** Completed - Protocol 12 implemented
|
||
|
|
- Multi-objective now uses: Random (8 trials) → TPE with multivariate
|
||
|
|
- No longer stuck on random for entire optimization
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Issue 4: Missing Tracking Files in V2 Study
|
||
|
|
|
||
|
|
### Root Cause
|
||
|
|
V2 study ran with OLD code (before Protocol 12). All 30 trials used random strategy.
|
||
|
|
|
||
|
|
### Solution
|
||
|
|
Re-run V2 study with fixed optimizer:
|
||
|
|
```bash
|
||
|
|
cd studies/bracket_stiffness_optimization_V2
|
||
|
|
# Clear old results
|
||
|
|
del /Q 2_results\study.db
|
||
|
|
rd /S /Q 2_results\intelligent_optimizer
|
||
|
|
# Run with new code
|
||
|
|
python run_optimization.py --trials 50
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Priority Order
|
||
|
|
|
||
|
|
### P0 - CRITICAL (Do Immediately)
|
||
|
|
1. ✅ Fix multi-objective strategy selector (DONE - Protocol 12)
|
||
|
|
2. 🚧 Implement per-trial tracking callback
|
||
|
|
3. 🚧 Add intelligent optimizer panel to dashboard
|
||
|
|
4. 🚧 Add Pareto front plot
|
||
|
|
|
||
|
|
### P1 - HIGH (Do Today)
|
||
|
|
5. Add parallel coordinates plot
|
||
|
|
6. Implement dynamic units (read from config)
|
||
|
|
7. Add objective normalization toggle
|
||
|
|
|
||
|
|
### P2 - MEDIUM (Do This Week)
|
||
|
|
8. Improve dashboard UX/layout
|
||
|
|
9. Add hypervolume indicator for multi-objective
|
||
|
|
10. Create optimization report generator
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Testing Protocol
|
||
|
|
|
||
|
|
After implementing each fix:
|
||
|
|
|
||
|
|
1. **Per-Trial Tracking Test**
|
||
|
|
```bash
|
||
|
|
# Run optimization and check files appear immediately
|
||
|
|
python run_optimization.py --trials 10
|
||
|
|
# Verify: intelligent_optimizer/*.json files update EVERY trial
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Dashboard Test**
|
||
|
|
```bash
|
||
|
|
# Start backend + frontend
|
||
|
|
# Navigate to http://localhost:3001
|
||
|
|
# Verify: All panels update in real-time
|
||
|
|
# Verify: Pareto front appears for multi-objective
|
||
|
|
# Verify: Units match optimization_config.json
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Multi-Objective Test**
|
||
|
|
```bash
|
||
|
|
# Re-run bracket_stiffness_optimization_V2
|
||
|
|
# Verify: Strategy switches from random → TPE after 8 trials
|
||
|
|
# Verify: Tracking files generated every trial
|
||
|
|
# Verify: Pareto front has 10+ solutions
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Code Architecture
|
||
|
|
|
||
|
|
### Realtime Tracking System
|
||
|
|
```
|
||
|
|
intelligent_optimizer/
|
||
|
|
├── optimizer_state.json # Updated every trial
|
||
|
|
├── strategy_history.json # Append-only log
|
||
|
|
├── landscape_snapshots.json # Updated when landscape analyzed
|
||
|
|
├── trial_log.json # Append-only with timestamps
|
||
|
|
├── confidence_history.json # Confidence over time
|
||
|
|
└── strategy_transitions.json # When/why strategy changed
|
||
|
|
```
|
||
|
|
|
||
|
|
### Dashboard Data Flow
|
||
|
|
```
|
||
|
|
Trial Complete
|
||
|
|
↓
|
||
|
|
Optuna Callback
|
||
|
|
↓
|
||
|
|
Write JSON Files (atomic)
|
||
|
|
↓
|
||
|
|
Backend API detects file change
|
||
|
|
↓
|
||
|
|
WebSocket broadcast to frontend
|
||
|
|
↓
|
||
|
|
Dashboard components update
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Estimated Effort
|
||
|
|
|
||
|
|
- **Per-Trial Tracking:** 2-3 hours
|
||
|
|
- **Dashboard Overhaul:** 6-8 hours
|
||
|
|
- Optimizer Panel: 1 hour
|
||
|
|
- Pareto Plot: 2 hours
|
||
|
|
- Parallel Coordinates: 2 hours
|
||
|
|
- Dynamic Units: 1 hour
|
||
|
|
- Layout/UX: 2 hours
|
||
|
|
|
||
|
|
**Total:** 8-11 hours for production-ready system
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Success Criteria
|
||
|
|
|
||
|
|
✅ **After implementation:**
|
||
|
|
1. User can see optimizer strategy change in real-time
|
||
|
|
2. Intelligent optimizer folder updates EVERY trial (not batched)
|
||
|
|
3. Dashboard shows Pareto front for multi-objective studies
|
||
|
|
4. Dashboard units are dynamic (read from config)
|
||
|
|
5. Dashboard is professional quality (like Optuna Dashboard or Weights & Biases)
|
||
|
|
6. No hardcoded assumptions (Hz, single-objective, etc.)
|
||
|
|
|