Sut i Osod Swp-Dyfodiadau

Mae Ciw yn caniatáu swp-dyfodiadau, hynny yw mwy nag un cwsmer yn cyrraedd ar yr un pryd. Gallwch weithredu hwn gan ddefnyddio batching_distributions. Yn debyg i arrival_distributions a service_distributions, mae hwn yn cymryd gwrthrychau dosraniad ar gyfer pob nod a dosbarth cwsmer a fydd yn samplu maint y swp. Ond dosraniadau arwahanol a chaniateir, dosraniadau a samplwyd cyfanrifau.

Dangoswn esiampl:

>>> import ciw
>>> N = ciw.create_network(
...     arrival_distributions=[ciw.dists.Deterministic(18.5)],
...     service_distributions=[ciw.dists.Deterministic(3.0)],
...     batching_distributions=[ciw.dists.Deterministic(3)],
...     number_of_servers=[1]
... )

Os efelychir y system am 30 uned amser, ond un dyfodiad a ddigwyddir. Fodd bynnag, bydd 3 cwsmer yn cyrraedd ar yr un pryd. Oherwydd ond un gweinydd sydd, bydd rhaid i ddau o'r cwsmeriaid yma aros:

>>> Q = ciw.Simulation(N)
>>> Q.simulate_until_max_time(30.0)
>>> recs = Q.get_all_records()

>>> [r.arrival_date for r in recs]
[18.5, 18.5, 18.5]
>>> [r.waiting_time for r in recs]
[0.0, 3.0, 6.0]

Yn union fel dosraniadau rhwng-dyfodiad a gwasanaeth, gall diffinio dosraniadau sypiau ar gyfer nifer o nodau a nifer o ddosbarthau cwsmer, gan ddefnyddio rhestrau a geiriaduron:

batching_distributions={
    'Class 0': [ciw.dists.Deterministic(3),
                ciw.dists.Deterministic(1)],
    'Class 1': [ciw.dists.Deterministic(2),
                ciw.dists.Deterministic(2)]},
Nodwch:
  • Ond dosraniadau arwahanol gallwch ddefnyddio, ar hyn o bryd rhain yw:
    • Deterministic

    • Empirical

    • Pmf

    • Sequential

  • Os hepgorwyd yr allweddair batching_distributions ni fyd unrhyw swp-dyfodi. Hynny yw ond un cwsmer bydd yn cyrraedd pob tro. Mae hwn yn cyfateb i ciw.dists.Deterministic(1).

  • Os oes angen swp-dyfodiadau ar rhai nodau/dosbarthau cwsmer, ond fod angen swp-dyfodiadau ar rai, defnyddiwch ciw.dists.Deterministic(1).

  • Fe all swp-dyfodiadau arwain at digwyddiadau cydamserol, cymerwch ofal.

Sut i Osod Swp-Dyfodiadau Amser Dibynnol

Mae Ciw yn caniatáu swp-dyfodiadau amser dibynnol. Hynny yw mae maint y swp-dyfodiad, y nifer o cwsmeriaid sy'n cyrraedd ar yr un pryd, wedi'i samplu o dosraniad sy'n newid gydag amser.

Dangoswn esiampl, hoffwn cael 2 cwsmeriaid yn cyrraedd ar yr un pryd am y 10 uned amser cyntaf, ond 1 cwsmer yn unig yn cyrraedd ar yr un pryd wedi hynny. Deffiniwn dosraniad swp-dyfodiadau amser dibynnol trwy etifeddu o'r gwrthrych cyffredinol Distribution:

>>> class TimeDependentBatches(ciw.dists.Distribution):
...     def sample(self, t, ind=None):
...         if t < 10.0:
...             return 2
...         return 1

Mae angen ar hwn dull sample, sy'n cymryd y paramedr t, yr amser presennol.

Nawr defnyddiwn nu hwn i diffinio rhwydwaith:

>>> import ciw
>>> N = ciw.create_network(
...     arrival_distributions=[ciw.dists.Deterministic(3.0)],
...     service_distributions=[ciw.dists.Deterministic(0.5)],
...     batching_distributions=[TimeDependentBatches()],
...     number_of_servers=[1]
... )

Efelychwn ni hwn am 16 uned amser. Ar amserau 3, 6, a 9 rydym yn disgwyl 2 cwsmer cyrraedd (cyfanswm o 6). Ar amserau 12 ac 15 rydym yn disgwyl i 1 cwsmer cyrraedd (cyfanswm o 2). Felly 8 cwsmer i gyd sy'n gorffen gwasanaeth:

>>> Q = ciw.Simulation(N)
>>> Q.simulate_until_max_time(16.0)
>>> len(Q.nodes[-1].all_individuals)
8