def should_update(iteration, epoch, settings):
    """
    Tells whether it is time to update the plateaus or not

    :param iteration: iteration number
    :param epoch: epoch number
    :param settings: settings dictionary
    :return: True if it is time for an update, and False otherwise
    """
    no_update = False if 'no_update' not in settings else settings['update']['no_update']

    if no_update:
        return False

    return epoch == settings['update']['start_epoch'] or \
           (epoch > settings['update']['start_epoch'] and epoch % settings['update']['frequency'] == 0) or \
           (settings['update_first_iteration'] and iteration == 0)