This repository contains code for solving nonconvex separable optimization problems of the form
where the functions
The full theoretical background can be found in our paper:
Benjamin Dubois-Taine and Alexandre d'Aspremont. "Frank-Wolfe meets Shapley-Folkman: a systematic approach for solving nonconvex separable problems with linear constraints". In: Mathematical Programming.
You should define a non convex separable problem by creating a child of the NonConvexProblem class defined in code/non_convex_problem.py and implementing the required functions. You can use the file UnitCommitmentSquared/unit_commitment.py as template.
You can then run the first conditional gradient method defined in code/frank_wolfe_1.py, followed by the second Caratheodory step, define in exact_caratheodory.py or approximate_caratheodory.py. You can use the file UnitCommitmentSquared/script.py as template.
To reproduce the experiments on the Unit Commitment problem, run one of the following in UnitCommitmentSquared folder:
$ python script.py
or
$ python script_runtime.py
To reproduce the experiments on the charging of electric vehicles problem, run the following in PEVs folder:
$ python script.py
You can use the jupyter notebooks to reproduce the plots.
To cite our work please use:
@article{dubois2025frank,
title={Frank-Wolfe meets Shapley-Folkman: a systematic approach for solving nonconvex separable problems with linear constraints},
author={Dubois-Taine, Benjamin and d’Aspremont, Alexandre},
journal={Mathematical Programming},
pages={1--51},
year={2025},
publisher={Springer}
}