Problems
Bilevel optimization involves optimizing two interrelated optimization tasks, where one problem (the upper level) depends on optimal solutions of another at the lower level. This part presents test problems for bilevel optimization, including single and multi-objective scenarios.
BilevelHeuristics.TestProblems.get_problem — Functionget_problem(problem)Return F, f, bounds_ul, bounds_ll, Ψ, o where
Fis the upper-level objective function.fis the lower-level objective function.bounds_ulis the upper-level bounds.bounds_llis the lower-level bounds.Ψ-mapping that receives upper-level decision vector and return a Matrix containing lower-level optimal solutions.ocontain a sampled optimal solutions.
Example
using BilevelHeuristics
using DelimitedFiles
F, f, bounds_ul, bounds_ll, _ = TestProblems.get_problem("TP1")
algorithm = SMS_MOBO(;
ul = SMS_EMOA(;N = 100), # upper level optimizer
ll = NSGA2(;N = 50), # lower level optimizer
ul_offsprings = 10,
options_ul = Options(iterations = 100, f_calls_limit=Inf),
options_ll = Options(iterations = 50, f_calls_limit=Inf)
)
res = optimize(F, f, bounds_ul, bounds_ll, algorithm)
final_archive = algorithm.parameters.archive
final_archive[1][1] # upper level (solution #1)
final_archive[1][2] # lower level (solution #1)
ul_front = fvals([sol[1] for sol in final_archive])
writedlm("data.csv", ul_front, ',')