📄 airbusa380.nlogo
字号:
breed [ passengers ]breed [ stewards ]breed [ seats ]breed [ lockers ]turtles-own [busy?] passengers-own [seat_x seat_y luggage state nearest_locker next_event pre_x b? ] ; state - passengers: 0 - before boarding, 1 - finding seat, 2 - loading luggage, 3 - sitting down, 4 - in seat lockers-own [load capacity]Globals [ Passengers_Blocked_Seat ;seat interference Passengers_Blocked_Aisle ;aisle interferenceNumber_of_Seats Number_of_Passengers Passengers_Blocked Time figure conerx3 conery3 l3 w3 conerx4 conery4 l4 w4 colour conerx1 conery1 l1 w1 conerx2 conery2 l2 w2]to setup ca clear-output ; set patch colour ask patches [set pcolor sky + 3] ;setup cabin crew ask patches at-points [[-23 3] [-23 -2]] [sprout 1 [ set breed stewards set shape "p" set color blue ]] ;setup overhead lockers ask patches with [pxcor > min-pxcor and (pycor = max-pycor - 1 or pycor = min-pycor)] [sprout 1 [set breed lockers set shape "box" set color white set capacity 5]] set conerx1 24 set conerx2 24set conery1 5 set conery2 0set l1 23 set l2 23set w1 1 set w2 1set figure "box1"set Number_of_Seats 92set Number_of_Passengers (Seat_Occupancy * Number_of_Seats / 100)set colour 3setup_seatset conerx1 1 set conerx2 1set conery1 5 set conery2 0set l1 23 set l2 23set w1 1 set w2 1set conerx3 0 set conerx4 0set conery3 0 set conery4 0set l3 0 set l4 0set w3 0 set w4 0set figure "box2"set Number_of_Seats 92set Number_of_Passengers (Seat_Occupancy * Number_of_Seats / 100)set colour 4setup_seatset conerx1 24 set conerx2 24set conery1 4 set conery2 1set l1 23 set l2 23set w1 1 set w2 1set figure "box3"set Number_of_Seats 92set Number_of_Passengers (Seat_Occupancy * Number_of_Seats / 100)set colour 5setup_seatset conerx1 1 set conerx2 1set conery1 4 set conery2 1set l1 23 set l2 23set w1 1 set w2 1set figure "box4"set Number_of_Seats 92set Number_of_Passengers (Seat_Occupancy * Number_of_Seats / 100)set colour 6setup_seatset conerx1 1 set conerx2 0set conery1 3 set conery2 0set l1 46 set l2 0set w1 1 set w2 0set figure "box5"set Number_of_Seats 92set Number_of_Passengers (Seat_Occupancy * Number_of_Seats / 100)set colour 7setup_seat ask turtles [set busy? false] set Time 0.0 set Passengers_Blocked 0 end ;----------------------------------------------------- to setup_seat locals [i Num_Seat Num_Passengers] ;setup seats set Num_Seat Number_of_Seats set Num_Passengers Number_of_Passengers ask patches with [ pycor != max-pycor and ((pxcor >= conerx1 + min-pxcor) and (pxcor < conerx1 + l1 + min-pxcor) and ((pycor >= -1 - conery1 and pycor < -1 - conery1 + w1) or (pycor <= conery1 and pycor > conery1 - w1) )) or (pxcor >= conerx2 + min-pxcor and pxcor < conerx2 + l2 + min-pxcor and ((pycor >= -1 - conery2 and pycor < -1 - conery2 + w2) or (pycor <= conery2 and pycor > conery2 - w2) )) or (pxcor >= conerx3 + min-pxcor and pxcor < conerx3 + l3 + min-pxcor and ((pycor >= -1 - conery3 and pycor < -1 - conery3 + w3) or (pycor <= conery3 and pycor > conery3 - w3))) or (pxcor >= conerx4 + min-pxcor and pxcor < conerx4 + l4 + min-pxcor and ((pycor >= -1 - conery4 and pycor < -1 - conery4 + w4) or (pycor <= conery4 and pycor > conery4 - w4) )) ] [sprout 1 [ set breed seats set shape figure set color colour set busy? false ]] ;setup passengers ask patch-at (0 + min-pxcor) ( 0 + min-pycor) [sprout Number_of_Passengers [ set breed passengers set shape "pp" set color red set heading 0 set state 0 set luggage random-int-or-float 1 ; allocate seats to passengers randomly set i who-of one-of seats with [busy? = false] set busy?-of turtle i true set seat_x xcor-of turtle i set seat_y ycor-of turtle i ]] end ;----------------------------------------------------------------------to go if (count passengers with [state != 4] = 0)[stop] enter_cabin_start enter_cabin_finish find_seat_start find_seat_finish load_luggage_start load_luggage_finish sit_down_start sit_down_finish plot_graphs do_stats ;wait 1 set Time Time + 1endto enter_cabin_start ask passengers with [state = 0 and busy? = false] with-min [who] [if (count turtles-at dx dy = 0) [fd 1 ] if (xcor = -23 and ycor = -3 and seat_y <= -1 ) [set next_event (Time + 5) set heading 90 set busy? true] if (xcor = -23 and ycor = -3 and seat_y > -1 ) [fd 1] if (xcor = -23 and ycor = 2 and seat_y > -1 ) [set next_event (Time + 5) set heading 90 set busy? true]] endto enter_cabin_finish ask passengers with [state = 0 and busy? = true] [if (Time >= next_event) [set state 1 set busy? false]]end to find_seat_start ask passengers with [state = 1 and busy? = false] [if (count turtles-at dx dy = 0 and xcor < seat_x) [fd 1 set next_event (Time + 3) set busy? true set b? false] if (count passengers-at dx dy > 0 and pre_x = xcor and xcor < seat_x and b? = false) [set Passengers_Blocked_Aisle Passengers_Blocked_Aisle + 1 set pre_x xcor set b? true ] if (xcor = seat_x) [set state 2 set busy? false]]endto find_seat_finish ask passengers with [state = 1 and busy? = true] [if (Time >= next_event) [set busy? false]]end to load_luggage_start locals [temp_y] ask passengers with [state = 2 and busy? = false] ; find nearest locker with space (should also be same side of cabin) [ifelse (seat_y > 0) [set temp_y 4][set temp_y (0 - 4)] set nearest_locker min-one-of lockers with [load < capacity ] [distance myself] if (luggage + load-of nearest_locker >= capacity-of nearest_locker) [call_steward] ;time to load luggage depends on amount and distance to locker set next_event (Time + (10 * luggage) + distance nearest_locker) set load-of nearest_locker ((load-of nearest_locker) + luggage) ; load luggage - only one passenger can load locker at a time set busy?-of nearest_locker true set busy? true]endto load_luggage_finish ask passengers with [state = 2 and busy? = true] [if (Time >= next_event) [set busy?-of nearest_locker false set color-of nearest_locker black set state 3 set busy? false]]endto call_steward show "Steward moving luggage"end to sit_down_start ask passengers with [state = 3 and busy? = false] [ if ((seat_y > 2 and seat_y < max-pycor - 1) or (seat_y > -3 and seat_y < 0))[set heading 0] if ((seat_y < 2 and seat_y > -1) or (seat_y < -3 and seat_y > min-pycor))[set heading 180] ;other passengers blocking access ? set next_event (Time + 10) if (count passengers-at dx dy > 0 and ycor != seat_y) [show "seated passenger moving" set Passengers_Blocked_Seat Passengers_Blocked_Seat + 1 set next_event next_event + 20] set busy? true if (seat_y = ycor) [set color green set state 4]] endto sit_down_finish ask passengers with [state = 3 and busy? = true] [if (Time >= next_event) [fd 1 set busy? false]]endto do_statsendto plot_graphs set-current-plot "Passengers Seated" set-current-plot-pen "black" plotxy Time count passengers with [state = 4] set-current-plot "Passengers Blocked" set-current-plot-pen "black" plotxy Time Passengers_Blockedendto-report remove-index [index my-list] ifelse index = 0 [report but-first my-list] [report fput (first my-list) (remove-index (index - 1)(but-first my-list))]end @#$#@#$#@GRAPHICS-WINDOW2012897430223716.2340431101110111-2323-77CC-WINDOW5534983629Command Center0BUTTON16258358NILsetupNIL1TOBSERVERTNILSLIDER1585190118Seat_OccupancySeat_Occupancy110010011%BUTTON892520158board_planegoT1TOBSERVERTNILPLOT186303496519Passengers SeatedTimeNIL0.0100.00.020.0truefalsePENS"black" 1.0 0 -16777216 truePLOT505303800520Passengers BlockedTimeFrequency0.050.00.030.0truefalsePENS"black" 1.0 0 -16777216 trueMONITOR804303894352Time (secs)Time21CHOOSER15138178183ScenariosScenarios"rear seats first" "rear door" "wrong-seat" "too much luggage"1TEXTBOX3771058128Passengers Boarding an AircraftMONITOR36210208259NILPassengers_Blocked_Seat31MONITOR26265205314NILPassengers_Blocked_Aisle
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -