Mikroökonomie
Vorlesung 4

Prof. Frank Pisch PhD

Einführung

Motivation: Strategische Preis- und Werbeinteraktion

CNN

Bekriegen sich seit etwa 130 Jahren mit Preissenkungen, z.B. während des Superbowls

  • Eine Preissenkung des einen führt typischerweise zu Preissenkungen durch den anderen

Ähnlich robust geht es im Werbemarkt zu, wo beide extrem aktiv und kreativ agieren (“Cola-Wars” in den 1970ern und 80ern)

Motivation: Strategische Mengeninteraktion

Investitionen in Produktionskapazität sowie Teile und andere Inputs determinieren den Kampf

  • Höhere Mengen des einen Unternehmens führen zu Reduktionen beim anderen, um Preise zu stabilisieren (der Markt ist überschaubar)

Design- und Modellentscheidungen werden hochstrategisch getroffen

Motivation: Weitere Anwendungsbereiche der Spieltheorie

Wirtschaftswissenschaften:

  • Auktionen, z.B. von Rechten zur Nutzung von Bandbreiten für Mobiltelefonie, Organspende, CO2 Lizenzen, öffentliche Beschaffung

  • Ökonomische Beziehungen wie Arbeitgeber-/Arbeitnehmer-Verhältnisse oder bilaterale Kaufentscheidungen sind von strategischen Motiven bestimmt (z.B. Informationsasymmetrien und Vertragsunvollständigkeit, Karrieremotive)

Politikwissenschaften:

  • Politischer Wettbewerb zwischen Parteien und Kandidat:innen

  • Internationale Konflikte, z.B. ökonomischer oder militärischer Natur

Biologie und Ökologie:

  • Evolutionstheorie, insbesondere stabile Strategien wie Aggression, Kooperation, Altruismus

Computerspiele, Physik, Informatik, etc. pp.

Überblick und Resourcen

Ziele

  • Die weitverbreitete Sprache der Spieltheorie erlernen und benutzen

  • Gleichgewichtskonzepte verstehen und benutzen

  • Strategische Interaktionen modellieren

Ressourcen

Kapitel im Varian: 29, 30

YouTube, ChatGPT, Spiele-App am Ende

Definitionen, Konzepte und ein erstes Beispiel

Beispiel: Gefangenendilemma

Das vielleicht bekannteste Spiel ist das Gefangenendilemma

  • Zwei Täter verüben einen Banküberfall, können aber gefasst werden

  • Sie werden in zwei unterschiedliche Zellen gesperrt und können nicht kommunizieren

  • Es gibt zu wenige Hinweise und man ist auf die Zeugenaussagen der beiden angewiesen

    • Gestehen beide, erhalten sie jeweils 2 Jahre Gefängnis

    • Gesteht jeweils nur einer während der andere schweigt, wird der Geständige aufgrund der Kronzeugenregelung freigelassen, der Verweigerer bekommt 3 Jahre Gefängnis

    • Schweigen beide, bekommen beide ein Jahr auf Bewährung

Auszahlungsmatrix im GD

Wir können das Spiel leicht mithilfe einer Auszahlungsmatrix darstellen

Spieler:in 2
Schweigen Reden
Spieler:in 1 Schweigen (-1, -1) (-3, 0)
Reden ( 0, -3) (-2, -2)



Der erste Eintrag in jeder Zelle ist der payoff für Spieler:in 1, der zweite für Spieler:in 2

Die Strategien sind einfach, da jeweils nur eine Entscheidung getroffen werden muss und man das Verhalten des anderen nicht kennt

Teamarbeit: Wie geht dieses Spiel aus?

Einige Definitionen

Die Spieltheorie lässt sich grob in kooperative und non-kooperative Spieltheorie gliedern

  • Wir beschäftigen uns mit Situationen, in denen sich Spieler:innen nicht koordinieren

Spieler:innen

  • zumeist 2 Personen (Entscheider und ggf. die “Natur”, die würfelt), grundsätzlich \(n\geq2\)

Strategien

  • Pläne, an welchem Punkt bzw. unter welchen Bedingungen welche Entscheidung getroffen wird

  • Sie betreffen immer das gesamte Spiel, also alle Entscheidungen

  • Wir unterscheiden reine Strategien, die deterministisch sind, und gemischte Strategien, in denen wir würfeln

Payoffs oder Auszahlungen

  • Dies sind die “Resultate”: Wieviel erhält jeder Spieler und unter welchen Bedingungen

  • Spiele können mithilfe einer Auszahlungsmatrix meist recht gut charakterisiert werden

Optimale Strategien und ein Gleichgewicht in dominanten Strategien

Wie geht das Gefangenendilemma aus?

Wir benutzen wiederum das Konzept eines  Gleichgewichts

  • Also eine Situation, in der keine der Parteien einen Anreiz hat, von ihrer Strategie abzuweichen

  • Das Ergebnis ist somit in gewisser Weise stabil, was für empirische Arbeit extrem wichtig ist

Im Fall des GD ist es leicht: Beide Spieler:innen haben eine strikt dominante Strategie, nämlich “Reden”

  • Strikt dominant bedeutet, dass diese Strategie immer strikt bessere payoffs verspricht als andere Strategien

  • Schwach dominant heißt, dass diese Strategie nie schlechter ist als alle anderen Strategien

  • Wir haben also ein Gleichgewicht in strikt dominanten Strategien

Beispiel: Gleichgewicht im GD

Spieler:in 2
Schweigen Reden
Spieler:in 1 Schweigen (-1, -1) (-3, 0)
Reden ( 0, -3) (-2, -2)



(Reden,Reden) ist ein Gleichgewicht, da sich beide nur schlechter stellen können

Interessant: individuell rationales Verhalten führt hier zu einem sozial unglücklichen Ergebnis!

  • Handelskriege, Rüstungskontrolle, bestimmte Konflikte

Zumeist hängt die optimale Strategie jedoch vom Verhalten des:r anderen ab…

Das Nash-Gleichgewicht

John Nash

Die vielleicht wichtigste Gleichgewichtsidee stammt von einem Mathematiker, John Nash (*1928–†2015)

Professor am MIT, später Arbeit in Princeton

Nobel Preis 1994 für seine Beiträge zur Spieltheorie (mit John Harsanyi und Reinhard Selten)

  • Bedeutende Beiträge auch zur Mathematik und Kryptographie

Littunter schwerer Schizophrenie; bekannt durch den Oscar-prämierten Film “A Beautiful Mind”

nobelprize.org

Eine intuitive Gleichgewichtsidee

Gleichgewichte in dominanten Strategien treten sehr selten auf

  • Wir beobachten trotzdem, dass sich in Spielen stabiles Verhalten einstellt

  • Ein anderes Gleichgewichtskonzept muss her!

Nash’s Idee war so einfach wie bedeutsam

Nash-Gleichgewicht

Eine Kombination von Strategien stellt ein Nash-Gleichgewicht dar, wenn jede:r Spieler:in die optimale Strategie spielt, gegeben die Strategien der/des anderen

Mit anderen Worten, jeder spielt die beste Antwort auf die Gleichgewichtsstrategien der anderen

  • Die Erwartungen über die andere Spieler:in stimmen also mit deren Handlungen überein

Beispiel: Das Koordinationsspiel (Battle-of-the-Sexes)

Spieler:in 2
Oper Fußball
Spieler:in 1 Oper (2, 1) (0, 0)
Fußball ( 0, 0) (1, 2)

Zwei Spieler:innen, die sich nicht koordinieren können, haben die Wahl, wo sie hingehen

  • Sie haben eigene Präferenzen, finden es aber schön, zusammen zu sein

Teamarbeit: Wie geht das Spiel im Sinne von Nash aus?

Beispiel: Das Koordinationsspiel (Battle-of-the-Sexes)

Spieler:in 2
Oper Fußball
Spieler:in 1 Oper (2, 1) (0, 0)
Fußball ( 0, 0) (1, 2)

