Sut i Efelychu Cwsmeriaid Sy'n Balcio

Mae Ciw yn gadael i gwsmeriaid balcio (dewis peidio ymuno a chiw) pan maent yn dyfodi, yn ôl ffwythiannau balcio. Mae'r ffwythiannau yma yn cymryd paramedr n, nifer o unigolion wrth y nod, ac yn rhoi tebygolrwydd o'r cwsmer balcio.

Er enghraifft, mae ganddynt hwy system M/M/1 lle mae cwsmeriaid:

  • Byth yn balcio os oes llai na 3 cwsmer yn y system

  • Yn cael tebygolrwydd 0.5 o balcio os oes rhwng 3 a 6 cwsmer yn y system

  • Trwy'r amser yn balcio os oes mwy na 6 cwsmer yn y system

Fe allwn ddiffinio'r ffwythiant balcio canlynol:

>>> def probability_of_baulking(n):
...     if n < 3:
...         return 0.0
...     if n < 7:
...         return 0.5
...     return 1.0

Wrth greu'r gwrthrych Network, rydym yn dweud wrth Ciw pa nod a dosbarth cwsmer mae'r ffwythiant yma yn berthnasol ar gyfer, gyda'r allweddair Baulking_functions:

>>> import ciw
>>> N = ciw.create_network(
...      arrival_distributions={'Class 0': [ciw.dists.Exponential(5)]},
...      service_distributions={'Class 0': [ciw.dists.Exponential(10)]},
...      baulking_functions={'Class 0': [probability_of_baulking]},
...      number_of_servers=[1]
... )

Pan mae'r system wedi gorffen efelychu, cofnodwyd y cwsmeriaid a wnaeth balcio yn baulked_dict y gwrthrych Simulation. Geiriadur yw hwn sy'n mapio rhifau nod i eiriaduron. Mae'r geiriaduron yma yn mapio rhifau dosbarthau cwsmer i restr o ddyddiadau lle wnaeth cwsmer balcio:

>>> ciw.seed(1)
>>> Q = ciw.Simulation(N)
>>> Q.simulate_until_max_time(45.0)
>>> Q.baulked_dict
{1: {0: [9.4589..., 12.8633..., 16.3374..., 18.7384..., 37.8363..., 38.2962...]}}

Nodwch fod balcio yn gweithio ac yn ymddwyn yn wahanol i setio cynhwysedd ciwio. Mae llenwi cynhwysedd ciwio nod yn arwain at dyfodiadau newydd yn cael eu wrthod* (a chofnodwyd y rhain yn y rejection_dict), a chwsmeriaid sy'n trosglwyddo o nod arall yn cael eu blocio. Ar y llaw arall nid yw balcio yn effeithio cwsmeriaid sy'n trosglwyddo o nod arall, a chofnodwyd cwsmeriaid a wnaeth balcio yn y baulked_dict. Mae hwn yn golygu os osodwyd trothwy balcio penderfynedig o 5, ond ni osodwyd cynhwysedd ciwio, yna gall nifer o unigolion wrth y nod yna bod yn fwy na 5, oherwydd bod cwsmeriaid sy'n trosglwyddo o nodau arall yn anwybyddu'r trothwy balcio.