#przedział danych wejściowych (przedział danych do działąnia) life = ctrl.Antecedent(np.linspace(0,100,100), 'Życie gracza') distance = ctrl.Antecedent(np.linspace(0,50,100), 'Dystans') #przedział danych wyjsciowych (przedział danych które możemy uzyskać) attack = ctrl.Consequent(np.linspace(0,100,100), 'Siła ataku') #Tworzymy wykresy które mówią nam kiedy uważamy jaki rodzaj życia/odległości/ataku mamy life['Niskie'] = fuzz.trimf(life.universe, [0, 0, 40]) life['Średnie'] = fuzz.trimf(life.universe, [30, 50, 70]) life['Wysokie'] = fuzz.trimf(life.universe, [60, 100, 100]) distance['Mały'] = fuzz.trimf(distance.universe, [0,0,40]) distance['Duży'] = fuzz.trimf(distance.universe, [10,50,50]) attack['Brak'] = fuzz.trimf(attack.universe, [0, 0, 30]) attack['Ostrożny'] = fuzz.trimf(attack.universe, [50, 70, 90]) attack['Zdecydowany'] = fuzz.trimf(attack.universe, [80, 100, 100]) #Tworzymy reguły kiedy następuje jaki atak na podstawie opisowego hp i odległości rule1= ctrl.Rule(life["Niskie"], attack['Zdecydowany']) #Rule(Kiedy ma się coś zadziać, co się zadziało) rule2= ctrl.Rule(life["Średnie"] & distance['Duży'], attack['Ostrożny']) rule3= ctrl.Rule(life["Średnie"] & distance['Mały'], attack['Ostrożny']) rule4= ctrl.Rule(life["Wysokie"], attack['Brak']) #Łączymy reguły w system attack_ctrl = ctrl.ControlSystem([rule1,rule2,rule3,rule4]) #Tworzymy symulację attack_sim = ctrl.ControlSystemSimulation(attack_ctrl) #Wprowadzamy dane do symulacji aby policzyć atak attack_sim.input['Życie gracza'] = 35 attack_sim.input['Dystans'] = 12 #Obliczamy wynik attack_sim.compute() # Wyświetl wynik print(f"Poziom ataku: {attack_sim.output['Siła ataku']:.2f}") #wykres można narysować używając ten funkcji attack.view(sim=attack_sim)