Анимация
JavaScript


Главная  Библионтека 

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

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.

Каждый узел, представляющий некоторое действие (т. е. действие человека или лифта), имеет следующий вид:

LLINKl

RLINKl

ЕХТТ1У

NEXTINST



Таблица 1

некоторые действия в модели работы лифта

TIHE STATE FLDOH Dl D2

D3 Шаг Действие

TIHE STATE

FLOOR

Действие

0000

0 0

0 U1

Человек 1 появлястси ва этаже 0 и хочет попасть па таж 2.

1083

1еловек л выходит из кабины лифта н уходит.

0035

0 0

0 Е8

Лифт движется вниз.

1108

Человек 3 выхоцит из кабины лифта в уходит.

0038

0 0

0 U1

Человек 2 появляется иа этаже л и хочет попасть на этаж 1.

1133

Человек 5 выходит нз кабины лифта и уходит.

0096

0 0

0 Е8

Лифт движется вниз.

1139

Двери лифта вздрагивают.

0136

0 0

Человек 3 появляется на этаже 2 и хочет попасть иа этаж 2.

1158

Человек 2 выходит из кабины лифта и уходит.

О!-!!

0 0

0 U!

Человек л появляется на этаже 2 и хочет попасть на этаж 1.

1179

Дверн лифта вздрагивают.

0152

0 0

0 и-1

Человек 1 отказывается ждать лифт и уходит.

1183

Человек 7 входит в кабину лифта.

0180

0 0

0 Е2

Лифт останавливается.

1208

Человек 8 входит в кабину лифта.

0180

0 ЕЗ

Двери лифта начинают открываться.

1219

Двери лифта вздрагивают.

0200

0 Е-(

Двери открыты, ио никого нет.

1233

Человек 9 входит в кабину лифта.

0256

X Е5

Двери лифта начинают закрываться.

1259

Двери лифта начинают закрываться.

0291

0 U1

Человек 5 появляется на этаже 3 и хочет попасть на этаж 1.

129-1

Лифт движется вниз.

0291

0 Е7

Лифт движется вверх.

1378

Лифт останавливается.

0 Е7

Лнфт движется вверх.

1378

Двери лнфта начинают открываться.

036-)

0 U!

Человек 6 появляется на этаже 2 н хочет попасть на этаж 1,

1398

Человек 8 выхццнт из кабины лифта в уходят.

0393

0 Е7

Лифт движется вверх.

1-123

Человек 10 вхоцит в кабину лифта.

0 Е7

Лифт движется вверх.

1-15-1

Двери лифта начинают закрываться.

0509

0 Е2

Лифт останавлииается.

1-189

Лифт движется вверх.

0509

0 ЕЗ

Двери лифта начинают открываться.

I55-I

Лифт останавливается.

0529

0 U5

Человек 2 заходит в кабину лифта.

155-1

Двери лифта начинают открываться.

0510

0 U-i

Человек 6 отказывается ждать лифт и уходит.

1630

Двери лифта начинают закрываться.

055-1

X Е5

Двери лифта начинают закрываться.

1665

Лифт движется вверх.

0589

0 Е8

Лифт движется вниз.

0602

0 Ul

Человек 7 появляется на этаже 1 и хочет попасть иа этаж 2.

-1257

Лифт находится в состоянии ожидания.

0673

0 Е2

Лифт останавливается.

138-1

Человек 17 появляется на этаже 2 н хочет попасть иа этаж 3,

0673

0 ЕЗ

Двери лифта начинают открываться.

-I-IO-I

Двери лифта начинают открываться.

0693

0 U5

Человек 5 входит в кабину лифта.

Человек 17 входит в кабину лифта.

0719

X Е5

Двери лифта начинают закрываться.

-1-1-19

Двери лифта начинают закрываться.

078-1

0 Е8

Лифт движется вниз.

-l-18-i

Лифт движется вверх.

0827

0 Ul

Человек 8 появляется на этижс 1 и хочет попасть на этаж 0,

-15-19

Лифт останавливается.

0868

0 Е2

Лифт оетаиавлнвасптя.

-IM9

Дверн лифта начинают открываться.

0868

0 ЕЗ

Дверн лифта начинают открываться.

-1569

Человек 17 выходит из кабины лифта и уходит.

0876

0 Ul

Человек 9 появляется на этаже 1 и хочет попасть на этаж 3,

-1625

Дверн лнфта н-ачинают закрываться.

0888

0 US

Человек 3 входит в кабину лифта.

-1660

Лифт движется вниз.

0913

0 U5

Человек л входит в кабину лифта.

-17-1-1

Лнфт останавливается

09-1-1

X E5

Двери лифта начинают закрываться.

-17-1-1

Дверн лифта начинают открываться.

0979

0 E8

Лифт движется вниз.

-176-1

Двери лифта открыты, на площадке никого нрт.

lo-ie

0 Ul

Человек 10 появляется на этаже 0 и хочет попасть на -этаж \

-1820

Дверн лифта начинают закрываться.

1063

0 E2

Лнфт (х;танавливается.

18-10

Лнфт находится в состоянии ожидания.

1063

0 ЕЗ

Дверн лифта начинают открываться.



WAIT


QUEUEtl}


ELEVATOR

ТГ 1

1 ("

ll 1

Ш 1 и


Рис. 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