Beispiel #1
0
class Trainer():
    def __init__(self, withGrapics=True):
        self.bestbest = 0
        self.done = False
        self.pool = Pool(Config.WIDTH, Config.HEIGHT, self.callback)
        self.graphics = Graphics()
        if withGrapics:
            self.graphics.init("PoolGame", Config.SIZE)

    def callback(self, gen, avg_score, best_score, best_json):
        line = "Generation\t%d\tAverage Score\t%f\tBest Score\t%f" % (
            gen, avg_score, best_score)
        self.write_log(Config.JSON_FOLDER + "/" + "logfile.txt", line)
        filename = "brain-g%03d-%04d.json" % (gen, best_score * 1000)

        if best_score >= self.bestbest:
            if best_json != None:
                self.write_file(Config.JSON_FOLDER + "/" + filename, best_json)
            self.bestbest = best_score

        if gen == Config.GENERATIONS:
            self.done = True

    def write_log(self, filename, line):
        print(line)
        with open(filename, "a") as outfile:
            outfile.write(line + "\n")

    def write_file(self, filename, data):
        with open(filename, "w") as outfile:
            outfile.write(data + "\n")

    def run(self):
        # Loop until the user clicks the close button.
        while not self.done:

            self.done = self.graphics.queryQuit()

            # Set the screen background
            self.graphics.fill(Config.GREEN)
            self.graphics.print("Clock: {}".format(self.graphics.fps()))

            # Do physics
            self.pool.tick()

            # Draw everything
            self.pool.draw(self.graphics)

            # Update screen
            self.graphics.flip()

        # Exit
        self.graphics.quit()
Beispiel #2
0
class Doku():
    def __init__(self):
        self.solver = Solver(Config.SIZE, self.callback)
        self.done = False
        self.graphics = Graphics()
        self.graphics.init("Doku Solver", Config.WINDOWSIZE)

        if Config.SIZE == 4:
            self.solver.setGrid([
                "3002",
                "0410",
                "0320",
                "4001",
            ])

        if Config.SIZE == 9:
            self.solver.setGrid([
                "000000000",
                "000000000",
                "000000000",
                "384000000",
                "000000000",
                "000000000",
                "000000000",
                "000000000",
                "000000002",
            ])

            #self.solver.setGrid([
            #	"100904082",
            #	"052680300",
            #	"864200910",
            #	"010049806",
            #	"498300701",
            #	"607010093",
            #	"086035209",
            #	"509002130",
            #	"030497008"
            #]);

        if Config.SIZE == 16:

            self.solver.setGrid([
                " D0F  63C 7 1E  ", "  74    B 3 D   ", "E 4  97 0    3AF",
                " 2     E  516B9 ", "B A   E  8   F  ", "  F CA 6        ",
                "      4     5 E ", " 6C7  8  5B   2 ", " F B9   4 C  D 2",
                " 41D 6  5     C9", "2   7 1 D   B  8", "      A83   E   ",
                "C    B9 6  20   ", "  2  E30   C 546", " A 8 C   4     1",
                " 7   5       8D "
            ])

        if Config.SIZE == 25:
            for i in range(Config.SIZE):
                self.solver.setNumber(i, i, i + 1, True)
                self.solver.setNumber(0, i, Config.SIZE - (i + 1) + 1, True)

    def callback(self):
        # self.done = True
        pass

    def run(self):
        # Loop until the user clicks the close button.
        while not self.done:

            self.done = self.graphics.queryQuit()

            # Set the screen background
            self.graphics.fill(Config.WHITE)
            # self.graphics.print("Clock: {}".format(self.graphics.fps()))

            if Config.SPEED == Config.FAST:
                # Draw everything
                self.solver.draw(self.graphics)
                # Update screen
                self.graphics.flip()

            # Do physics
            self.solver.tick()

            # Draw everything
            self.solver.draw(self.graphics)

            # Update screen
            self.graphics.flip()

        # Exit
        self.graphics.quit()