clc
clear all

%Startzeitpunkt festhalten
Start_time = cputime;

%#################################
%Globalparameter initial festlegen
%#################################

% Symbolische Laufvariable für die Summen festlegen
syms k tau;

%Spätester Markteintrittszeitpunkt für die Company und den Competitor
%festlegen. Ein späterer Markteintrittszeitpunkt ist nicht möglich.
N = 20;

%Kalkulationszinssatz festlegen
r = 0.03;

%Maximale Anzahl an Szenarien festlegen
e_max = 2;

%Ergebnisvektor vorbelegen
Ergebnisse = zeros(e_max,40);


%Vektor der Innovations- und Immitationsparameter initial festlegen
p = zeros (e_max,2);
q = zeros (e_max,2);


%#############################
%globale Competitor Parameter
%#############################

%Innovator Profile Competitor
v_M = 1;

%Spillover Effekte Competitor
S_M = 0.25;

%##########################
%globale Company Parameter
%##########################

%Increasing/Decreasing Factor of Initial Sales Volume
a = 1.15;

%Decreasing Factor of FM-Probability (Wettbewerbskennwert für einen Markt)
b = 1.8;

%Prozentualer Anteil der Ausgaben für Marketing an den Gesamtausgaben
%M=0,05
%M=0,1
%M=0,2
M = 0.1;

% Marketing-Technologie Matrix definieren
A = [1.1 1.05 1.02;
    1.15 1.08 1.03;
    1.2 1.1 1.04];

%#########################################################
%Lokale Parameter für alle Szenarien generieren
%#########################################################

%Company Innovator profile festlegen und speichern
v_C = unifrnd(0,2,e_max,1);
Ergebnisse(:,8) = v_C;

%Knowledge Potentials der Company pro Innovation festlegen und speichern
K_m = unifrnd(0,6,e_max,2);
Ergebnisse(:,9) = K_m(:,1);
Ergebnisse(:,10) = K_m(:,2);

%Initial kumulierte Umsätze pro Markt während der Marktphase festlegen und speichern
m_0 = unifrnd(1e6,1e8,e_max,2);
Ergebnisse(:,11) = m_0(:,1);
Ergebnisse(:,12) = m_0(:,2);

%Anfangsauszahlungen der Company pro Innovation festlegen und speichern
A_0 = unifrnd(1e6,1e7,e_max,2);
Ergebnisse(:,13) = A_0(:,1);
Ergebnisse(:,14) = A_0(:,2);

% Initial Coefficient of Innovation pro Markt festlegen
p_0 = unifrnd(0.001,0.1,e_max,2);
Ergebnisse(:,15) = p_0(:,1);
Ergebnisse(:,16) = p_0(:,2);

% Initial Coefficient of Imitation pro Markt festlegen
q_0 = unifrnd(0.2,1.5,e_max,2);
Ergebnisse(:,17) = q_0(:,1);
Ergebnisse(:,18) = q_0(:,2);

%Einen Preis der Innovation initial auf 1 setzen um für den Umsatz die
%korrekte Einheit zu haben. Für das weitere Vorgehen nicht relevant.
P = 1;

%Spillover Effekte der Company für beide Innovationen und alle Szenarien festlegen
%Vektor vorbelegen
S_C = zeros(e_max,2);

for i = 1:e_max
    %für Innovation 1
    if (K_m(i,1) > 5 && K_m(i,1) <= 6)
        S_C(i,1) = 0.1;
    elseif (K_m(i,1) > 2 && K_m(i,1) <= 5)
        S_C(i,1) = 0.25;
    else
        S_C(i,1) = 0.6;
    end
    
    %für Innovation 2
    if (K_m(i,2) > 5 && K_m(i,2) <= 6)
        S_C(i,2) = 0.1;
    elseif (K_m(i,2) > 2 && K_m(i,2) <= 5)
        S_C(i,2) = 0.25;
    else
        S_C(i,2) = 0.6;
    end
end

%Spillover Effekte für beide Innovationen im Ergebnisvektor speichern
Ergebnisse(:,19) = S_C(:,1);
Ergebnisse(:,20) = S_C(:,2);


%#############################
%Schleife über alle Szenarien
%#############################

