def testShouldGoBackDown(self):
     elevator = Elevator()
     elevator.currentFloor = 4
     elevator.doorsOpen = True
     elevator.closeDoors()
     self.assertEqual(elevator.nextFloor, 0)
     self.assertEqual(elevator.direction, -1)
Beispiel #2
0
    def __init__(self, elevators=8, verbose=False):

        self._elevators = []
        self._verbose = verbose

        for i in range(1, elevators + 1):
            self._elevators.append(Elevator(i, verbose=self._verbose))
Beispiel #3
0
    def __init__(self, id, num_floors):
        self.id = id
        self.order_timeout_secs = 60

        self.ips = {self.id: self.own_ip()}
        self.elevators = {id: Elevator()}
        self.hub_down = dict()  # KEY: floor, id  VALUE: boolean
        self.hub_up = dict()
        self.cab = dict()  # KEY: floor, id  VALUE: boolean

        self.cab[0] = False
        self.hub_up[0] = False

        self.cab[num_floors - 1] = False
        self.hub_down[num_floors - 1] = False

        for floor in range(1, num_floors - 1):
            self.cab[floor] = False
            self.hub_up[floor] = False
            self.hub_down[floor] = False

        self._sockets_init()

        launch_thr(self.receive_hub_order)
        launch_thr(self.receive_state)
        time.sleep(0.5)
        launch_thr(self.send_state)
Beispiel #4
0
    def __init__(self, numberOfPeople, numOfFloors, numOfElevators):

        self.numberOfPeople = numberOfPeople
        self.numberOfFloors = numOfFloors
        self.floors = {}
        self.elevators = []
        i = 0

        peopleInFloor = int(numberOfPeople / numOfFloors)
        """need to fix"""
        # peopleInFloor = int(numberOfPeople / numOfFloors)
        # if peopleInFloor < 1:
        #     while floorNum < numOfFloors + 1:
        #         randPerson = random.randint(0, 1)
        #         if i < numberOfPeople:
        #             if randPerson == 1:
        #                 self.floors[floorNum] = Floor(floorNum, randPerson, numOfFloors)
        #                 floorNum = floorNum + 1
        #                 i = i + 1
        #             else:
        #                 self.floors[floorNum] = Floor(floorNum, randPerson, numOfFloors)
        #                 floorNum = floorNum + 1

        for floorNum in range(1, numOfFloors + 1):
            self.floors[floorNum] = Floor(floorNum, peopleInFloor, numOfFloors)

        for i in range(0, numOfElevators):
            self.elevators.append(Elevator(i, numOfFloors))
	def __init__(self,MaxCustomer,Speed,BoardTime):
		''' 初始化 
			@type MaxCustomer: int
			@param MaxCustomer: 每部电梯最大顾客数
		
			@type Speed: int
			@param Speed: 电梯运行速度 Speed秒/层
			
			@type BoardTime: int
			@param BoardTime: 顾客上下电梯耗时
		'''
		self.AllElevator = []
		
		# 电梯基本信息
		AvaliableFloorTable = {
			'E0' : range(1,41),
			'E1' : range(1,41),
			'E2' : [1] + range(25,41),
			'E3' : [1] + range(25,41),
			'E4' : range(1,26),
			'E5' : range(1,26),
			'E6' : [1] + range(2,41,2),
			'E7' : [1] + range(2,41,2),
			'E8' : range(1,41,2),
			'E9' : range(1,41,2)
			}
		ElevatorNum = len(AvaliableFloorTable)

		# 产生电梯
		for tag,floor in AvaliableFloorTable.items():
			newElevator = Elevator(tag,floor,MaxCustomer,random.choice(floor),Speed,BoardTime)
			self.AllElevator.append(newElevator)
			#print newElevator

		self.AllElevator.sort(cmp = lambda x,y: cmp(x.Tag, y.Tag))
Beispiel #6
0
 def __init__(self, name, FLOOR_COUNT, elevator_count):
     self.name = name
     self.FLOOR_COUNT = FLOOR_COUNT
     self.elevator_count = elevator_count
     self.elevators = []
     self.calls_for_elevator = []
     for i in range(0, self.elevator_count):
         self.elevators.append(Elevator(self, i, 1))
 def testPickupInRightOrder(self):
     elevator = Elevator(speed=0.5)
     elevator.handleRequest(floor=8)
     elevator.handleRequest(floor=4)
     time.sleep(1)
     elevator.handleRequest(floor=1)
     self.assertEqual(elevator.direction, 1)
     self.assertEqual(elevator.nextFloor, 4)
Beispiel #8
0
    def __init__(self, communicator, dispatcher=False):
        self.communicator = communicator

        self.orderList = [[0 for x in range(NO_FLOORS)] for x in range(2)] # direction is one dimension, no. floors the other
        self.peerList = {} # store peer objects, with IP as key
        self.dispatcher = dispatcher
        self.id = self.getMyIP()
        self.status = ""
        self.elevator = Elevator() # this object should handle the interface with the driver and keep track of elevator state
Beispiel #9
0
def reset_elevator():
    global elevator
    p = elevator.p
    elevator = Elevator(scheduler=schedule_list[schedule_var.get()](),
                        floors=floors,
                        p=p,
                        capacity=2,
                        initial_count=0,
                        pressing_up=pressing_list[pressing_var.get()])
Beispiel #10
0
 def __init__(self, elevators_count):
     if elevators_count <= 0:
         raise Exception("elevators count must be greater than 0")
     self.elevators_count = elevators_count
     self.elevators = {}  # dictionary of elevators and their state
     #  populate elevators
     for i in range(self.elevators_count):
         self.elevators[i] = Elevator(i)
     #  keep instance of factory for building requests
     self._request_factory = GoToFloorRequestFactory()
Beispiel #11
0
 def _generateGiantSpike(self):
     self.giantSpike = giantSpike()
     self.giantSpikeList = pygame.sprite.Group()
     self.giantSpikeList.add(self.giantSpike)
     self.giantSpikePlat = Elevator('elevator')
     self.giantSpikePlat.speed = 0
     self.giantSpikePlat.rect.x, self.giantSpikePlat.rect.y = self.giantSpike.rect.x + 10, self.giantSpike.rect.y - 5
     self.giantSpike.plat = self.giantSpikePlat
     self.elevatorList.add(self.giantSpikePlat)
     self.chainGroup = pygame.sprite.Group()
     self.chainGroup.add(self.giantSpike.chain)
Beispiel #12
0
    def __init__(self, N, K, p, q, r, t_u):
        self.N = N  # number of floors
        self.K = K  # number of elevators
        self.p = p  # probability person arrives at a given time step
        self.q = q  # probability person arrives at first floor
        self.r = r  # probability person wants to get down at first floor
        self.t_u = t_u  # one time unit

        self.elev = Elevator(N, K)
        self.total_cost = 0
        self.total_people_served = 0
        self.people_in_sys = []
    def __init__(self, number_of_elevator, number_of_floor):
        self.elevators = [
            Elevator(i, number_of_floor) for i in range(number_of_elevator)
        ]
        self.floors = number_of_floor

        # people start from certain floor that have a elevator come for them
        self.people_from_floors = [[Queue(), Queue()]
                                   for i in range(number_of_floor + 1)]

        # people cannot get elevators come to them
        self.waitlist = Queue()
Beispiel #14
0
 def __init__(self, num_floors, num_elevators):
     self.floors = num_floors
     self.num_elevators = num_elevators
     self.elevators = []
     self.pending_targets = {}
     self.new_floor_calls = []
     self.new_elevator_calls = []
     for i in range(num_elevators):
         self.elevators.append(Elevator(i, self.floors))
         self.pending_targets[i] = []
     self.control_loop = threading.Thread(target=self.state_loop,
                                          args=(True, ))
     self.control_loop.start()
     self.input_loop()
Beispiel #15
0
    def __init__(self, communicator, dispatcher=False):
        self.communicator = communicator
        self.orderList = [[0 for x in range(NO_FLOORS)] for x in range(2)] # direction is one dimension, no. floors the other
        self.peerList = {} # store peer objects, with IP as key
        self.dispatcher = dispatcher

        self.id = self.getMyIP()
        self.status = ""
        
        self.peers = []
        
        # ugly hack to give the messageHandler the controller instance. 
        self.communicator.messageHandler.setController(self)
        # this object should handle the interface with the driver and keep track of elevator state
        self.elevator = Elevator(self) 
def main():

	# #Genereate test cases, uncomment the next line to generate input files with random requests
	# generate_pseudo_input(building_floors, customer_total_number, end_time, input_file_path)

	# Read the input file and get all the customer data
	all_data = get_pseudo_input(input_file_path)
	
	# Initialize the elevator
	my_elevator = Elevator(starting_floor, max_capacity,max_speed,actions_log_file_path)

	# Initialize the simulator
	my_simulator = Simulator(building_floors,my_elevator)

	# Operate the simulator
	my_simulator.operate(all_data, requests_log_file_path)
    def __init__(self, total_elevator_num, height, max_people):
        self.target = 0

        self.total_elevator_num = total_elevator_num
        self.max_people_in_floor = max_people

        #each elevator has max capacity of 10
        self.elevators = []
        for idx in range(total_elevator_num):
            self.elevators.append(Elevator(idx, 10, height))

        self.height = height
        self.people_in_floors = []
        self.floor_button = []
        for idx in range(height):
            self.people_in_floors.append([])
            self.floor_button.append(Switch())
