Форум программистов, компьютерный форум CyberForum.ru

Модель СМО. Нужен совет ! - C++

Восстановить пароль Регистрация
 
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
27.11.2012, 13:19     Модель СМО. Нужен совет ! #1
Вот задание:

Сервис-центр занимается посреднеческой деятельностью по продаже ж\д билетов и делает это по 3-м телефонным линиям. В сервис-центр поступает 75+-10 двзонков в час. Время обслуживания одного дзвонка составляет 2+-1 минута. Заявка что не обслужывается в даний момент, ожидает в очереди. Если заявка ожидает в очереди больше 35 минут - она получает отказ. Смоделировать работу смо в течении 3-х суток. Определить вероятность отказов, вероятность занятости каналов и количество заявок что получили отказ.


Проблема в том что я не знаю как правильно реализовать поступление заявок в очередь и их выбор на обработку: это время меня сбивает... количество заявок задано за один час а как это все сделать под заданое время мне в голову не приходит... ну и еще не знаю как поступать с заявками которые висели в очереди больше 35 минут: каждую минуту пробегать по очереди и удалять из самой очереди , или уже когда заявка подходит к линии на обработку тогда по условию если она висела больше 35 минут , её просто выбрасывать ? первый вариант более подходит к моему заданию но требует много ресурсов, второй почти не требует ресурсов но не совсем по моему заданию, так как заявка может висеть и больше 35 минут...

Кое-что я сделал, а именно я написал(почти) свою очередь :
// queue.cpp
C++
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
#include "queue.h"
#include "element.h"
 
 
void Queue::Enqueue(Element el)
{
   if (head == NULL)     // первый элемент
   {
      head = new Element;
      tail = head;       // head == tail в очереди присутствует один элемент
      head->iValue = el.iValue;
      head->next = NULL;
   }
   else
   {
      tail->next = new Element;
      tail->next->iValue = el.iValue;
      tail->next->next = NULL;
      tail = tail->next;
   }
   size++;
}
 
 
int Queue::isEmpty()
{
   if (getQueueSize() == 0)
      return 1;
   else
      return 0;
}
int Queue::getQueueSize()
{
   return size;
}

// queue.h
C++
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
#ifndef QUEUE_H
#define QUEUE_H
#include "element.h"
#include <iostream.h>
 
 
class Queue
{
   public:
      int size;
      Element* head;
      Element* tail;
 
      Queue()
      {
         size = 0;
       
 
         head = NULL;
         tail = NULL;
      } //default constructor
 
      void Enqueue(Element);
      Element Dequeue();
      int isEmpty();
      int getQueueSize();
     
};
 
#endif
// element.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef ELEMENT_H
#define ELEMENT_H
 
 
class Element
{
   public:
     int iValue;
      Element* next;   // Следующий элемент в очереди
};
 
#endif
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 13:19     Модель СМО. Нужен совет !
Посмотрите здесь:

Нужен совет! C++
C++ Нужен совет
Нужен совет! C++
C++ Нужен совет
Нужен совет C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.11.2012, 14:06     Модель СМО. Нужен совет ! #2
Мысль первая: не надо своих велосипедов. Не та задача, для которой стоит тратиться на реализацию стандартных контейнеров.

Насколько я вижу, тут придется покурить дискретно-событийное моделирование.
Для модели нам понадобятся системное время, список событий и обработчики событий.
События будут примерно такие:
- поступление звонка
- начало обслуживания
- конец обслуживания
- отказ

У каждого события будет время наступления. Цикл обработки примерно следующий:
1. Получили ближайшее во времени событие
2. Установили системное время на время события
3. Вызвали обработчик

Для выхода из цикла можно, например, завести специальное событие, которое будет запланировано на конец моделирования и будет завершать работу программы.
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
27.11.2012, 14:33  [ТС]     Модель СМО. Нужен совет ! #3
Цитата Сообщение от 0x10 Посмотреть сообщение
Мысль первая: не надо своих велосипедов. Не та задача, для которой стоит тратиться на реализацию стандартных контейнеров.

Насколько я вижу, тут придется покурить дискретно-событийное моделирование.
Для модели нам понадобятся системное время, список событий и обработчики событий.
События будут примерно такие:
- поступление звонка
- начало обслуживания
- конец обслуживания
- отказ

У каждого события будет время наступления. Цикл обработки примерно следующий:
1. Получили ближайшее во времени событие
2. Установили системное время на время события
3. Вызвали обработчик

Для выхода из цикла можно, например, завести специальное событие, которое будет запланировано на конец моделирования и будет завершать работу программы.
без очереди никак! мне надо подробно смоделировать данную СМО. Т.е. Поступление дзвонка, помещение дзвонка в очередь, если одна из линий свободна-обработка дзвонка , конец дзвонка , если все линия заняты - ждать освобождения в очереди, или же если дзвонок пребывает в очереди больше 35 минут - дзвонок получает отказ.

с системным времен согласен, но опять же у меня с этим проблемы..

Добавлено через 19 минут
просто у меня заданием предусмотрено наличие очереди, и модель должна быть максимально похожая к реальной системе
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.11.2012, 14:33     Модель СМО. Нужен совет ! #4
Я в том смысле, что реализовывать ее руками не надо. std::queue в зубы и вперед. Максимум - своя обертка над очередью.
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
27.11.2012, 14:38  [ТС]     Модель СМО. Нужен совет ! #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Я в том смысле, что реализовывать ее руками не надо. std::queue в зубы и вперед. Максимум - своя обертка над очередью.
вы о шаблонах? елси честно то можна подумать над этим , но опять же не в этом проблема...а проблема...я тупо не доганяю как привязать время к поступлению заявок....
ккстати вот функция рандома для моих параметров т.к. там нужно использовать равномерный закон распределения:
C++
1
2
3
4
5
6
7
8
9
10
11
int rand_d(int t)
{
    float r;
    int da=0, db=t, m=97, a=9, rr;
    float q=x1%m;          
    r=q/m;
    x1=a*x1;
    if (r<0) {r=-1*r;};
    r=da+((db-da)*r);
    return floor(r);
}
Добавлено через 46 секунд
+ это сейчас я над консолью играюсь а потом мне еще надо будет это все дело в Visual C++ перегнать!
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.11.2012, 15:06     Модель СМО. Нужен совет ! #6
Пусть система находится в начальном состоянии. Модельное время = 0. Очередь пуста.
Можно разом взять и сгенерировать множество случайных чисел - моменты времени поступления звонков. Создаем пачку объектов-событий, забиваем ими список событий. Далее идем по этому списку, последовательно устанавливаем системное время на время наступления события и обрабатываем это событие.

Upd: Visual C++ - не означает наличие интерфейса.

Добавлено через 12 минут
Upd2: Увидел другую тему с видео в качестве примера - ок, был неправ). Из интереса: это какой курс?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 15:19     Модель СМО. Нужен совет !
Еще ссылки по теме:

Модель СМО на С++. Реально? C++
Нужен совет! C++
C++ Нужен совет

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
27.11.2012, 15:19  [ТС]     Модель СМО. Нужен совет ! #7
Цитата Сообщение от 0x10 Посмотреть сообщение
Пусть система находится в начальном состоянии. Модельное время = 0. Очередь пуста.
Можно разом взять и сгенерировать множество случайных чисел - моменты времени поступления звонков. Создаем пачку объектов-событий, забиваем ими список событий. Далее идем по этому списку, последовательно устанавливаем системное время на время наступления события и обрабатываем это событие.

Upd: Visual C++ - не означает наличие интерфейса.

Добавлено через 12 минут
Upd2: Увидел другую тему с видео в качестве примера - ок, был неправ). Из интереса: это какой курс?
2-й курс...курсовая...сначала думал купить, потом передумал, решыл делать сам.
Yandex
Объявления
27.11.2012, 15:19     Модель СМО. Нужен совет !
Ответ Создать тему
Опции темы

Текущее время: 11:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru