.. _tutorial-iii:
=================================
Tiwtorial III: Casglu Canlyniadau
=================================
Yn y tiwtorialau diwethaf gwnaethon ni diffinio ac efelychu banc am ddiwrnod, a gwelon ni sut i mynedu rhannau o'r injan efelychu::
>>> import ciw
>>> N = ciw.create_network(
... arrival_distributions=[ciw.dists.Exponential(0.2)],
... service_distributions=[ciw.dists.Exponential(0.1)],
... number_of_servers=[3]
... )
>>> ciw.seed(1)
>>> Q = ciw.Simulation(N)
>>> Q.simulate_until_max_time(1440)
Yn cloi, gallwn ni cael rhestr o'r holl gofnodion data a chasglwyd gan holl gwsmeriaid a gorffennodd o leiaf un gwasanaeth, gan ddefnyddio'r dull :code:`get_all_records` o'r gwrthrych Simulation::
>>> recs = Q.get_all_records()
Mae hwn yn rhoi rhestr o tuples enwedig.
Mae pob tuple yn cynnwys y wybodaeth ganlynol:
- :code:`id_number`
- :code:`customer_class`
- :code:`node`
- :code:`arrival_date`
- :code:`waiting_time`
- :code:`service_start_date`
- :code:`service_time`
- :code:`service_end_date`
- :code:`time_blocked`
- :code:`exit_date`
- :code:`destination`
- :code:`queue_size_at_arrival`
- :code:`queue_size_at_departure`
Roddir mwy o wybodaeth ar bob un o rain yn :ref:`refs-results`.
Gan ddefnyddio cyfansoddiad rhestrau, gallwn ni cael rhestrau o ba bynnag ystadegyn a hoffwn::
>>> # Rhestr o amseroedd wasanaeth
>>> servicetimes = [r.service_time for r in recs]
>>> servicetimes
[2.94463..., 5.96912..., 18.80156..., ..., 33.18376...]
>>> # Rhestr o'r amseroedd aros
>>> waits = [r.waiting_time for r in recs]
>>> waits
[0.0, 0.0, 0.0, 0.20439..., ..., 0.0]
Nawr fe allwn gael ystadegau cryno trwy drin y rhestrau yma::
>>> mean_service_time = sum(servicetimes) / len(servicetimes)
>>> mean_service_time
10.647482...
>>> mean_waiting_time = sum(waits) / len(waits)
>>> mean_waiting_time
4.230543...
Rydym nawr yn gwybod yr amser aros cymedrig y cwsmeriaid!
Yn y tiwtorial nesaf fe fyddwn yn dangos sut i gael canlyniadau mwy cynrychioliadol (oherwydd fe efelychon ni am un diwrnod penodol yn unig fan hyn).
Gan ddefnyddio llyfrgelloedd arall gallwn dderbyn ystadegau cryno pellach.
Rydyn ni yn awgrymu `numpy `_, `pandas `_ a `matplotlib `_.
Mae'r rhain yn rhoi'r gallu i archwilio ystadegau arall, a phlotio.
Crëwyd yr histogram o amseroedd aros isod gan ddefnyddio matplotlib, yn defnyddio'r cod canlynol::
>>> import matplotlib.pyplot as plt # doctest:+SKIP
>>> plt.hist(waits); # doctest:+SKIP
.. image:: ../_static/tutorial_iii_waitshist.svg
:alt: Histogram o amseroedd aros ar gyfer Tiwtorial III.
:align: center
Os hoffwch chi weld pa mor brysur neu segur mae'r gweinyddion wedi bod trwy rediad yr efelychiad, gallwn edrych ar :code:`server_utilisation` y nod.
Hwn yw defnydd cymedrig pob gweinydd, sy'n hafal i faint o amser roedd y gweinydd yn brysur (gyda chwsmer), wedi rhannu gyda chyfanswm yr amser roedd y gweinydd ar ddyletswydd::
>>> Q.transitive_nodes[0].server_utilisation
0.75288...
Felly yn ein banc, ar gyfartaledd roedd y gweinyddion yn brysur 75.3% o'r amser.
Yn y tiwtorial nesaf dangoswn ni sut i ddefnyddio Ciw i gael canlyniadau dibynadwy, ac o'r diwedd ffeindio'r amser aros cymedrig ar gyfer y banc.