Repository navigation
Skill‐Lib
Der Pfadplanungsalgorithmus wird in einer separaten Bibliothek entwickelt: https://github.com/e-Learning-by-SSE/nm-skill-lib.
Bei dem Projekt handelt es sich um ein NX / TypeScript Projekt. Entsprechend ist der Code in dem Ordner src/lib zu finden.
- In der obersten Ebene finden sich die Elemente, die von außerhalb aufgerufen werden können sollen (Interface):
-
pathPlanner.ts: Schnittstelle für die bereitgestellten Funktionen -
types.ts: Typdefinitionen die für die Verwendung der Bibliothek benötigt werden. Die Typen sind dabei so gestaltet, dass sie nur die minimalen Properties definieren, die für die Verwendung des Algorithmus' benötigt werden. So soll die Bibliothek sowohl für SEARCH als auch für Digital-Campus verwendbar gehalten werden. Mit Hilfe von Generics können zueinander in Beziehung stehende Klassen (z.B.LearningUnit,CostFunctionundHeuristicFunction) in den Subprojekten konsistent erweitert werden, ohne die Funktionsweise des Algorithmus zu beeinträchtigen. So kann beispielsweise eine Kostenfunktion entwickelt werden, welche auf SEARCH-spezifische Attribute zurückgreift, um so den Pfad bezüglich der Lernenden-Präferenzen zu adaptieren (z.B. bevorzugte Learning-Density). Dieses sollte ebenfalls in der Heuristik berücksichtigt werden. Eine Erweiterung in der Bibliothek ist dazu nicht notwendig. -
costFunctions.tsImplementierung einer Standardkostenfunktion, um eine Adaption des Lernpfades basierend auf der Lerndauer zu ermöglichen.
-
-
fastDownward: Hierbei handelt es sich um den genutzten Planungs-Algorithmus um sowohl einen adaptierten Pfad zu finden als auch um ggf. fehlende Pfadbestandteile und alternativ Pfade zu bestimmen. Konkret wird ein FastDownward-Ansatz genutzt, welcher analog zu Dijkstra/A* mit Hilfe einer Kostenfunktion und einer Heuristik den kürzesten Pfad zu einem Ziel bestimmt. Anders als bei den genannten Graph-Algorithmen wird hier aber jeweils ein Zustand ermittelt (gelernteSkills). So dass u.U. das Erlernen vonSkillscheinbar unterschiedlicher Pfade notwendig sein kann, bevor der eigentliche Pfad fortgesetzt wird (insbesondere bei Konjunktionen notwendig). -
backward-search: Hierbei handelt es sich um eine vorgelagerte Suche. Diese soll die Anzahl der verwendbarenLearningUnits und damit den Suchraum einschränken, bevor der Planungs-Algorithmus gestartet wird. Dazu werden ausgehend vom zu erlernenden Ziel rekursiv alle zu erlernenden Vorgänger bestimmt bis die Ausgangslage erreicht wird. Dies eliminiert alle unrelevantenSkills undLearningUnits aber bestimmt noch keinen Pfad. Somit wird die Performance für den sehr rechenentensiven Planungs-Algorithmus (𝒩𝒫-hart) massiv erhöht. -
util: Weitere Utility-Funktionen.
Derzeit ist die Bibliothek noch als Git Sub-Module eingebunden. Das bedeutet, dass wenn das Projekt ausgecheckt wird, die Bibliothek direkt mir ausgecheckt werden kann in dem man beim Klonen die Option "recursive Checkout" auswählt. Der Code befindet sich dann innerhalb des Ordners nm-skill-lib.
Insofern es Änderungen in der Bibliothek gibt, muss die entsprechende Revision (Branch / Hash) in der Bibliothek gepullt werden und anschließend im Service-Projekt gepusht werden, damit im Release dieser Stand verwendet wird.
Zukünftig soll automatisch ein NPM-Package gebaut und releast werden. Dann könnte die passende Version über npm bezogen werden. Dafür wird dann für GitHub aber auch ein Token benötigt, mit dem man lesend auf Packages zugreifen kann.