import numpy as np import matplotlib.pyplot as plt import skfuzzy as fuzz # Zakres zmiennej wyjściowej – poziom ataku x_attack = np.linspace(0, 100, 1000) # Funkcje przynależności – atak attack_none = fuzz.trimf(x_attack, [0, 0, 30]) attack_careful = fuzz.trimf(x_attack, [50, 70, 90]) attack_strong = fuzz.trimf(x_attack, [80, 100, 100]) # Wykres plt.figure(figsize=(10, 4)) plt.plot(x_attack, attack_none, label='Brak', color='blue') plt.plot(x_attack, attack_careful, label='Ostrożny', color='orange') plt.plot(x_attack, attack_strong, label='Zdecydowany', color='red') plt.title('Funkcje przynależności – Poziom ataku') plt.xlabel('Atak [%]') plt.ylabel('Przynależność μ(x)') plt.legend() plt.grid(True) plt.ylim(0, 1.1) plt.show() import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl # Zdefiniowanie zmiennych wejściowych life = ctrl.Antecedent(np.linspace(0, 100, 1000), 'Zycie gracza') distance = ctrl.Antecedent(np.linspace(0, 50, 1000), 'Odleglosc') # Zdefiniowanie zmiennej wejściowej attack = ctrl.Consequent(np.linspace(0, 100, 1000), 'Poziom ataku') # Funkcje przynależności – życie life['Niskie'] = fuzz.trimf(life.universe, [0, 0, 40]) life['Srednie'] = fuzz.trimf(life.universe, [30, 50, 70]) life['Wysokie'] = fuzz.trimf(life.universe, [60, 100, 100]) # Funkcje przynależności – odległość distance['Mala'] = fuzz.trimf(distance.universe, [0, 0, 15]) distance['Duza'] = fuzz.trimf(distance.universe, [10, 50, 50]) # Funkcje przynależności – atak attack['Brak'] = fuzz.trimf(attack.universe, [0, 0, 30]) attack['Ostrozny'] = fuzz.trimf(attack.universe, [50, 70, 90]) attack['Zdecydowany'] = fuzz.trimf(attack.universe, [80, 100, 100]) # Zdefiniowanie reguł wnioskowania rule1 = ctrl.Rule(life['Niskie'], attack['Zdecydowany']) rule2 = ctrl.Rule(life['Srednie'] & distance['Duza'], attack['Ostrozny']) rule3 = ctrl.Rule(life['Srednie'] & distance['Mala'], attack['Ostrozny']) rule4 = ctrl.Rule(life['Wysokie'] & distance['Mala'], attack['Brak']) # Zbudowanie systemu rozmytego attack_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4]) attack_sim = ctrl.ControlSystemSimulation(attack_ctrl) # Wprowadzenie danych wejściowych attack_sim.input['Zycie gracza'] = 35 attack_sim.input['Odleglosc'] = 12 # Oblicz wynik attack_sim.compute() # Wyświetl wynik print(f"Poziom ataku: {attack_sim.output['Poziom ataku']:.2f}") attack.view(sim=attack_sim)