Artikel aus dem Jahr 2020

Spezielle Abzählprobleme: Partitionen

Das Abzählproblem, nicht unterscheidbare Kugeln auf nicht unterscheidbare Urnen zu verteilen ist äquivalent zum Problem zu einer ganzen Zahl Z Zerlegung in L Summanden zu finden. Eine derartige Zerlegung wird als Partition bezeichnet. Wie viele Partitionen es gibt, wird für mehrere Fälle untersucht: Die Vertauschung der Reihenfolge zählt (oder zählt nicht) als neue Partition, die Null ist als Summand zugelassen, die Länge der Partition wird nicht festgelegt. Man kann für diese Abzählprobleme zwar Rekursionsformeln angeben, man kann mit einfachen Mitteln aber keine expliziten Formeln angeben, die die Rekursionsformeln lösen.

Spezielle Abzählprobleme: Kombinationen mit Wiederholungen und die Beweismethode Stars and Bars

Kombinationen mit Wiederholungen treten in mehreren Abzählproblemen auf, die zunächst sehr unterschiedlich wirken. Es wird ihre Äquivalenz gezeigt und die Formel hergeleitet, wie man die Anzahl aller Kombinationen mit Wiederholungen berechnet. Dazu verwendet man die Methode Stars and Bars. In den R-Skripten wird ein einfacher Algorithmus gezeigt, wie man die Menge alle Kombinationen mit Wiederholungen rekursiv berechnet.

Die Funktion sample() zum Erzeugen von Stichproben zu selbstdefinierten diskreten Zufallsvariablen

Die Funktion sample() wird verwendet, um Stichproben zu erzeugen. Sie lässt sich so konfigurieren, dass man die Wahrscheinlichkeitsverteilungen von beliebigen selbstdefinierten diskreten Zufallsvariablen einsetzen kann. Zudem kann man das Ziehen mit beziehungsweise ohne Zurücklegen realisieren.

Weitere Anwendungen von C-Zeigern: Der Zusammenhang von Feldern, Zeigern und Funktionen

Mit Hilfe von Zeigern kann man Funktionen realisieren, die Felder als Eingabewert beziehungsweise als Rückgabewert besitzen. Es ist sogar möglich, Zeiger auf Funktionen zu setzen und damit Funktionen als Eingabewerte anderer Funktionen einzusetzen.

Einführung in die Programmiersprache C: Funktionen

Mit Funktionen lassen sich Quelltexte besser strukturieren und wiederkehrende Aufgaben können mit wenig Aufwand ausgeführt werden. Zur Syntax der Definition von Funktionen gehören ihre Deklaration (Funktionskopf), die Implementierung und ihr Aufruf aus anderen Funktionen heraus. Diese Bestandteile und wie man Deklaration und Implementierung im Quelltext anordnet, werden erklärt. Mehrere Aufgaben mit ausführlichen Lösungen dienen der Veranschaulichung.

Einführung in die Programmiersprache C: Schleifen mit for und while

Vorgestellt werden die Schleife mit Zählvariable (for-Schleife), die kopfgesteuerte Schleife (while-Schleife) und die fußgesteuerte Schleife (do-while-Schleife). Ihre Behandlung erfolgt aber nur exemplarisch an typischen Anwendungen. Eine detailliertere Behandlung findet sich im entsprechenden Kapitel zu C++.

Einführung in die Programmiersprache C: HelloWorld und erste Programme

Die wichtigsten Konzepte der Programmiersprache C werden an einfachen Programm-Beispielen erläutert: HelloWorld-Anwendung zum Testen der Arbeitsumgebung, Konsolenein- und ausgaben, Deklaration und Initialisierung von Variablen, arithmetische und logische Operationen, Ablaufsteuerung mit Bedingung und Alternative. Zudem werden einige methodische Hinweise gegeben, wie man gerade als Anfänger beim Programmieren strukturiert vorgehen sollte.

Einführung des Begriffs der Faltung von Wahrscheinlichkeitsmaßen

Die Faltung von Wahrscheinlichkeitsmaßen ist eine der wichtigsten Begriffsbildungen, um Summen von unabhängigen Zufallsvariablen zu beschreiben, da sich mit ihr viele Eigenschaften von Zufallsvariablen und Wahrscheinlichkeitsverteilungen prägnant formulieren lassen und zahlreiche Bezüge zu anderen (scheinbar entfernten) Begriffen und Aussagen herstellen lassen. In diesem einführenden Kapitel wird auf exakte mathematische Definitionen und Beweise verzichtet, stattdessen soll der Begriff der Faltung an typischen Beispielen motiviert werden.

Die Familie der apply-Funktionen in R Teil 3: Weitere mit apply() verwandte Funktionen

Im dritten Teil über die Familie der apply-Funktionen werden zwei Gruppen von Funktionen vorgestellt: Zum Einen Funktionen für Wiederholungen (entweder Objekte oder Anweisungen), wodurch viele einfache Schleifen ersetzt werden können. Zum Anderen Funktionen, die Daten zuerst gruppieren und dann erst verarbeiten; hier werden zahlreiche Querverbindungen zu Dataframes und Faktoren hergestellt. Zur ersten Gruppe gehören rep() und replicate(), zur zweiten Gruppe ave(), by() und aggregate(), die alle sehr nahe verwandt sind mit tapply().

Eigenschaften von Zufallsvariablen: Die Varianz und die Standardabweichung

Nach dem Erwartungswert sind die Varianz und die Standardabweichung (als Wurzel der Varianz) die wichtigsten Kennzahlen einer Verteilung. Ist der Erwartungswert ein Maß für die Lage der Verteilung, beschreiben Varianz und Standardabweichung die Streuung der Werte einer Zufallsvariable um den Erwartungswert. Die Definition und Eigenschaften werden besprochen und an zahlreichen Beispielen erläutert.

Eigenschaften von Zufallsvariablen: Der Erwartungswert von diskreten und stetigen Zufallsvariablen

Der Erwartungswert einer Zufallsvariable ist die wichtigste Kennzahl, um Ergebnisse von Zufallsexperimenten zu beschreiben. Seine Definition und Eigenschaften werden ausführlich erläutert. An zahlreichen Beispielen wird seine Berechnung vorgeführt; dabei werden nebenbei wichtige Wahrscheinlichkeits-Verteilungen vorgestellt.

Konzentrations-Ungleichungen: Die Chernoff-Schranke für die Binomialverteilung

Die Herleitung der Chernoff-Schranke beruht auf der momentenerzeugenden Funktion. Für den Spezialfall der Binomialverteilung kann die optimale Chernoff-Schranke explizit berechnet werden und es geht außer der Markov-Ungleichung keine weitere Näherung ein. Um die Vorgehensweise bei der Berechnung der Chernoff-Schranke besser verständlich zu machen, werden alle Herleitungsschritte besprochen und mit zahlreichen Diagrammen veranschaulicht.

Wahrscheinlichkeitsverteilungen in R

Zu den wichtigsten Wahrscheinlichkeitsverteilungen gibt es Funktionen zum Berechnen der Wahrscheinlichkeitsdichte, der Verteilungsfunktion, des p-Quantils und zum Erzeugen von Zufallszahlen. Für ausgewählte Verteilungen (Binomialverteilung, Poisson-Verteilung, kontinuierliche Gleichverteilung und Normalverteilung) werden diese Funktionen vorgestellt. Dabei werden typische Anwendungen aus der Wahrscheinlichkeitsrechnung und Statistik gezeigt, die zugleich einige Eigenschaften dieser Verteilungen illustrieren.

Grundbegriffe der Wahrscheinlichkeitsrechnung: Diskrete und stetige Zufallsvariablen

