-
Notifications
You must be signed in to change notification settings - Fork 102
Description
Genetic algorithm crashes when no feasible solution exists (res.F is None -> AttributeError in terminate)
Edit: This looks related to #29 (closed), but the same error message still reappear on main. I'd like some advice for seeing this behavior.
Summary
When running the genetic algorithm with certain constraint combinations (e.g., including water_depth), the optimiser can produce no feasible solutions. In this case, pymoo returns a Result where res.F/ res.X is None, but Genetic.terminate() assumes they exist and crashes.
Steps and Configuration to Reproduce
Attached config.multipleroutes.json producing the error
- Use the above configuration and ensure "water_depth" is included in CONSTRAINTS_LIST in config.multipleroutes.json and config.py
- Run
python cli.py -f /path/to/config.json --debug True - Observe crash at termination
Actual Behavior
Program crashes with
File "/Users/<>/Documents/open_source/WeatherRoutingTool/WeatherRoutingTool/algorithms/genetic/init.py", line 160, in terminate best_index = res.F.argmin() ^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'argmin'
Traceback points to Genetic.terminate() in init.py
Expected Behavior
If no feasible solution exists, the program should fail with a clearer message like
- No feasible solution found, all candidates violated constraints. Please rerun.
Context
If "water_depth" if removed from CONSTRAINTS_LIST in the attached config.json, the same run produces a solution and figures.
No feasible solution scenario is valid/ expected, but just the crashing and error type/ message is not.
Proposed Fix
Add a guard in Genetic.terminate() to check res, res.F and res.X for None/emptiness and raise a descriptive exception.
I'm happy to solve the issue and make a small PR.