📄 postoffice_1.cpp
字号:
#include "PerformSeer.h"
class POST_OFFICE : public SIMMODEL {
public:
void initiate();
};
class GENERATOR : public PROCESS {
public:
void process();
};
class CUSTOMER : public PROCESS {
public:
void process();
};
POST_OFFICE PostOffice;
RESOURCE *Clerks = NULL;
RANDOM R1(1);
RANDOM R2(2);
RANDOM R3(3);
real64 DayLength;
real64 MeanInterArrival;
real64 MinServiceTime;
real64 MaxServiceTime;
uint16 MinClerkNum;
uint16 MaxClerkNum;
uint16 ClerkNum;
uint16 ChairNum;
uint32 LeavedNum;
uint32 ServedNum;
METER <real64> DelayInQueue;
void Read_Parameter();
void Print_Result();
int main( int argc, char** argv )
{
Read_Parameter();
for (ClerkNum = MinClerkNum; ClerkNum <= MaxClerkNum; ClerkNum += 1) {
PostOffice.clear();
PostOffice.initiate();
PostOffice.simulate();
Print_Result();
}
return 0;
}
void Read_Parameter()
{
DayLength = 540;
MeanInterArrival = 4;
MinServiceTime = 5;
MaxServiceTime = 10;
MinClerkNum = 1;
MaxClerkNum = 5;
ChairNum = 10;
printf( "\nCLERKS CLERKS CUSTOMERS NUMBER DELAY IN QUEUE NUMBER IN QUEUE" );
printf( "\nNUMBER UTILIZATION SERVED / LEAVED AVERAGE / MAXIMUM AVERAGE / MAXIMUM" );
printf( "\n===========================================================================\n" );
}
void Print_Result()
{
printf( "\n %3d %7.3f %4d %4d %7.3f %7.3f %7.3f %4d",
ClerkNum, Clerks->get_utilization(), ServedNum, LeavedNum,
DelayInQueue.get_average(), DelayInQueue.get_maximum(),
Clerks->get_avgquelen(), Clerks->get_maxquelen() );
}
void POST_OFFICE::initiate()
{
GENERATOR *generator;
LeavedNum = 0;
ServedNum = 0;
R1.reset();
R2.reset();
R3.reset();
DelayInQueue.clear();
if (Clerks != NULL)
delete Clerks;
Clerks = new RESOURCE( ClerkNum );
create_process( generator );
generator->activated();
}
void GENERATOR::process()
{
CUSTOMER *customer;
real64 interval;
while (1) {
interval = R1.exponential( (real64)1 / MeanInterArrival );
if (SIMTIME + interval > DayLength)
exit();
pass_time( interval );
create_process( customer );
customer->activated();
}
}
void CUSTOMER::process()
{
real64 arrivTime;
real64 leavProb;
real64 servTime;
arrivTime = SIMTIME;
leavProb = (real64)(Clerks->get_quelen()) / (real64)ChairNum;
servTime = ( R2.uniform(MinServiceTime, MaxServiceTime) );
if (R3.bernoulli(leavProb) == 1) {
LeavedNum += 1;
exit();
}
ServedNum += 1;
request_resource( Clerks, 1 );
DelayInQueue = SIMTIME - arrivTime;
pass_time( servTime );
release_resource( Clerks, 1 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -