예제 #1
0
 def test_isEmptyY_p_notempty(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     sensor2 = Sensor(3, 1, 50, 0, 2)
     grid.add(sensor1)
     grid.add(sensor2)
     self.assertFalse(sensor1.isEmptyY(grid, 2, -1))
예제 #2
0
 def test_isEmptyY_p_empty(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     sensor2 = Sensor(3, 1, 50, 0, 3)
     grid.add(sensor1)
     grid.add(sensor2)
     self.assertTrue(sensor1.isEmptyY(grid, 2, -1))
예제 #3
0
def test2():
	width = 39
	height = 39
	steps = 700
	rc = 4
	rs = 1
	maxMoves = 100
	lowerK = 5
	upperK = 1
	capacity = 1
	grid = Grid(width, height, capacity)
	sensors = initSensors3(rc, rs, maxMoves, lowerK, upperK, width, height)
	for sensor in sensors:
		grid.add(sensor)
	totalCoveragesList=[]
	totalMovesList=[]
	stepList = []
	for i in range(steps):
		changed = grid.iterate(i)
		print "STEP:", i
		if i % 1 == 0:
			stepList.append(i / 2)
			totalCoveragesList.append(totalCoverage(grid))
			totalMovesList.append(totalMoves(grid))
		if not changed:
			break
	graphCoverage(stepList, totalCoveragesList)
	graphMoves(stepList, totalMovesList)
	print grid.toString()
예제 #4
0
 def test_isEmptyX_n_empty(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     sensor2 = Sensor(3, 1, 50, 3, 0)
     grid.add(sensor1)
     grid.add(sensor2)
     self.assertTrue(sensor2.isEmptyX(grid, 2, 1))
예제 #5
0
 def test_count_sameLocation(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     sensor2 = Sensor(3, 1, 50, 0, 0)
     grid.add(sensor1)
     grid.add(sensor2)
     self.assertEqual(sensor1.countSensors(grid, -3, -3, 6, 6), 2)
예제 #6
0
 def test_move_moveCount(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 0, 0, 0)
     sensor2 = Sensor(3, 1, 0, 0, 1)
     grid.add(sensor1)
     grid.add(sensor2)
     grid.iterate()
     self.assertEqual((sensor1.x, sensor1.y), (0, 0))
예제 #7
0
 def test_move_xp(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     sensor2 = Sensor(3, 1, 50, 1, 0)
     grid.add(sensor1)
     grid.add(sensor2)
     grid.iterate()
     self.assertEqual((sensor2.x, sensor2.y), (2, 0))
 def test_neighbours_one(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, 0, 0)
     sensor2 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, 1, 0)
     grid.add(sensor1)
     grid.add(sensor2)
     grid.iterate()
     self.assertEqual(len(sensor1.neighbours), 1)
예제 #9
0
 def test_block_yp(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     sensor2 = Sensor(3, 1, 50, 0, 3)
     grid.add(sensor1)
     grid.add(sensor2)
     grid.iterate()
     self.assertEqual((sensor2.x, sensor2.y), (0, 3))
예제 #10
0
 def test_moveBack_yp(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     sensor2 = Sensor(3, 1, 50, 0, 2)
     grid.add(sensor1)
     grid.add(sensor2)
     grid.iterate()
     self.assertEqual((sensor1.x, sensor1.y), (0, -1))
     self.assertEqual((sensor2.x, sensor2.y), (0, 3))
     grid.iterate()
     self.assertEqual((sensor1.x, sensor1.y), (0, 0))
 def test_neighbours_eight_border(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, 0, 0)
     for i in range(8):
         angle = i / 4.0 * math.pi
         x = 2.999 * math.cos(angle)
         y = 2.999 * math.sin(angle)
         print(x, y)
         sensor = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, x, y)
         grid.add(sensor)
     grid.add(sensor1)
     grid.iterate()
     self.assertEqual(len(sensor1.neighbours), 8)
 def test_f_direction_many(self):
     for i in range(8):
         grid = Grid()
         sensor1 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, 0, 0)
         angle = i / 4.0 * math.pi
         x = 1 * math.cos(angle)
         y = 1 * math.sin(angle)
         grid.add(sensor1)
         sensor2 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, x, y)
         grid.add(sensor1)
         grid.add(sensor2)
         grid.iterate()
         self.assertEqual(len(sensor1.neighbours), 1)
         self.assertEqual((sensor1.v[0], sensor1.v[1]), (-x, -y))
    def test_f_cover_many(self):
        kdegree = 1
        for i in range(8):
            grid = Grid()
            sensor1 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, 0, 0)
            angle = i / 4.0 * math.pi
            x = 1 * math.cos(angle)
            y = 1 * math.sin(angle)
            grid.add(sensor1)
            sensor2 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, x, y)
            grid.add(sensor1)
            grid.add(sensor2)
            grid.iterate()
            self.assertEqual(sensor1.critical, True)
            self.assertEqual(len(sensor1.neighbours), 1)
            self.assertEqual(sensor1.fdegree, sensor1.kdegree)

        kdegree = 0
        for i in range(8):
            grid = Grid()
            sensor1 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, 0, 0)
            angle = i / 4.0 * math.pi
            x = 1 * math.cos(angle)
            y = 1 * math.sin(angle)
            grid.add(sensor1)
            sensor2 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, x, y)
            grid.add(sensor1)
            grid.add(sensor2)
            grid.iterate()
            self.assertEqual(sensor1.critical, False)
            self.assertEqual(len(sensor1.neighbours), 1)
            self.assertEqual(sensor1.fdegree, 0)
