Sut i Osod Dosbarthau Cwsmer Deinamig

Mae Ciw yn gadael i gwsmeriaid newid eu dosbarth cwsmer yn tebygoliaethol ar ôl gorffen gwasanaeth. Hynny yw ar ôl gwasanaeth yn od k mae cwsmer dosbarth i yn newid i fod yn ddosbarth j gyda thebygolrwydd \(P(J=j \; | \; I=i, K=k)\). Mewnbynnir y tebygolrwyddau yma trwy'r allweddair class_change_matrices.

Ystyriwch system un nod gyda thri dosbarth cwsmer. Ar ôl wasanaeth (yn Nod 1) mae cwsmeriaid pendant yn newid dosbarth cwsmer, yr un mor debygol rhwng y ddau ddosbarth cwsmer arall. Dangosir y class_change_matrices ar gyfer y system yma:

\[\begin{split}\begin{pmatrix} 0.0 & 0.5 & 0.5 \\ 0.5 & 0.0 & 0.5 \\ 0.5 & 0.5 & 0.0 \\ \end{pmatrix}\end{split}\]

Mewnbynnir hwn i mewn i'r model efelychu trwy ychwanegu'r allweddair Class_change_matrices wrth greu gwrthrych Network:

>>> import ciw
>>> N = ciw.create_network(
...     arrival_distributions={'Class 0': [ciw.dists.Exponential(5)],
...                            'Class 1': [ciw.dists.NoArrivals()],
...                            'Class 2': [ciw.dists.NoArrivals()]},
...     service_distributions={'Class 0': [ciw.dists.Exponential(10)],
...                            'Class 1': [ciw.dists.Exponential(10)],
...                            'Class 2': [ciw.dists.Exponential(10)]},
...     routing={'Class 0': [[1.0]],
...              'Class 1': [[1.0]],
...              'Class 2': [[1.0]]},
...     class_change_matrices={'Node 1': [[0.0, 0.5, 0.5],
...                                       [0.5, 0.0, 0.5],
...                                       [0.5, 0.5, 0.0]]},
...     number_of_servers=[1]
... )

Nodwch yn y rhwydwaith yma ond dyfodiadau o ddosbarth cwsmeriaid 0 a ddigwyddir. Yn rhedeg y system yma, gwelwn fod nifer cofnodion gan gwsmeriaid o ddosbarth 1 a 2 yn fwy na sero, gan fod rhai cwsmeriaid dosbarth 0 wedi newid dosbarth cwsmer ar ôl gwasanaeth:

>>> from collections import Counter
>>> ciw.seed(1)
>>> Q = ciw.Simulation(N)
>>> Q.simulate_until_max_time(50.0)
>>> recs = Q.get_all_records()
>>> Counter([r.customer_class for r in recs])
Counter({0: 251, 2: 115, 1: 107})

Nodwch pan ddefnyddir mwy nag un nod, mae angen matrics newid dosbarth ar bob nod. Mae hwn yn golygu gall matrics gwahanol cael ei ddefnyddio ar gyfer pob nod.