def moboinfocheck(moboInfo, autoupdate, n_krig):
    """
    Function to check the MOBO information and set MOBO Information to default value if
    required parameters are not supplied.

    Args:
        moboInfo (dict): Structure containing necessary information
            for multi-objective Bayesian optimization.
        autoupdate (bool): True or False, depends on your decision
            to evaluate your function automatically or not.
        n_krig (int): The number of objective functions.

     Returns:
         moboInfo (dict): Checked/Modified MOBO Information
    """
    # Check necessary parameters
    if "nup" not in moboInfo:
        if autoupdate is True:
            raise ValueError("Number of updates for Bayesian optimization, moboInfo['nup'], is not specified")
        else:
            moboInfo["nup"] = 1
            print("Number of updates for Bayesian optimization has been set to 1")
    else:
        if autoupdate == True:
            pass
        else:
            moboInfo["nup"] = 1
            print("Manual mode is active, number of updates for Bayesian optimization is forced to 1")

    # Set default values
    if "acquifunc" not in moboInfo:
        moboInfo["acquifunc"] = "EHVI"
        print("The acquisition function is not specified, set to EHVI")
    else:
        availacqfun = ["ehvi", "ehvi_vec", "ehvi_kmac3d", "parego"]
        if moboInfo["acquifunc"].lower() not in availacqfun:
            raise ValueError(moboInfo["acquifunc"], " is not a valid acquisition function.")
        else:
            pass

    # Set necessary params for multiobjective acquisition function
    if moboInfo["acquifunc"].lower() in ("ehvi", "ehvi_vec", "ehvi_kmac3d"):
        if "refpoint" not in moboInfo:
            moboInfo["refpointtype"] = 'dynamic'
        else:
            moboInfo["refpointtype"] = 'static'
            if len(moboInfo["refpoint"]) != n_krig:
                msg = (f'refpoint {moboInfo["refpoint"]} should have the same '
                       f'dimension as the number of Kriging models ({n_krig})!')
                raise ValueError(msg)
        
        if 'refpointtype' in moboInfo:
            refpointavail = ['dynamic','static']
            if moboInfo["refpointtype"].lower() not in refpointavail:
                raise ValueError(moboInfo["refpointtype"],' is not valid type')

        if n_krig == 2 and moboInfo["acquifunc"].lower() not in ("ehvi", "ehvi_vec"):
            msg = 'For 2-objective optimization, set "acquifunc" to "ehvi" or "ehvi_vec"'
            raise NotImplementedError(msg)
        elif n_krig == 3 and moboInfo["acquifunc"].lower() != 'ehvi_kmac3d':
            msg = 'For 3-objective optimization, set "acquifunc" to "ehvi_kmac3d"'
            raise NotImplementedError(msg)

    elif moboInfo["acquifunc"].lower() == "parego":
        moboInfo["krignum"] = 1
        if "paregoacquifunc" not in moboInfo:
            moboInfo["paregoacquifunc"] = "EI"

    # If moboInfo['acquifuncopt'] (optimizer for the acquisition function) is not specified set to 'sampling+cmaes'
    if "acquifuncopt" not in moboInfo:
        moboInfo["acquifuncopt"] = "lbfgsb"
        print("The acquisition function optimizer is not specified, set to L-BFGS-B.")
    else:
        availableacqoptimizer = ['lbfgsb', 'cobyla', 'cmaes', 'ga', 'diff_evo', 'fcmaes']
        if moboInfo["acquifuncopt"].lower() not in availableacqoptimizer:
            raise ValueError(moboInfo["acquifuncopt"], " is not a valid acquisition function optimizer.")
        else:
            pass

    if "nrestart" not in moboInfo:
        moboInfo["nrestart"] = 1
        print(
            "The number of restart for acquisition function optimization is not specified, setting BayesInfo.nrestart to 1.")
    else:
        if moboInfo["nrestart"] < 1:
            raise ValueError("BayesInfo['nrestart'] should be at least one")
        print("The number of restart for acquisition function optimization is specified to ",
              moboInfo["nrestart"], " by user")

    if "filename" not in moboInfo:
        moboInfo["filename"] = "temporarydata.mat"
        print("The file name for saving the results is not specified, set the name to temporarydata.mat")
    else:
        print("The file name for saving the results is not specified, set the name to ", moboInfo["filename"])

    if "ehvisampling" not in moboInfo:
        moboInfo['ehvisampling'] = 'default'
        print("EHVI sampling is not specified, set sampling to default")
    else:
        availsamp = ['default','efficient']
        if moboInfo['ehvisampling'].lower() not in availsamp:
            raise ValueError(moboInfo['ehvisampling'], ' is not a valid option')
        else:
            print("EHVI sampling is set to ", moboInfo['ehvisampling'])

    if "n_cpu" not in moboInfo:
        moboInfo['n_cpu'] = 1
        print("n_cpu not specified, set to 1")
    else:
        if moboInfo["n_cpu"] < 1:
            raise ValueError("BayesInfo['n_cpu'] should be at least one")
        print(f"n_cpu is set to {moboInfo['n_cpu']} by user")

    return moboInfo