Answer the question
In order to leave comments, you need to log in
Claim Generator Algorithm for Modeling QS with Poisson Flow?
The appearances of clients in the hairdresser form a Poisson flow, the intensity of which is 10 people per hour.
part of the course work, it is necessary to draw up a model of a hairdressing salon in C ++ classes, and now I ran into a problem, I can’t understand exactly how this generator should work, tell me the algorithm in general terms, then I’ll try myself)))
Answer the question
In order to leave comments, you need to log in
class Event { // интерфейс
public:
virtual double time() = 0; // когда потребуется внимание со стороны менеджера событий
virtual void process() = 0; // команда обработать событие
// virtual int type() = 0; // можно пристроить, если по какой-то причине надо отличать кресло от генератора клиентов
};
class EventSink { // интерфейс
virtual void add(Event& x);
}
class Shop;
class Chair : protected Event {
private:
double fTime;
bool fIsOccupied;
public:
Shop& shop;
virtual double time() override { return fTime; }
virtual void process() override;
{
что-то типа…
если shop.nWaiting != 0 {
--shop.nWaiting;
occupy(time);
} else {
isOccupied = false;
}
}
void occupy (double aTime) {
time = aTime + время обслуживания клиента
shop.manager.add(*this);
}
bool isOccupied() { return fIsOccupied; }
};
class CustomerGenerator : protected Event {
// Устроен аналогично Chair, служит для генерации потока клиентов
public:
virtual void process() override {
если shop.nWaiting == 0 и кресло свободно {
shop.chair.occupy(fTime);
} else {
++shop.nWaiting;
}
fTime += экспоненциальное время ожидания;
manager.add(*this);
}
void init() {
fTime = 0;
process();
}
};
class Shop {
public:
Chair chair; // можно несколько кресел
CustomerGenerator generator;
int nWaiting; // сколько человек в очереди
EventSink& manager;
}
class Manager : public EventSink {
Event* events[2]; // события отсортированы по времени
int nEvents;
void add(Event& x) override {
// вставить двоичным поиском x в нашу очередь; тут же можно сделать ограничение
// «обработать 1000 клиентов» или «работать 8 часов».
}
И самое главное — «жизненный цикл».
shop.generator.init();
Пока очередь не пуста…
• вытащить из неё событие
• process его!
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question