Diverse Apps DQR5 KI

Allgemeine Tools
🔥 https://iludis.de/Tools/markdown-ansicht.html
Formatiert .md-Dateien zur besseren Lesbarkeit + Speichern

🔥 https://iludis.de/Mistralchat/Chat_App.html
Webbasiertes LLM-Chat-Interface

https://iludis.de/Tools/bildskalierung.html
Skalierungs- und Optimierungsapp für Bilddateien

https://iludis.de/Mistralchat/FIM_App.html
Fill-in-the-middle Coding App (benötigt API-Key)

https://iludis.de/Mistralchat/Mistral_App.html
Chat-Interface speziell für Mistral (benötigt API-Key)

Decision Tree Apps

Training eines Decision Trees im Browser


https://iludis.de/DecTree/indexNeu.html
Training eines einfachen Decision Trees

TasseStiftSchereAutosApfelBirneOrange
Beispieldateien als CSV

https://iludis.de/Mistralchat/CSV-Aufbereitung.html
Nützliche Datenaufbereitungs-App


Theorie zu Decision Trees und Random Forests

https://iludis.de/DecTree/bagging_demo_iris.html
Visualisierung des Bagging-Algorithmus bei Random Forests

https://iludis.de/DecTree/boosting_demo_regression.html
Gradient Boosting verstehen: Interaktive Simulation des Konzepts

https://iludis.de/DecTree/pruning_demo_ccp.html
Pre- und Post-Pruning von Decision Trees als interaktive Simulation


Einsteiger-Apps für ‚junge Data Scientists‘

Der Feuerwächter


Wie eine KI-Pipeline funktioniert:

https://iludis.de/TomateErdbeere/index.html
Ziehe drei verschiedene Objekte ins Messfenster


DecisionTrees für Mikrocontroller aufarbeiten


Eine .csv-Datei hochladen und das trainierte Model als .h-Datei runterladen.
Passend zum Kurs: „KI auf dem Mikrocontroller, Teil 1″

Webseite: flexible_decision_tree_trainer.html
Beispieldaten: muster.csv
Voraussetzung: Label steht in der csv-Datei ganz rechts.

CNN: Theorie und Anwendung

CNN Training interaktiv im Browser

https://iludis.de/CNN_sim/CNN_sim.html

Datensätze:


CNN-Theorie
https://iludis.de/Tools/cnn-labor-Teil1_faltung.html
Grundlagen des Faltungskernels

https://iludis.de/Tools/cnn-labor-Teil2_pipeline.html
Visualisierung der CNN-Pipeline

Conv2D-Parameter-Explorer
Wie setzen sich CNN-Netze zusammen?

Berechnung trainierbare Parameter
Interaktive Simulation der Parameteranzahl für CNN-Netze

Visualisierung Rezeptives Feld
Was sieht ein CNN-Netz und wie berechnet man das?


CNN für die Mittelstufe

Unterrichtsidee
Erprobt im Hector-Unterricht Kurs ‚ML für Mikrocontroller‘ und Inf-AG.

1. Bitmap erstellen
Klicke auf die schwarze Fläche und erstelle ein Bitmap
in Form einer 1D-Liste. Diese kann in die Zwischenablage
kopiert werden.

2. Jupyter-Notebook für Bitmaps aus 1D-Arrays
Aus den obigen Bitmaps mit numpy und OpenCV
einfach Bitmaps erstellen:
https://iludis.de/bitmapMaker/Simple_Bitmaps.ipynb

3. Grayscale-Bitmap im MNIST-Format erstellen.
Erstelle ein 255-Graustufen-Bild mit 28×28 Pixeln,
exportiere dessen Werte per Knopfdruck in die
Zwischenablage und füge sie ins Conv2D-Applet ein:

4. Optimale Convolution-Kernel entwickeln.
Wie in einem CNN: Teste verschiedene Convolution
Kernel aus, berechne ein MaxPooling(2,2) und finde
heraus, welche Pixelmuster man so bestimmen kann.

Word2Vec: Training & Anwendung

Interaktives Word2Vec Training im Browser

Inspiriert durch die Word2Vec-Implementierung von
Xin Rong (2015): https://github.com/ronxin/wevi

Drei Beispiel-Datensätze:


Interaktive App für vortrainierte Wortvektoren

https://iludis.de/WordVektor/index.html

Die Vortragsfolien zum Aufbau von LLM
Prinzip: Wie funktioniert ein Transformer?

Materialien diverser Lehrerfortbildungen

Einführung in KI im Unterricht
01_Lernen_ist_Beziehung_Rollenwandel_KI_Zeitalter
02_ContextEngineering_Leitfaden
03_Behoerden_LLM_vs_Original
04_KI_Unterricht_WasGeht_WasNicht

Richtlinien für KI im Unterricht
01_KI_Unterricht_GoldeneRegeln
02_KI_BildungInternational

Wie betreibt man LLM im lokalen Netzwerk
PaedT05_LokaleLLM_Maerz2026

Unterlagen des LISA-Workshops vom 2. Juli 2026:
https://iludis.de/wp-content/uploads/2026/07/IntelAI4Youth_02072026.zip

Mathematik & Theorie in KI/ML

Diverse Grundlagen-Apps

🔥 https://iludis.de/Tools/approximationstheorem.html
Visualsierung des fundamentalen Approximationstheorems

🔥 https://iludis.de/Tools/bias_varianz_simulator.html
Viele-Welten-Ansatz des Bias-Variance-Tradeoffs

https://iludis.de/DecTree/rf_bias_varianz_simulator.html
Viele-Welten-Ansatz des Bias-Variance-Tr. mit Random Forest

https://iludis.de/Tools/visualisierung_layer.html
Visualisierung von Lernverhalten Neuronaler Netze


Covarianz interaktiv

Schritt-für-Schritt Berechnung von Covarianz und Korrelation


Simulation einer Normalverteilung mit Boxplot

Simulation einer normalverteilten Punktewolke mit Boxplot und CSV-Export


Visualisierung eines Pascal-Dreiecks

Addon: Simulation Pascaldreieck mit generischen Datensätzen


Übergang Binomial-zu-Normalverteilung

Addon 2: Simulation des Übergangs von Binomial- zu Normalverteilung

Inf4Stünder Abitraining, Teil 1

Übungsaufgabe in Java: Baue eine App zur Sortierung von Arrays

0. Schaut euch diese Aufgaben an, sie ähneln denjenigen auf SoloLearn:
https://www.w3schools.com/java/java_exercises.asp

  1. Erstelle (mit UML) ein kleines Klassensystem aus maximal drei Klassen. Tools dazu:
    Online UML-Editor von VisualParadigm:
    https://online.visual-paradigm.com/drive/#diagramlist:proj=0&new=ClassDiagram

    DrawIO, haben wir auch für die ER-Diagramme verwendet, kann Class-Diagramme:
    https://app.diagrams.net/

    oder per Modelio, wie im Unterricht:
    https://www.modelio.org/downloads/download-modelio.html

  2. Baue die App in einer IDE deiner Wahl nach. Tool dazu:
    Online-Java-Compiler: repl.it
    (hier lassen sich verschiedene Klassen anlegen und referenzieren! Sehr hübsch)

    Oder IntelliJ, wie im Unterricht:
    https://www.jetbrains.com/de-de/idea/download/other.html

  3. Erzeuge ein Array mit 20 Zufallszahlen
  4. Sortiere die Liste mittels BubbleSort oder SelectionSort oder Quicksort
  5. Gib die sortierte Liste aus.

 

Zum Ausprobieren, ob die IDE funktioniert, wie sie soll, hier ein kleines Klassensystem
aus drei Klassen, erstellt in Repl.it:

class Main {
  private subclass[] subclassarray =  new subclass[10];
  public static void main(String[] args) {
    System.out.println("Ein Array von Subklassen");
    subclassholder SuClHo = new subclassholder(10);
  }
}
public class subclass{
  private int parameter;
  public subclass(int x){
    System.out.println("Parameter: " + x);
    this.parameter = x;
  }
  public int getParameter(){
    return this.parameter;
  }
  public void setParameter(int y){
    this.parameter = y;
  }
}
public class subclassholder{
  private subclass[] subclassarray;
  public subclassholder(int anzahl){
    subclassarray = new subclass[anzahl];
    for(int i=0; i<anzahl; i++){
      subclassarray[i] = new subclass(i*10);
    }
  }
}

Zusatzaufgabe: Was macht dieser Code und wieso? 😉

Kellerautomat in Python

L(PDA) = {anbn | n>0}

class Stack:
    def __init__(self):
        self.stackliste = []
        self.stacklistenlaenge = 0

    def pop(self):
        if self.istLeer() == False:
            self.stacklistenlaenge = self.stacklistenlaenge - 1
            return self.stackliste.pop()

    def peek(self):
        if self.istLeer() == False:
            return self.stackliste[self.stacklistenlaenge - 1]

    def push(self, inhalt):
        self.stackliste.append(inhalt)
        self.stacklistenlaenge = self.stacklistenlaenge + 1

    def getStacklistenlaenge(self):
        return self.stacklistenlaenge

    def istLeer(self):
        if self.stacklistenlaenge <= 0:
            return True
        else:
            return False
#---------------------------------------------------
def Zustandsuebergangsfunktion(symbol):
    global state
    if state == "q0":
        if symbol == "a":
            state = "q1"
            pdaStack.pop()
            pdaStack.push("Z")
            pdaStack.push("P")
            return True
        else:
            return False
    if state == "q1":
        if symbol == "a":
            pdaStack.pop()
            pdaStack.push("P")
            pdaStack.push("P")
            state = "q1"
            return True
        elif symbol == "b":
            pdaStack.pop()
            state = "q2"
            return True
        else:
            return False
    if state == "q2":
        if symbol == "b":
            if pdaStack.peek() == "P":
                state = "q2"
                pdaStack.pop()
                if pdaStack.peek() == "Z":
                    state = "q3"
                return True
        else:
            return False
    if state == "q3":
        if pdaStack.peek() == "Z":
            pdaStack.pop()
            return True
        else:
            return False
#---------------------------------------------------
def Akzeptor(wort):
    global state
    for i in range(len(wort)):
        testsymbol = wort[i]
        aktzustand = Zustandsuebergangsfunktion(testsymbol)
        print("Zustand:     ", state, "\tAktueller Stack:  ", pdaStack.stackliste)
        if aktzustand == False:
            return False
    if pdaStack.peek() == "Z" and state == "q3":
        return True
    else:
        return False
#---------------------------------------------------

pdaStack = Stack()
pdaStack.push("Z")
state = "q0"
print("Startzustand:", state, "\tLeerzustand Stack:", pdaStack.stackliste)

ergebnis = Akzeptor("aaaaabbbbb")
print("---------\nAkzeptiert?",    ergebnis)

 

Musterlösung Haha-Automat (Akzeptor)

L(DEA) ={(ha)n! | n>0)

state = "q0"
def Zustandsuebergangsfunktion(symbol):
    global state
    if state == "q0":
        if symbol=="h":
            state = "q1"
            return True
        else:
            return False
    if state == "q1":
        if symbol=="a":
            state = "q2"
            return True
        else:
            return False
    if state == "q2":
        if symbol=="!":
            state = "q3"
            return True
        elif symbol =="h":
            state = "q1"
            return True
        else:
            return False
    if state == "q3":
        return False

def Akzeptor(wort):
    global state
    for i in range(len(wort)):
        testsymbol = wort[i]
        aktzustand = Zustandsuebergangsfunktion(testsymbol)
        if aktzustand == False:
            print("war nix")
            return False
    if state == "q3":
        print("stimmt!")
        return True

ergebnis = Akzeptor("hahahaha!")
print(ergebnis)