Beispiel #18
0
    def __init__(self):
        self.num_customers = self.get_user_int("How many customers? ",1,24)
        self.num_floors = self.get_user_int("How many floors? ", 1, 100)
        self.customers = self.gather_customers()

        print("Gathered ", self.num_customers, "customers for", self.num_floors,"floors.")
        self.elevator = Elevator(self.num_floors, DefaultStrategy)
        for c in self.customers:
            self.elevator.add_customer(c)


        print("Customers in elevator:")
        for c in self.elevator.customers:
            print(str(c))



        self.elevator.start()
Beispiel #19
0
def main():
    currentIndex = 0
    time_tick = 0
    cumulative_time = 0

    #reads from jsonfile
    with open('testcases/elevator_practice1.json') as json_data:
        jsonFile = json.load(json_data)

    #intializing floor and elevators
    numFloors = jsonFile["floors"]
    numElevators = jsonFile["elevators"]
    floorList = []
    elevatorList = []
    drawGui = DrawElevator(numFloors, numElevators)
    drawGui.initialDraw()

    for i in range(numFloors):
        floorList.append(Floor(i))
    for i in range(numElevators):
        elevatorList.append(Elevator(5, numFloors))

    while time_tick < 1000:
        #stores the data locally from the json object
        if time_tick == jsonFile["events"][currentIndex]["time"]:
            startFloor = jsonFile["events"][currentIndex]["start"]
            endFloor = jsonFile["events"][currentIndex]["end"]

            #populates the floor class
            new_person = Person(time_tick, startFloor, endFloor)
            floorList[startFloor].appendPerson(new_person)
            currentIndex += 1

        #updates the elevator class
        for elevator in elevatorList:
            floorList = elevator.update(floorList)

        drawGui.update(elevatorList, floorList)

        time_tick += 1
        time.sleep(0.1)
 def __init__(self, elvNum):
     self.__elevatorList = [Elevator() for i in range(elvNum)]
 def addElevator(self):
     self.__elevatorList.append(Elevator())
        # 当 self.Status == 'InElevator'时才能调用
        # 确认到达请求楼层
        assert self.Status == 'InElevator'
        # 因为存在电梯时间先加1,人时间后加1的问题,所以这里人的楼层不可能等于电梯的楼层。
        self.NowFloor = elevator.NowFloor

        self.Status = 'Landing'
        # 此时的时间控制和Elevator相同
        self.TimeRemain = elevator.BoardTime
        self.Elevator = elevator
        #print '%s LandingNotify %s' % (self,elevator)

    def GetNowStatus(self):
        ''' 获得当前顾客状态 
			
			@rtype: tuple
			@return: 当前状态,(ID,Status,NowFloor,DestFloor,LaunchNum,InRequestTime)
		
		'''
        return (self.ID, self.Status, self.NowFloor, self.DestFloor,
                self.LaunchNum, self.InRequestTime)


if __name__ == '__main__':
    from Elevator import Elevator
    eve = Elevator('E0', range(1, 41), 10, InitFloor=1, Speed=2, BoardTime=2)
    cust = Customer(1, 5)
    cust.AddTimer(1)
    cust.AddTimer(2)
    cust.AddTimer(3)
Beispiel #23
0
def reset_elevator():
    global elevator
    p = elevator.p
    elevator = Elevator(scheduler=schedule_list[schedule_var.get()](),
                        floors=floors,
                        p=p,
                        capacity=2,
                        initial_count=0,
                        pressing_up=pressing_list[pressing_var.get()])


if __name__ == '__main__':

    elevator = Elevator(scheduler=MinMaxScheduler(),
                        floors=floors,
                        p=1 / 20,
                        capacity=2,
                        initial_count=0)
    master = Tk()
    master.resizable = False
    master.title("Elevator")
    master.bind("<Configure>", window_event)
    master.protocol("WM_DELETE_WINDOW", window_event2)

    canvas = Canvas(master, width=canvas_width, height=canvas_height)
    canvas.pack(expand=YES, fill=BOTH)

    schedule_var = StringVar(master)
    pressing_var = StringVar(master)

    button0 = Button(master, text="Reset", fg='black', command=reset_elevator)
Beispiel #24
0
elevators = []
riders = []
random.seed(RANDOM_SEED)

pygame.init()

size = width, height = 1000, 800

screen = pygame.display.set_mode(size)
display = pygame.display
image = pygame.image
event = pygame.event
# Creating Elevators
for ele in range(NUM_OF_ELEVATORS):
    new_ele = Elevator("E-" + str(ele), env)
    elevators.append(new_ele)

# Creating Riders
for rid in range(NUM_OF_RIDERS):
    rider = Rider(chr(65 + rid), env)
    riders.append(rider)

matrix = Building(elevators, riders, env, screen, display, image, event)

for rider in riders:
    env.process(rider.run())
for elevator in elevators:
    env.process(elevator.run())
env.process(matrix.run())
 def __init__(self, total_floors):
     self.elevator_obj = Elevator()
     self.max_floor_number = total_floors
Beispiel #26
0
    def __init__(self,
                 manager=ElevatorManager.NaiveManager,
                 debug_mode=False,
                 verbose=True,
                 sim_len=120,
                 sim_pace=None,
                 time_resolution=0.5,
                 logfile=None,
                 seed=1,
                 n_floors=3,
                 n_elevators=2,
                 capacity=4,
                 speed=1,
                 open_time=2,
                 arrival_pace=1 / 10,
                 p_between=0.1,
                 p_up=0.45,
                 size=1.5,
                 delay=3):

        # Note: default time unit is seconds.
        self.debug = debug_mode
        self.verbose = verbose

        ## Simulation world
        # conf
        self.sim_len = sim_len
        sim_pace = sim_pace  # visualization's fast-forward; None for no visualization
        self.time_resolution = np.inf if sim_pace is None else time_resolution
        self.logfile = logfile
        self.seed = seed
        # init
        self.sim_time = 0
        self.real_time = None
        self.logger = None
        # stats init
        self.useless_opens = 0
        self.blocked_entrances = 0
        self.moves_without_open = 0

        ## Elevators
        # conf
        self.n_floors = n_floors
        self.n_elevators = n_elevators
        el_capacity = capacity
        el_speed = speed  # floors per second. Note: acceleration is neglected
        el_open_time = open_time  # = time to open = time to close
        # init
        self.el_next_event_time = [np.inf for _ in range(self.n_elevators)]
        self.el = [
            Elevator(i, self.n_floors, el_capacity, el_speed, el_open_time)
            for i in range(self.n_elevators)
        ]
        self.sim_plot = SimPlotter(self.n_floors, self.n_elevators, sim_pace) \
            if sim_pace is not None else None

        ## Passengers
        # conf
        self.arrivals_pace = arrival_pace  # arrivals per second
        self.p_go_between = p_between
        self.p_go_up = p_up
        self.p_go_down = 1 - (self.p_go_between + self.p_go_up)
        self.arrival_size = size  # mean number of passengers per arrival
        self.delay = delay  # mean delay on passengers entrance
        # init
        self.scenario = []
        self.future_arrivals = []
        self.waiting_passengers = []
        self.moving_passengers = [[] for _ in range(self.n_elevators)]
        self.completed_passengers = []

        ## Manager
        self.manager_info = manager.version_info()
        self.manager = manager(self.n_floors, self.el, el_capacity, el_speed,
                               el_open_time, self.arrivals_pace, self.p_go_up,
                               self.p_go_down, self.p_go_between,
                               self.arrival_size, self.delay)
Beispiel #27
0
def p0_simulator():
    user = '******'
    problem = 2
    count = 4
    isend = False

    ret = start(user, problem, count)
    token = ret['token']
    print('Token for %s is %s' % (user, token))

    elevators = [0, 0, 0, 0]
    for i in range(4):
        elevators[i] = Elevator(i, 1, [], "STOPPED")
        elevators[i].updateStatus(ret['elevators'][i])

    while not isend:
        ev_stat = ['', '', '', '']
        ret = oncalls(token)
        calls = []
        command = [-1, -1, -1, -1]

        # 콜 업데이트
        for cl in ret['calls']:
            calls.append(
                Call(cl['id'], cl['timestamp'], cl['start'], cl['end']))

        # 1순위 : 내리기
        for i, ev in enumerate(elevators):
            byebye = ev.exitablePassengers()  # 이 층에서 내릴 승객들의 id
            if byebye:
                if ev.status == "UPWARD" or ev.status == "DOWNWARD":  # 안 멈췄으면 멈추고
                    command[i] = ev.stop()
                    ev_stat[ev.id] = 'stop to exit'

                elif ev.status == "STOPPED":  # 멈췄으면 문 열고
                    command[i] = ev.open()
                    ev_stat[ev.id] = 'open to exit'

                elif ev.status == "OPENED":  # 열었으면 내려주기
                    command[i] = ev.exit(byebye)
                    ev_stat[ev.id] = 'bye, ' + ', '.join(map(str,
                                                             byebye)) + '!'

        # 2순위 : 태우기
        for i, ev in enumerate(elevators):
            quota = ev.quota
            comein = []

            for call in calls:
                if quota == maxquota: break
                if call.start == ev.floor:
                    comein.append(call.id)
                    calls.remove(call)
                    quota += 1

            if comein:
                if command[i] == -1:
                    if ev.status == "UPWARD" or ev.status == "DOWNWARD":  # 올라가거나 내려가다가 태울 애가 생기면 멈추기
                        command[i] = ev.stop()
                        ev_stat[ev.id] = 'stop to enter'

                    elif ev.status == "STOPPED":  # 멈춘 상태면 태우기 위해 열기
                        command[i] = ev.open()
                        ev_stat[ev.id] = 'open to enter'

                    elif ev.status == "OPENED":  # 열렸으면 태우기
                        command[i] = ev.enter(comein)
                        ev_stat[ev.id] = 'come in, ' + ', '.join(
                            map(str, comein)) + '!'

        # 3순위 : 문 닫거나 올라가거나 내려가기
        for i, ev in enumerate(elevators):
            if command[i] == -1:  # 아직 명령을 수행하지 않은 엘리베이터만
                if ev.status == "OPENED":
                    command[i] = ev.close()
                    ev_stat[ev.id] = 'close to move'

                else:
                    if ev.direction == "upward" and ev.floor != height:  # 그냥 올라가면 됨
                        command[i] = ev.up()
                        ev_stat[ev.id] = 'go up'

                    elif ev.direction == "downward" and ev.floor != 1:  # 그냥 내려가면 됨
                        command[i] = ev.down()
                        ev_stat[ev.id] = 'go down'

                    elif ev.direction == "upward" and ev.floor == height:  # 올라가다가 꼭대기 도착한 경우
                        ev.direction = "stop_maxheight"
                        command[i] = ev.stop()
                        ev_stat[ev.id] = 'top of building'

                    elif ev.direction == "stop_maxheight" and ev.floor == height:  # 꼭대기에서 멈춰 있는 경우
                        ev.direction = "downward"
                        command[i] = ev.down()
                        ev_stat[ev.id] = 'go down'

                    elif ev.direction == "downward" and ev.floor == 1:  # 내려가다가 1층 도착한 경우
                        ev.direction = "stop_minheight"
                        command[i] = ev.stop()
                        ev_stat[ev.id] = '1th floor'

                    elif ev.direction == "stop_minheight" and ev.floor == 1:  # 1층에서 멈춰 있는 경우
                        ev.direction = "upward"
                        command[i] = ev.up()
                        ev_stat[ev.id] = 'go up'

        # ===== 진행상황 표시용 =====
        for i in range(4):
            print(i, ev_stat[i])

        print()
        for i in range(height, 0, -1):
            tmp = []
            for call in calls:
                if call.start == i:
                    tmp.append(call.id)

            print('floor', i, ':', end=' ')
            for t in tmp:
                print(t, end=' ')

            for ev in elevators:
                if ev.floor == i:
                    print('  [' + str(ev.id) + ')', end=' ')
                    for person in ev.passengers:
                        print(person.id, end=', ')
                    print(']', end=' ')

            print()
        print()
        # ====================

        print(command)
        print('\n', '======================================', '\n')
        # 4순위 : action 실행, 엘리베이터 상태 업데이트
        ret = action(token, command)

        for i in range(4):
            elevators[i].updateStatus(ret['elevators'][i])

        # 5순위 : isend 체크
        isend = ret['is_end']
Beispiel #28
0
    def __init__(self, allpassengers):
        if allpassengers is None:
            raise Exception("Passengers cannot be None")

        self.elevator = Elevator(self)
        self.allPassengers = allpassengers
Beispiel #29
0
import time
from Elevator import Elevator

el = Elevator.Elevator(1)

el.start()

print(el.distance_request("U", 3))

el.push_button_floor(3)

el.push_button_floor(4)

el.push_button_floor(6)

el.assing_request("D", 10)

time.sleep(3)

el.assing_request("D", 2)
Beispiel #30
0
from Person import Person
from Elevator import Elevator

e = Elevator(6)
p = Person(1, 4)
p1 = Person(3, 5)

e.add_people_to_floor(4, 1)
e.floor_change_up()
e.floor_change_up()
e.remove_people_from_ele(2)
e.floor_change_down()
e.floor_change_down()
print(e.get_ele_list())
print(e.get_total_time())