|
@@ -13,6 +13,63 @@ class TestCommand(distutils.command.check.check):
|
|
|
# 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...")
|