Skip to content
Snippets Groups Projects
Select Git revision
  • b5346448b409431d4006c4b16e5607fa1cd82783
  • main default protected
2 results

lotkavolterra_antibiotics.m

Blame
  • lotkavolterra_antibiotics.m 6.44 KiB
    r = [0.8, 0.4, 0.5, 0.3, 0.2, 0.25]'; % Pseudomonas, Staphylococcus, Burkholderia, Stenotrophomonas, Prevotella, Streptococcus
    K = [120, 80, 70, 60, 50, 40]';
    A = [  1, -0.2, -0.4, +0.2, -0.1, -0.2;  % Pseudomonas interakciói
          -0.1,  1,  0.0,  0.0,  0.0,  0.0;  % Staphylococcus interakciói
          -0.5,  0.0,  1, -0.1,  0.0,  0.0;  % Burkholderia interakciói
          +0.2,  0.0, -0.2,  1, +0.1,  0.0;  % Stenotrophomonas interakciói
          -0.1,  0.0,  0.0, +0.1,  1, +0.1;  % Prevotella interakciói
          -0.2,  0.0,  0.0,  0.0, +0.1,  1 ]; % Streptococcus interakciói
    x0 = [50, 30, 20, 25, 15, 10]';  % Kezdeti populációméretek
    
    antibiotics = {'Ampicillin', 'Tobramycin'}; 
    
    % Differenciálegyenlet megoldása antibiotikum hatással
    [t, X] = ode45(@(t, x) lotka_volterra_with_antibiotics(t, x, r, K, A, antibiotics), [0 100], x0);
    
    figure;
    hold on;
    colors = lines(6); 
    for i = 1:6
        plot(t, X(:, i), 'LineWidth', 2, 'Color', colors(i, :));
    end
    legend('Pseudomonas', 'Staphylococcus', 'Burkholderia', ...
           'Stenotrophomonas', 'Prevotella', 'Streptococcus', 'Location', 'best');
    xlabel('Idő', 'FontSize', 12);
    ylabel('Populáció mérete', 'FontSize', 12);
    title(['Lotka-Volterra modell antibiotikum hatással: ' antibiotics], 'FontSize', 14);
    grid on;
    
    % Egyensúlyi állapotok
    time_points = [20, 100]; 
    equilibrium_states = zeros(length(time_points), size(X, 2));
    
    for i = 1:length(time_points)
        [~, idx] = min(abs(t - time_points(i))); 
        equilibrium_states(i, :) = X(idx, :);
    end
    
    % Adatok normálása egyensúlyi állapotok ábrázolásához
    normalized_states = 100 * equilibrium_states ./ sum(equilibrium_states, 2);
    
    figure;
    bar_handle = bar(time_points, normalized_states, 'stacked');
    colors = lines(6); % 6 species
    for i = 1:size(X, 2)
        set(bar_handle(i), 'FaceColor', colors(i, :));
    end
    xlabel('Vizsgált időpillanatok', 'FontSize', 12);
    ylabel('Populáció mérete normálva (%)', 'FontSize', 12);
    title(['Egyensúlyi állapotok antibiotikum hatással: ' antibiotics], 'FontSize', 14);
    legend({'Pseudomonas', 'Staphylococcus', 'Burkholderia', ...
            'Stenotrophomonas', 'Prevotella', 'Streptococcus'}, ...
            'Location', 'best');
    grid on;
    
    % Lotka-Volterra függvény antibiotikum hatással
    function dxdt = lotka_volterra_with_antibiotics(t, x, r, K, A, antibiotics)
        r_mod = r; 
        K_mod = K;
    
        extinction_threshold = 10; % Kihalási küszöb
        adjustment_rate = 0.08; % Eltartóképesség csökkentésének sebessége (lassan csökken)
        
        for i = 1:length(x)
            if x(i) < extinction_threshold
                % Fokozatos csökkentés nullához exponenciálisan, ha populáció < küszöb
                K_mod(i) = K_mod(i) * exp(-adjustment_rate * t); 
                r_mod(i) = r_mod(i) * exp(-adjustment_rate * t);
                if K_mod(i) < 0.15
                    r_mod(i) = 0;
                end
            end
        end
    
        if t > 30 && t < 70 % Az antibiotikum 30 és 70 időegység között aktív
        % Antibiotikum hatásának időfüggése (Gauss-görbe)
        antibiotic_effect = exp(-(t - 50)^2 / (2 * 10^2));
        sensitivity_vector = [1, 0.8, 0.9, 0.7, 0.5, 0.4];
    
        % Növekedési ráták csökkentése az időfüggő antibiotikum hatással
        r_mod = r_mod .* (1 - antibiotic_effect * sensitivity_vector');
        
        scaled_time = t - 30; % Átskálázott idő: antibiotikum hatás kezdete legyen a 0
        resistance_growth_rate = 0.01;
        resistance_factor = 1 + resistance_growth_rate * scaled_time;
        r_mod = r_mod .* (1 ./ resistance_factor);
        max_increase = 1.5; % Maximális eltartóképesség növekedési faktor (pl. 1.5 = 50%-os növekedés)
        K_mod = K_mod .* (1 + (max_increase - 1) * (1 - exp(-resistance_growth_rate * scaled_time))); 
    
        % Az antibiotikumok antagonisztikus hatásának figyelembevétele
            interaction_modifier = ones(size(r_mod)); % Kezdetben nincs hatás
    
        for i = 1:length(antibiotics)
            switch antibiotics{i}
                case 'Ampicillin'
                    % Staphylococcus érzékenysége (részleges védelem penicillinázokkal)
                    r_mod(2) = r_mod(2) * 0.3;  % Növekedési ráta csökkentése
                    K_mod(2) = K_mod(2) * 0.2;  % Eltartóképesség jelentős csökkentése
    
                    % Streptococcus érzékenysége (kevésbé védekező képes)
                    r_mod(6) = r_mod(6) * 0.2;  % Növekedési ráta csökkentése
                    K_mod(6) = K_mod(6) * 0.03;  % Eltartóképesség erősebb csökkentése
    
                case 'Tobramycin'
                    % Pseudomonas érzékenysége (aminoglikozid antibiotikum)
                    r_mod(1) = r_mod(1) * 0.1; % Növekedési ráta csökkentése
                    K_mod(1) = K_mod(1) * 0.05; % Eltartóképesség csökkentése
    
                case 'Ceftazidime'
                    % Pseudomonas érzékenysége (széles spektrumú cefalosporin)
                    r_mod(1) = r_mod(1) * 0.2; % Növekedési ráta csökkentése
                    K_mod(1) = K_mod(1) * 0.01; % Jelentős eltartóképesség csökkentése
    
                    % Prevotella részleges érzékenysége
                    r_mod(5) = r_mod(5) * 0.6; % Növekedési ráta csökkentése
    
                case 'Azithromycin'
                    % Staphylococcus érzékenysége (makrolid antibiotikum)
                    r_mod(2) = r_mod(2) * 0.3; % Növekedési ráta csökkentése
                    K_mod(2) = K_mod(2) * 0.5; % Mérsékelt eltartóképesség csökkentése
    
                    % Streptococcus érzékenysége
                    r_mod(6) = r_mod(6) * 0.2; % Növekedési ráta csökkentése
                    K_mod(6) = K_mod(6) * 0.8; % Enyhébb eltartóképesség csökkentése
    
                case 'Tetracycline'
                    % Tetracycline (bakteriosztatikus) hatása
                    r_mod(3) = r_mod(3) * 0.5; % Burkholderia növekedési ráta csökkentése
                    K_mod(3) = K_mod(3) * 0.5; % Burkholderia eltartóképesség csökkentése
    
                    interaction_modifier(2) = interaction_modifier(2) * (1 - 0.8); % Csökkenti Penicillin hatékonyságát
                case 'Penicillin'
                    % Penicillin (baktericid) hatása
                    r_mod(2) = r_mod(2) * 0.7; % Staphylococcus növekedési ráta csökkentése
                    K_mod(2) = K_mod(2) * 0.8; % Staphylococcus eltartóképesség csökkentése
    
                    interaction_modifier(3) = interaction_modifier(3) * (1 - 0.8); % Csökkenti Tetracycline hatékonyságát
            end
        end
                r_mod = r_mod .* interaction_modifier; 
        end
        % Lotka-Volterra dinamikák számítása
        dxdt = r_mod .* x .* (1 - ((A * x) ./ K_mod));
    end