faecher:informatik:oberstufe:machine_learning:mljs:markow:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:machine_learning:mljs:markow:start [19.02.2025 18:56] Frank Schiebelfaecher:informatik:oberstufe:machine_learning:mljs:markow:start [19.02.2025 20:52] (aktuell) – [Die wichtigsten Bestandteile:] Frank Schiebel
Zeile 159: Zeile 159:
  
 Vollziehe am Wort ''kakaopulver'' mit dem Grad 2 nach, was die beiden Methoden machen. Welche Übergänge sind am Ende des Lernprozesses in der HashMap ''uebergaenge'' abgelegt? Vollziehe am Wort ''kakaopulver'' mit dem Grad 2 nach, was die beiden Methoden machen. Welche Übergänge sind am Ende des Lernprozesses in der HashMap ''uebergaenge'' abgelegt?
 +
 +Du kannst das mit dem Markow-Texter überprüfen, indem du den Text ''kakaopulver'' in die Datei ''experiment.txt'' einträgst und das Programm lernen lässt. 
  
 ++++ Hilfestellung: Schritt 1 | ++++ Hilfestellung: Schritt 1 |
Zeile 171: Zeile 173:
 ++++ ++++
  
 +++++ Hilfestellung: Ergebnis |
 +{{ :faecher:informatik:oberstufe:machine_learning:mljs:markow:lernen_fertig.png |}}
 +++++
 +
 +----  
 +{{:faecher:informatik:oberstufe:machine_learning:mljs:markow:puzzle.png |}}Die Methoden ''erzeugeText(String anfang, int laenge)'' und ''zufaelligerUebergang(String aktuellerZustand)'':
 +
 +<code java>
 +/**
 +*   Erzeuge Text
 +*/   
 +public String erzeugeText(String anfang, int laenge) {
 +
 +  String aktuellerZustand = anfang;
 +  StringBuilder resultat = new StringBuilder(anfang);
 +
 +  for (int i = 0; i < laenge; i++) {
 +      char naechstesZeichen = zufaelligerUebergang(aktuellerZustand);
 +      aktuellerZustand = aktuellerZustand.substring(1) + naechstesZeichen;
 +      resultat.append(naechstesZeichen);
 +  }
 +  return resultat.toString().replaceAll("N","\n"); 
 +}
 +
 +/**
 +* Wählt ein zufälliges Folgezeichen. Die Häufigkeit der Zeichen wird 
 +* nicht berücksichtigt. 
 +*/
 +char zufaelligerUebergang(String aktuellerZustand) {
 +  Map<Character, Integer> folgeZeichen = uebergaenge.get(aktuellerZustand);
 +
 +  if(folgeZeichen != null) {
 +      // Zufalsgenerator initialisieren
 +      Random generator = new Random();
 +      // Die Keys der HashMap in ein Array umwandeln. Diese Methode 
 +      // funktioniert nur, wenn alleZeichen eine Array vom Typ 
 +      // Object ist. 
 +      Object[] alleZeichen = folgeZeichen.keySet().toArray();
 +      // mit generator.nextInt(alleZeichen.length) wird eine Zufallszahl erzeugt
 +      // die über den Index ein zufälliges Element auswählt. 
 +      // Bevor das Element zurückgegen werden kann, muss es nach char 
 +      // gecastet werden.
 +      return (char) alleZeichen[generator.nextInt(alleZeichen.length)];
 +  } else {
 +      return ' ';
 +  }
 +}
 +</code>
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A4) === 
 +
 +Vollziehe nach wie das Erzeugen von Texten abläuft.
 +
 +  * Erstelle eine Methode ''public char gewichteterUebergang(String aktuellerZustand)'', der bei der Auswahl des nächsten Zeichens die Häufigkeiten der Zeichen berücksichtigt
 +  * Für Fortgeschrittene: Dupliziere den Markow-Texter in ein neues BlueJ-Projekt und passe dieses so an, dass er Wörter lernt anstatt Zeichen, so dass das jeweils nächste Wort anhand der vorhergehenden Worte bestimmt wird. 
  • faecher/informatik/oberstufe/machine_learning/mljs/markow/start.1739991387.txt.gz
  • Zuletzt geändert: 19.02.2025 18:56
  • von Frank Schiebel