WEIS Multi-Objective Optimization Dashboard
The MOO Dashboard is an interactive visualization tool for analyzing multi-objective optimization results from WEIS. It provides real-time exploration of design space, Pareto fronts, and trade-offs between competing objectives.
Overview
The dashboard enables users to:
Visualize high-dimensional optimization results using a scatter plot matrix (SPLOM)
Identify and explore Pareto-optimal solutions
Analyze relationships between design variables, objectives, and constraints
Export interactive visualizations for reports and presentations
Compare individual design iterations with detailed data tables
Installation
The MOO Dashboard is included with WEIS. Ensure you have the required dependencies:
conda activate weis-env
pip install dash plotly pandas numpy pyyaml dash-bootstrap-components
Running the Dashboard
Launch the dashboard from the command line:
conda activate weis-env
cd weis/visualization/moo_dashboard
python main.py
The dashboard will open in your default browser at http://localhost:8050.
User Interface
The dashboard consists of four main sections:
File Loaders
CSV File: Load optimization results (design variables, objectives, constraints)
YAML File: Load problem definition (variable categories, optimization goals)
Controls & Variables
Select which variables to visualize:
Objectives (blue): Quantities to minimize or maximize
Constraints (orange): Feasibility requirements
Design Variables (green): Parameters that can be modified
For each objective, select whether to minimize or maximize using toggle buttons.
Scatter Plot Matrix (SPLOM)
Interactive matrix showing all pairwise relationships between selected variables:
Color scale: Represents iteration number
Red diamonds: Pareto-optimal solutions (if enabled)
Green star: Currently highlighted point (when clicked)
Click on any point to see detailed values in the data table
Controls:
Show/Hide Pareto Front: Toggle visualization of optimal solutionsShow/Hide Diagonal: Toggle diagonal histogram plotsClear Highlighting: Remove point selectionDownload Dashboard: Export as standalone interactive HTML
Data Table
Displays detailed values for the selected iteration.
Input File Formats
CSV File
The CSV file should contain one row per optimization iteration with columns for:
Design variables (e.g.,
tune_rosco_ivc.Kp_float)Objectives (e.g.,
aeroelastic.AEP)Constraints (e.g.,
aeroelastic.rotor_overspeed)
Example:
aeroelastic.AEP |
aeroelastic.DEL_TwrBsMyt |
aeroelastic.rotor_overspeed |
aeroelastic.Max_PtfmPitch |
tune_rosco_ivc.Kp_float |
tune_rosco_ivc.ps_percent |
|---|---|---|---|---|---|
410786235558.229 |
87616.5338 |
0.0905 |
5.0551 |
-20.4375 |
0.6525 |
421847787601.9160 |
101079.1819 |
0.0848 |
5.2194 |
-8.4375 |
0.8725 |
Variables containing arrays (e.g., constraint margins with multiple entries) are
stored as string representations such as "[0.04, 0.75, 0.76]" and are
automatically split into _min / _max columns by the dashboard.
Generating the CSV from WEIS output
After a WEIS optimization run completes, the results are stored in an OpenMDAO
SQL database (log_opt.sql). Use the postprocess_results script to
convert these into the flat, per-iteration CSV that the dashboard expects:
import sys, os
sys.path.insert(0, os.path.join(os.environ.get("WEIS_DIR", "."), "examples/06_parametric_analysis"))
from postprocess_results import sql_to_csv
output_dir = "/path/to/weis/outputs" # directory containing log_opt.sql
df = sql_to_csv(output_dir)
df.to_csv(os.path.join(output_dir, "moo_results.csv"), index=False)
Or run the script directly for example 06:
cd examples/06_parametric_analysis
python postprocess_results.py
The same output_dir will also contain a problem_vars.yaml file produced
by WEIS that is used as the YAML input to the dashboard.
YAML File
The YAML file defines the optimization problem structure:
design_vars:
- - tune_rosco_ivc.Kp_float
- name: tune_rosco_ivc.Kp_float
upper: 0.0
lower: -30.0
size: 1
val: [-9.937499999999996]
- - tune_rosco_ivc.ps_percent
- name: tune_rosco_ivc.ps_percent
upper: 1.0
lower: 0.6
size: 1
val: [0.8775]
constraints:
- - aeroelastic.rotor_overspeed
- name: aeroelastic.rotor_overspeed
lower: 0.0
upper: 0.2
equals: ''
size: 1
val: [0.1168584634534533]
- - aeroelastic.Max_PtfmPitch
- name: aeroelastic.Max_PtfmPitch
lower: -1e+30
upper: 5.5
equals: ''
size: 1
val: [5.111509323120117]
objectives:
- - aeroelastic.AEP
- name: aeroelastic.AEP
size: 1
val: [-4209011.602067122]
- - aeroelastic.DEL_TwrBsMyt
- name: aeroelastic.DEL_TwrBsMyt
size: 1
val: [0.9920550255927588]
Features
Pareto Front Calculation
The dashboard automatically calculates Pareto-optimal solutions based on:
Selected objectives and their optimization sense (minimize/maximize)
Non-dominated sorting algorithm
Visual distinction with red diamond markers
The Pareto front represents the set of solutions where no objective can be improved without degrading another.
Array Variable Handling
Variables containing arrays (e.g., blade chord distribution) are automatically detected and split into:
variable_min: Minimum value in the arrayvariable_max: Maximum value in the array
This allows visualization of array-valued design variables in the SPLOM.
Interactive HTML Export
The Download Dashboard button creates a standalone HTML file that saves the current status of the dashboard, allowing you to continue analysis offline. The exported file contains:
Full interactive SPLOM with all data points
Current selections and highlighted points
Click-through functionality for data table updates
Toggle controls for Pareto front and diagonal visibility
All optimization data embedded for complete offline access
No external dependencies or internet connection required
Configuration
Settings can be modified in config/settings.py:
# Server configuration
HOST = '0.0.0.0'
PORT = 8050
# Plot styling
DEFAULT_PLOT_WIDTH = 800
DEFAULT_PLOT_HEIGHT = 800
MARKER_SIZE = 4
# Color schemes
HIGHLIGHT_COLOR = '#00FF41' # Bright green
COLOR_SCALES = {
'objectives': 'primary', # Blue
'constraints': 'warning', # Orange
'design_vars': 'success' # Green
}
Architecture
The dashboard follows a modular architecture:
moo_dashboard/
├── main.py # Entry point
├── app_init.py # Application initialization
├── config/
│ └── settings.py # Configuration constants
├── layouts/
│ ├── layout.py # Main page layout
│ └── components.py # Reusable UI components
├── callbacks/
│ ├── data_loading.py # File upload/loading
│ ├── channel_selection.py # Variable selection
│ └── visualization.py # Plot updates and interactions
└── utils/
├── data_processing.py # Data transformation and Pareto calculation
└── plot_helpers.py # Plotly figure creation
Troubleshooting
Dashboard won’t start
Check that the port is not already in use:
lsof -i :8050
Change the port in config/settings.py if needed.
Data not loading
Verify:
CSV file has proper column headers
YAML file follows the required structure
File paths are absolute (not relative)
Files are accessible with read permissions
Pareto front not showing
Ensure:
At least 2 objectives are selected
Objective senses (min/max) are configured correctly
CSV data contains valid numeric values for objectives
Click events not working
This is a known issue with some browser configurations. Try:
Using a different browser (Chrome/Firefox recommended)
Clearing browser cache
Disabling browser extensions that might interfere with JavaScript