Skip to content

algorithms.modern.nsga2_imkt

Classes

NSGA2IMKT

NSGA2IMKT(**kwargs)

Bases: NSGA2KTMM

Inverse Modeling with Knowledge Transfer.

Inverse Modeling for Dynamic Multiobjective Optimization with Knowledge Transfer In objective Space.

Source code in pydmoo/algorithms/modern/nsga2_imkt.py
def __init__(self, **kwargs):
    super().__init__(**kwargs)
    self.size_pool = 10
    self.denominator = 0.5

Functions

_response_mechanism
_response_mechanism()

Response mechanism.

Source code in pydmoo/algorithms/modern/nsga2_imkt.py
def _response_mechanism(self):
    """Response mechanism."""
    """Inverse Modeling with Knowledge Transfer."""
    pop = self.pop
    X = pop.get("X")

    # recreate the current population without being evaluated
    pop = Population.new(X=X)

    # sample self.pop_size individuals in decision space
    samples_old = self.sampling_new_pop()

    # select self.pop_size/2 individuals with better convergence and diversity
    samples = samples_old[:int(len(samples_old)/2)]

    # knowledge in objective space
    means_stds, mean, std = self._in_decision_or_objective_space_1d(samples, "objective_space")
    mean_new, std_new = self._select_means_stds(means_stds, mean, std)

    # sample self.pop_size individuals in objective space
    F = univariate_gaussian_sample(mean_new, std_new, self.pop_size, random_state=self.random_state)

    # TODO
    # inverse mapping
    # X = FB
    B = closed_form_solution(samples.get("X"), samples.get("F"))

    # X = FB
    X = np.dot(F, B)

    # bounds
    if self.problem.has_bounds():
        xl, xu = self.problem.bounds()
        X = clip_and_randomize(X, xl, xu, random_state=self.random_state)

    # merge
    pop = Population.merge(samples_old, Population.new(X=X))

    return pop

Functions