You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: EMMOEA.m
    path of file: ./repos/PlatEMO/PlatEMO/Algorithms/Multi-objective optimization/EMMOEA
    
    the code of the file until where you have to start completion: classdef EMMOEA < ALGORITHM
% <multi> <real/integer> <expensive>
% Expensive multi-/many-objective evolutionary algorithm
% gmax --- 10 --- Number of generations before updating Kriging Kmodels

%------------------------------- Reference --------------------------------
% S. Qin, C. Sun, Q. Liu, and Y. Jin, A performance indicator-based infill
% criterion for expensive multi-/many-objective optimization, IEEE
% Transactions on Evolutionary Computation, 2023, 27(4): 1085-1099.
%------------------------------- Copyright --------------------------------
% Copyright (c) 2023 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and ref
    
function is written by ShufenQin

    methods
        function main(Algorithm,Problem)
            %% Parameter setting
            gmax = Algorithm.ParameterSet(10);
            
            %% Initialization
            [V,~]  = UniformPoint(Problem.N,Problem.M);
            NI     = 100;
            Plhs   = UniformPoint(NI,Problem.D,'Latin');
            TS     = Problem.Evaluation(repmat(Problem.upper-Problem.lower,NI,1) .* Plhs + repmat(Problem.lower,NI,1));
            lob    = 1e-5.*ones(1,Problem.D);
            upb    = 100.*ones(1,Problem.D);
            THETA  = 5.*ones(Problem.M,Problem.D);
            THETA0 = 5.*ones(1,Problem.D);
            Kmodel = cell(1,Problem.M);
            
            %% Optimization
            PopDec = TS.decs;
            while Algorithm.NotTerminated(TS)
                %% Train a GP model for each objective
                TSDec = TS.decs;
                TSObj = TS.objs;
                for i = 1 : Problem.M
                    % The parameter 'regpoly1' refers to one-order polynomial
                    % function, and 'regpoly0' refers to constant function. The
                    % former function has better fitting performance but lower
                    % efficiency than the latter one
                    dmodel     = dacefit(TSDec,TSObj(:,i),'regpoly0','corrgauss',THETA(i,:),lob,upb);
                    Kmodel{i}  = dmodel;
                    THETA(i,:) = dmodel.theta;
                end