%
%
%10.1   Einfhrung %<'FontWeight',MSVTITLWEIGHT,'FontSize',MSVTITLSIZE,'Color',MSVTITLCOLOR>
%
%
% Nichts ist an sich optimal sondern immer nur bezglich eines Aspektes.  Diesen Aspekt 
% muss man als Funktion berechenbarer Eigenschaften der Antenne formulieren.  Man nennt 
% diese Funktion die {\bfKostenfunktion}.
%
% Um eine Antenne optimieren zu knnen, muss deshalb folgendes gegeben sein:
%
% (1)  Eine Beschreibung der Antenne durch ein Modell, welches diejenigen Parameter 
%       als {\bfformale Parameter} enthlt, mit denen man durch Variation eine optimale 
%       Lsung zu finden gedenkt. 
%
% (2)  Eine Definition der Kostenfunktion
%
% Damit die Optimierung automatisch auf dem Rechner ablaufen kann ist darberhinaus 
% erforderlich:
%
% (3)  Ein Programm, welches die Kostenfunktion realisiert.  Da die Kosten von den 
%       Eigenschaften der Antenne abhngen, muss dieses Programm das Antennenmodell 
%       kennen und die NEC-Programme zur Berechnung der Antenneneigenschaften 
%       aufrufen.
%
% (4)  Ein Programm, das die Antennenparameter nach einem ausgewhlten Algorithmus 
%       variiert, jedesmal die Kostenfunktion aufruft und durch Vergleich der Kosten 
%       schliesslich zu einer Lsung mit minimalen Kosten gelangt.
%
%
% \bfVerfahren zum Auffinden des Minimums
%
% Hier werden drei verschiedene Verfahren zum Auffinden eines Minimums behandelt:
%
% (A)  Berechnung der Kosten fr smtliche Punkte in einem regelmssigen Gitter.
%        Suche nach dem absoluten Kostenminimum auf dem Gitter.  Dieses Verfahren 
%        ist rechenintensiv, insbesondere wenn das Gitter engmaschig ist.  Die Rechenzeit 
%        steigt exponentiell mit der Zahl der zu variierenden Parameter!
%
% (B)  Bestimmung der Kosten an einem Anfangspunkt sowie der Richtung des strksten 
%        Geflles der Kosten durch wenige Testpunkte in der unmittelbaren Umgebung. 
%        Wiederholung des Verfahrens durch Ersatz des Anfangspunktes durch einen 
%        Punkt in der Richtung des strksten Geflles.  Dieses Verfahren arbeitet dann 
%        gut, wenn die Kostenfunktion nur ein einziges Minimum hat, also nicht so 
%        aussieht wie eine Gebirgslandschaft mit tausend Seen, die alle lokale Minima 
%        darstellen.
%
% (C)  Ausgehend von einem Anfangspunkt wird per Zufall ein Parameter ausgewhlt 
%        und ebenfalls per Zufall mit Normalverteilung ein Schritt dieses Parameters. 
%        An dem neuen Punkt werden die Kosten berechnet.  Sind sie kleiner als am 
%        Ausgangspunkt, so wird der neue Punkt als nchster Ausgangspunkt genommen 
%        andernfalls der alte.
%
% Die drei Verfahren sind realisiert in den Funktionen
%
parameterhelp gridopt
%
parameterhelp gradopt
%
parameterhelp randopt
%
%
% \bfKostenfunktionen
%
% Die Festlegung der Kostenfunktion erfordert Erfahrung im Programmieren.  Die 
% Bedingungen sind meistens so speziell, dass die Kostenfunktion individuell formuliert 
% werden muss.  Deshalb werden hier keine vorgefertigten Kostenfunktionen bereitgestellt. 
% Aus den Beispielen lassen sich aber solche entnehmen.  Zur Gewinnberechnung dient die 
% Funktion  {\fontname{Courier}gain} :
%
parameterhelp gain
%
% Eine Kostenfunktion fr die Gewinnmaximierung ist dann  {\fontname{Courier}1/Gewinnfaktor} :
% {\fontname{Courier}10^{-(gain( ... )/20)}} .
%
% Bei Kurzwellenantennen ist hufig das Vor/Rck-Verhltnis der Antenne wichtiger als der 
% Gewinn.  Als Kostenfunktion kann man dann direkt dieses Verhltnis reziprok nehmen. 
% Mit der Funktion  {\fontname{Courier}fbratio}  ist die Kostenfunktion dann
% {\fontname{Courier}10^{-(fbratio( ... )/20)}} :
%
parameterhelp fbratio
%
% Evtl. wird man dies kombinieren wollen mit dem Gewinn.  Dann kann man bei gleicher 
% Gewichtung von Gewinn und Vorwrts/Rckwrts-Verhltnis nehmen:
%
% {\fontname{Courier}10^{-(sum(fbratio( ... ))/20)}} 
%
% Wir verwenden diese Kostenfunktion zur Optimierung einer HB9CV-Antenne fr  28.1 MHz :
%
%% Achtung:  Die Zeitgrenze ist hier auf  2 Minuten gesetzt !
%
%
f  = 28.1;
x0 = [71.2/f  77.5/f;  0.002  0.002];
cost = ['10^-(sum(fbratio(hb9cv(' num2str(f) ',0,x(1),x(2)),' num2str(f) '))/20)'];
[cm,xo] = randopt(cost,[0 0],1:2,x0,120)
antgraph(hb9cv(f,0,xo(1),xo(2)));
rph(hb9cv(f,0,xo(1),xo(2)),f);
rpv(hb9cv(f,0,xo(1),xo(2)),f);
%
% Offensichtlich gibt es ein Problem.  Die Funktion  {\fontname{Courier}fbratio}  ermittelt nmlich 
% per Default als Rckwrtskeule das Maximum im gesamten rckwrtigen Halbraum.  
% Wir schrnken deshalb den ffnungswinkel des Such-Konus fr die Rckwrtskeule 
% auf  {\fontname{Courier}\pm30}  ein:
%
f  = 28.1;
x0 = [71.15/f  77.52/f;  0.002  0.002];
cost = ['10^-(sum(fbratio(hb9cv(' num2str(f) ',0,x(1),x(2)),' num2str(f) ',30))/20)'];
[cm,xo] = randopt(cost,[0 0],1:2,x0,300)
antgraph(hb9cv(f,0,xo(1),xo(2)));
rph(hb9cv(f,0,xo(1),xo(2)),f);
rpv(hb9cv(f,0,xo(1),xo(2)),f);
%
% Der Vergleich der beiden letzten Optimierungen zeigt allerdings, dass in diesem 
% Fall das Vorwrts/Rckwrtsverhltnis praktisch nicht verndert werden kann.
%