⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 airbusa380.nlogo

📁 登机模拟(airbus 380)
💻 NLOGO
📖 第 1 页 / 共 2 页
字号:
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 + -