{"id":25006640,"url":"https://github.com/markandre13/tsim","last_synced_at":"2025-10-19T23:30:22.167Z","repository":{"id":132464108,"uuid":"364074569","full_name":"markandre13/tsim","owner":"markandre13","description":"Tiny Simulator","archived":true,"fork":false,"pushed_at":"2021-05-03T23:24:46.000Z","size":199,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T00:16:24.574Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/markandre13.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-05-03T22:13:56.000Z","updated_at":"2024-04-01T20:42:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"c88e2756-6d1b-4517-9857-602bac2d567d","html_url":"https://github.com/markandre13/tsim","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/markandre13/tsim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markandre13%2Ftsim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markandre13%2Ftsim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markandre13%2Ftsim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markandre13%2Ftsim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/markandre13","download_url":"https://codeload.github.com/markandre13/tsim/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markandre13%2Ftsim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279941799,"owners_count":26248369,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-19T02:00:07.647Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-05T01:50:28.229Z","updated_at":"2025-10-19T23:30:22.155Z","avatar_url":"https://github.com/markandre13.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tiny Simulator v0.1 alpha\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"tsim_dlg.png\"/\u003e\n\u003c/p\u003e\n\n# 1 Einleitung\n\n## 1.1 Aufgabenstellung\n\nTiny Simulator entstand als Praktikumsarbeit zur Vorlesung \nModulation/Simulation am Fachbereich Informatik der Universität Rostock zu der Aufgabenstellung\n\n\u003e Entwickeln Sie ein einfaches Simulationslaufzeitsystem das nach der aktivitätsorientierten Strategie arbeitet.\nTesten Sie Ihr Programm mit einem geeigneten Beispielmodell.\n\nMit Tiny Simulator lassen sich einfache Modelle von Bediensystemen zeichnen und anschließend simulieren.\n\n## 1.2 Mängel und was man noch ergänzen könnte\n\n* XACTs und Komponenten könnten eine Statistik führen.\n* Der Report könnte graphisch aufbereitet werden.\n* Die Warteschlange sollte zur Freigabe keine Verzögerung benutzen sondern sich nach den Folgekomponenten richten.\n* Start und Endzeit sollten frei wählbar sein. (Derzeit zwischen 0 und 200.)\n* Makrosprache (z.B. GNU Guile) zur Definition komplexer Vorgänge.\n* Die Gewichte der Verbindungen zu einer Komponente müßten der Übersichtlichkeit halber in einem Fenster gleichzeitig editierbar sein.\n* Die Verbindungen müßten ihre Gewichte anzeigen.\n* Gruppieren von Komponenten und Verbindungen, so daß diese objekt-orientiert geschachtelt werden können.\n* Animierte Simulation.\n* Scrollbalken im Editorfenster.\n* Druckausgabe.\n* und so weiter...\n\n## 1.3 Hilfsmittel\n\nZur Realisierung dieses Pro jekts wurde folgende Software verwendet:\n* GNU/Linux 2.0.33\n* XFree86 3.2\n* GNU C++ Compiler 2.7.2.2\n* TOAD 0.0.33\n* POV-Ray 3.0\n* The GIMP 0.99.14\n* XV 3.10a\n* LATEX2e\n* dvips\n* JOE 2.8\n\n# 2 Benutzung\n\n## 2.1 Arbeitsweise des Simulators\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"screenshot.png\"/\u003e\n\u003c/p\u003e\n\nMan zeichnet mehrere Komponenten und verbindet diese anschließend. Wird die Simulation gestartet, so erzeugen einige Komponenten sogenannte XACTs, welche dann die Verbindungen entlangwandern, bis sie schließlich wieder vernichtet werden.\n\n## 2.2 Erstellen einer Simulation\n\n### 2.2.1 Einfügen von Komponenten\n\nBewegen Sie die Maus auf eine der Komponenten G, Q, A oder T in der Toolbar, drücken Sie die mittlere Maustaste und ziehen Sie sie auf die Zeichenfläche.\n\n### 2.2.2 Verbinden von Komponenten\n\nWählen Sie zunächst den Toolbutton _Connect_ mit der linken Maustaste.\nNun können Sie Verbindungen erstellen indem Sie ein Startsymbol auswählen und von dort aus mit der gedrückten linken Maustaste die Verbindung zum Zielsymbol ziehen und über diesem fallen lassen.\n\n### 2.2.3 Verschieben von Komponenten\n\nWählen Sie den Toolbutton _Select_ und verschieben Sie die Komponente durch Greifen linken Maustaste.\n\n### 2.2.4 Editieren von Eigenschaften\n\nDie Eigenschaften der Symbole und Verbindungen lassen sich durch Drücken der rechten Maustaste editieren.\n\n## 2.3 Beschreibung der Komponenten\n\n**Generate** Erzeugt in einem bestimmten Zeitrythmus XACTS, welcher durch eine Dauer (Duration) +/- einen Radius (Range) angegeben ist.\n\n**Terminate** Vernichtet XACTS und besitzt keine weiteren Eigenschaften.\n\n**Advance** Verzögert das Weiterreichen von XACTs um eine bestimmte Dauer.\n\n**Queue** Eine First-In-First-Out Warteschlange mit Verzögerung. Das älteste XACT wird die angegebene Dauer verzögert. Wenn es anschließend die Queue verläßt rückt das danach eingetroffene XACT auf und wird ab diesem Zeitpunkt verzögert.\n\n**Verbindung** Jeder Verbindung ist ein Gewicht zugeordnet, mit welcher Wahrscheinlichkeit sie gewählt wird, wenn ein XACT die dem Pfeil der Verbindung abgewandte Komponente verläßt.\n\nAlle Gewichte einer Komponente verlassenden Verbindungen müssen sich zu 1.0 addieren.\n\nSollte dies nicht der Fall sein, wird jedes Gewicht durch die Summe aller Gewichte geteilt. Der Wert jedes einzelnen Gewichts sollte ab er trotzdem unter 1.0 bleiben, da es evtl. Probleme gibt beim Speichern und anschlieenden Laden.\n\n# 3 Programminterna\n\n## 3.1 Arbeitsweise der Komponenten\n\n**TShapeGenerator** Beim Start der Simulation wird für jeden Generator eine `TActWait` Aktivität registriert. Ist diese Aktivität beendet so wird ein neues XACT erzeugt, an eine der Folgekomponenten weitergegeben und und eine neue `TActWait` für diese Komp onente registriert.\n\n**TShapeTerminator** Vernichtet XACTS und erzeugt keine weiteren Aktivitäten.\n\n**TShapeAdvance** Für jedes eintreffende XACT wird eine `TActWait` Aktivität registriert und in dieser das betreffende XACT notiert.\n\nIst die Aktivität beendet, so gibt die Komponente das XACT an eine der Folgekomponenten weiter.\n\n**TShapeQueue** Für jedes eintreffende XACT wird eine `TActQueueWait` Aktivität registriert. Sobald diese gestartet ist, setzt sie in der Queue ein Flag, so daß alle anderen für diese Komponente registrierten `TActQueueWait` Aktivitäten bei der Anfrage an `Ready()` mit `false` antworten.\n\nIst die laufende Aktivität beendet, löscht sie das Flag und gibt somit die nächste anstehende Aktivität für die Queue frei.\n\n## 3.2 Implementierung\nDie für die Simulation nötigen Datenstrukturen und Algorithmen finden sich in den Dateien:\n\n**Simulate.??** Simulationsalgorithmus\n\n**Act.??** Aktivitäten\n\n**Shape.??** Komponenten\n\nZum leichteren Verständnis sind die Klassen und Funktionen nicht alphabetisch, sondern nach der Klassenhierachie und Abhängigkeiten geordnet und es werden nur die simulationsspezifischen Eigenschaften erklärt:\n\n## Globale Funktionen\n\n### void Simulate(TShapeBuffer\u0026, TConnectionBuffer\u0026)\n\nDer Simulationsalgorithmus nach der aktivitätsorientierten Strategie.\n\n### TTime Clock()\n\nLiefert die aktuelle Uhrzeit der Simulation zurück.\n\n### void Add2Boundlist(TAct*)\nFügt der Liste der gebundenen Aktivitäten eine neue hinzu.\n\n## class TAct\n\nDie Basisklasse aller Aktivitäten.\n\n### virtual bool Ready()\n\nGibt `true` zurück wenn die Aktivität gestartet werden soll.\n\n### virtual void Start() = 0\n\nMuß das `end` Attribut auf den Zeitpunkt setzen, zu dem die Aktivität beendet werden soll.\n\nDiese sollte nicht kleiner als der von `Clock()` gelieferte Wert sein, ansonsten läuft die Zeit rückwärts.\n\n### virtual void End()\n\nWird aufgerufen, wenn `now` gleich `end` ist. Danach wird das Objekt gelöscht.\n\n### void Bind()\nWenn während `End()` diese Funktion aufgerufen wird, dann wird die Aktivität nicht gelöscht sondern erneut benutzt, was sich aus Performancegründen gelegentlich anbietet.\n\n## class TShape\n\nDie Komponenten in der aktivitätsorientierten Strategie sowie deren graphische Repräsentation.\n\n### void Send(Txact)\n\nRuft `recv` in einem der angebundenen Shap es auf. Welches Shape die Benachrichtigung erhält ist vom Zufall und den der Vebindungen zugeordneten Wahrscheinlichkeiten abhängig.\n\n### virtual void recv(Txact)\nWird von Send aufgerufen, wenn ein XACT über er eine Verbindung eingetroffen ist.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkandre13%2Ftsim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarkandre13%2Ftsim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkandre13%2Ftsim/lists"}