for n = 1 : e_max
   
    %Coefficient of Innovation und Imitation pro Innovation und Markt festlegen
    %Innovation 1 in Markt 1
    if (M == 0.05 && K_m(n,1) > 0 && K_m(n,1) <= 2)
        p(n,1) = p_0(n,1) * A(1,1);
        q(n,1) = q_0(n,1) * A(1,1);
    elseif (M == 0.1 && K_m(n,1) > 0 && K_m(n,1) <= 2)
        p(n,1) = p_0(n,1) * A(2,1);
        q(n,1) = q_0(n,1) * A(2,1);
    elseif (M == 0.2 && K_m(n,1) > 0 && K_m(n,1) <= 2)
        p(n,1) = p_0(n,1) * A(3,1);
        q(n,1) = q_0(n,1) * A(3,1);
        
    elseif (M == 0.05 && K_m(n,1) > 2 && K_m(n,1) < 5)
        p(n,1) = p_0(n,1) * A(1,2);
        q(n,1) = q_0(n,1) * A(1,2);
    elseif (M == 0.1 && K_m(n,1) > 2 && K_m(n,1) < 5)
        p(n,1) = p_0(n,1) * A(2,2);
        q(n,1) = q_0(n,1) * A(2,2);
    elseif (M == 0.2 && K_m(n,1) > 2 && K_m(n,1) < 5)
        p(n,1) = p_0(n,1) * A(3,2);
        q(n,1) = q_0(n,1) * A(3,2);
        
    elseif (M == 0.05 && K_m(n,1) > 5 && K_m(n,1) <= 6)
        p(n,1) = p_0(n,1) * A(1,3);
        q(n,1) = q_0(n,1) * A(1,3);
    elseif (M == 0.1 && K_m(n,1) > 5 && K_m(n,1) <= 6)
        p(n,1) = p_0(n,1) * A(2,3);
        q(n,1) = q_0(n,1) * A(2,3);
    elseif (M == 0.2 && K_m(n,1) > 5 && K_m(n,1) <= 6)
        p(n,1) = p_0(n,1) * A(3,3);
        q(n,1) = q_0(n,1) * A(3,3);
    end
    
        %Innovation 2 in Markt 1
    if (M == 0.05 && K_m(n,2) > 0 && K_m(n,2) <= 2)
        p(n,1) = p_0(n,1) * A(1,1);
        q(n,1) = q_0(n,1) * A(1,1);
    elseif (M == 0.1 && K_m(n,2) > 0 && K_m(n,2) <= 2)
        p(n,1) = p_0(n,1) * A(2,1);
        q(n,1) = q_0(n,1) * A(2,1);
    elseif (M == 0.2 && K_m(n,2) > 0 && K_m(n,2) <= 2)
        p(n,1) = p_0(n,1) * A(3,1);
        q(n,1) = q_0(n,1) * A(3,1);
        
    elseif (M == 0.05 && K_m(n,2) > 2 && K_m(n,2) < 5)
        p(n,1) = p_0(n,1) * A(1,2);
        q(n,1) = q_0(n,1) * A(1,2);
    elseif (M == 0.1 && K_m(n,2) > 2 && K_m(n,2) < 5)
        p(n,1) = p_0(n,1) * A(2,2);
        q(n,1) = q_0(n,1) * A(2,2);
    elseif (M == 0.2 && K_m(n,2) > 2 && K_m(n,2) < 5)
        p(n,1) = p_0(n,1) * A(3,2);
        q(n,1) = q_0(n,1) * A(3,2);
        
    elseif (M == 0.05 && K_m(n,2) > 5 && K_m(n,2) <= 6)
        p(n,1) = p_0(n,1) * A(1,3);
        q(n,1) = q_0(n,1) * A(1,3);
    elseif (M == 0.1 && K_m(n,2) > 5 && K_m(n,2) <= 6)
        p(n,1) = p_0(n,1) * A(2,3);
        q(n,1) = q_0(n,1) * A(2,3);
    elseif (M == 0.2 && K_m(n,2) > 5 && K_m(n,2) <= 6)
        p(n,1) = p_0(n,1) * A(3,3);
        q(n,1) = q_0(n,1) * A(3,3);
    end
        
        %Innovation 1 in Markt 2
    if (M == 0.05 && K_m(n,1) > 0 && K_m(n,1) <= 2)
        p(n,2) = p_0(n,2) * A(1,1);
        q(n,2) = q_0(n,2) * A(1,1);
    elseif (M == 0.1 && K_m(n,1) > 0 && K_m(n,1) <= 2)
        p(n,2) = p_0(n,2) * A(2,1);
        q(n,2) = q_0(n,2) * A(2,1);
    elseif (M == 0.2 && K_m(n,1) > 0 && K_m(n,1) <= 2)
        p(n,2) = p_0(n,2) * A(3,1);
        q(n,2) = q_0(n,2) * A(3,1);
        
    elseif (M == 0.05 && K_m(n,1) > 2 && K_m(n,1) < 5)
        p(n,2) = p_0(n,2) * A(1,2);
        q(n,2) = q_0(n,2) * A(1,2);
    elseif (M == 0.1 && K_m(n,1) > 2 && K_m(n,1) < 5)
        p(n,2) = p_0(n,2) * A(2,2);
        q(n,2) = q_0(n,2) * A(2,2);
    elseif (M == 0.2 && K_m(n,1) > 2 && K_m(n,1) < 5)
        p(n,2) = p_0(n,2) * A(3,2);
        q(n,2) = q_0(n,2) * A(3,2);
        
    elseif (M == 0.05 && K_m(n,1) > 5 && K_m(n,1) <= 6)
        p(n,2) = p_0(n,2) * A(1,3);
        q(n,2) = q_0(n,2) * A(1,3);
    elseif (M == 0.1 && K_m(n,1) > 5 && K_m(n,1) <= 6)
        p(n,2) = p_0(n,2) * A(2,3);
        q(n,2) = q_0(n,2) * A(2,3);
    elseif (M == 0.2 && K_m(n,1) > 5 && K_m(n,1) <= 6)
        p(n,2) = p_0(n,2) * A(3,3);
        q(n,2) = q_0(n,2) * A(3,3);
    end
        
        %Innovation 2 in Markt 2
    if (M == 0.05 && K_m(n,2) > 0 && K_m(n,2) <= 2)
        p(n,2) = p_0(n,2) * A(1,1);
        q(n,2) = q_0(n,2) * A(1,1);
    elseif (M == 0.1 && K_m(n,2) > 0 && K_m(n,2) <= 2)
        p(n,2) = p_0(n,2) * A(2,1);
        q(n,2) = q_0(n,2) * A(2,1);
    elseif (M == 0.2 && K_m(n,2) > 0 && K_m(n,2) <= 2)
        p(n,2) = p_0(n,2) * A(3,1);
        q(n,2) = q_0(n,2) * A(3,1);
        
    elseif (M == 0.05 && K_m(n,2) > 2 && K_m(n,2) < 5)
        p(n,2) = p_0(n,2) * A(1,2);
        q(n,2) = q_0(n,2) * A(1,2);
    elseif (M == 0.1 && K_m(n,2) > 2 && K_m(n,2) < 5)
        p(n,2) = p_0(n,2) * A(2,2);
        q(n,2) = q_0(n,2) * A(2,2);
    elseif (M == 0.2 && K_m(n,2) > 2 && K_m(n,2) < 5)
        p(n,2) = p_0(n,2) * A(3,2);
        q(n,2) = q_0(n,2) * A(3,2);
        
    elseif (M == 0.05 && K_m(n,2) > 5 && K_m(n,2) <= 6)
        p(n,2) = p_0(n,2) * A(1,3);
        q(n,2) = q_0(n,2) * A(1,3);
    elseif (M == 0.1 && K_m(n,2) > 5 && K_m(n,2) <= 6)
        p(n,2) = p_0(n,2) * A(2,3);
        q(n,2) = q_0(n,2) * A(2,3);
    elseif (M == 0.2 && K_m(n,2) > 5 && K_m(n,2) <= 6)
        p(n,2) = p_0(n,2) * A(3,3);
        q(n,2) = q_0(n,2) * A(3,3);
    end
        
    
    %######################
    %Funktionen definieren
    %######################
    
    % Company Auszahlungen für R&D
    CF_R_11 = A_0(n,1) / 10 * K_m(n,1);
    CF_R_12 = A_0(n,1) / 10 * K_m(n,1);
    CF_R_21 = A_0(n,2) / 10 * K_m(n,2);
    CF_R_22 = A_0(n,2) / 10 * K_m(n,2);
    
    % Company Auszahlungen für Marketing zum Eintrittszeitpunkt
    CF_M_11 = @(t) M * CF_R_11 * t(1,1);
    CF_M_12 = @(t) M * CF_R_12 * t(1,2);
    CF_M_21 = @(t) M * CF_R_21 * t(2,1);
    CF_M_22 = @(t) M * CF_R_22 * t(2,2);
    
    % Verschiebungsparameter festlegen
    if (v_C(n,1) > 0 && v_C(n,1) < 1)
        z_C_11 = @(t) (1 - 0.5 * v_C(n,1)) * t(1,1);
        z_C_12 = @(t) (1 - 0.5 * v_C(n,1)) * t(1,2);
        z_C_21 = @(t) (1 - 0.5 * v_C(n,1)) * t(2,1);
        z_C_22 = @(t) (1 - 0.5 * v_C(n,1)) * t(2,2);
    else
        z_C_11 = @(t) 1 / (2 * v_C(n,1)) * t(1,1);
        z_C_12 = @(t) 1 / (2 * v_C(n,1)) * t(1,2);
        z_C_21 = @(t) 1 / (2 * v_C(n,1)) * t(2,1);
        z_C_22 = @(t) 1 / (2 * v_C(n,1)) * t(2,2);
    end
    
    % Company Wissen definieren
    K_C_11 = @(t) S_C(n,1) * K_m(n,1) - K_m(n,1) * (1 - S_C(n,1)) / (1 + exp(v_C(n,1) * z_C_11(t)))...
        + K_m(n,1) * (1 - S_C(n,1)) / (1 + exp(-v_C(n,1) * (t(1,1) - z_C_11(t))));
    
    K_C_12 = @(t) S_C(n,1) * K_m(n,1) - K_m(n,1) * (1 - S_C(n,1)) / (1 + exp(v_C(n,1) * z_C_12(t)))...
        + K_m(n,1) * (1 - S_C(n,1)) / (1 + exp(-v_C(n,1) * (t(1,2) - z_C_12(t))));
    
    K_C_21 = @(t) S_C(n,2) * K_m(n,2) - K_m(n,2) * (1 - S_C(n,2)) / (1 + exp(v_C(n,1) * z_C_21(t)))...
        + K_m(n,2) * (1 - S_C(n,2)) / (1 + exp(-v_C(n,1) * (t(2,1) - z_C_21(t))));
    
    K_C_22 = @(t) S_C(n,2) * K_m(n,2) - K_m(n,2) * (1 - S_C(n,2)) / (1 + exp(v_C(n,1) * z_C_22(t)))...
        + K_m(n,2) * (1 - S_C(n,2)) / (1 + exp(-v_C(n,1) * (t(2,2) - z_C_22(t))));
    

    % Competitor Wissen definieren
    K_M_11 = @(tau) 0.25 * K_m(n,1) - 0.75 * K_m(n,1) / (1 + exp(0.5 * tau))...
        + 0.75 * K_m(n,1) / (1 + exp(-0.5 * tau));
    
    K_M_12 = @(tau) 0.25 * K_m(n,1) - 0.75 * K_m(n,1) / (1 + exp(0.5 * tau))...
        + 0.75 * K_m(n,1) / (1 + exp(-0.5 * tau));
    
    K_M_21 = @(tau) 0.25 * K_m(n,2) - 0.75 * K_m(n,2) / (1 + exp(0.5 * tau))...
        + 0.75 * K_m(n,2) / (1 + exp(-0.5 * tau));
    
    K_M_22 = @(tau) 0.25 * K_m(n,2) - 0.75 * K_m(n,2) / (1 + exp(0.5 * tau))...
        + 0.75 * K_m(n,2) / (1 + exp(-0.5 * tau));
    
    % Company Sales Potential als First Mover definieren
    m_FM_C_11 = @(t) m_0(n,1) * a^K_C_11(t);
    m_FM_C_12 = @(t) m_0(n,2) * a^K_C_12(t);
    m_FM_C_21 = @(t) m_0(n,1) * a^K_C_21(t);
    m_FM_C_22 = @(t) m_0(n,2) * a^K_C_22(t);
    
    % Competitor Sales Potential als First Mover definieren
    m_FM_M_11 = @(tau) m_0(n,1) * a^K_M_11(tau);
    m_FM_M_12 = @(tau) m_0(n,2) * a^K_M_12(tau);
    m_FM_M_21 = @(tau) m_0(n,1) * a^K_M_21(tau);
    m_FM_M_22 = @(tau) m_0(n,2) * a^K_M_22(tau);
    
    % Company Sales Potential als Late Mover definieren
    m_LM_C_11 = @(t,tau) m_0(n,1) * a^(K_C_11(t) - t(1,1) + tau);
    m_LM_C_12 = @(t,tau) m_0(n,2) * a^(K_C_12(t) - t(1,2) + tau);
    m_LM_C_21 = @(t,tau) m_0(n,1) * a^(K_C_21(t) - t(2,1) + tau);
    m_LM_C_22 = @(t,tau) m_0(n,2) * a^(K_C_22(t) - t(2,2) + tau);
    
    
    % Erfolgswahrscheinlichkeiten für die Innovationen in den Märkten definieren
    Pr_S_11 = @(t) 1.1^(p(n,1) + q(n,1) + K_C_11(t)) * t(1,1) / ...
        (1.1^(p(n,1) + q(n,1) + K_m(n,1)) * t(1,1) + 1.4^(-t(1,1)));
    
    Pr_S_12 = @(t) 1.1^(p(n,2) + q(n,2) + K_C_12(t)) * t(1,2) / ...
        (1.1^(p(n,2) + q(n,2) + K_m(n,1)) * t(1,2) + 1.4^(-t(1,2)));
    
    Pr_S_21 = @(t) 1.1^(p(n,1) + q(n,1) + K_C_21(t)) * t(2,1) / ...
        (1.1^(p(n,1) + q(n,1) + K_m(n,2)) * t(2,1) + 1.4^(-t(2,1)));
    
    Pr_S_22 = @(t) 1.1^(p(n,2) + q(n,2) + K_C_22(t)) * t(2,2) / ...
        (1.1^(p(n,2) + q(n,2) + K_m(n,2)) * t(2,2) + 1.4^(-t(2,2)));
    

    % Scheiterwahrscheinlichkeit für die Innovationen in den Märkten
    % definieren
    Pr_F_11 = @(t) 1 - Pr_S_11(t);
    Pr_F_12 = @(t) 1 - Pr_S_12(t);
    Pr_F_21 = @(t) 1 - Pr_S_21(t);
    Pr_F_22 = @(t) 1 - Pr_S_22(t);
    
    % S-Kurve für Cashflows der Company und des Competitor pro Markt und Innovation definieren
    
    % S-Kurven der Company definieren
    S_C_11 = @(t,k) (p(n,1) + q(n,1))^2 / p(n,1) * ...
        exp(-(p(n,1) + q(n,1)) * (k - t(1,1))) / (1 + (q(n,1) / p(n,1)) * ...
        exp(-(p(n,1) + q(n,1)) * (k - t(1,1))));
    
    S_C_12 = @(t,k) (p(n,2) + q(n,2))^2 / p(n,2) * ...
        exp(-(p(n,2) + q(n,2)) * (k - t(1,2))) / (1 + (q(n,2) / p(n,2)) * ...
        exp(-(p(n,2) + q(n,2)) * (k - t(1,2))));
    
    S_C_21 = @(t,k) (p(n,1) + q(n,1))^2 / p(n,1) * ...
        exp(-(p(n,1) + q(n,1)) * (k - t(2,1))) / (1 + (q(n,1) / p(n,1)) * ...
        exp(-(p(n,1) + q(n,1)) * (k - t(2,1))));
    
    S_C_22 = @(t,k) (p(n,2) + q(n,2))^2 / p(n,2) * ...
        exp(-(p(n,2) + q(n,2)) * (k - t(2,2))) / (1 + (q(n,2) / p(n,2)) * ...
        exp(-(p(n,2) + q(n,2)) * (k - t(2,2))));
    
    % S-Kurven des Competitor definieren
    S_M_11 = @(tau,k) (p(n,1) + q(n,1))^2 / p(n,1) * ...
        exp(-(p(n,1) + q(n,1)) * (k - tau)) / (1 + (q(n,1) / p(n,1)) * ...
        exp(-(p(n,1) + q(n,1)) * (k - tau)));
    
    S_M_12 = @(tau,k) (p(n,2) + q(n,2))^2 / p(n,2) * ...
        exp(-(p(n,2) + q(n,2)) * (k - tau)) / (1 + (q(n,2) / p(n,2)) * ...
        exp(-(p(n,2) + q(n,2)) * (k - tau)));
    
    S_M_21 = @(tau,k) (p(n,1) + q(n,1))^2 / p(n,1) * ...
        exp(-(p(n,1) + q(n,1)) * (k - tau)) / (1 + (q(n,1) / p(n,1)) * ...
        exp(-(p(n,1) + q(n,1)) * (k - tau)));
    
    S_M_22 = @(tau,k) (p(n,2) + q(n,2))^2 / p(n,2) * ...
        exp(-(p(n,2) + q(n,2)) * (k - tau)) / (1 + (q(n,2) / p(n,2)) * ...
        exp(-(p(n,2) + q(n,2)) * (k - tau)));
    
    % Cashflow Funktionen der Company pro Markt und Innovation definieren
    % First Mover Cashflows definieren
    CF_FM_C_11_1 = @(t,k) m_FM_C_11(t) * S_C_11(t,k);
    CF_FM_C_11_2 = @(t,k,tau) m_FM_C_11(t) * S_C_11(t,k) * (1 - S_M_11(tau,k));
    
    CF_FM_C_21_1 = @(t,k) m_FM_C_21(t) * S_C_21(t,k);
    CF_FM_C_21_2 = @(t,k,tau) m_FM_C_21(t) * S_C_21(t,k) * (1 - S_M_21(tau,k));
    
    CF_FM_C_12_1 = @(t,k) m_FM_C_12(t) * S_C_12(t,k);
    CF_FM_C_12_2 = @(t,k,tau) m_FM_C_12(t) * S_C_12(t,k) * (1 - S_M_12(tau,k));
    
    CF_FM_C_22_1 = @(t,k) m_FM_C_22(t) * S_C_22(t,k);
    CF_FM_C_22_2 = @(t,k,tau) m_FM_C_22(t) * S_C_22(t,k) * (1 - S_M_22(tau,k));
    
    % Late Mover Cashflows definieren
    CF_LM_C_11 = @(t,k,tau) S_C_11(t,k) * (m_LM_C_11(t,tau) + m_FM_M_11(tau) * S_M_11(tau,k));
    
    CF_LM_C_21 = @(t,k,tau) S_C_21(t,k) * (m_LM_C_21(t,tau) + m_FM_M_21(tau) * S_M_21(tau,k));
    
    CF_LM_C_12 = @(t,k,tau) S_C_12(t,k) * (m_LM_C_12(t,tau) + m_FM_M_12(tau) * S_M_12(tau,k));
    
    CF_LM_C_22 = @(t,k,tau) S_C_22(t,k) * (m_LM_C_22(t,tau) + m_FM_M_22(tau) * S_M_22(tau,k));
    

    % Durchschnittliche Erwartungswerte der Company-NPV´s definieren
    % First-Mover NPV´s
    NPV_FM_C_11 = @(t) symsum(Pr_S_11(t) * (-A_0(n,1) + symsum(-CF_R_11 / (1 + r)^k,k,1,t(1,1)-1) + ...
        (CF_FM_C_11_1(t,k) - CF_M_11(t)) / (1 + r)^t(1,1) + symsum(CF_FM_C_11_1(t,k) / (1 + r)^k,k,t(1,1)+1,tau-1) + ...
        symsum(CF_FM_C_11_2(t,k,tau) / (1 + r)^k, k,tau,N)) + ...
        Pr_F_11(t) * (-A_0(n,1) + symsum(-CF_R_11 / (1 + r)^k, k,1,t(1,1)-1) + ...
        (CF_FM_C_11_1(t,k) - CF_M_11(t)) / (1 + r)^t(1,1)),tau,t(1,1)+1,N) / (N - t(1,1));
    
    
    NPV_FM_C_12 = @(t) symsum(Pr_S_12(t) * (-A_0(n,1) + symsum(-CF_R_12 / (1 + r)^k, k,1,t(1,2)-1) + ...
        (CF_FM_C_12_1(t) - CF_M_12(t)) / (1 + r)^t(1,2) + symsum(CF_FM_C_12_1(t) / (1 + r)^k, k,t(1,2)+1,tau-1) + ...
        symsum(CF_FM_C_12_2(t) / (1 + r)^k, k,tau,N)) + ...
        Pr_F_12(t) * (-A_0(n,1) + symsum(-CF_R_12(t) / (1 + r)^k, k,1,t(1,2)-1) + ...
        (CF_FM_C_12_1(t) - CF_M_12(t)) / (1 + r)^t(1,2)),tau,t(1,2)+1,N) / (N - t(1,2));
    
    NPV_FM_C_21 = @(t) symsum(Pr_S_21(t) * (-A_0(n,2) + symsum(-CF_R_21 / (1 + r)^k, k,1,t(2,1)-1) + ...
        (CF_FM_C_21_1(t) - CF_M_21(t)) / (1 + r)^t(2,1) + symsum(CF_FM_C_21_1(t) / (1 + r)^k, k,t(2,1)+1,tau-1) + ...
        symsum(CF_FM_C_21_2(t) / (1 + r)^k, k,tau,N)) + ...
        Pr_F_21(t) * (-A_0(n,2) + symsum(-CF_R_21(t) / (1 + r)^k, k,1,t(2,1)-1) + ...
        (CF_FM_C_21_1(t) - CF_M_21(t)) / (1 + r)^t(2,1)),tau,t(2,1)+1,N) / (N - t(2,1));
    
    NPV_FM_C_22 = @(t) symsum(Pr_S_22(t) * (-A_0(n,2) + symsum(-CF_R_22 / (1 + r)^k, k,1,t(2,2)-1) + ...
        (CF_FM_C_22_1(t) - CF_M_22(t)) / (1 + r)^t(2,2) + symsum(CF_FM_C_22_1(t) / (1 + r)^k, k,t(2,2)+1,tau-1) + ...
        symsum(CF_FM_C_22_2(t) / (1 + r)^k, k,tau,N)) + ...
        Pr_F_22(t) * (-A_0(n,2) + symsum(-CF_R_22(t) / (1 + r)^k, k,1,t(2,2)-1) + ...
        (CF_FM_C_22_1(t) - CF_M_22(t)) / (1 + r)^t(2,2)),tau,t(2,2)+1,N) / (N - t(2,2));

    % Late-Mover NPV´s
    NPV_LM_C_11 = @(t) symsum(Pr_S_11(t) * (-A_0(n,1) + symsum(-CF_R_11 / (1 + r)^k,k,1,t(1,1)-1) + ...
        (CF_LM_C_11(t,k,tau) - CF_M_11(t)) / (1 + r)^t(1,1) + symsum(CF_LM_C_11(t,k,tau) / (1 + r)^k,k,t(1,1)+1,N) + ...
        Pr_F_11(t) * (-A_0(n,1) + symsum(-CF_R_11 / (1 + r)^k, k,1,t(1,1)-1) + ...
        (CF_LM_C_11(t,k,tau) - CF_M_11(t)) / (1 + r)^t(1,1))),tau,t(1,1)+1,N) / (N - t(1,1));
    
    NPV_LM_C_12 = @(t) symsum(Pr_S_12(t) * (-A_0(n,1) + symsum(-CF_R_12 / (1 + r)^k,k,1,t(1,2)-1) + ...
        (CF_LM_C_12(t,k,tau) - CF_M_12(t)) / (1 + r)^t(1,2) + symsum(CF_LM_C_12(t,k,tau) / (1 + r)^k,k,t(1,2)+1,N) + ...
        Pr_F_12(t) * (-A_0(n,1) + symsum(-CF_R_12 / (1 + r)^k, k,1,t(1,2)-1) + ...
        (CF_LM_C_12(t,k,tau) - CF_M_12(t)) / (1 + r)^t(1,2))),tau,t(1,2)+1,N) / (N - t(1,2));
    
    NPV_LM_C_21 = @(t) symsum(Pr_S_21(t) * (-A_0(n,2) + symsum(-CF_R_21 / (1 + r)^k,k,1,t(2,1)-1) + ...
        (CF_LM_C_21(t,k,tau) - CF_M_21(t)) / (1 + r)^t(2,1) + symsum(CF_LM_C_21(t,k,tau) / (1 + r)^k,k,t(2,1)+1,N) + ...
        Pr_F_21(t) * (-A_0(n,2) + symsum(-CF_R_21 / (1 + r)^k, k,1,t(2,1)-1) + ...
        (CF_LM_C_21(t,k,tau) - CF_M_21(t)) / (1 + r)^t(2,1))),tau,t(2,1)+1,N) / (N - t(2,1));
    
    NPV_LM_C_22 = @(t) symsum(Pr_S_22(t) * (-A_0(n,2) + symsum(-CF_R_22 / (1 + r)^k,k,1,t(2,2)-1) + ...
        (CF_LM_C_22(t,k,tau) - CF_M_22(t)) / (1 + r)^t(2,2) + symsum(CF_LM_C_22(t,k,tau) / (1 + r)^k,k,t(2,2)+1,N) + ...
        Pr_F_22(t) * (-A_0(n,2) + symsum(-CF_R_22 / (1 + r)^k, k,1,t(2,2)-1) + ...
        (CF_LM_C_22(t,k,tau) - CF_M_22(t)) / (1 + r)^t(2,2))),tau,t(2,2)+1,N) / (N - t(2,2));
    
    % ###### First-Mover-Wahrscheinlichkeiten ######
    p_FM_11 = @(t) b^(1 - t(1,1)) .* (t(1,1) >= 1) + 0 .* (t(1,1) == 0);
    p_FM_12 = @(t) b^(1 - t(1,2)) .* (t(1,2) >= 1) + 0 .* (t(1,2) == 0);
    p_FM_21 = @(t) b^(1 - t(2,1)) .* (t(2,1) >= 1) + 0 .* (t(2,1) == 0);
    p_FM_22 = @(t) b^(1 - t(2,2)) .* (t(2,2) >= 1) + 0 .* (t(2,2) == 0);
    
    % ###### Late-Mover-Wahrscheinlichkeiten ######
    p_LM_11 = @(t) 1 - p_FM_11(t) .* (t(1,1) >= 1) + 0 .* (t(1,1) == 0);
    p_LM_12 = @(t) 1 - p_FM_12(t) .* (t(1,2) >= 1) + 0 .* (t(1,1) == 0);
    p_LM_21 = @(t) 1 - p_FM_21(t) .* (t(2,1) >= 1) + 0 .* (t(1,1) == 0);
    p_LM_22 = @(t) 1 - p_FM_22(t) .* (t(2,2) >= 1) + 0 .* (t(1,1) == 0);
    
    % ###### Zielfunktion für die Optimierung ######
    objective = @(t) -(p_FM_11(t) *  NPV_FM_C_11(t) + p_LM_11(t) * NPV_LM_C_11(t) + ...
        p_FM_12(t) *  NPV_FM_C_12(t) + p_LM_12(t) * NPV_LM_C_12(t) + ...
        p_FM_21(t) *  NPV_FM_C_21(t) + p_LM_21(t) * NPV_LM_C_21(t) + ...
        p_FM_22(t) *  NPV_FM_C_22(t) + p_LM_22(t) * NPV_LM_C_22(t));
        
    % Startwert für die Optimierung festlegen
    t0 = [1 2;3 4];

% ###########################
% Nebenbedingungen
% ###########################

% ###### Obere und untere Grenzen ######
% untere Grenzen
lb = zeros(2,2);

% obere Grenzen
ub = N * ones(2,2);

% ###### Lineare Nebenbedingungen ######

% lineare Ungleichungen
Ao = [];
bo = [];

% lineare Gleichungen
Aeq = [];
beq = [];

% ###### Nichtlineare Nebenbedingungen ######
c = [];
ceq = [];

% ###### optimize with fmincon ######
% ###### [X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] ######

% = fmincon(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)
x = fmincon(objective,t0,Ao,bo,Aeq,beq,lb,ub,c,ceq)


end

% ###### Ergebnisse ######
% show final objective
disp(['Final Objective: ' num2str(objective(x))])

% print solution
disp('Solution')
disp(['x1 = ' num2str(x(1))])
disp(['x2 = ' num2str(x(2))])
disp(['x3 = ' num2str(x(3))])
disp(['x4 = ' num2str(x(4))])