def runSimulation(start, solution):
    """
    Returns minumum number of time steps needed to get to solution
    """
    scoredict = {}
    solutionNodes = []
    lowest = 15
    currentmin = 20
    pare_node = Node(start)
    m = (0, pare_node)
    heappush(queue, m)

    tempnode = heappop(queue)
    tempchildren = generateAllChildren(tempnode[1].cargo)
    for k in range(len(tempchildren)):
        score = bart(tempchildren[k])
        initnode = Node(tempchildren[k], tempnode[1])
        v = (score, initnode)
        heappush(queue, v)

    while (queue != []):
        pare_node = heappop(queue)
        children = generateAllChildren(pare_node[1].cargo)

        c = selectChildren(children)
        print
        print c

        for i in range(len(c)):
            # create nodes
            node = Node(c[i], pare_node[1])
            if (c[i] == solution):
                solutionNodes.append(node)
                print "length of solutionNodes: ", len(solutionNodes)
            else:
                score = bart(c[i])
                l = (score, node)
                # print score
                if (len(queue) <= maxqueue):
                    heappush(queue, l)
                else:
                    heappushpop(queue, l)

    inversions = 0
    for j in range(len(solutionNodes)):
        node = solutionNodes[j]
        while((node.prev != None) and (inversions < lowest)):
            print "Step", node
            node = node.prev
            inversions += 1
        if ((inversions < lowest) and (node.prev == None)):
            lowest = inversions
            print "Inversions: ", inversions
        j += 1

    print "Start: ", start
def runSimulation(start, solution):
    """
    Returns minumum number of time steps needed to get to solution
    """
    solutionNodes = []
    lowest = 15
    pare_node = Node(start)
    m = (0, pare_node)
    heappush(queue, m)
    solution_found = False

    while (queue != [] and (solution_found == False)):
        pare_node = heappop(queue)
        children = generateAllChildren(pare_node[1].cargo)

        c = selectChildren(children)
        for i in range(len(c)):
            score = bart(c[i])
            node = Node(c[i], pare_node[1])
            l = (score, node)
            if (len(queue) <= maxqueue):
                heappush(queue, l)
            else:
                heappushpop(queue, l)
            if (c[i] == solution):
                print "Solution: ", c[i]
                solution_found = True
                inversions = 0
                while(node.prev != None):
                    print node
                    node = node.prev
                    inversions += 1
                print "Inversions: ", inversions
Beispiel #3
0
def runSimulation(start, solution):
    """
    Returns minumum number of time steps needed to get to solution
    """
    solutionNodes = []
    pare_node = Node(start)
    m = (0, pare_node)
    heappush(queue, m)

    while (queue != [] and (len(solutionNodes) < 2)):
        pare_node = heappop(queue)
        children = generateAllChildren(pare_node[1].cargo)

        c = selectChildren(children)
        for i in range(len(c)):
            # create nodes
            node = Node(c[i], pare_node[1])
            if (c[i] == solution):
                solutionNodes.append(node)
                print "length of solutionNodes: ", len(solutionNodes)
            else:
                score = bart(c[i])
                l = (score, node)
                if (len(queue) <= maxqueue):
                    heappush(queue, l)
                else:
                    heappushpop(queue, l)

    # # print all solutions
    # for j in range(len(solutionNodes)):
    #     inversions = 0
    #     node = solutionNodes[j]
    #     while((node.prev != None)):
    #         print "Step", node
    #         node = node.prev
    #         inversions += 1
    #     print "Inversions: ", inversions
    #     j += 1

    # only print shortest solutions
    lowest = 50
    inversions = 0
    for j in range(len(solutionNodes)):
        node = solutionNodes[j]
        while((node.prev != None) and (inversions < lowest)):
            print "Step", node
            node = node.prev
            inversions += 1
        if (inversions < lowest):
            lowest = inversions
            print "Inversions: ", inversions
        j += 1
def selectChildren(children):

    scores = []
    # calculate "fitness" scores
    for i in range(len(children)):
        s = bart(children[i])
        scores.append(s)

    # check which 3 genomes have the best scores
    dictionary = heapq.nsmallest(beam, zip(scores, children))

    # put the best genomes in a list before returning
    best_children = []
    for j in range(len(dictionary)):
        best_children.append(dictionary[j][1])

    children = []
    scores = []
    return best_children
def runSimulation(start, solution):
    """
    Returns minumum number of time steps needed to get to solution
    """
    solutionNodes = []
    pare_node = Node(start)

    # TODO: make tuple for rootnode (score, generation, genome)?
    m = (0, pare_node)
    heappush(queue, m)

    while (queue != [] and (len(solutionNodes) <= 10000)):
        pare_node = heappop(queue)
        children = generateAllChildren(pare_node[1].cargo)

        c = selectChildren(children)
        for i in range(len(c)):
            # create nodes
            node = Node(c[i], pare_node[1])
            if (c[i] == solution):
                solutionNodes.append(node)
            else:
                score = bart(c[i])
                l = (score, node)
                if (len(queue) <= maxqueue):
                    heappush(queue, l)
                else:
                    heappushpop(queue, l)
    lowest = 50
    inversions = 0
    for j in range(len(solutionNodes)):
        node = solutionNodes[j]
        while((node.prev != None) and (inversions < lowest)):
            print "Step", node
            node = node.prev
            inversions += 1
        if (inversions < lowest):
            lowest = inversions
            print "Inversions: ", inversions
        j += 1