BasicCheckpoint.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # main imports
  2. import os
  3. import logging
  4. import numpy as np
  5. # module imports
  6. from .Checkpoint import Checkpoint
  7. class BasicCheckpoint(Checkpoint):
  8. def __init__(self, _algo, _every, _filepath):
  9. self.algo = _algo
  10. self.every = _every
  11. self.filepath = _filepath
  12. def run(self):
  13. # get current best solution
  14. solution = self.algo.bestSolution
  15. currentEvaluation = self.algo.getGlobalEvaluation()
  16. # backup if necessary
  17. if currentEvaluation % self.every == 0:
  18. logging.info("Checkpoint is done into " + self.filepath)
  19. solutionData = ""
  20. solutionSize = len(solution.data)
  21. for index, val in enumerate(solution.data):
  22. solutionData += str(val)
  23. if index < solutionSize - 1:
  24. solutionData += ' '
  25. line = str(currentEvaluation) + ';' + solutionData + ';' + str(solution.fitness()) + ';\n'
  26. # check if file exists
  27. if not os.path.exists(self.filepath):
  28. with open(self.filepath, 'w') as f:
  29. f.write(line)
  30. else:
  31. with open(self.filepath, 'a') as f:
  32. f.write(line)
  33. def load(self):
  34. if os.path.exists(self.filepath):
  35. logging.info('Load best solution from last checkpoint')
  36. with open(self.filepath) as f:
  37. # get last line and read data
  38. lastline = f.readlines()[-1]
  39. data = lastline.split(';')
  40. # get evaluation information
  41. globalEvaluation = int(data[0])
  42. if self.algo.parent is not None:
  43. self.algo.parent.numberOfEvaluations = globalEvaluation
  44. else:
  45. self.algo.numberOfEvaluations = globalEvaluation
  46. # get best solution data information
  47. solutionData = list(map(int, data[1].split(' ')))
  48. self.algo.bestSolution.data = np.array(solutionData)
  49. self.algo.bestSolution.score = float(data[2])
  50. else:
  51. print('No backup found... Start running')
  52. logging.info("Can't load backup... Backup filepath not valid in Checkpoint")