Es gibt hier zwei Nash-Gleichgewichte: (O,O) und (F,F)

  • Bei (O,O) wird Spieler:in 1 nicht einseitig abweichen wollen, da Fußball ohne Spieler:in 2 weniger Spaß macht

  • Gleiches gilt für Spieler:in 2, auch wenn sie Fußball vorziehen würde

Beachte: Es gibt noch ein weiteres Nash-Gleichtgewicht, nämlich in gemischten Strategien – dazu später mehr!

Beispiel: Das Hawk-Dove Game (Chicken Game)

Spieler:in 2
Hawk Dove
Spieler:in 1 Hawk \(\left (\frac{V}{2}-C, \frac{V}{2}-C \right)\) \((V, 0)\)
Dove \((0, V)\) \(\left (\frac{V}{2}, \frac{V}{2} \right)\)

Diese Situation verkörpert den Kampf um eine Ressource (oder eine Mutprobe)

  • Aggressives Verhalten (Hawk, Falke) ist nur gut, wenn der:die andere Spieler:in zurückweicht (Dove, Taube)

  • \(V/2-C\) kann positiv oder negativ sein

Teamarbeit: Finden Sie alle Nash-Gleichgewichte in reinen Strategien

Beispiel: Matching Pennies

Spieler:in 2
Kopf Zahl
Spieler:in 1 Kopf (1, -1) (-1, 1)
Zahl (-1, 1) (1, -1)

Wenn beide Spieler:innen die gleiche Seite wählen, gewinnt Spieler:in 1, wenn sie unterschiedliche wählen, Spieler:in 2

Teamarbeit: Finden Sie ein Nash-Gleichgewicht

Nash-Gleichgewichte in gemischten Strategien

In matching pennies gibt es nur ein Nash-Gleichgewicht: Beide Spieler:innen werfen tatsächlich eine faire Münze

  • Beide spielen also Kopf und Zahl mit jeweils 50% Wahrscheinlichkeit

  • Kein:e Spieler:in hat einen Anreiz, einseitig abzuweichen, da man sich nicht besser als \(0\) stellen kann

Um dies mathematisch zu zeigen, muss man verstehen, dass Spieler:innen, die gemischte Strategien spielen wollen, immer indifferent zwischen den reinen Strategien sein müssen

  • Ansonsten würden sie ja eine der Optionen strikt bevorzugen

  • Jede:r Spieler:in muss also die anderen mit der Strategie indifferent halten

  • Dies ist im Gleichgewicht offensichtlich der Fall

Nash-Gleichgewicht in Matching Pennies

Im Fall von matching pennies muss der Erwartungswert von Kopf gleich dem Erwartungswert von Zahl sein

  • Gegeben die Gleichgewichtsstrategie \(Pr(s_2=\text{Kopf})=p_2^{NE}\) von Spieler:in 2 erhält Spieler:in 1 für Kopf

\[ \underbrace{p_2^{NE} * 1}_{\text{Übereinstimmung}} + \underbrace{(1-p_2^{NE}) * (-1)}_{\text{Unterschied}} = 2p_2^{NE}-1 \]

  • und für Zahl

\[ \underbrace{p_2^{NE} * (-1)}_{\text{Übereinstimmung}} + \underbrace{(1-p_2^{NE}) * 1}_{\text{Unterschied}} = 1-2p_2^{NE} \]

  • sodass \(p_2^{NE}\) Spieler:in 1 nur indifferent hält wenn

\[ 2p_2^{NE}-1 = 1-2p_2^{NE} \Leftrightarrow p_2^{NE}=\frac{1}{2} \]

Dies kann analog für Spieler:in 2 gezeigt werden, sodass wir ein Nash-Gleichgewicht haben

  • Einseitige Abweichungen auf andere Wahrscheinlichkeiten bringen nichts – man wird ja durch die andere Spieler:in gerade indifferent gehalten!

Sequenzielle Spiele

Motivation

Bisher haben wir angenommen, dass die Spieler:innen ihre Entscheidungen gleichzeitig treffen oder nicht wussten, wie sich die anderen entschieden haben