Zufallsvariablen können diskrete oder kontinuierliche Werte annehmen. Die mathematische Beschreibung unterscheidet sich, da die Wahrscheinlichkeiten der Werte der Zufallsvariable entweder mit Folgen oder indirekt über eine Wahrscheinlichkeitsdichte angegeben werden. Diese Beschreibung wird an speziellen Verteilungen demonstriert: diskrete Gleichverteilung, Poisson-Verteilung, kontinuierliche Gleichverteilung, Standard-Normalverteilung.

Konzentrations-Ungleichungen: Die Tschebyscheff-Ungleichung

Die Tschebyscheff-Ungleichung als einfachste Konzentrations-Ungleichung wird aus mehreren Perspektiven beleuchtet: Es werden Beispiele für ihre typische Anwendung besprochen; es wird ein direkter Beweis gegeben; es wird gezeigt, dass sie als Spezialfall der verallgemeinerten Markov-Ungleichung aufgefasst werden kann; es wird diskutiert, wie gut die Abschätzung ist, die sie liefert. In den R-Skripten werden die Berechnungen aus den Anwendungsbeispielen ausgeführt, die man ohne Programmierung kaum bewältigen könnte.

Grundbegriffe der Wahrscheinlichkeitsrechnung: Die Zufallsvariable

Zufallsvariablen sind die geeignete Begriffsbildung um sowohl Ereignisse als auch deren Wahrscheinlichkeiten treffend zu beschreiben und zu berechnen. In späteren Anwendungen der Wahrscheinlichkeitsrechnung werden Zufallsvariablen ständig eingesetzt. Hier wird zunächst gezeigt, wie Zufallsvariablen mit der Ereignisalgebra und dem Wahrscheinlichkeitsmaß zusammenhängen und sich so nahtlos in den Aufbau der Wahrscheinlichkeitsrechnung einfügen. In den R-Skripten wird gezeigt, wie man Zufallsvariable leicht modellieren kann.

Subscription zu Query- und Route Parametern in Angular/RxJS

Beim Entwickeln von Angular-Anwendungen kann es erforderlich sein, sowohl Query- als auch Route-Parameter gleichzeitig auszulesen. Dies ist nicht ganz trivial, da in Angular Subscriptions für Query- und Route-Parameter unabhängig voneinander und asynchron ausgeführt werden. Dadurch kann es passieren, dass die Daten aus den Route-Parametern noch nicht geladen sind, während bereits auf die Query-Parameter zugegriffen wird. Dieser Artikel zeigt, wie man diese beiden Arten von Parametern synchron mit Hifle von RxJS auslesen kann.

Der mehrarmige Bandit (multi-armed bandit): Implementierung eines Simulations-Algorithmus in R

Ein Algorithmus zur Simulation von N Spielen am k-armigen Banditen (multi-armed bandit) wird in R implementiert. Der Algorithmus erlaubt die Auswahl einer Strategie zur Wahl des nächsten zu spielenden Armes. Als Strategien stehen die im Artikel "Der mehrarmige Bandit (multi-armed bandit): Simulationen mit einfachen Algorithmen vorgestellten Strategien zur Auswahl, es können aber leicht weitere Strategien implementiert und eingefügt werden.

Warum sind Strings in Java "Immutable"?

Eine der grundlegenden Eigenschaften von Strings in Java ist ihre Unveränderlichkeit, auch bekannt als Immutability. Doch was genau bedeutet es, dass Strings unveränderlich sind, und welche Vorteile bringt diese Eigenschaft mit sich? Mehr in diesem Artikel.

Der mehrarmige Bandit (multi-armed bandit): Simulationen mit einfachen Algorithmen

Um beim Spiel am mehrarmigen Banditen einen möglichst hohen Gewinn zu erzielen, benötigt man eine Strategie, die einen Kompromiss zwischen Exploration und Exploitation herstellt. Es werden einfache Algorithmen vorgestellt, die dieses Problem lösen und ihre Eigenschaften werden mit Hilfe von Simulationen untersucht.

H2 Datenbank mit einer Spring Boot Applikation

