Version: 0.6.1.3

# Decomposition¶

Also, multi-objective problems can be decomposed using a scalarization function. In the following, the contour lines of different methods are shown.

Let us first make the necessary imports and define the points in the design space:

[1]:

import matplotlib.pyplot as plt
import numpy as np
from pymoo.util.misc import all_combinations

# number of points to be used for plotting
n_points = 100

# the xlim
P = np.linspace(0, 3, n_points)

# used for the meshgrid
X = all_combinations(P,P)


A method to plot the contours:

[2]:

def plot_contour(X, F):
_X = X[:, 0].reshape((n_points,n_points))
_Y = X[:, 1].reshape((n_points,n_points))
_Z = F.reshape((n_points,n_points))

fig, ax = plt.subplots()
ax.contour(_X,_Y, _Z, colors='black')
ax.set_aspect('equal')


And then define the weights to be used by the decomposition functions:

[3]:

weights = [0.5, 0.5]


## Weighted Sum¶

[4]:

from pymoo.decomposition.weighted_sum import WeightedSum

dm = WeightedSum()
plot_contour(X, dm(X, weights=weights))


## Tchebysheff¶

[5]:

from pymoo.decomposition.tchebicheff import Tchebicheff

dm = Tchebicheff()
plot_contour(X, dm(X, weights=weights))


## Achievement Scalarization Function (ASF)¶

Details can be found in [29].

[6]:

from pymoo.decomposition.asf import ASF

dm = ASF(eps=0.0)

plot_contour(X, dm(X, weights=weights))


## Augmented Achievement Scalarization Function (AASF)¶

Details can be found in [30].

[7]:

from pymoo.decomposition.aasf import AASF

dm = AASF(eps=0.0, beta=5)

plot_contour(X, dm(X, weights=weights))

[8]:

dm = AASF(eps=0.0, beta=25)

plot_contour(X, dm(X, weights=weights))


## PBI¶

[9]:

from pymoo.decomposition.pbi import PBI

dm = PBI(eps=0.0, theta=0.5)

plot_contour(X, dm(X, weights=weights))

[10]:

dm = PBI(eps=0.0, theta=1.0)
plot_contour(X, dm(X, weights=weights))

[11]:

dm = PBI(eps=0.0, theta=5.0)
plot_contour(X, dm(X, weights=weights))