In vielen strategischen Situationen handeln die Akteure aber sequenziell und können auf andere reagieren

  • Verhandlungen

  • Handelskonflikte, die bspw. mit Zöllen und anderen Beschränkungen geführt werden

  • Investitionsentscheidungen

  • Viele Auktionstypen

Beispiel: Markteintritt in der Luftfahrt

In den 90er und 00er Jahren expandierte Southwest Airlines aggressiv und begann, Stück für Stück viele neue Flughäfen und Routen zu befliegen

  • Delta, American Airways und andere sahen tatsächlichen Markteintritt, aber auch nur Bedrohungen

Goolsbee und Syverson (2008, QJE) dokumentieren die Reaktionen der Marktteilnehmer

  • Einzigartiges natürliches Experiment: Das Routennetzwerk ermöglicht es, Bedrohungen zu identifizieren (siehe nächste Folie)

  • Andere Airlines kämpfen bereits vor Markteintritt: Deutlich niedrigere Preise, mehr Kapazität und mehr Reisende

  • Tatsächlicher Eintritt drückt Preise dann weiter

Wie können wir über diese strategische Situation nachdenken?

Bedrohungen in Goolsbee/Syverson 2008 QJE

Goolsbee, Syverson 2008, Quarterly Journal of Economics

Beispiel: Markteintritt

Es gibt ein bestehendes monopolistisches Unternehmen im Markt

Ein zweites Unternehmen überlegt, in den Markt einzutreten

Kommt es zu einem Markteintritt, kann der ehemalige Monopolist entweder “kämpfen” oder nicht (\(\neg\))

  • Bspw. durch Preiskrieg, teure Werbekampagnen etc.

Teamarbeit: Wie geht das Spiel aus?

Markteintrittsspiel in extensiver Form

Leere Drohungen

Es gibt zwei Nash-Gleichgewichte

  1. Es kommt zu Eintritt, der Monopolist kämpft nicht, und wäre nach “\(\neg\) Eintritt” indifferent
  2. Es kommt nicht zu Eintritt, der Monopolist ist indifferent, würde aber nach “Eintritt” kämpfen

Es ist leicht zu zeigen, dass beides Gleichgewichte sind, da einseitige Abweichungen keinen Gewinn bringen



Gleichgewicht 2 ist aber merkwürdig

  • Für den Monopolisten wäre es völlig irrational nach Markteintritt zu kämpfen
  • Das eintretende Unternehmen sollte das vorhersehen: Der Monopolist macht eine leere Drohung
  • Solch ein Gleichgewicht würde nicht auftreten und wir sollten einen Weg finden, es auszuschließen

Teilspielperfekte Gleichgewichte

Wir nehmen daher eine Verfeinerung unserer Gleichgewichtsidee vor

  • In einem teilspielperfekten Gleichgewicht induzieren die Gleichgewichtsstrategien in jedem Teilspiel ein Nash-Gleichgewicht

  • Anders ausgedrückt: Die Spieler:innen spielen immer optimale Antworten, nicht nur am Anfang

Ein Teilspiel ist das gesamte Spiel, das auf einen Entscheidungsknoten folgt

  • Im Markteintrittsspiel haben wir drei Teilspiele: Eines beginnend in \(I_1\), eines beginnend in \(I_2\) und eines beginnend in \(E\) (also das gesamte Spiel)

Teilspielperfektes Gleichgewicht im Markteintrittsspiel

Im ersten dieser Spiele ist der Monopolist indifferent, im zweiten wählt er \(\neg\) kämpfen, und im Gesamtspiel gibt es zwei Nash-Gleichgewichte (siehe oben)

  • Das Gleichgewicht mit der leeren Drohung ist somit nicht teilspielperfekt – nach Eintritt würde der Monopolist immer zurückstecken

Rückwärtsinduktion

Um teilspielperfekte Gleichgewichte zu finden, bedienen wir uns der Rückwärtsinduktion

  • Wir beginnen bei den letzten Teilspielen und finden das Nash-Gleichgewicht (zumeist die optimale Entscheidung)

  • Dann ersetzen wir die payoffs im nächstfrüheren Teilspiel und suchen wieder das Nash Gleichgewicht