예제 #14
0
 def test_moveBack_xn(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     sensor2 = Sensor(3, 1, 50, 2, 0)
     grid.add(sensor1)
     grid.add(sensor2)
     grid.iterate()
     self.assertEqual((sensor1.x, sensor1.y), (-1, 0))
     self.assertEqual((sensor2.x, sensor2.y), (3, 0))
     sensor1.moveBack(grid)
     self.assertEqual(sensor1.xlast, -1)
     self.assertTrue(sensor1.isEmptyX(grid, 3, -1))
     self.assertTrue(sensor1.xmoveback)
     grid.iterate()
     self.assertEqual((sensor2.x, sensor2.y), (2, 0))
예제 #15
0
def test1():
	width = 14
	height = 14
	steps = 300
	rc = 4
	lowerK = 5
	upperK = 1
	grid = Grid(width, height, 1)
	sensors = initSensors2(rc, lowerK, upperK)
	for sensor in sensors:
		grid.add(sensor)
	for i in range(steps):
		changed = grid.iterate(i)
		print "STEP:",i
		if not changed:
			break
	print grid.toString()
예제 #16
0
def test0():
	steps = 2
	rc = 4
	lowerK = 5
	upperK = 1
	capacity = 0
	grid = Grid(capacity=capacity)
	sensors = initSensors0(rc, lowerK, upperK)
	guy = sensors[0]
	for sensor in sensors:
		grid.add(sensor)
	for i in range(steps):
		changed = grid.iterate(i)
		print "STEP:",i
		print guy.Q1, guy.Q2, guy.Q3, guy.Q4
		print guy.minQ, guy.maxQ
		print guy.moveLocation
		print "L: ",guy.x, guy.y
		print grid.toString()
		if not changed:
			break
def test2():
    steps = 250
    rc = 4
    rs = 2
    maxMoves = 200
    grid = Grid()
    sensors = initSensors3(rc, rs, maxMoves)
    for sensor in sensors:
        grid.add(sensor)
    totalCoveragesList = []
    totalMovesList = []
    stepList = []
    for i in range(steps):
        changed = grid.iterate()
        print "STEP:", i
        stepList.append(i)
        totalCoveragesList.append(totalCoverage(grid))
        totalMovesList.append(totalMoves(grid))
        if not changed:
            break
    graphCoverage(stepList, totalCoveragesList)
    graphMoves(stepList, totalMovesList)
    print grid.toString()
예제 #18
0
 def test_count_boundaries(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     sensor2 = Sensor(3, 1, 50, 3, 3)
     sensor3 = Sensor(3, 1, 50, -3, -3)
     sensor4 = Sensor(3, 1, 50, -3, 3)
     sensor5 = Sensor(3, 1, 50, 3, -3)
     grid.add(sensor1)
     grid.add(sensor2)
     grid.add(sensor3)
     grid.add(sensor4)
     grid.add(sensor5)
     self.assertEqual(sensor1.countSensors(grid, -3, -3, 6, 6), 5)
예제 #19
0
def evaluate(agent, N, logger, reward_func_str):
    env = Grid(4)
    env.set_reward(reward_func_str)
    max_tile_distribution = {}
    overall_sum_moves = 0
    overall_sum_q = 0

    state_first = [[0, 0, 0, 0], [0, 0, 0, 0], [2, 0, 2, 0], [0, 0, 0, 0]]
    state_1 = [[2, 0, 4, 2], [0, 0, 0, 16], [0, 0, 8, 32], [0, 4, 32, 16]]
    state_2 = [[2, 2, 4, 2], [8, 16, 0, 0], [64, 32, 0, 4], [64, 0, 0, 0]]
    state_3 = [[2, 32, 128, 2], [8, 128, 64, 16], [8, 32, 16, 8], [2, 8, 4, 2]]
    state_4 = [[2, 32, 128, 2], [8, 128, 64, 16], [8, 32, 16, 8], [2, 8, 4, 2]]
    state_5 = [[4, 2, 16, 256], [4, 8, 64, 32], [0, 0, 128, 4], [0, 0, 256, 8]]
    state_6 = [[4, 4, 16, 256], [2, 2, 512, 32], [0, 8, 128, 4], [0, 0, 16, 8]]
    state_last = [[32, 0, 0, 0], [8, 2, 0, 0], [64, 16, 0, 16],
                  [1024, 1024, 4, 4]]
    state_after = [[8, 32, 512, 32], [8, 16, 1024, 16], [64, 0, 8, 512],
                   [0, 0, 0, 2048]]
    state_right = [[0, 0, 2, 32], [0, 0, 32, 16], [2, 0, 8, 64], [0, 0, 0, 0]]
    state_up = [[32, 16, 64, 0], [2, 32, 16, 0], [0, 0, 0, 0], [0, 0, 2, 0]]
    state_left = [[0, 0, 0, 0], [64, 16, 0, 2], [16, 32, 0, 0], [32, 2, 0, 0]]
    state_down = [[0, 2, 0, 0], [0, 0, 0, 0], [0, 16, 32, 2], [0, 64, 16, 32]]
    states = [
        state_first, state_1, state_2, state_3, state_4, state_5, state_6,
        state_last, state_after, state_right, state_up, state_left, state_down
    ]
    states_names = [
        "state_first", "state_1", "state_2", "state_3", "state_4", "state_5",
        "state_6", "state_last", "state_after", "state_right", "state_up",
        "state_left", "state_down"
    ]
    states = list(
        map(lambda x: np.ma.log2(np.array(x).flatten()).filled(0) / 10,
            states))

    results = {}
    for i in range(len(states)):
        state = states[i]
        state_name = states_names[i]
        q = agent.gamma * agent.model.predict(
            np.reshape(state, [1, env.state_size]))[0]
        results[state_name] = list(q)
    logger.info(str(results))

    for i in range(N):
        env.reset()
        moves = 0
        sum_q = 0

        while not env.is_game_over():
            state = np.reshape(env.get_curr_state(), [1, env.state_size])
            action = agent.act_policy(state, env.get_available_moves())
            reward = env.reward_func(action)
            env.play(action)
            env.add()
            moves += 1

            if env.is_game_over():
                reward = env.reward_func(action)

            q = reward + agent.gamma * np.amax(
                agent.model.predict(
                    np.reshape(env.get_curr_state(), [1, env.state_size]))[0])
            sum_q += q

        if env.get_max_tile() not in max_tile_distribution:
            max_tile_distribution[env.get_max_tile()] = 1
        else:
            max_tile_distribution[env.get_max_tile()] += 1

        overall_sum_moves += moves
        overall_sum_q += sum_q

        logger.info(
            "{{'Playing at episode': {}, 'game num': {}, 'moves': {}, 'maxtile': {}, 'mean q value': {}}}"
            .format(e, i + 1, moves, env.get_max_tile(), sum_q / moves))
    logger.info(
        "{{'Performance at episode': {}, 'max tile distribution': '{}', 'avg no of moves': {}, 'mean q value': {}}}"
        .format(e, sorted(max_tile_distribution.items(), key=lambda x: x[0]),
                overall_sum_moves / N, overall_sum_q / overall_sum_moves))
예제 #20
0
 def test_count_basic(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     grid.add(sensor1)
     self.assertEqual(sensor1.countSensors(grid, -3, -3, 6, 6), 1)
예제 #21
0
if __name__ == '__main__':
    assert N_AGENTS < N_GRID**2

    # Creating grid
    grid = Grid(N_GRID, verbose=VERBOSE)
    mailbox = MailBox()

    # Creating agents
    agents = []

    agents.append(Agent(0, (0, 0), (2, 2), grid, mailbox))
    agents.append(Agent(1, (1, 0), (1, 0), grid, mailbox))
    agents.append(Agent(2, (0, 1), (0, 1), grid, mailbox))
    for agent in agents:
        assert grid.add(agent)

    print(grid)

    # Starting agents
    for a in agents:
        a.start()

    # Looping until agents are done or MAX_ITER is reached
    nb_completed_goal = 0
    i = 0
    while nb_completed_goal < N_AGENTS and i <= MAX_ITER:

        sleep(REFRESH_TIME)

        nb_completed_goal = 0
예제 #22
0
class GameGrid(Frame):
    def __init__(self):
        Frame.__init__(self)

        self.grid()
        self.master.title('2048')
        self.master.bind("<Key>", self.key_down)

        #self.gamelogic = gamelogic
        self.commands = {
            KEY_UP: 'UP',
            KEY_DOWN: 'DOWN',
            KEY_LEFT: 'LEFT',
            KEY_RIGHT: 'RIGHT',
            KEY_UP_ALT: 'UP',
            KEY_DOWN_ALT: 'DOWN',
            KEY_LEFT_ALT: 'LEFT',
            KEY_RIGHT_ALT: 'RIGHT'
        }

        self.grid_cells = []
        self.init_grid()

        self.matrix = Grid(GRID_LEN)
        self.init_matrix()
        self.update_grid_cells()

        self.mainloop()

    def init_grid(self):
        background = Frame(self,
                           bg=BACKGROUND_COLOR_GAME,
                           width=SIZE,
                           height=SIZE)
        background.grid()
        for i in range(GRID_LEN):
            grid_row = []
            for j in range(GRID_LEN):
                cell = Frame(background,
                             bg=BACKGROUND_COLOR_CELL_EMPTY,
                             width=SIZE / GRID_LEN,
                             height=SIZE / GRID_LEN)
                cell.grid(row=i,
                          column=j,
                          padx=GRID_PADDING,
                          pady=GRID_PADDING)
                # font = Font(size=FONT_SIZE, family=FONT_FAMILY, weight=FONT_WEIGHT)
                t = Label(master=cell,
                          text="",
                          bg=BACKGROUND_COLOR_CELL_EMPTY,
                          justify=CENTER,
                          font=FONT,
                          width=4,
                          height=2)
                t.grid()
                grid_row.append(t)

            self.grid_cells.append(grid_row)

    def init_matrix(self):
        self.matrix.add()
        self.matrix.add()

    def update_grid_cells(self):
        for i in range(GRID_LEN):
            for j in range(GRID_LEN):
                new_number = self.matrix.get_ele(i, j)
                if new_number == 0:
                    self.grid_cells[i][j].configure(
                        text="", bg=BACKGROUND_COLOR_CELL_EMPTY)
                else:
                    self.grid_cells[i][j].configure(
                        text=str(int(new_number)),
                        bg=BACKGROUND_COLOR_DICT[new_number],
                        fg=CELL_COLOR_DICT[new_number])
        self.update_idletasks()

    def key_down(self, event):
        key = repr(event.char)
        if key in self.commands:
            played_move = self.commands[repr(event.char)]
            if played_move in self.matrix.get_available_moves():
                self.matrix.play(played_move)
                self.matrix.add()
                self.update_grid_cells()

                if self.matrix.is_win():
                    self.grid_cells[1][1].configure(
                        text="You", bg=BACKGROUND_COLOR_CELL_EMPTY)
                    self.grid_cells[1][2].configure(
                        text="Win!", bg=BACKGROUND_COLOR_CELL_EMPTY)
                elif self.matrix.is_game_over():
                    self.grid_cells[1][1].configure(
                        text="You", bg=BACKGROUND_COLOR_CELL_EMPTY)
                    self.grid_cells[1][2].configure(
                        text="Lose!", bg=BACKGROUND_COLOR_CELL_EMPTY)
예제 #23
0
    grid = Grid(N_GRID, verbose=VERBOSE)
    mailbox = MailBox()

    # Creating agents
    agents = []
    goals = []
    domain = (0, N_GRID - 1)
    for i in range(N_AGENTS):
        pos = rand_pos(domain)
        goal = rand_pos(domain)
        while pos == goal or not grid.is_empty(pos) or goal in goals:
            pos = rand_pos(domain)
            goal = rand_pos(domain)

        agent = Agent(i, pos, goal, grid, mailbox)
        if grid.add(agent):
            agents.append(agent)
            goals.append(goal)
            if VERBOSE:
                print('Agent', i, 'crée à la position', pos, 'avec objectif',
                      goal)

    print(grid)

    # Starting agents
    for a in agents:
        a.start()

    # Looping until agents are done or MAX_ITER is reached
    nb_completed_goal = 0
    i = 0
 def test_fcover_none(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, kcover, kdegree, damp, cdistance, 50, 0, 0)
     grid.add(sensor1)
     grid.iterate()
     self.assertEqual((sensor1.x, sensor1.y), (0, 0))
예제 #25
0
        if steps > best_steps or maxtiles > best_maxtile:
            best_action, best_steps, best_maxtile = action, steps, maxtiles

    print('choose {}'.format(best_action))
    return best_action


if __name__ == '__main__':
    env = Grid(4)
    env.winning_number = 4
    tempenv = Grid(4)
    tempenv.winning_number = 4

    NO_OF_TRIALS = 1000
    NO_OF_ROLLOUT = 20
    DEPTH = 100
    best_move_dict = {}

    for trial in range(NO_OF_TRIALS):
        env.reset()

        while not env.is_game_over():
            t1 = time.time()
            move = get_best_move(tempenv, env.mat, NO_OF_ROLLOUT, DEPTH)
            print(time.time() - t1)
            env.show()
            env.play(move)
            env.add()

        print(env.get_max_tile())
예제 #26
0
class PhysicsSystem(object):
    def __init__(self):
        self.objects = []
        self.grid = Grid()
        # profiling
        self.time_coll = 0
        self.time_dyn = 0
        self.cnt = 0

    def add_object(self, obj):
        self.objects.append(obj)

    def update(self, dt):
        t0 = time.time()
        # reset ephemeral state
        for obj in self.objects:
            obj.acc = Vector2d(0, 0)
        # collisions
        self.process_collisions()
        t1 = time.time()
        # integrate dynamics
        self.grid.clear()
        for obj in self.objects:
            obj.vel = obj.vel + obj.acc * dt
            if (obj.vel.length() > 5):
                obj.vel = obj.vel * 0.9
            obj.pos = obj.pos + obj.vel * dt
            if (obj.pos.x > 100): obj.pos.x = -100
            if (obj.pos.y > 100): obj.pos.y = -100
            if (obj.pos.x < -100): obj.pos.x = 100
            if (obj.pos.y < -100): obj.pos.y = 100
            self.grid.add(obj.pos, obj)
        t2 = time.time()
        self.time_coll += t1 - t0
        self.time_dyn += t2 - t1
        self.cnt += 1
        if (self.cnt % 100 == 0):
            print("collisions:{} ms dynamics: {} ms".format(
                self.time_coll / 100 * 1000,
                self.time_dyn / 100 * 1000))  # time in ms
            self.time_coll = 0.0
            self.time_dyn = 0.0

    def process_collisions(self):
        for obj1 in self.objects:
            # check collisions with every other object
            # candidates = self.objects
            # check collisions with objects within the given radius
            candidates = self.grid.objects_in_radius(obj1.pos, 5)
            for obj2 in candidates:
                # skip if two objs are the same
                if obj1 is obj2:
                    continue
                d = (obj1.pos - obj2.pos).length()
                if (d < 1E-6): d = 1E-6
                comp = obj1.radius + obj2.radius - d
                if comp > 0:
                    # objects are colliding
                    direction = (obj1.pos - obj2.pos) / d
                    stiffness = 500
                    obj1.acc = direction * comp * stiffness / obj1.mass
                    obj2.acc = direction * comp * stiffness / obj2.mass * -1
예제 #27
0
if __name__ == "__main__":
    pygame.init()

    screen = pygame.display.set_mode((800, 600))


    grid = Grid('grass', 10, 6)
    ui = UI(grid)

    guys = []
    enemies = []
    for x in xrange(2):
        for y in xrange(4):
            guy = Guy('dude')
            grid.add(guy, (x*2 + 1 + y % 2, y))
            guys.append(guy)

            enemy = Guy('dude')
            enemy.image = pygame.transform.flip(enemy.image, True, False)
            grid.add(enemy, (x*2 + 6 + y % 2, y))
            enemies.append(enemy)

    curguy = 0
    while 1:
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()
            elif event.type == KEYDOWN:
                prevguy = curguy
                curguy = handle_key(grid, ui, screen, event.key, guys, curguy)
예제 #28
0
 def test_move_none(self):
     grid = Grid()
     sensor1 = Sensor(3, 1, 50, 0, 0)
     grid.add(sensor1)
     grid.iterate()
     self.assertEqual((sensor1.x, sensor1.y), (0, 0))