Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2011, 15:47   #1
saper666
 
Регистрация: 06.04.2011
Сообщений: 6
Вопрос Модель автобусной остановки.

Здравствуйте! Помогите решить задачу или составить алгоритм ее решения в VBA Excel. Уже 3 неделю сижу голову ломаю.

Задача:
По расписанию автобус должен приходить на остановку каждые 30 мин. Ориентировочно точность прибытия можно оценить величиной +-7 мин.
Приход пассажиров на автобусную остановку описывается моделью простейшего потока с интенсивностью 24 человека в час.
Автобус вместимостью 50 человек в момент своего прибытия везет 35+-15 пассажиров. Выходят на остановке 5+-2 пассажира, а входят в автобус столько ожидающих, сколько возможно. Для высадки пассажира требуется 4+-3 сек, а для посадки 8+-4 сек. Ожидающие посадки не входят в автобус до тех пор, по не выйдут все желающие, посадка осуществляется в порядке очереди.
Пассажиры, которым не удалось сесть в автобус, делятся на две категории:
• «нетерпеливые» (уходят с остановки и больше не возвращаются);
• «терпеливые» (ждут следующего автобуса).
Любой пассажир, приходящий на остановку с вероятностью 0,5, относится к «терпеливым». Но после каждой неудачной попытки сесть в автобус вероятность его «терпения» уменьшается вдвое. Соответственно увеличивается вероятность его превращения в «нетерпеливого» и ухода с остановки при невозможности сесть в следующий автобус.
Построить модель, имитирующую события на автобусной остановке, и определить распределение числа необслуженных пассажиров на один автобус.
Моделирование провести для 100 прибытий автобусов.
1 1 2 3 5 8 13 21 34 55
saper666 вне форума Ответить с цитированием
Старый 14.05.2011, 16:14   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

И что, за 3 недели - ни одной мысли?
Где ваши наработки?
EducatedFool вне форума Ответить с цитированием
Старый 14.05.2011, 16:17   #3
saper666
 
Регистрация: 06.04.2011
Сообщений: 6
По умолчанию

Все наработки пока что на бумаге. Перепечатаю и выложу.
1 1 2 3 5 8 13 21 34 55
saper666 вне форума Ответить с цитированием
Старый 23.05.2011, 18:56   #4
saper666
 
Регистрация: 06.04.2011
Сообщений: 6
По умолчанию

Вот что-то нарешал, только не пойму верно ли? Задачу перефразировал немного, препод разрешил:Постановка задачи.

По расписанию автобус должен приходить каждые 30 мин. Ориентировочно точность прибытия можно оценить величиной ±7 мин.
Приход пассажиров на автобусную остановку описывается моделью простейшего потока. Среднее время прибытия равно 2,5 мин.
Автобус вместимостью 50 человек в момент своего прибытия везет 35±15 пассажиров. Выходят на остановке 5±2 пассажира, а входят в автобус столько ожидающих, сколько возможно. Ожидающие посадки не входят в автобус до тех пор, пока не выйдут все желающие, посадка осуществляется в порядке очереди.
Пассажиры, которым не удалось сесть в автобус, делятся на две категории:
- «нетерпеливые» (уходят сразу, с вероятностью 0,5)
- «терпеливые» (ждут следующего автобуса, с вероятностью 0,5)
«Терпеливые» пассажиры, во время приезда следующего автобуса, входят в него вне вновь образовавшейся очереди.
Построить модель, имитирующую события на автобусной остановке, и определить распределение числа необслуженных пассажиров на один автобус.
Моделирование провести для 100 прибытий автобусов.

Листинг программы.
Код:

Private Sub Model()
Randomize
Columns(1).ClearContents: Columns(2).ClearContents 'очищаем первые 2 столбца
'моделирование прихода автобуса
t = Rnd() * (37 - 23) + 23       'прибытие автобуса
k = Round(Rnd() * (50 - 20) + 20, 0)   'везет с собой пассажиров
v = Round(Rnd() * (7 - 3) + 3, 0)      'выходят на остановке
g = k - v                           'остается в автобусе
u = 50 - g - x                     'сколько еще вместится - те, кто уже пропустил 1 авт.
'моделирование потока пассажиров
r = 0: y = 0
Do While ts <= t  'пусть приходят до приезда автобуса
z = Rnd(1)
ts = r - 2.5 * Log(z) 'абс.время прибытия пассажиров описывается
'показательным законом распределения, 2.5мин - ср.время прибытия
r = ts
y = y + 1
Cells(y, 1) = ts  'записываем времена в 1 столбец раб.листа
w = Rnd(1) 'СЧ которое хар-ет терпеливых и нетерпеливых
Cells(y, 2) = w 'записываем СЧ в столбец 2 раб.листа
Loop
d = Application.WorksheetFunction.Count(Columns(1)) - 1 'считаем пришедших
'анализ событий происходящих на остановке
If u >= d Then    'если колво свободных мест больше колва пришедших
a = 0             'то заходят все
Else              'иначе
a = d - u          'считаем тех, кому не хватит места
For i = u + 1 To d   'для тех, кто не зайдет
If Cells(i, 2) <= 0.5 Then x = x + 1 'если вероятность не более 0.5, то терпеливый
f = a - x     'все остальные уйдут сразу
Next i
End If
Cells(7, 8) = f 'запишем необслуженных
End Sub

Private Sub CommandButton2_Click()
End   'выход
End Sub

Private Sub CommandButton3_Click()
For i = 1 To Val(Textbox3.text)   'для 100 реализаций
Call Model
f = f + Cells(7, 8) 'считаем всех необслуженных
Next i
TextBox2.Value = f / Val(Textbox3.text)
End Sub
Подскажите, правильно ли я понял решение? распределение числа необсл.пасс. на 1 автобус, то есть считаем их все 100 раз и делим на 100?
1 1 2 3 5 8 13 21 34 55
saper666 вне форума Ответить с цитированием
Старый 24.05.2011, 15:31   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

модель с анимацией: стремительно несется автобус похожий на гробик с колесами, подходят пассажиры на остановку (см. серые колонки 7,8).
внимание: в ячейке масштаб не пишите значений больше 500 (мой компьютер не успевает считать при таком масштабе времени)
Вложения
Тип файла: rar Автобус.rar (18.5 Кб, 81 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 27.12.2012, 15:43   #6
ИринаСергеевна
 
Регистрация: 06.11.2012
Сообщений: 2
По умолчанию

а что за значения в 9 столбце?
ИринаСергеевна вне форума Ответить с цитированием
Старый 27.12.2012, 18:50   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

это пассажиры, которые пришли на остановку пока происходила выгрузка-загрузка (этот процесс тоже растянут по времени)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестала работать точка остановки Delphi 2010 Robin_ Общие вопросы Delphi 5 10.03.2011 11:50
[Вопрос] Реализация многопоточности запуска/остановки конкретных программ из списка Человек_Борща Общие вопросы Delphi 8 06.10.2010 08:59
Модель амебы. Alex Cones Свободное общение 25 14.01.2010 22:20
Ввод с клавиатуры без остановки программы ActioNs Общие вопросы C/C++ 1 25.12.2008 04:40
Переход с одной win в другую без остановки программы Gromsky Операционные системы общие вопросы 17 05.03.2008 16:45