コード例 #1
0
ファイル: test.py プロジェクト: powerllamas/MiOIB
class TestTabuSearch(unittest.TestCase):

    def setUp(self):
        self.flow = [
                [0, 1, 2],
                [4, 0, 5],
                [7, 2, 0]]
        self.distance = [
                [0, 5, 2],
                [1, 0, 1],
                [6, 2, 0]]
        self.i = Instance(None, self.distance, self.flow)
        self.e = E(self.i)
        self.ts = TabuSearch()
        self.startpoint = Solution((0, 1, 2))

    def test_filter_moves(self):
        moves = [(1, 2),
                (1, 3),
                (2, 3)]
        tabu = defaultdict(int, {(1, 2): 1, (2, 3): 1})
        expected = [(1, 3)]
        actual = list(self.ts._get_filtered_moves(moves, tabu=tabu))
        self.assertEqual(expected, actual)

    def test_filter_moves_with_aspiration(self):
        self.i = Instance(None, self.distance, self.flow)
        self.e = E(self.i)
        self.startpoint = Solution((2, 1, 0))

        moves = [(0, 1),
                (0, 2),
                (1, 2)]
        tabu = defaultdict(int, {(0, 1): 1, (1, 2): 2, (0, 2): 3})
        expected = [(0, 1),
                (0, 2),
                (1, 2)]
        actual = list(self.ts._get_filtered_moves(moves, e=self.e,
            current=(self.startpoint, self.e.evaluate(self.startpoint)),
            tabu=tabu))
        self.assertEqual(expected, actual)

    def test_decrease_tabu_penalty(self):
        tabu = defaultdict(int, {(1, 2): 2, (2, 3): 1})
        expected = [(1, 2)]
        self.ts._decrease_tabu_penalty(tabu)
        actual = tabu.keys()
        self.assertEqual(expected, actual)

    def test_select_best_move(self):
        current = self.startpoint
        moves = [(0, 1),
                (0, 2),
                (1, 2)]
        expected = (0, 2)
        actual = self.ts._select_best_move(current, moves, self.e)
        self.assertEqual(expected, actual)

    def test_select_best_moves(self):
        current = self.startpoint
        moves = [(0, 1),
                (0, 2),
                (1, 2)]
        expected = [(0, 2),
                (1, 2)]
        actual = self.ts._select_best_moves(current, moves, self.e, 2)
        self.assertEqual(expected, actual)

    def test_with_startpoint(self):
        expected = (2, 1, 0)
        actual = self.ts.solve(self.i, self.startpoint).sequence
        self.assertEqual(expected, actual)