Wir finden teilspielperfekte Gleichgewichte also, indem wir “rückwärts”, also vom Spielende her überlegen

  • Mit anderen Worten, die Spieler:innen formen rationale Erwartungen an die anderen Spieler:innen unter der Annahme, dass letztere ebenfalls rational sind

Beispiel: Entführungen

Ein Entführer hat eine Geisel genommen und überlegt, ob er sie freilassen soll

  • Nach Freilassung kann sie den Entführer jedoch identifizieren

Teamarbeit: Finden Sie alle Nash-Gleichgewichte in reinen Startegien und prüfen Sie, ob sie teilspielperfekt sind

Nach Varian 30.8

Selbstbindung

Wenn die Geisel frei ist, wird sie den Täter identifizieren wollen

  • Die Tötung der Geisel ist daher das einzige teilspielperfekte Nash-Gleichgewicht

Mögliche Lösungen durch Selbstbindung

  • Kompromitierende Fotos der Geisel, die beim Entführer verbleiben (Schelling)

  • Verwandt: Drakonische Strafen für Lösegeldzahlungen (z.B. in Italien)

Nach Varian 30.8

Wiederholte Spiele

Oft kann Kooperation auch ganz ohne Verträge oder Strafen aufrecht erhalten werden

  • Wenn man häufiger interagiert, bekommt man die Gelegenheit, die andere Seite zu bestrafen und so optimale Strategien zu beeinflussen

  • Insbesondere in unendlich wiederholten Spielen kann dies sehr wirksam sein (bzw. wenn das Ende zufällig/nicht vorhersehbar ist)

Nehmen wir das Beispiel eines unendlich wiederholten Gefangenendilemmas

  • Beide Akteure spielen die grim trigger strategy: Schweigen bis der andere redet; danach immer reden

  • Die payoffs entsprechen denen auf Folie 9

  • Die Akteure gewichten die Zukunft mit dem Diskontierungsfaktor \(\delta \in (0,1)\) – je höher, desto geduldiger

    • Hier: \(\delta=0.8\)

Lösung des wiederholten Gefangenendilemmas

Der payoff der grim trigger strategy im Nash Gleichgewicht ist

\[ \sum_{t=0}^{\infty} \delta^t \ \pi^{(s,s)} = \frac{\pi^{(s,s)}}{1-\delta} = \frac{-1}{1-0.8} -5 \]

Eine potenzielle Abweichung ist, einmal zu reden (und dann nach Bestrafung weiterzureden)

\[ \pi^{(r,s)} + \sum_{t=1}^{\infty} \delta^t \ \pi^{(r,r)} = \pi^{(r,s)} + \frac{\delta \ \pi^{(r,r)}}{1-\delta} = 0 + \frac{0.8 \times -2}{1-0.8} = -8 \]

In unserem Beispiel ist die Kooperation stabil

  • Anwendungen: Kultur, relationale Verträge

Teamarbeit:

  • Was passiert, wenn \(\delta < 0.5\)?

  • Was passiert, wenn das Spiel nur endlich oft gespielt wird und beide Spieler dieses Ende kennen?

Ausblick

Weitere Themen in der Spieltheorie

