Sut i Osod Blaenoriaethau¶
Gall Ciw aseinio blaenoriaethau i ddosbarthau cwsmer. I wneud hwn rydym yn mapio dosbarthau cwsmer i ddosbarthau blaenoriaeth, gan ychwanegu hwn fel allweddair wrth greu gwrthrych Network. Dangosir enghraifft:
priority_classes={'Class 0': 0,
'Class 1': 1,
'Class 2': 1}
Mae hwn yn dangos mapiad o dri dosbarth cwsmer i ddau ddosbarth blaenoriaeth. Mae gan gwsmeriaid dosbarth 0 y flaenoriaeth fwyaf, a'i rhoddir yn nosbarth blaenoriaeth 0. Rhoddir cwsmeriaid dosbarth 1 a 2 yn ddosbarth blaenoriaeth 1; mae ganddynt yr un flaenoriaeth a'i gilydd, ond llai o flaenoriaeth na chwsmeriaid dosbarth 0.
Nodwch:
Po leiaf yw rhif y dosbarth blaenoriaeth, po fwyaf yw'r flaenoriaeth. Mae gan gwsmeriaid yn nosbarth blaenoriaeth 0 mwy o flaenoriaeth na chwsmeriaid yn nosbarth blaenoriaeth 1, sydd a fwy o flaenoriaeth na chwsmeriaid yn nosbarth blaenoriaeth 2, ayyb.
Indecsau Python yw dosbarthau blaenoriaeth, felly os oes 5 dosbarth blaenoriaeth rhaid eu labelu 0, 1, 2, 3, 4. Fe fydd hepgor rhif, neu enwi dosbarthau blaenoriaeth unrhyw beth arall heblaw cyfanrifau cynyddol o 0, yn achosi gwall.
Mae disgyblaeth blaenoriaeth yn anrhagdarfiedig. Mae cwsmeriaid pob amser yn gorffen eu gwasanaeth ac nid yw'n cael eu darfu gan gwsmeriaid gyda blaenoriaeth uwch.
I weithredu hwn, crëwch wrthrych Network gan ychwanegu'r allweddair Priority_classes
gyda'r mapiad:
>>> import ciw
>>> N = ciw.create_network(
... arrival_distributions={'Class 0': [ciw.dists.Exponential(5)],
... 'Class 1': [ciw.dists.Exponential(5)]},
... service_distributions={'Class 0': [ciw.dists.Exponential(10)],
... 'Class 1': [ciw.dists.Exponential(10)]},
... priority_classes={'Class 0': 0, 'Class 1': 1},
... number_of_servers=[1]
... )
Rhedwn yr efelychiad, yn cymharu'r amseroedd aros cwsmeriaid dosbarth 0 a dosbarth 1. Dylai cwsmeriaid gyda mwy o flaenoriaeth cael amser aros cymedrig llai na'r cwsmeriaid gyda llai o flaenoriaeth:
>>> ciw.seed(1)
>>> Q = ciw.Simulation(N)
>>> Q.simulate_until_max_time(100.0)
>>> recs = Q.get_all_records()
>>> waits_0 = [r.waiting_time for r in recs if r.customer_class==0]
>>> sum(waits_0)/len(waits_0)
0.1866109...
>>> waits_1 = [r.waiting_time for r in recs if r.customer_class==1]
>>> sum(waits_1)/len(waits_1)
7.6103100...