Note
Go to the end to download the full example code
Pareto front on Binh and Korn problem¶
In this example, we illustrate the use of the ParetoFront
plot
on the Binh and Korn multi-objective problem.
from __future__ import annotations
from gemseo import configure_logger
from gemseo.algos.doe.doe_factory import DOEFactory
from gemseo.post.post_factory import PostFactory
from gemseo.problems.analytical.binh_korn import BinhKorn
Import¶
The first step is to import a high-level function for logging.
configure_logger()
<RootLogger root (INFO)>
Import the optimization problem¶
Then, we instantiate the Binh and Korn optimization problem (see BinhKorn
).
problem = BinhKorn()
Create and execute scenario¶
Then, we instantiate the design of experiment factory, and we request the execution of a 100-length LHS optimized by simulated annealing.
doe_factory = DOEFactory()
doe_factory.execute(problem, algo_name="OT_OPT_LHS", n_samples=100)
INFO - 13:12:58: Optimization problem:
INFO - 13:12:58: minimize compute_binhkorn(x, y) = (4*x**2+ 4*y**2, (x-5.)**2 + (y-5.)**2)
INFO - 13:12:58: with respect to x, y
INFO - 13:12:58: subject to constraints:
INFO - 13:12:58: ineq1(x, y): (x-5.)**2 + y**2 <= 25. <= 0.0
INFO - 13:12:58: ineq2(x, y): (x-8.)**2 + (y+3)**2 >= 7.7 <= 0.0
INFO - 13:12:58: over the design space:
INFO - 13:12:58: +------+-------------+-------+-------------+-------+
INFO - 13:12:58: | Name | Lower bound | Value | Upper bound | Type |
INFO - 13:12:58: +------+-------------+-------+-------------+-------+
INFO - 13:12:58: | x | 0 | 1 | 5 | float |
INFO - 13:12:58: | y | 0 | 1 | 3 | float |
INFO - 13:12:58: +------+-------------+-------+-------------+-------+
INFO - 13:12:58: Solving optimization problem with algorithm OT_OPT_LHS:
INFO - 13:12:58: 1%| | 1/100 [00:00<00:00, 2206.37 it/sec, obj=[98.50728236 17.96432773]]
INFO - 13:12:58: 2%|▏ | 2/100 [00:00<00:00, 1703.96 it/sec, obj=[ 5.10086961 36.30607322]]
INFO - 13:12:58: 3%|▎ | 3/100 [00:00<00:00, 1681.08 it/sec, obj=[ 5.73344945 34.53104096]]
INFO - 13:12:58: 4%|▍ | 4/100 [00:00<00:00, 1711.96 it/sec, obj=[ 2.99274814 38.89733089]]
INFO - 13:12:58: 5%|▌ | 5/100 [00:00<00:00, 1728.33 it/sec, obj=[ 1.45355254 43.72252794]]
INFO - 13:12:58: 6%|▌ | 6/100 [00:00<00:00, 1748.11 it/sec, obj=[26.6936315 22.26390516]]
INFO - 13:12:58: 7%|▋ | 7/100 [00:00<00:00, 1768.58 it/sec, obj=[95.06326723 19.21865528]]
INFO - 13:12:58: 8%|▊ | 8/100 [00:00<00:00, 1784.34 it/sec, obj=[11.37121324 33.49445422]]
INFO - 13:12:58: 9%|▉ | 9/100 [00:00<00:00, 1796.02 it/sec, obj=[33.52756721 17.72645069]]
INFO - 13:12:58: 10%|█ | 10/100 [00:00<00:00, 1808.05 it/sec, obj=[ 4.39737722 39.0292696 ]]
INFO - 13:12:58: 11%|█ | 11/100 [00:00<00:00, 1799.43 it/sec, obj=[83.81080473 6.44933463]]
INFO - 13:12:58: 12%|█▏ | 12/100 [00:00<00:00, 1805.36 it/sec, obj=[64.12902701 21.25106868]]
INFO - 13:12:58: 13%|█▎ | 13/100 [00:00<00:00, 1805.20 it/sec, obj=[71.23914138 9.90898899]]
INFO - 13:12:58: 14%|█▍ | 14/100 [00:00<00:00, 1809.56 it/sec, obj=[58.61362754 10.51836124]]
INFO - 13:12:58: 15%|█▌ | 15/100 [00:00<00:00, 1782.69 it/sec, obj=[17.1313131 28.27257144]]
INFO - 13:12:58: 16%|█▌ | 16/100 [00:00<00:00, 1783.67 it/sec, obj=[38.07815452 16.26141839]]
INFO - 13:12:58: 17%|█▋ | 17/100 [00:00<00:00, 1788.21 it/sec, obj=[45.29614269 15.87407947]]
INFO - 13:12:58: 18%|█▊ | 18/100 [00:00<00:00, 1737.17 it/sec, obj=[78.26474617 13.97242459]]
INFO - 13:12:58: 19%|█▉ | 19/100 [00:00<00:00, 1737.68 it/sec, obj=[58.47852866 16.87161502]]
INFO - 13:12:58: 20%|██ | 20/100 [00:00<00:00, 1742.69 it/sec, obj=[ 7.27923171 33.31157275]]
INFO - 13:12:58: 21%|██ | 21/100 [00:00<00:00, 1749.50 it/sec, obj=[15.973784 25.86458657]]
INFO - 13:12:58: 22%|██▏ | 22/100 [00:00<00:00, 1756.31 it/sec, obj=[47.66727367 15.96717933]]
INFO - 13:12:58: 23%|██▎ | 23/100 [00:00<00:00, 1762.02 it/sec, obj=[88.93580164 6.7712213 ]]
INFO - 13:12:58: 24%|██▍ | 24/100 [00:00<00:00, 1762.00 it/sec, obj=[22.10070032 24.30208587]]
INFO - 13:12:58: 25%|██▌ | 25/100 [00:00<00:00, 1765.58 it/sec, obj=[16.24176378 31.32352362]]
INFO - 13:12:58: 26%|██▌ | 26/100 [00:00<00:00, 1746.12 it/sec, obj=[29.38105263 25.45614728]]
INFO - 13:12:58: 27%|██▋ | 27/100 [00:00<00:00, 1746.36 it/sec, obj=[27.91051427 19.91664614]]
INFO - 13:12:58: 28%|██▊ | 28/100 [00:00<00:00, 1750.07 it/sec, obj=[37.28915469 18.0103703 ]]
INFO - 13:12:58: 29%|██▉ | 29/100 [00:00<00:00, 1754.41 it/sec, obj=[ 1.01177424 43.45819442]]
INFO - 13:12:58: 30%|███ | 30/100 [00:00<00:00, 1758.30 it/sec, obj=[85.96675181 10.67473104]]
INFO - 13:12:58: 31%|███ | 31/100 [00:00<00:00, 1758.81 it/sec, obj=[87.34794862 6.40751572]]
INFO - 13:12:58: 32%|███▏ | 32/100 [00:00<00:00, 1761.60 it/sec, obj=[25.57943091 20.74700556]]
INFO - 13:12:58: 33%|███▎ | 33/100 [00:00<00:00, 1765.48 it/sec, obj=[76.39229092 11.95231974]]
INFO - 13:12:58: 34%|███▍ | 34/100 [00:00<00:00, 1766.74 it/sec, obj=[51.64657249 21.13171808]]
INFO - 13:12:58: 35%|███▌ | 35/100 [00:00<00:00, 1770.09 it/sec, obj=[95.8196038 9.31540942]]
INFO - 13:12:58: 36%|███▌ | 36/100 [00:00<00:00, 1773.34 it/sec, obj=[117.01496061 6.96792478]]
INFO - 13:12:58: 37%|███▋ | 37/100 [00:00<00:00, 1776.21 it/sec, obj=[78.37371654 21.95951365]]
INFO - 13:12:58: 38%|███▊ | 38/100 [00:00<00:00, 1779.03 it/sec, obj=[38.21112297 20.46923673]]
INFO - 13:12:58: 39%|███▉ | 39/100 [00:00<00:00, 1778.68 it/sec, obj=[77.87964266 17.24338363]]
INFO - 13:12:58: 40%|████ | 40/100 [00:00<00:00, 1781.00 it/sec, obj=[59.79323468 22.48208172]]
INFO - 13:12:58: 41%|████ | 41/100 [00:00<00:00, 1782.26 it/sec, obj=[34.56674439 21.30358144]]
INFO - 13:12:58: 42%|████▏ | 42/100 [00:00<00:00, 1784.61 it/sec, obj=[ 0.46290462 45.68910522]]
INFO - 13:12:58: 43%|████▎ | 43/100 [00:00<00:00, 1786.74 it/sec, obj=[100.73843409 11.99829359]]
INFO - 13:12:58: 44%|████▍ | 44/100 [00:00<00:00, 1788.96 it/sec, obj=[21.18253098 23.10192252]]
INFO - 13:12:58: 45%|████▌ | 45/100 [00:00<00:00, 1791.09 it/sec, obj=[51.0570421 12.66142788]]
INFO - 13:12:58: 46%|████▌ | 46/100 [00:00<00:00, 1790.81 it/sec, obj=[90.5172837 14.59877358]]
INFO - 13:12:58: 47%|████▋ | 47/100 [00:00<00:00, 1792.18 it/sec, obj=[19.5728568 23.86163594]]
INFO - 13:12:58: 48%|████▊ | 48/100 [00:00<00:00, 1794.40 it/sec, obj=[47.52592344 19.80950276]]
INFO - 13:12:58: 49%|████▉ | 49/100 [00:00<00:00, 1794.28 it/sec, obj=[113.47621648 6.0816867 ]]
INFO - 13:12:58: 50%|█████ | 50/100 [00:00<00:00, 1796.25 it/sec, obj=[37.3534796 16.14867587]]
INFO - 13:12:58: 51%|█████ | 51/100 [00:00<00:00, 1779.48 it/sec, obj=[41.42991507 25.64561402]]
INFO - 13:12:58: 52%|█████▏ | 52/100 [00:00<00:00, 1777.75 it/sec, obj=[11.19222105 30.06624599]]
INFO - 13:12:58: 53%|█████▎ | 53/100 [00:00<00:00, 1776.13 it/sec, obj=[86.67968625 15.70216699]]
INFO - 13:12:58: 54%|█████▍ | 54/100 [00:00<00:00, 1777.21 it/sec, obj=[90.96123503 7.41344494]]
INFO - 13:12:58: 55%|█████▌ | 55/100 [00:00<00:00, 1778.11 it/sec, obj=[34.69157131 20.23247304]]
INFO - 13:12:58: 56%|█████▌ | 56/100 [00:00<00:00, 1779.51 it/sec, obj=[56.73716821 11.35918483]]
INFO - 13:12:58: 57%|█████▋ | 57/100 [00:00<00:00, 1781.41 it/sec, obj=[58.33058905 10.70125973]]
INFO - 13:12:58: 58%|█████▊ | 58/100 [00:00<00:00, 1783.38 it/sec, obj=[19.48697889 32.41188233]]
INFO - 13:12:58: 59%|█████▉ | 59/100 [00:00<00:00, 1782.80 it/sec, obj=[ 9.51315338 32.51410675]]
INFO - 13:12:58: 60%|██████ | 60/100 [00:00<00:00, 1781.39 it/sec, obj=[14.29503909 27.34400969]]
INFO - 13:12:58: 61%|██████ | 61/100 [00:00<00:00, 1779.93 it/sec, obj=[21.01471588 31.54351738]]
INFO - 13:12:58: 62%|██████▏ | 62/100 [00:00<00:00, 1781.35 it/sec, obj=[32.62517737 26.61449355]]
INFO - 13:12:58: 63%|██████▎ | 63/100 [00:00<00:00, 1781.75 it/sec, obj=[54.44405197 15.56114393]]
INFO - 13:12:58: 64%|██████▍ | 64/100 [00:00<00:00, 1775.38 it/sec, obj=[31.67860311 19.0346702 ]]
INFO - 13:12:58: 65%|██████▌ | 65/100 [00:00<00:00, 1770.05 it/sec, obj=[12.95434975 27.79409607]]
INFO - 13:12:58: 66%|██████▌ | 66/100 [00:00<00:00, 1769.58 it/sec, obj=[33.53586239 22.39126054]]
INFO - 13:12:58: 67%|██████▋ | 67/100 [00:00<00:00, 1769.27 it/sec, obj=[13.77290554 32.89122016]]
INFO - 13:12:58: 68%|██████▊ | 68/100 [00:00<00:00, 1770.64 it/sec, obj=[24.55394276 22.04978627]]
INFO - 13:12:58: 69%|██████▉ | 69/100 [00:00<00:00, 1771.36 it/sec, obj=[38.26118694 15.93322028]]
INFO - 13:12:58: 70%|███████ | 70/100 [00:00<00:00, 1772.72 it/sec, obj=[69.87762034 24.69083953]]
INFO - 13:12:58: 71%|███████ | 71/100 [00:00<00:00, 1774.42 it/sec, obj=[117.708931 4.51806144]]
INFO - 13:12:58: 72%|███████▏ | 72/100 [00:00<00:00, 1776.11 it/sec, obj=[24.18294227 29.58378487]]
INFO - 13:12:58: 73%|███████▎ | 73/100 [00:00<00:00, 1778.03 it/sec, obj=[65.41388231 10.29184587]]
INFO - 13:12:58: 74%|███████▍ | 74/100 [00:00<00:00, 1777.97 it/sec, obj=[12.24819086 35.25245724]]
INFO - 13:12:58: 75%|███████▌ | 75/100 [00:00<00:00, 1778.80 it/sec, obj=[25.31003032 24.72346394]]
INFO - 13:12:58: 76%|███████▌ | 76/100 [00:00<00:00, 1780.37 it/sec, obj=[49.90530196 13.18421478]]
INFO - 13:12:58: 77%|███████▋ | 77/100 [00:00<00:00, 1780.97 it/sec, obj=[13.58752584 29.15968355]]
INFO - 13:12:58: 78%|███████▊ | 78/100 [00:00<00:00, 1771.89 it/sec, obj=[ 7.8547085 33.00337593]]
INFO - 13:12:58: 79%|███████▉ | 79/100 [00:00<00:00, 1765.44 it/sec, obj=[34.10323875 25.61801713]]
INFO - 13:12:58: 80%|████████ | 80/100 [00:00<00:00, 1766.02 it/sec, obj=[50.66487602 26.86160736]]
INFO - 13:12:58: 81%|████████ | 81/100 [00:00<00:00, 1765.66 it/sec, obj=[19.81349957 25.42966204]]
INFO - 13:12:58: 82%|████████▏ | 82/100 [00:00<00:00, 1766.92 it/sec, obj=[ 7.4546377 34.97394601]]
INFO - 13:12:58: 83%|████████▎ | 83/100 [00:00<00:00, 1767.51 it/sec, obj=[106.96361831 5.44850984]]
INFO - 13:12:58: 84%|████████▍ | 84/100 [00:00<00:00, 1768.87 it/sec, obj=[ 5.36344422 38.7517519 ]]
INFO - 13:12:58: 85%|████████▌ | 85/100 [00:00<00:00, 1770.33 it/sec, obj=[49.116045 14.30366519]]
INFO - 13:12:58: 86%|████████▌ | 86/100 [00:00<00:00, 1771.70 it/sec, obj=[65.46370949 9.53265669]]
INFO - 13:12:58: 87%|████████▋ | 87/100 [00:00<00:00, 1773.09 it/sec, obj=[34.43204876 18.46542147]]
INFO - 13:12:58: 88%|████████▊ | 88/100 [00:00<00:00, 1773.28 it/sec, obj=[89.05896719 23.04880076]]
INFO - 13:12:58: 89%|████████▉ | 89/100 [00:00<00:00, 1774.09 it/sec, obj=[28.30965373 24.49805668]]
INFO - 13:12:58: 90%|█████████ | 90/100 [00:00<00:00, 1775.15 it/sec, obj=[39.10277528 23.64680578]]
INFO - 13:12:58: 91%|█████████ | 91/100 [00:00<00:00, 1775.35 it/sec, obj=[117.48545685 8.18526365]]
INFO - 13:12:58: 92%|█████████▏| 92/100 [00:00<00:00, 1776.42 it/sec, obj=[66.02068516 15.50045449]]
INFO - 13:12:58: 93%|█████████▎| 93/100 [00:00<00:00, 1777.76 it/sec, obj=[67.39952092 12.92818287]]
INFO - 13:12:58: 94%|█████████▍| 94/100 [00:00<00:00, 1778.98 it/sec, obj=[55.28167693 13.5771757 ]]
INFO - 13:12:58: 95%|█████████▌| 95/100 [00:00<00:00, 1780.23 it/sec, obj=[17.335399 26.84155459]]
INFO - 13:12:58: 96%|█████████▌| 96/100 [00:00<00:00, 1780.04 it/sec, obj=[ 4.93473731 35.93049995]]
INFO - 13:12:58: 97%|█████████▋| 97/100 [00:00<00:00, 1781.11 it/sec, obj=[25.16386975 26.89754332]]
INFO - 13:12:58: 98%|█████████▊| 98/100 [00:00<00:00, 1781.65 it/sec, obj=[81.61206359 10.43246637]]
INFO - 13:12:58: 99%|█████████▉| 99/100 [00:00<00:00, 1782.37 it/sec, obj=[40.83406128 15.59204339]]
INFO - 13:12:58: 100%|██████████| 100/100 [00:00<00:00, 1783.44 it/sec, obj=[52.02690192 12.02601654]]
INFO - 13:12:58: Optimization result:
INFO - 13:12:58: Optimizer info:
INFO - 13:12:58: Status: None
INFO - 13:12:58: Message: None
INFO - 13:12:58: Number of calls to the objective function by the optimizer: 100
INFO - 13:12:58: Solution:
INFO - 13:12:58: The solution is feasible.
INFO - 13:12:58: Objective: 30.39964825035985
INFO - 13:12:58: Standardized constraints:
INFO - 13:12:58: ineq1 = [-11.77907222]
INFO - 13:12:58: ineq2 = [-38.26307397]
INFO - 13:12:58: Design space:
INFO - 13:12:58: +------+-------------+-------------------+-------------+-------+
INFO - 13:12:58: | Name | Lower bound | Value | Upper bound | Type |
INFO - 13:12:58: +------+-------------+-------------------+-------------+-------+
INFO - 13:12:58: | x | 0 | 1.542975634014225 | 5 | float |
INFO - 13:12:58: | y | 0 | 1.269910308585573 | 3 | float |
INFO - 13:12:58: +------+-------------+-------------------+-------------+-------+
Post-process scenario¶
Lastly, we post-process the scenario by means of the ParetoFront
plot which generates a plot or a matrix of plots if there are more than
2 objectives, plots in blue the locally non dominated points for the current
two objectives, plots in green the globally (all objectives) Pareto optimal
points. The plots in green denote non-feasible points. Note that the user
can avoid the display of the non-feasible points.
PostFactory().execute(
problem,
"ParetoFront",
show_non_feasible=False,
objectives=["compute_binhkorn"],
objectives_labels=["f1", "f2"],
save=False,
show=True,
)
PostFactory().execute(
problem,
"ParetoFront",
objectives=["compute_binhkorn"],
objectives_labels=["f1", "f2"],
save=False,
show=True,
)
<gemseo.post.pareto_front.ParetoFront object at 0x7f8ba1b81fa0>
Total running time of the script: (0 minutes 0.535 seconds)