Unvollständige Information

  • Oft kann man nur Erwartungen darüber bilden, was andere tun bzw. wo man sich im Spielbaum befindet

  • Oft können Signale geschickt werden – die stimmen können, aber nicht müssen (sog. strategische Kommunikation oder cheap talk…

  • Oft kennt man andere Spieler:innen und ihre (oder die eigenen) Präferenzen gar nicht

Kooperative Spieltheorie

  • Wie bildet man stabile Koalitionen und teilt Gewinne auf, wenn alle Akteure selbstinteressiert sind?

Mechanism Design

  • Beschäftigt sich mit Zuteilungsmechanismen, die bestimmte Ziele verfolgen

  • Beispiel: Organspendebörsen, Auktionen

Und viel mehr…

Wiederholungsfragen

  • Wie können Sie das Gefangenendilemma lösen?

  • Gehen Sie auf die nächste Folie, generieren Sie mindestens 3 payoff Matrizen, und finden Sie Gleichgewichte in strikt dominanten Strategien sowie andere Nash Gleichgewichte in reinen und gemischten Strategien – wenn sie existieren

  • Erklären Sie, was sequenzielle Spiele so interessant macht

Übungsapplikation

#| standalone: true
#| viewerHeight: 600

library(MASS)
library(shiny)


  ui <- fluidPage(
    sidebarLayout(
      sidebarPanel(
        width = 4,
        h3("Spieltheorie Generator"),
        br(),
        br(),
        checkboxInput("dom_off", "Dominante Strategien ausschließen"),
        br(),
        br(),
        actionButton("generate", "Generieren"),
        br(),
        br(),
        br(),
        checkboxInput("disp", "Lösung anzeigen"),
        uiOutput("strat")
      ),
    
    
    mainPanel(
      fluidRow(
        column(2,
               br(),
               br(),
               br(),
               br(),
               h4("Spieler A", class = "left-title")  
        ),
        column(4,  
               h4("Spieler B"),  
               br(),
               tableOutput("randomTable")
        
        )
      )
    )
  )
)


server <- function(input, output) {

  random_values <- reactiveValues()
  random_table <- reactiveVal()
  button_pressed <- reactiveVal(FALSE)
  
  
  observeEvent(input$generate, {
    
    button_pressed(TRUE)
    
    
    for (i in 1:8) {
      random_values[[paste0("var", i)]] <- runif(1, min = 0, max = 100)  
    }
    
    var1 <- random_values$var1
    var2 <- random_values$var2
    var3 <- random_values$var3
    var4 <- random_values$var4
    var5 <- random_values$var5
    var6 <- random_values$var6
    var7 <- random_values$var7
    var8 <- random_values$var8
    
    if(input$dom_off) {
      
      
      while(var1 > var3 && var5 > var7   &&   var2 > var6 && var4 > var8 || 
         var1 < var3 && var5 < var7   &&   var2 < var6 && var4 < var8 ||
         var1 > var3 && var5 > var7   &&   var2 < var6 && var4 < var8 ||
         var1 < var3 && var5 < var7   &&   var2 > var6 && var4 > var8 ||
         var1 > var3 && var5 > var7 ||
         var1 < var3 && var5 < var7 ||
         var2 < var6 && var4 < var8 ||
         var2 > var6 && var4 > var8) {
        
        for (i in 1:8) {
          random_values[[paste0("var", i)]] <- runif(1, min = 0, max = 100)  
        }
        
        var1 <- random_values$var1
        var2 <- random_values$var2
        var3 <- random_values$var3
        var4 <- random_values$var4
        var5 <- random_values$var5
        var6 <- random_values$var6
        var7 <- random_values$var7
        var8 <- random_values$var8
        
        
      }
      
      
      
      
      
    }
    
    var1 <- as.integer(random_values$var1)
    var2 <- as.integer(random_values$var2)
    var3 <- as.integer(random_values$var3)
    var4 <- as.integer(random_values$var4)
    var5 <- as.integer(random_values$var5)
    var6 <- as.integer(random_values$var6)
    var7 <- as.integer(random_values$var7)
    var8 <- as.integer(random_values$var8)
    
    
    
    data_frame <- data.frame(
      "Linke Seite" = c(paste0("(", 
                         as.integer(random_values$var1), ", ", as.integer(random_values$var2), ")"),
             paste0("(", as.integer(random_values$var3), ", ", as.integer(random_values$var4), ")")),
      
      "Rechte Seite" = c(paste0("(", as.integer(random_values$var5), ", ", as.integer(random_values$var6), ")"),
             paste0("(", as.integer(random_values$var7), ", ", as.integer(random_values$var8), ")")),
    
      row.names = c("Oben", "Unten")
      )
    
    random_table(data_frame)
    
  })

  
  output$strat <- renderUI({
    
    var1 <- as.integer(random_values$var1)
    var2 <- as.integer(random_values$var2)
    var3 <- as.integer(random_values$var3)
    var4 <- as.integer(random_values$var4)
    var5 <- as.integer(random_values$var5)
    var6 <- as.integer(random_values$var6)
    var7 <- as.integer(random_values$var7)
    var8 <- as.integer(random_values$var8)
    
    if (!button_pressed()) {
      return(NULL)  
    } else{
      
      dominant_strategy_message <- NULL
      nash_message <- NULL
      mixed_strategy_message <- NULL
      ds_A <- TRUE
      ds_B <- TRUE
    
    if(var1 > var3 && var5 > var7   &&   var2 > var6 && var4 > var8) {
      
      dominant_strategy_message <- withMathJax("Spieler A hat die strikt dominante Strategie: 'Oben'", br(), "Spieler B hat die strikt dominante Strategie: 'Links'" , br() , "Gleichgewicht in strikt dominanten Strategien: (Oben, Links)")
      ds_A <- FALSE
      ds_B <- FALSE
      
    } else if (var1 < var3 && var5 < var7   &&   var2 < var6 && var4 < var8) {
      
      dominant_strategy_message <- withMathJax("Spieler A hat die strikt dominante Strategie: 'Unten'", br(), "Spieler B hat die strikt dominante Strategie: 'Rechts'", br() , "Gleichgewicht in strikt dominanten Strategien: (Unten, Rechts)")
      
      ds_A <- FALSE
      ds_B <- FALSE
      
    } else if (var1 > var3 && var5 > var7   &&   var2 < var6 && var4 < var8) {
      
      dominant_strategy_message <- withMathJax("Spieler A hat die strikt dominante Strategie: 'Oben'", br(), "Spieler B hat die strikt dominante Strategie: 'Rechts'", br() , "Gleichgewicht in strikt dominanten Strategien: (Oben, Rechts)")
      ds_A <- FALSE
      ds_B <- FALSE
      
    } else if (var1 < var3 && var5 < var7   &&   var2 > var6 && var4 > var8) {
      
      dominant_strategy_message <- withMathJax("Spieler A hat die strikt dominante Strategie: 'Unten'", br(), "Spieler B hat die strikt dominante Strategie: 'Links'", br() , "Gleichgewicht in strikt dominanten Strategien: (Unten, Links)")
      ds_A <- FALSE
      ds_B <- FALSE
      
    } else {
      
      if(var1 > var3 && var5 > var7) {
        dominant_strategy_message <- withMathJax("Spieler A hat die dominante Strategie 'Oben'" , br(), "Es liegt kein Gleichgewicht in dominanten Strategien vor")
        ds_A <- FALSE
        
        if(var2 != var6){
          ds_B <- FALSE
        }
      }
      else if(var1 < var3 && var5 < var7) {
        dominant_strategy_message <- withMathJax("Spieler A hat die dominante Strategie 'Unten'", br(), "Es liegt kein Gleichgewicht in dominanten Strategien vor")
        ds_A <- FALSE
        
        if(var4 != var8){
          ds_B <- FALSE
        }
      }
      else if(var2 < var6 && var4 < var8) {
        dominant_strategy_message <- withMathJax("Spieler B hat die dominante Strategie 'Rechts'", br(), "Es liegt kein Gleichgewicht in dominanten Strategien vor")
        ds_B <- FALSE
        
        if(var5 != var7){
          ds_A <- FALSE
        }
      }
      else if(var2 > var6 && var4 > var8) {
        dominant_strategy_message <- withMathJax("Spieler B hat die dominante Strategie 'Links'", br(), "Es liegt kein Gleichgewicht in dominanten Strategien vor")
        ds_B <- FALSE
        
        if(var1 != var3){
          ds_A <- FALSE
        }
      }
      else{
      dominant_strategy_message <- withMathJax("Es liegt kein Gleichgewicht in dominanten Strategien vor")
      
      }
    }
      
      
      
      
      
      # (1,1)
      if (var1 >= var3 && var2 >= var6) {
        
          nash_message <- paste(nash_message , br(), "Es liegt ein Nash-Gleichgewicht vor: (Oben, Links)")
        
      }
      
      # (1,2)
      if (var5 >= var7 && var6 >= var2) {
       
          nash_message <- paste(nash_message , br(), "Es liegt ein Nash-Gleichgewicht vor: (Oben, Rechts)")
        
      }
      
      # (2,1)
      if (var3 >= var1 && var4 >= var8) {
        
          nash_message <- paste(nash_message , br(), "Es liegt ein Nash-Gleichgewicht vor: (Unten, Links)")
        
      }
      
      # (2,2)
      if (var7 >= var5 && var8 >= var4) {
        
          nash_message <- paste(nash_message , br(), "Es liegt ein Nash-Gleichgewicht vor: (Unten, Rechts)")
        
      }
      
      
      
      gcd <- function(a, b) {
        while (b != 0) {
          temp <- b
          b <- a %% b
          a <- temp
        }
        return(abs(a))  
      }
      
   
     
      zähler_A <- abs(var8 - var4)
      nenner_A <- abs(var2 - var4 + var8 - var6)
      
      zähler_B <- abs(var7 - var5)
      nenner_B <- abs(var1 - var3 + var7 - var5)
      
      
      gcd1 <- gcd(zähler_A, nenner_A)
      gcd2 <- gcd(zähler_B, nenner_B)
      
      zähler_A <- zähler_A / gcd1
      nenner_A <- nenner_A / gcd1
      
      zähler_B <- zähler_B / gcd2
      nenner_B <- nenner_B / gcd2
      
      
      
      
      
      
      
      pB <- (var7 - var5) / (var1 - var3 + var7 - var5) 
      
     
      pA <- (var8 - var4) / (var2 - var4 + var8 - var6) 
      
      pA <- pmax(0, pA)  
      pA <- pmin(1, pA)  
      
      
      pB <- pmax(0, pB)  
      pB <- pmin(1, pB)  
      
      if (ds_A == TRUE && ds_B == TRUE) {
      mixed_strategy_message <- paste(
        "Nash Gleichgewicht in gemischten Strategien: ",
        br(),
 
        "(", zähler_A , "/" , nenner_A , "," , zähler_B , "/" , nenner_B  , ")" 
        
      )
      }
      else if (ds_A == TRUE && ds_B == FALSE){
        
        mixed_strategy_message <- paste(
          
          # "Gemischte Strategien: ",
          # br(),
          # 
          # "Spieler A: \\( p_{A} = (", fractions(round(pA, 2)), "," , fractions(round(1- pA, 2)) , ")" , " \\)",
          # br(),
          # "Spieler B: Keine gemischte Strategie"
          
          
          "Es gibt kein Nash-Gleichgewicht in gemischten Strategien"
          
        )
        
      } else if (ds_B == TRUE && ds_A == FALSE){
        
        mixed_strategy_message <- paste(
          
          # "Gemischte Strategien: ",
          # br(),
          # 
          # "Spieler A: Keine gemischte Strategie",
          # br(),
          # "Spieler B: \\( p_{B} = (", fractions(round(pB, 2)), "," , fractions(round(1-pB, 2)) , ")" , " \\)"
        
          "Es gibt kein Nash-Gleichgewicht in gemischten Strategien"
          
          )
        
      } else {
        
        mixed_strategy_message <- paste(
          "Es gibt kein Nash-Gleichgewicht in gemischten Strategien."
        )
        
        
        
      }
      
      
      combined_message <- paste(
        "Strategien:",
        br(),
        dominant_strategy_message,
        br(),
        br(),
        nash_message,
        br(),
        br(),
        mixed_strategy_message
        
      )
      
      if(input$disp == FALSE) {
        combined_message <- NULL
      }
      
      withMathJax(HTML(combined_message))
      
    }
    
  })
  
  
  
  
  output$randomTable <- renderTable({
    
    
    random_table()
    
  },
    rownames = TRUE,
    colnames = TRUE,
    bordered = TRUE)
  
  
  
   
}


shinyApp(ui = ui, server = server)