Spring Boot und H2 Datenbanken sind eine perfekte Kombination um schnell und unkompliziert eine Anwendung auszuführen. Das liegt auch daran, dass die Integration von H2 in Spring Boot einfach ist und nur nur minimale Konfiguration erfordert. Als dateibasierte Datenbank bietet H2 eine flexible und leichte Möglichkeit, Daten zu speichern, was sie besonders nützlich für Testzwecke macht. In diesem kurzen Artikel zeigen wir, wie man über eine Spring Boot Anwendung auf die H2-Console zugreifen kann.

Der mehrarmige Bandit (multi-armed bandit): Das Dilemma zwischen Exploration und Exploitation

Beim mehrarmigen Banditen oder genauer k-armigen Banditen kann man ein Glücksspiel durch Betätigen eines Armes auslösen. Mathematisch modelliert werden sie durch Zufallsvariablen mit unterschiedlichen Erwartungswerten. Möchte man am k-armigen Banditen N Spiele durchführen und dabei einen möglichst hohen Gewinn erzielen, gerät man in ein Dilemma: Einerseits muss man alle Arme untersuchen, um ihre Kennzahlen zu schätzen (Exploration), andererseits möchte man möglichst oft den besten Arm betätigen (Exploitation). Im nächsten Kapitel werden dann Algorithmen entwickelt, die versuchen einen Kompromiss zwischen Exploration und Exploitation herzustellen.

Berechnung der Gewinn-Wahrscheinlichkeiten für das Zahlenspiel 3-5-11 und Durchführung von Simulationen mit Zufallszügen

Ein wichtiger Bestandteil des Monte-Carlo-Tree-Search-Algorithmus ist es, aus einer gegebenen Spielsituation zahlreiche Spiele auszuführen, bei denen die Züge zufällig ausgewählt werden. Die Ergebnisse dieser Simulationen bestimmen dann, wie der Algorithmus den Spielbaum weiter untersucht. Um besser nachvollziehen zu können, wie der Monte-Carlo-Tree-Search-Algorithmus den Spielbaum untersucht und für die möglichen Züge Gewinn-Wahrscheinlichkeiten schätzt, werden für das Zahlenspiel 3-5-11 die Formeln hergeleitet, wie man zu gegebenem Anfangswert die Gewinn-Wahrscheinlichkeit berechnen kann, wenn sämtliche Züge eines Spiels zufällig ausgewählt werden (mit jeweils gleicher Wahrscheinlichkeit). Ferner werden Simulationen mit unterschiedlichen Anzahlen von Spielen durchgeführt, um zu beurteilen, wie gut die Ergebnisse der Simulation mit den berechneten Gewinn-Wahrscheinlichkeiten übereinstimmen.

Lösung von Abzählproblemen durch Rekursion

Als weitere Methode zur Lösung von Abzählproblemen wird die Rekursion vorgestellt. Dies geschieht am Beispiel eines Zahlenspiels, für das der vollständige Spielbaum entwickelt wird. Dieser wirkt zwar sehr unregelmäßig und kann mit den bekannten kombinatorischen Formeln nicht bewältigt werden, aber aufgrund seiner rekursiven Struktur lassen sich Abzählprobleme auf das Aufstellen der Rekursionsformel und der Behandlung des Basisfalls zurückführen.

Ein Zahlenspiel zur Erläuterung des Monte Carlo Tree Search Algorithmus

Um die Vorgehensweise beim Monte-Carlo-Tree-Search-Algorithmus besser erklären zu können, wird zunächst ein einfaches Zahlenspiel vorgestellt und analysiert. Es handelt sich um eine Variation des Nim-Spiels, für das man eine einfache Gewinnstrategie angeben kann und bei dem mit dem Anfangswert bereits festgelegt ist, welcher Spieler den Gewinn erzwingen kann. Dies hat den Vorteil, dass man später besser nachvollziehen kann, wie der Monte-Carlo-Tree-Search-Algorithmus vorgeht.