MW

MW [38] is a constrained multi-objective test suite constructed in a similar fashion to CTP or WFG with 3 different distance functions and 3 local adjustment methods. Most problems are biobjective problems, except MW4, MW8 and MW14 which are scalable (\(m \geq 3\)).

They aim at replacing the CTP test suite by proposing more complex problems with up to 4 inequality constraints.

MW1

[1]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw1")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_4_0.png

MW2

[2]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw2")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_6_0.png

MW3

[3]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw3")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_8_0.png

MW4

[4]:
from pymoo.factory import get_problem, get_reference_directions, get_visualization

ref_dirs = get_reference_directions("das-dennis", 3, n_partitions=12)
pf = get_problem("mw4").pareto_front(ref_dirs)
get_visualization("scatter", angle=(45,45)).add(pf, color="red").show()
[4]:
<pymoo.visualization.scatter.Scatter at 0x7f04bd4839a0>
../../_images/problems_constrained_mw_10_1.png

MW5

[5]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw5")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_12_0.png

MW6

[6]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw6")
plot(problem.pareto_front(), no_fill=True)
/opt/hostedtoolcache/Python/3.9.7/x64/lib/python3.9/site-packages/pymoo/problems/multi/mw.py:209: RuntimeWarning: divide by zero encountered in true_divide
  l = np.cos(6 * np.arctan(F[:, 1] / F[:, 0]) ** 4) ** 10
../../_images/problems_constrained_mw_14_1.png

MW7

[7]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw7")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_16_0.png

MW8

[8]:
from pymoo.factory import get_problem, get_reference_directions, get_visualization

ref_dirs = get_reference_directions("das-dennis", 3, n_partitions=15)

pf = get_problem("mw8").pareto_front(ref_dirs)
get_visualization("scatter", angle=(45,45)).add(pf, color="red").show()
[8]:
<pymoo.visualization.scatter.Scatter at 0x7f04ce7ad940>
../../_images/problems_constrained_mw_18_1.png

MW9

[9]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw9")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_20_0.png

MW10

[10]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw10")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_22_0.png

MW11

[11]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw11")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_24_0.png

MW12

[12]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw12")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_26_0.png

MW13

[13]:
from pymoo.factory import get_problem
from pymoo.util.plotting import plot

problem = get_problem("mw13")
plot(problem.pareto_front(), no_fill=True)
../../_images/problems_constrained_mw_28_0.png

MW14

[14]:
from pymoo.factory import get_problem, get_visualization

pf = get_problem("mw14").pareto_front()
get_visualization("scatter", angle=(45,45)).add(pf, color="red").show()
[14]:
<pymoo.visualization.scatter.Scatter at 0x7f04b9625760>
../../_images/problems_constrained_mw_30_1.png

Python implementation by cyrilpic based on the original C++ code.