logger.info("Collect tasks that needs to be calculated")
 for optimizer in config.LIST_OF_OPTIMIZERS:
     for problem in config.LIST_OF_PROBLEMS:
         optimizerId = str(optimizer.__name__)
         problemId = str(problem.__name__)
         for k in range(config.K):
             if not db.exists(optimizerId, problemId, str(k)):
                 #optimizer().apply(problem(), config.MAX_EVALUATIONS)
                 taskList.append({
                     'optimizer': optimizer,
                     'problem': problem,
                     'maxeval': config.MAX_EVALUATIONS,
                     'k': k
                 })
             elif (config.REPEAT_INCOMPLETE and (np.shape(
                 (db.get(optimizerId, problemId, str(k)))['scores'])[0] <
                                                 config.MAX_EVALUATIONS)):
                 logger.info("Repeat evaluation of " + str(optimizerId) +
                             " on " + str(problemId) + " k=" + str(k) +
                             " because the previous did not complete 100%")
                 logger.info("Last results: " + str(
                     np.shape((db.get(optimizerId, problemId, str(k))
                               )['scores'])[0]))
                 #if there is already an evaluation, but it contains less values than configured (meaning it stopped somewhere because of some numerical issues)
                 #we add it again and hope that the issues will not appear this time (this is mostly for AdaLipo)
                 taskList.append({
                     'optimizer': optimizer,
                     'problem': problem,
                     'maxeval': config.MAX_EVALUATIONS,
                     'k': k
                 })