На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> gpss , модель автобуса (пользовательские списки)
    Здравствуйте!
    Есть такая задача: автобусный маршрут (кольцевой) состоит из n остановок. На каждую остановку приходят пассажиры, которым с некоторой вероятностью надо ехать на какую-то другую остановку.
    По маршруту курсирует автобус (один). Автобус приезжает на остановку, высаживает пассажиров, которым надо выходить на этой остановке, запускает новых и едет дальше. Время стоянки автобуса (tпост + tпер*(nвых+nвх)). tпост, tпер - константы. nвых, nвх - количество выходящих/входящих пассажиров.
    Реализовать это дело надо на пользовательских списках.

    У меня пока что получается вот так (еще не реализована стоянка автобуса, затраты на перемещение между остановками и ограниченность размера автобуса).
    Чувство, что делаю что-то принципиально неправильное...
    Чувство усиливается при просмотре статистики - в блоки Assign Param1,FN$Func для каждой остановки входит больше транзакций, чем в соответствующий список (user chain).
    Подскажите, пожалуйста, что не так и как надо...
    ExpandedWrap disabled
      SIMULATE
      ;определение следующей остановки  
      Next FUNCTION X$II,D5
      1,2/2,3/3,4/4,5/5,1
       
      ;функции - определение, до какой остановки ехать
      Func1 FUNCTION RN100,D9
      0,2/0.1,2/0.2,2/0.3,4/0.4,5/0.5,2/0.6,3/0.7,4/1,5
       
      Func2 FUNCTION RN100,D9
      0,1/0.1,1/0.2,3/0.3,4/0.4,5/0.5,3/0.6,4/0.7,3/1,5
       
      Func3 FUNCTION RN100,D9
      0,1/0.1,1/0.2,2/0.3,4/0.4,5/0.5,4/0.6,1/0.7,2/1,5
       
      Func4 FUNCTION RN100,D9
      0,1/0.1,1/0.2,2/0.3,3/0.4,5/0.5,5/0.6,1/0.7,2/1,3
       
      Func5 FUNCTION RN100,D9
      0,1/0.1,1/0.2,2/0.3,4/0.4,5/0.5,2/0.6,1/0.7,3/1,4
       
      ;сначала автобус стоит на 1 остановке
          INITIAL X$II,1      
          GENERATE    (EXPONENTIAL(100,0,3))
      ;остановка, на которую пассажир придет  
          SAVEVALUE A,(((RN10)@5)+1)
      ;определение остановки, на которую пассажир поедет в зависимости от той, на которую пришел
      Ost1    TEST E X$A,1,Ost2
          ASSIGN Param1,FN$Func1
       
      Ost2    TEST E X$A,2,Ost3
          ASSIGN Param1,FN$Func2
       
      Ost3    TEST E X$A,3,Ost4
          ASSIGN Param1,FN$Func2
       
      Ost4    TEST E X$A,4,Ost5
          ASSIGN Param1,FN$Func2
       
      Ost5    TEST E X$A,5,pass_arr
          ASSIGN Param1,FN$Func2
      ;пассажир становится в очередь на остановке
      pass_arr    LINK X$A,FIFO,bus_arr
      ;автобус приезжает на остановку и забирает с нее пассажиров
      bus_arr UNLINK X$II,bus_in,ALL
      ;пассажиры помещаются в автобус
      bus_in  LINK BUS,FIFO,bus_out
      ;пассажиры, добравшиеся до места назначения, выходят из автобуса
      bus_out UNLINK E BUS,next_st,,Param1,X$II
      ;автобус едет на следующую остановку
      next_st SAVEVALUE II,FN$NEXT
          TERMINATE
                GENERATE  480
                TERMINATE 1
      Все так! Но надо вот так
      ExpandedWrap disabled
            SIMULATE
        ;определение следующей остановки  
        Next FUNCTION X$II,D5
        1,2/2,3/3,4/4,5/5,1
         
        ;функции - определение, до какой остановки ехать
        Func1 FUNCTION RN100,D9
        0,2/0.1,2/0.2,2/0.3,4/0.4,5/0.5,2/0.6,3/0.7,4/1,5
         
        Func2 FUNCTION RN100,D9
        0,1/0.1,1/0.2,3/0.3,4/0.4,5/0.5,3/0.6,4/0.7,3/1,5
         
        Func3 FUNCTION RN100,D9
        0,1/0.1,1/0.2,2/0.3,4/0.4,5/0.5,4/0.6,1/0.7,2/1,5
         
        Func4 FUNCTION RN100,D9
        0,1/0.1,1/0.2,2/0.3,3/0.4,5/0.5,5/0.6,1/0.7,2/1,3
         
        Func5 FUNCTION RN100,D9
        0,1/0.1,1/0.2,2/0.3,4/0.4,5/0.5,2/0.6,1/0.7,3/1,4
         
        MFunc FUNCTION X$A,E5
        1,FN$Func1/2,FN$Func2/3,FN$Func3/4,FN$Func4/5,FN$Func5
         
        ;сначала автобус стоит на 1 остановке
            INITIAL X$II,1      
            GENERATE    (EXPONENTIAL(100,0,3))
         
        ;остановка, на которую пассажир придет  
            SAVEVALUE A,(((RN10)@5)+1)
        ;определение остановки, на которую пассажир поедет в зависимости от той, на которую пришел
         
        ASSIGN Param1,FN$MFunc
        ;пассажир становится в очередь на остановке
        pass_arr    LINK X$A,FIFO
         
        GENERATE ,,,1
        bus_out   UNLINK E BUS,st_out,,Param1,X$II
                UNLINK X$II,bus_in,(20-CH$BUS)
        next_st   ADVANCE 10
                SAVEVALUE II,FN$NEXT
                TRANSFER ,bus_out
        st_out    TERMINATE
        bus_in    LINK BUS,FIFO
        GENERATE  485
        TERMINATE 1      
        start 1


      другая модель остановки
      Сообщение отредактировано: Eugen -
        спасибо :)
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0466 ]   [ 15 queries used ]   [ Generated: 28.04.24, 04:53 GMT ]