R. den Ouden
Simulatie met Java®
Computeropdracht,
Rapport 97.3.LT.4902, Transporttechnologie, Logistieke Techniek.
Java is een programmeertaal die door zijn toepassingsmogelijkheden voor
Internet steeds belangrijker wordt. Er zijn op de markt diverse
simulatietools voor Java beschikbaar, zoals JavaSim en SimJava. Geen van
deze tools echter maken Java tot een geschikte taal voor het uitvoeren van
discrete-event simulaties.
De opdracht was het ontwikkelen van een simulatie-unit inclusief de
event-scheduler voor Java. Hierbij diende het bekende 'sluismodel' in Java
geprogrammeerd te worden, gebruikmakend van de ontwikkelde simulatie-unit.
De simulatiemethodes van de simulatie-unit dienden zoveel overeen te komen
met de terminologie en principes van Must.
Na eerst kennisgemaakt en enige programmeerervaring opgedaan te hebben met
Java werd met het programmereren van het sluismodel begonnen. Hierbij werd
voor elke simulatiemethode zoals 'start', '(re)activate', 'passivate', 'hold' a
and 'stop' een aparte method (Java-equivalent van de Pascal-procedure)
geprogrammeerd. Uiteindelijk ontstond hierdoor een verzameling van
simulatie-methoden die uiteindelijk alleen nog maar in een aparte package
(Java-equivalent van de Pascal-unit) geplaatst hoefde te worden. Hierdoor is het
mogelijk in elk Java-programma deze simulatie-methoden te gebruiken door in de
class-definition (de syntax van een class) de package te declareren.
Tijdens de ontwikkeling van het simulatieprogramma is er voor gekozen om voor
elke component een aparte class te definieren die afgeleid is van het
thread-type. Door van deze threads gebruik te maken is het mogelijk om
components tijdelijk te stoppen, wat essentieel is voor het uitvoeren van
discrete-event simulaties.
Aangezien Java de mogelijkheid biedt tot
multi-threading, d.w.z. het aktief laten zijn van meerdere threads, was
het bij het ontwikkelen van de event-scheduler van essentieel belang er
voor te zorgen dat vanwege het discrete-event principe er maar een
component tegelijkertijd aktief was.
De conclusies m.b.t. het ontwikkelen van de simulatie-unit en het
gebruik van Java zijn als volgt:
- Het is mogelijk om met Java te simuleren volgens het discrete-event principe;
- Java is zeer gebruiksonvriendelijk in het file/project-gebruik. Je moet erg
oppassen dat als je een bestaande file wijzigt, de oorspronkelijke file niet
meer beschikbaar is.
- Het gebruik van threads voor de procesbeschrijving van een component biedt
als voordeel dat van het multi-threading-principe gebruik gemaakt kan worden.
Dit maakt het vrij eenvoudig om er voor te zorgen dat componenten tijdelijk
stil kunnen worden gezet ('event-based'-principe);
- Er ontstaat vaak de situatie dat er verschillende events met dezelfde
eventtime ontstaan. Dit veroorzaakt soms problemen m.b.t. event-volgorde.
De gebruiker van de simulatie-package dient er attent op te zijn de events
in de juiste volgorde gemaakt en uitgevoerd worden;
- Java kan maximaal maar 1677 threads aktief laten zijn. Op het eerste gezicht
lijkt dit veel, bij simulaties met een lange runtime en/of veel objecten zal
dit snel tot problemen leiden.
Alhoewel de ontwikkelde simulatie-unit het mogelijk maakt het sluismodel
in Java te programmeren en simuleren, is er uiteraard nog geen sprake van
een compleet, betrouwbaar en gebruiksvriendelijke simulatie-tool zoals
Must of Prosim. Daarom worden er in dit rapport de volgende aanbevelingen
gedaan:
- Test en ontwikkel het simulatie-package verder tot een 'volwaardige'
simulatie-tooi;
- Bekijk of het mogelijk is om de componenten ook echt simultaan te laten
runnen, door van multi-threading gebruik maken. Dit sluit nauwer aan bij
de werkelijkheid en kan het hele eventschedulingsprincipe vereenvoudigen
of zelfs overbodig maken;
- Volg kritisch de ontwikkelingen van de simulatie-tools die simulatie in
Java mogelijk maken. Het is zinloos om zelf een simulatietool te
ontwikkelen als er een goed functionerende beshcikbaar is op de markt (en
met name op Intemet).
Rapporten studenten Logistieke Techniek
Gewijzigd: 1998.05.02;
logistics@3mE.tudelft.nl
, TU Delft
/ 3mE
/ TT
/ LT.