Exemple #1
0
def _local_search(problem, fringe_expander, iterations_limit=0, fringe_size=1,
                  random_initial_states=False, stop_when_no_better=True):
    '''
    Basic algorithm for all local search algorithms.
    '''
    fringe = BoundedPriorityQueue(fringe_size)
    if random_initial_states:
        for _ in xrange(fringe_size):
            s = problem.generate_random_state()
            fringe.append(SearchNodeValueOrdered(state=s, problem=problem))
    else:
        fringe.append(SearchNodeValueOrdered(state=problem.initial_state,
                                             problem=problem))

    iteration = 0
    run = True
    best = None
    while run:
        old_best = fringe[0]
        fringe_expander(fringe, iteration)
        best = fringe[0]

        iteration += 1

        if iterations_limit and iteration >= iterations_limit:
            run = False
        elif old_best.value >= best.value and stop_when_no_better:
            run = False

    return best
Exemple #2
0
def _local_search(problem, fringe_expander, iterations_limit=0, fringe_size=1,
                  random_initial_states=False, stop_when_no_better=True,
                  viewer=None):
    '''
    Basic algorithm for all local search algorithms.
    '''
    if viewer:
        viewer.event('started')

    fringe = BoundedPriorityQueue(fringe_size)
    if random_initial_states:
        for _ in range(fringe_size):
            s = problem.generate_random_state()
            fringe.append(SearchNodeValueOrdered(state=s, problem=problem))
    else:
        fringe.append(SearchNodeValueOrdered(state=problem.initial_state,
                                             problem=problem))

    finish_reason = ''
    iteration = 0
    run = True
    best = None

    while run:
        if viewer:
            viewer.event('new_iteration', list(fringe))

        old_best = fringe[0]
        fringe_expander(fringe, iteration, viewer)
        best = fringe[0]

        iteration += 1

        if iterations_limit and iteration >= iterations_limit:
            run = False
            finish_reason = 'reaching iteration limit'
        elif old_best.value >= best.value and stop_when_no_better:
            run = False
            finish_reason = 'not being able to improve solution'

    if viewer:
        viewer.event('finished', fringe, best, 'returned after %s' % finish_reason)

    return best
Exemple #3
0
def _local_search(problem,
                  fringe_expander,
                  iterations_limit=0,
                  fringe_size=1,
                  random_initial_states=False):
    '''
    Basic algorithm for all local search algorithms.
    '''
    fringe = BoundedPriorityQueue(fringe_size)
    if random_initial_states:
        for _ in xrange(fringe_size):
            s = problem.generate_random_state()
            fringe.append(SearchNodeValueOrdered(state=s, problem=problem))
    else:
        fringe.append(
            SearchNodeValueOrdered(state=problem.initial_state,
                                   problem=problem))

    iteration = 0
    run = True
    best = None
    while run:
        old_best = fringe[0]
        fringe_expander(fringe, iteration)
        best = fringe[0]

        iteration += 1

        if iterations_limit and iteration >= iterations_limit:
            run = False
        elif old_best.value() >= best.value():
            run = False

    return best
Exemple #4
0
def astar(problem, graph_search=False):
    '''
    A* search.

    If graph_search=True, will avoid exploring repeated states.
    Requires: SearchProblem.actions, SearchProblem.result,
    SearchProblem.is_goal, SearchProblem.cost, and SearchProblem.heuristic.
    '''
    return _search(problem,
                   BoundedPriorityQueue(),
                   graph_search=graph_search,
                   node_factory=SearchNodeStarOrdered,
                   graph_replace_when_better=True)
Exemple #5
0
def uniform_cost(problem, graph_search=False):
    '''
    Uniform cost search.

    If graph_search=True, will avoid exploring repeated states.
    Requires: SearchProblem.actions, SearchProblem.result,
    SearchProblem.is_goal, and SearchProblem.cost.
    '''
    return _search(problem,
                   BoundedPriorityQueue(),
                   graph_search=graph_search,
                   node_factory=SearchNodeCostOrdered,
                   graph_replace_when_better=True)
def genetic_search_iteration(problem,  mutation_chance=0.1,
                            population_size=1,
                            initial_population= None):
    '''
    Basic algorithm for all local search algorithms.
    '''
    fringe_expander = _create_genetic_expander(problem, mutation_chance)
    fringe_size = population_size
    fringe = BoundedPriorityQueue(fringe_size)
    if initial_population is None:
        for _ in xrange(fringe_size):
            s = problem.generate_random_state()
            fringe.append(SearchNodeValueOrdered(state=s, problem=problem))
    else:
        for instance in initial_population:
            fringe.append(SearchNodeValueOrdered(state=instance,
                                                 problem=problem))

    old_best = fringe[0]
    fringe_expander(fringe, 0)
    best = fringe[0]

    return best
 def test_remove(self):
     q = BoundedPriorityQueue(2)
     a = DummyNode(1)
     b = DummyNode(2)
     q.append(a)
     q.append(b)
     q.remove(a)
     self.assertEqual(len(q), 1)
     self.assertIs(q[0], b)
Exemple #8
0
def _local_search(problem,
                  fringe_expander,
                  iterations_limit=0,
                  fringe_size=1,
                  random_initial_states=False,
                  stop_when_no_better=True,
                  viewer=None):
    '''
    Basic algorithm for all local search algorithms.
    '''
    if viewer:
        viewer.event('started')

    fringe = BoundedPriorityQueue(fringe_size)
    if random_initial_states:
        for _ in range(fringe_size):
            s = problem.generate_random_state()
            fringe.append(SearchNodeValueOrdered(state=s, problem=problem))
    else:
        fringe.append(
            SearchNodeValueOrdered(state=problem.initial_state,
                                   problem=problem))

    finish_reason = ''
    iteration = 0
    run = True
    best = None

    while run:
        if viewer:
            viewer.event('new_iteration', list(fringe))

        old_best = fringe[0]
        fringe_expander(fringe, iteration, viewer)
        best = fringe[0]

        iteration += 1

        if iterations_limit and iteration >= iterations_limit:
            run = False
            finish_reason = 'reaching iteration limit'
        elif old_best.value >= best.value and stop_when_no_better:
            run = False
            finish_reason = 'not being able to improve solution'

    if viewer:
        viewer.event('finished', fringe, best,
                     'returned after %s' % finish_reason)

    return best
 def test_sorted_priority(self):
     q = BoundedPriorityQueue()
     q.append(DummyNode(3))
     q.append(DummyNode(1))
     q.append(DummyNode(2))
     self.assertTrue(sorted_equals_pop(q))
 def test_limit_works_on_extend(self):
     q = BoundedPriorityQueue(2)
     q.extend([DummyNode(1), DummyNode(1), DummyNode(1)])
     self.assertEqual(len(q), 2)
 def test_limit_works_on_append(self):
     q = BoundedPriorityQueue(2)
     q.append(DummyNode(1))
     q.append(DummyNode(1))
     q.append(DummyNode(1))
     self.assertEqual(len(q), 2)
 def test_pop_works_with_order(self):
     q = BoundedPriorityQueue()
     q.append(DummyNode(3))
     q.append(DummyNode(1))
     q.append(DummyNode(2))
     self.assertEqual(q.pop().value, 1)
 def test_extend_works(self):
     q = BoundedPriorityQueue()
     q.extend([DummyNode(1), DummyNode(1)])
     self.assertEqual(len(q), 2)
 def test_append_works(self):
     q = BoundedPriorityQueue()
     q.append(DummyNode(1))
     q.append(DummyNode(1))
     self.assertEqual(len(q), 2)