Анимация
JavaScript
|
Главная Библионтека D5. [Лифт ожидает?] Если сопрограмма лифта находится на шаге Е1 и j 9 2, то по прошествии 20 единиц времени перевести лифт к шагу Е6. Выйти из подпрограммы. Эта модель работы лифта гораздо сложнее других описанных выше алгоритмов, но взятый из повседневной жизни пример более типичен для задач моделирования, чем любой состряпанный на скорую руку "учебный пример". Для понимания принципа работы такого лифта рассмотрим табл. 1, которая представляет собой фрагмент одной из многих попыток моделирования. Вероятно, проще всего начать с проверки простого случая, например с момента 4257: лифт находится в состоянии покоя на этаже 2 с закрытыми дверями во время появления человека по имени Дон (в момент 4384). Две секунды спустя двери открываются и Дон входит в кабину лифта еще через две секунды. Нажав кнопку "3", он отправляет лифт вверх и наконец выходит на этаже 3, а лифт возвращается на этаж 2. В первых строках табл. 1 показан более драматичный сценарий: человек вызывает лифт на цокольный этаж, но не дожидается его и уходит спустя 15,2 с. Лифт останавливается на цокольном этаже, но, так как там никого нет, направляется на этаж 4, поскольку несколько вызовов поступило со стороны людей, которые направляются вниз. Программирование этой модели работы лифта для некоторого компьютера (в данном случае для компьютера MIX) заслуживает внимательного изучения. В любой момент в системе может существовать большое количество моделируемых людей (которые могут находиться в разных очередях, причем они могут не дождаться лифта и уйти в любое время). Кроме того, если сразу несколько человек пытается выйти из кабины лифта во время закрытия дверей, может получиться так, что действия, предусмотренные шагами Е4, Е5 и Е9, будут выполняться одновременно. Течение времени и управление "одновременным" выполнением может быть запрограммировано в результате представления каждого элемента модели некоторым узлом, содержащим поле NEXTTIME (в нем указывается, когда выполняется следующее действие этого элемента) и поле NEXTINST (в нем хранится адрес, по которому данный элемент начинает вьшолнять команды аналогично ссьшке для обычной сопрограммы). Каждый элемент ожидает наступления следующего момента в дважды связанном списке WAIT. Так как этот "список действий" сортируется по полю NEXTTIME, все действия будут обработаны в правильной последовательности моделируемых моментов. В программе также используются дважды связанные списки ELEVATOR и QUEUE. Каждый узел, представляющий некоторое действие (т. е. действие человека или лифта), имеет следующий вид:
Таблица 1 некоторые действия в модели работы лифта
WAIT QUEUEtl} ELEVATOR
Рис. 12. Некоторые списки из программы моделирования работы лифта списков указаны слева } (Заголовки Здесь LLINKl и RLINKl - связи в списке WAIT, а LLINK2 и RLINK2 - связи в списках QUEUE и ELEVATOR Последние два поля, а также поля IN и OUT в структуре (6) относятся к узлу, который представляет человека, и не имеют никакого отношения к узлу, представляюш,ему лифт. Третье слово этого узла на самом деле является командой "JMP" на языке компьютера MIX На рис. 12 показано типичное содержимое списков WAIT, ELEVATOR и одного из списков QUEUE Каждый узел в списке QUEUE одновременно находится в списке WAIT со значением NEXTINST = U4, но это не отражено на данном рисунке, поскольку сложность всех взаимосвязей может помешать читателю понять основную идею. Теперь рассмотрим саму программу. Она довольна большая, но делится на несколько малых частей (как это обычно бывает со всеми большими программами), каждая из которых выглядит достаточно просто Сначала идет некоторое количество строк кода с определением начального содержания таблиц. Рассмотрим наиболее интересные из них, а именно - заголовки списка WAIT (строки 010 и 011), списка QUEUE (строки 026 и 031) и списка ELEVATOR (строки 032-033). Каждый из них является узлом со структурой (6), в которой удалены ненужные слова Заголовок списка WAIT содержит только два первых ачова узла, а заголовкам списков QUEUE и ELEVATOR требуется только последнее слово узла. Кроме того, имеются четыре узла, которые всегда присутствуют в данной модели (строки 012-023): узел USER1, который всегда представляет шаг U1, подготовку к появлению в системе нового человека.; узел ELEV1, который управляет основными действиями лифта на шагах Е1-Е4, Е6-Е8, а также узлы ELEV2 и ELEV3, которые используются для действий лифта на шагах Е5 и Е9, которые вьшолняются независимо от других действий лифта относительно моделируемой шкалы времени. Каждый из этих четырех узлов содержит только три слова, так как они никогда не будут входить в состав списков 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 [ 105 ] 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |