#include <PowellVariant2.h>
Diagram dziedziczenia dla PowellVariant2
Bezgradientowa metoda kierunków sprzężonych.
Od wariantu pierwszego odróżnia ją metoda modyfikacji bazy kierunków (krok 4 procedury). Metoda zaimplementowana w tym wariancie gwarantuje zachowanie liniowej niezależności kierunków.
Metoda oparta na dwóch twierdzeniach:
1. Dla wzajemnie sprzężonych względem dodatnio określonej macierzy kierunków
minimum formy kwadratowej
może być znalezione w wyniku minimalizacji funkcji wzdłuż każdego z kierunków tylko raz.
Kierunki są wzajemnie sprzężone względem dodatnio określonej macierzy , gdy spełniony jest warunek:
2. Jeśli jest minimum w kierunku należącym do pewnej rozmaitości liniowej oraz jeśli jest minimum w tym samym kierunku , ale w innej rozmaitości zawierającej ten kierunek (np. i znaleziono w wyniku minimalizacji w kierunku zaczynając z różnych punktów startowych), to kierunek
łączący te dwa punkty jest sprzężony z kierunkiem .
Twierdzenie 1 zapewnia, że metoda, przy wykorzystaniu dokładnych poszukiwań w kierunku, będzie znajdować minimum wielomianu drugiego stopnia w krokach, gdzie jest liczbą zmiennych.
Twierdzenie 2 dostarcza łatwej metody generowania kierunków sprzężonych.
Informacje wejściowe:
- minimalizowana funkcja zmiennych,
- dowolnie wybrany punkt startowy,
- wymagana dokładność obliczeń,
warunek stopu - do wyboru:
Oznaczenia:
- indeks aktualnego kierunku,
- numer aktualnej iteracji,
- baza wzajemnie ortogonalnych kierunków (macierz utworzona z wektorów kolumnowych),
- aktualny punkt,
- punkt startowy etapu,
- długość optymalnego krok w danym kierunku , wyznaczona przez metodę optymalizacji w kierunku,
- najdłuższy krok wzdłuż jednego z kierunków w fazie przeszukiwania,
- indeks kierunku, w którym wykonano najdłuższy krok,
- wyznacznik macierzy kierunków w -tej iteracji,
- wyznacznik macierzy kierunków po ewentualnym umieszczeniu w~niej nowego kierunku sprzężonego.
Procedura.
Krok wstępny:
Podstawiamy , gdzie - macierz identycznościowa o wymiarach .
Obliczamy pierwszy punkt początkowy:
Podstawiamy:
Krok 1:
Przy pomocy metody optymalizacji w kierunku wyznaczamy optymalną długość kroku i wykonujemy krok:
Jeśli wykonany krok jest najdłuższy w etapie (), to zapamiętujemy jego długość i indeks kierunku:
Podstawiamy i sprawdzamy, czy . Jeśli tak, ponownie wykonujemy krok 1. Jeśli nie, podstawiamy i przechodzimy do kroku 2.
Krok 2:
Sprawdzamy warunek stopu. Jeśli jest on spełniony, to STOP. Wynikiem jest .
W przeciwnym razie przechodzimy do kroku 3.
Krok 3:
Wyznaczamy nowy kierunek sprzężony:
Następnie wykonujemy krok o optymalnej długości w tym kierunku:
Krok 4:
Sprawdzamy warunek modyfikacji bazy:
Jeśli warunek ten jest spełniony, kierunek, w którym wykonano najdłuższy krok , zostaje zastąpiony nowym kierunkiem sprzężonym:
i zostaje zapamiętany nowy wyznacznik bazy:
Jeśli warunek nie jest spełniony, baza kierunków nie jest zmieniana.
Podstawiamy aktualny punkt za punkt startowy dla kolejnego etapu:
Podstawiamy , i wracamy do kroku 1.
Uwagi.
Wariant ten jest mniej wydajny od podstawowego, jednak gwarantuje zachowanie liniowej niezależności kierunków.
Metoda zaimplementowana na podstawie opisu zamieszczonego w:
Findeisen W., Szymanowski J., Wierzbicki A.: Teoria i metody obliczeniowe optymalizacji. Warszawa, PWN 1977.
W odróżnieniu od tego opisu, w implementacji warunek stopu sprawdzany jest przed obliczeniem nowego kierunku sprzężonego, w celu uniknięcia ryzyka dzielenia przez 0 przy wyznaczaniu kierunku.