setup.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. from setuptools import setup
  2. import distutils.command.check
  3. class TestCommand(distutils.command.check.check):
  4. """Custom test command."""
  5. def run(self):
  6. # run tests using doctest
  7. import doctest
  8. # folders
  9. # from macop.algorithms import Algorithm
  10. print("==============================")
  11. print("Run test program...")
  12. from macop.solutions.discrete import BinarySolution
  13. from macop.evaluators.knapsacks import KnapsackEvaluator
  14. from macop.operators.discrete.mutators import SimpleMutation
  15. from macop.operators.discrete.mutators import SimpleBinaryMutation
  16. from macop.operators.discrete.crossovers import SimpleCrossover
  17. from macop.operators.discrete.crossovers import RandomSplitCrossover
  18. from macop.policies.classicals import RandomPolicy
  19. from macop.policies.reinforcement import UCBPolicy
  20. from macop.algorithms.mono import IteratedLocalSearch as ILS
  21. from macop.callbacks.classicals import BasicCheckpoint
  22. import random
  23. random.seed(42)
  24. elements_score = [ random.randint(1, 20) for _ in range(30) ]
  25. elements_weight = [ random.randint(2, 5) for _ in range(30) ]
  26. def knapsackWeight(solution):
  27. weight_sum = 0
  28. for index, elem in enumerate(solution._data):
  29. weight_sum += elements_weight[index] * elem
  30. return weight_sum
  31. # default validator
  32. def validator(solution):
  33. if knapsackWeight(solution) <= 80:
  34. return True
  35. else:
  36. False
  37. # define init random solution
  38. def init():
  39. return BinarySolution([], 30).random(validator)
  40. evaluator = KnapsackEvaluator(data={'worths': elements_score})
  41. operators = [SimpleBinaryMutation(), SimpleMutation(), SimpleCrossover(), RandomSplitCrossover()]
  42. policy = UCBPolicy(operators)
  43. # callback = BasicCheckpoint(_every=5, _filepath=filepath)
  44. algo = ILS(init, evaluator, operators, policy, validator, maximise=True, verbose=False)
  45. # add callback into callback list
  46. # algo.addCallback(callback)
  47. algo.run(200)
  48. print("==============================")
  49. print("Run test using doctest...")
  50. # pass test using doctest
  51. distutils.command.check.check.run(self)
  52. setup(
  53. name='macop',
  54. version='1.0.5',
  55. description='Minimalist And Customisable Optimisation Package',
  56. long_description=open('README.md').read(),
  57. long_description_content_type='text/markdown',
  58. classifiers=[
  59. 'Development Status :: 4 - Beta',
  60. 'License :: OSI Approved :: MIT License',
  61. 'Programming Language :: Python :: 3.7',
  62. 'Topic :: Scientific/Engineering',
  63. 'Topic :: Utilities'
  64. ],
  65. url='https://github.com/prise-3d/macop',
  66. author='Jérôme BUISINE',
  67. author_email='jerome.buisine@univ-littoral.fr',
  68. license='MIT',
  69. packages=['macop',
  70. 'macop.algorithms',
  71. 'macop.callbacks',
  72. 'macop.evaluators',
  73. 'macop.operators',
  74. 'macop.operators.discrete',
  75. 'macop.operators.continuous',
  76. 'macop.policies',
  77. 'macop.solutions',
  78. 'macop.utils'],
  79. install_requires=[
  80. 'numpy',
  81. ],
  82. cmdclass={
  83. 'test': TestCommand,
  84. },
  85. zip_safe=False)