Gated multi objective#27
Conversation
Joseph-Q-Zales
commented
May 29, 2026
- add gated multi-objective NAS feasibility constraints
- persist optuna constraints and validate resumes
- count feasible trials in NAS retry loops
- compute static memory-traffic proxy metrics
- add memory proxy analysis script and config
- split STM32 defaults from the generic config
- log feasibility and memory fields per trial
- expand tests for gating, pruning, and finalization
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 28ca65540e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| pareto_trials = [ | ||
| trial | ||
| for trial in study.best_trials | ||
| if (not self._feasibility_enabled()) or bool(trial.user_attrs.get("feasible")) | ||
| ] |
There was a problem hiding this comment.
Compute the Pareto front after filtering infeasible trials
When nas.feasibility.train_if_infeasible: true, infeasible trials still train and can have real objective values. Filtering study.best_trials here drops infeasible Pareto points but does not recompute dominance on the remaining feasible trials, so any feasible trial dominated only by an infeasible trial is omitted from the saved Pareto CSV (and the front can even be empty despite feasible completed trials). Build the Pareto set from the feasible completed subset instead of filtering Optuna's already-computed front.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
This is a small edge case that wouldn't ever occur in normal use of the system