123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- from setuptools import setup
- import distutils.command.check
- class TestCommand(distutils.command.check.check):
- """Custom test command."""
- def run(self):
- # run tests using doctest
- import doctest
-
- # folders
- # from macop.algorithms import Algorithm
- print("==============================")
- print("Run test program...")
- from macop.solutions.BinarySolution import BinarySolution
- from macop.evaluators.EvaluatorExample import evaluatorExample
- from macop.operators.mutators.SimpleMutation import SimpleMutation
- from macop.operators.mutators.SimpleBinaryMutation import SimpleBinaryMutation
- from macop.operators.crossovers.SimpleCrossover import SimpleCrossover
- from macop.operators.crossovers.RandomSplitCrossover import RandomSplitCrossover
- from macop.operators.policies.RandomPolicy import RandomPolicy
- from macop.operators.policies.UCBPolicy import UCBPolicy
- from macop.algorithms.mono.IteratedLocalSearch import IteratedLocalSearch as ILS
- from macop.callbacks.BasicCheckpoint import BasicCheckpoint
- import random
- random.seed(42)
- elements_score = [ random.randint(1, 20) for _ in range(30) ]
- elements_weight = [ random.randint(2, 5) for _ in range(30) ]
- def knapsackWeight(_solution):
- weight_sum = 0
- for index, elem in enumerate(_solution.data):
- weight_sum += elements_weight[index] * elem
- return weight_sum
- # default validator
- def validator(_solution):
- if knapsackWeight(_solution) <= 80:
- return True
- else:
- False
- # define init random solution
- def init():
- return BinarySolution([], 30).random(validator)
- def evaluator(_solution):
- fitness = 0
- for index, elem in enumerate(_solution.data):
- fitness += (elements_score[index] * elem)
- return fitness
- operators = [SimpleBinaryMutation(), SimpleMutation(), SimpleCrossover(), RandomSplitCrossover()]
- policy = UCBPolicy(operators)
- # callback = BasicCheckpoint(_every=5, _filepath=filepath)
- algo = ILS(init, evaluator, operators, policy, validator, _maximise=True)
-
- # add callback into callback list
- # algo.addCallback(callback)
- algo.run(200)
- print("==============================")
- print("Run test using doctest...")
- # pass test using doctest
- distutils.command.check.check.run(self)
- setup(
- name='macop',
- version='1.0.0',
- description='Minimalist And Customisable Optimisation Package',
- long_description=open('README.md').read(),
- long_description_content_type='text/markdown',
- classifiers=[
- 'Development Status :: 4 - Beta',
- 'License :: OSI Approved :: MIT License',
- 'Programming Language :: Python :: 3.7',
- 'Topic :: Scientific/Engineering',
- 'Topic :: Utilities'
- ],
- url='https://github.com/prise-3d/macop',
- author='Jérôme BUISINE',
- author_email='jerome.buisine@univ-littoral.fr',
- license='MIT',
- packages=['macop',
- 'macop.algorithms',
- 'macop.algorithms.mono',
- 'macop.algorithms.multi',
- 'macop.callbacks',
- 'macop.evaluators',
- 'macop.operators',
- 'macop.operators.mutators',
- 'macop.operators.crossovers',
- 'macop.operators.policies',
- 'macop.solutions',
- 'macop.utils'],
- install_requires=[
- 'numpy',
- ],
- cmdclass={
- 'test': TestCommand,
- },
- zip_safe=False)
|