🌍 Week 6 Homework — Feedback
🌍 Week 6 Homework — Feedback
Student: Giovanni Rampello
Assignment: Solow Model Calibration: Grid Search vs Optimization Tools
✅ Overall Assessment
Result: ✅ More than 50% Correct
Excellent submission with all three optimization methods correctly implemented. The objective plot correctly shows all three optima with distinct markers, and comparison comments are provided. However, timing measurements are completely missing for all three methods, and the comparison comments are quite brief. The code structure is good with clear documentation and proper figure management.
🔍 Task-by-Task Check
| Task | Description | Status | Notes |
|---|---|---|---|
| 1.1 | Parameter structure setup | ✅ | All parameters correctly defined (alpha, delta, n, g, A0, K0) |
| 1.2 | Data generation or loading | ✅ | Synthetic data correctly generated |
| 2.1 | Objective function definition | ✅ | Correct: sum((solow_simulate(s, params, T) - y_data).^2) |
| 3.1 | Create grid s ∈ [0.05, 0.5] | ✅ | Grid created with 200 points using linspace |
| 3.2 | Compute SSE for each grid point | ✅ | Loop correctly computes SSE for all grid points |
| 3.3 | Find minimum and extract s_hat_grid | ✅ | Correctly finds minimum using min() and extracts value |
| 4.1 | Implement sigmoid function | ✅ | Correct: sigmoid = @(x) 1./(1 + exp(-x)) |
| 4.2 | Create objective wrapper | ✅ | Correct: obj_x = @(x) obj(sigmoid(x)) |
| 4.3 | Call fminsearch and convert result | ✅ | Correctly calls fminsearch and converts x back to s using sigmoid |
| 5.1 | Set bounds [0, 1] correctly | ✅ | Bounds correctly set (lb=0, ub=1) |
| 5.2 | Call fmincon with proper syntax | ✅ | fmincon correctly called with proper optimoptions |
| 6.1 | Display computation times | ❌ | Missing: No timing measurements (tic/toc) for any method |
| 6.2 | Display optimization results | ✅ | Displays results for all three methods |
| 6.3 | Comment comparing methods | ⚠️ | Partial: Provides brief comparison comments (lines 86-89) but could be more detailed |
| 7.1 | Plot objective with all three optima | ✅ | Plot correctly shows all three optima (grid black circle, fminsearch red circle, fmincon blue circle) |
| 7.2 | Plot model fit (data vs model) | ✅ | Plot shows data vs fitted model output over time |
| 7.3 | Save figures in Figures/ folder | ✅ | Figures correctly saved using saveas() to Figures/ folder |
📈 Technical Implementation
- Grid Search: Correctly implemented with proper loop and minimum finding
- fminsearch with Sigmoid: Properly reparameterized using sigmoid function
- fmincon with Bounds: Correctly implemented with proper optimoptions
- Helper Function:
solow_simulate()correctly implements Solow dynamics - Timing: ❌ Missing - No timing measurements for any method
- Figure Management: Creates Figures directory and saves figures properly using saveas()
- Code Organization: Good - well-structured with clear sections
- Directory Management: Uses
cd()command which is not ideal but functional
💬 Style & Clarity
- Code Quality: Good organization with clear section headers
- Variable Naming: Clear and descriptive (
s_hat_grid,s_hat_search,s_hat_con) - Comments: Good documentation with section labels and brief comparison comments
- Output: Uses fprintf appropriately to display results
- Organization: Well-structured code with clear separation of methods
📊 Visual Output Assessment
Figure 1: Objective Function with All Three Optima ✅
- Layout: Plot showing SSE vs s with all three optima marked
- Features: Shows grid search (black circle), fminsearch (red circle), fmincon (blue circle) with distinct colors
- Styling: Good styling with proper labels, legend, grid
- Saving: ✅ Saves to Figures/ directory
- Quality: Excellent - clearly distinguishes all three methods
Figure 2: Model Fit ✅
- Layout: Plot showing observed data vs fitted model output over time
- Features: Shows data (circles) and fitted model from fmincon
- Styling: Appropriate styling with proper labels, legend, and grid
- Saving: ✅ Saves to Figures/ directory
- Quality: Good visualization of model fit
✅ Suggestions for Improvement
- CRITICAL: Add timing measurements for all three methods:
tic; % ... grid search code ... time_grid = toc; tic; % ... fminsearch code ... time_fminsearch = toc; tic; % ... fmincon code ... time_fmincon = toc; fprintf('\n--- Timing Results ---\n'); fprintf('Grid search: %.4f seconds\n', time_grid); fprintf('fminsearch: %.4f seconds\n', time_fminsearch); fprintf('fmincon: %.4f seconds\n', time_fmincon); - Important: Expand comparison comments to be more comprehensive:
%% ---------------- (6) Comparison Comments ---------------- % 1. Which solver is faster? % fminsearch and fmincon are much faster than grid search, % requiring fewer function evaluations (~20-50 vs 200). % % 2. Which is more robust? % fmincon is most robust with direct constraint handling (0 ≤ s ≤ 1). % Grid search always works but is slow for fine grids. % fminsearch requires reparameterization to enforce bounds. % % 3. Do they give similar s*? % Yes! All three methods converge to s* ≈ 0.24 (close to true s = 0.24). % This confirms the objective function is well-behaved with a unique minimum. - Minor: Consider removing the
cd()command (line 8) and using relative paths instead:% Instead of: cd('/MATLAB Drive/codes_week6'); % Use relative paths or ensure working directory is correct
🎯 Summary
Excellent submission with missing timing requirements. The student demonstrates strong understanding of optimization methods, implementing all three methods correctly (grid search, fminsearch with sigmoid, and fmincon). The code includes good organization with clear sections, proper figure management, and comparison comments. The objective plot correctly shows all three optima with distinct colors. However, one critical issue is present: no timing measurements for any method, which prevents fair speed comparison. Additionally, comparison comments could be more detailed to fully address all three homework questions (speed, robustness, similarity). The use of cd() command is not ideal but functional.
Grade Level: ✅ More than 50% Correct (11/12 tasks fully correct, 1/12 partially correct, 1/12 incorrect)