Projekt 4
Strojenie
wybranych parametrów regulatora rozmytego przy wykorzystaniu algorytmów
genetycznych
5. Przykłady
W przykładzie wykorzystano elementy opracowane i przygotowane do realizacji projektu 1 i projektu 2.
Wykorzystany w projekcie 2 regulator rozmyty pozwala bezpośrednio na modyfikację parametrów ke, kde oraz kdCV, które zostały zdefiniowane jako parametry bloku regulatora rozmytego oraz udostępnione jako zmienne wejściowe symulatora. Zdecydowano się na optymalizację parametru ke oraz kdCV.
Wykorzystano tę samą implementację algorytmu genetycznego co w projekcie 1. Zmodyfikowano funkcję celu, tak aby uwzględnić oba dostrajane pareametry.
def fitness_func(ga_instance, solution, solution_idx):
# Symulacja
system.in_var_val('ke', solution[0])
system.in_var_val('kdCV', solution[1])
proc_vars = system.simulate(tend, 'control')
# Wyznaczenie wskaźników oceny jakości regulacji
eval = calculate_quality_indicators(dt, proc_vars['t'], sp, proc_vars['e'])
fitness1 = 1.0 / (eval['st'] + 0.000001)
fitness2 = 1.0 / (eval['ISE'] + 0.000001)
progress_bar(solution_idx + 1, sol_per_pop, 1)
print(f" Step: {solution_idx + 1} Solution: kp={solution[0]} Eval - st: {eval['st']}, ISE: {eval['ISE']}")
return [fitness1, fitness2]
Zmodyfikowano także parametry algorytmu genetycznego tak, aby uwzględnić oba strojone parametry:
# Parametry AG
num_generations = 100
num_parents_mating = 10
sol_per_pop = 20
# dostrajne będą parametry: ke, kdCV
num_genes = 2
init_range_low = 0.01
init_range_high = 10
Najpierw dokonano oceny jakości regulacji dla struktury i parametrów modelu rozmytego z projektu 2.
Następnie dokonano oceny jakości regulacji dla parametrów modelu rozmytego dobranego w wyniku prowadzonej optymalizacji. Jak widać, uzyskano lepsze rezultaty, chociaż cały czas pozostało wiele do poprawienia.
ke, kdCV wyznaczonej przez algorytm genetyczny