[原创]单队列单服务台仿真程序Edit by Foxpro
*中文注释已经显示为乱码,具体看附件prg文件,需要FoxPro6以上打开和运行!
****************************************************************************************
* µ¥¶ÓÁе¥·þÎñ̨·ÂÕæ³ÌÐòSingleQueueSingleServer,SQSS *
* ¹Ë¿Íµ½´ï¼ä¸ôʱ¼ä·þ´Ó£¨2£¬8£©µÄ¾ùÔÈ·Ö²¼£¬·þÎñʱ¼ä·þ´Ó£¨3£¬7£©µÄ¾ùÔÈ·Ö²¼ *
* ·ÂÕæÏµÍ³ÔËÐÐ10000·ÖÖÓ£¬»ñµÃϵͳ£º·þÎñ̨¹¤×÷ʱ¼ä£¬¹Ë¿ÍÊýÁ¿£¬¶ÓÁ㤶ÈÖ¸±ê *
****************************************************************************************
**************************************************************************
* Ö÷³ÌÐò *
**************************************************************************
DO Initial
DO WHILE SimuClock IF NextEvent()=1
DO Event1
ELSE
DO Event2
ENDIF
ENDDO
DO MyReport
**************************************************************************
** ³õʼ»¯¹ý³Ì£º¶¨Òå±äÁ¿£¬²¢³õʼ»¯±äÁ¿Öµ **
**************************************************************************
PROCEDURE Initial
PUBLIC Simuclock,ServerStatus,QueueLength,NextE1Time,NextE2Time,EndTime &&·ÂÕæ¿ØÖƱäÁ¿
PUBLIC SumInCustomer,SumOutCustomer,MaxQueueLength,TotalBusyTime
EndTime=10000 &&·ÂÕæ½áÊøÊ±¼ä
Simuclock=0.0 &&·ÂÕæÏµÍ³Ê±ÖÓ
ServerStatus=0
QueueLength=0
NextE1Time=0
NextE2Time=2000
SumInCustomer=0
SumOutCustomer=0
MaxQueueLength=0
TotalBusyTime=0
&&ÉÏÊöËÄÏî·Ö±ðÊÇ£º¹Ë¿Íµ½´ï×ÜÊý£¬¹Ë¿ÍÀ뿪×ÜÊý£¬×î´ó¶ÓÁг¤¶È£¬·þÎñÔ±×ܵŤ×÷ʱ¼ä
ENDPROC
**************************************************************************
** ʼþ¸üйý³Ì£ºÈ·¶¨ÏÂһʼþ **
**************************************************************************
FUNCTION NextEvent
IF NextE1Time<=NextE2Time
RETURN 1
ELSE
RETURN 2
ENDIF
ENDFUNC
**************************************************************************
** Event1¹ý³Ì£º¹Ë¿Íµ½´ïʼþÀý³Ì **
**************************************************************************
PROCEDURE Event1
SimuClock=NextE1Time
NextE1Time=NextE1Time+MyUniform(2,8)
IF ServerStatus=0
ServerStatus=1
MidValue=MyUniform(3,7) &&Õâ¾äºÍϾäÊÇΪÁËÀۼƷþÎñÔ±µÄ·þÎñʱ¼ä
TotalBusyTime=TotalBusyTime+MidValue
NextE2Time=SimuClock+MidValue
ELSE
QueueLength=QueueLength+1
ENDIF
&&ÏÂÃæ´úÂëΪͳ¼ÆÊý¾Ý´¦Àí
SumInCustomer=SumInCustomer+1
IF QueueLength>MaxQueueLength
MaxQueueLength=QueueLength
ENDIF
ENDPROC
**************************************************************************
** Evengt2¹ý³Ì£º·þÎñÍê±ÏʼþÀý³Ì **
**************************************************************************
PROCEDURE Event2
SimuClock=NextE2Time
IF QueueLength=0
ServerStatus=0
NextE2Time=2000000
ELSE
QueueLength=QueueLength-1
MidValue=MyUniform(3,7) &&Õâ¾äºÍϾäÊÇΪÁËÀۼƷþÎñÔ±µÄ·þÎñʱ¼ä
TotalBusyTime=TotalBusyTime+MidValue
NextE2Time=SimuClock+MidValue
ENDIF
SumOutCustomer=SumOutCustomer+1
ENDPROC
**************************************************************************
** MyReport¹ý³Ì£º´òӡͳ¼ÆÊý¾Ý¹ý³Ì **
**************************************************************************
PROCEDURE MyReport
?"¹Ë¿Íµ½´ï×ÜÊý£º",SumInCustomer
?"¹Ë¿ÍÀ뿪×ÜÊý£º",SumOutCustomer
?"¶ÓÁÐ×î´ó³¤¶È£º",MaxQueueLength
?"·þÎñÔ±·þÎñ×Üʱ¼ä£º",TotalBusyTime
ENDPROC
**************************************************************************
** MyUniform¹ý³Ì£º×Ô¶¨Òå¾ùÔÈËæ»úº¯Êý **
**************************************************************************
FUNCTION MyUniform
PARAMETERS MinValue,MaxValue
RETURN MinValue+(MaxValue-MinValue)*RAND()
ENDFUNC
****************************************************************************************************************
* ˼¿¼Ìâ *
****************************************************************************************************************
**********************************
* Ò»¡¢¸ù¾ÝÈçÏÂÌõ¼þ£¬Ð޸ĴúÂ룬²¢ÔËÐзÂÕæ£¬»ñµÃͳ¼ÆÊý¾Ý
* 1£© ¹Ë¿Íµ½´ïʱ£¬·¢ÏÖÒѾÓÐ10λ¹Ë¿ÍÔÚÅŶӣ¬Ôò²»½øÈëϵͳ£»Í³¼ÆÓжàÉÙλ¹Ë¿ÍÁ÷ʧÁË£»
* 2£© µ±·þÎñÔ±·¢ÏÖ¶ÓÁÐÖÐÓÐ5λÒÔÉϹ˿ÍÅŶÓʱ£¬Ôò¼Ó¿ì¹¤×÷²½·¥£¬¼´·þÎñʱ¼äËõ¶Ì10%£»
* 3£© ¹Ë¿Íÿ´Îµ½´ïµÄÊýÁ¿²»Êǹ̶¨µÄ1¸ö£¬¿ÉÄÜÊÇ1¡¢2¡¢»ò3¸ö£¬¶ÔÓ¦¸ÅÂÊΪ£º40£¬30£¬30£»
**********************************
* ¶þ¡¢ÔÚÍê³É100λ¹Ë¿Í·þÎñʱ£¬ÏµÍ³Í£Ö¹£¬Ä£ÄâÔϵͳºÍµÚÒ»ÌâÖÐÈýÖÖÇé¿ö£»
*
****************************************************************************************************************
推荐到鲜果: 查阅更多相关主题的帖子: 仿真



评论