Verschieben von durchschnittlichen und exponentiellen Glättungsmodellen Als erster Schritt, um über mittlere Modelle hinauszugehen, können zufällige Wandermodelle und lineare Trendmodelle, Nichtseasonalmuster und Trends mit einem gleitenden Durchschnitt oder Glättungsmodell extrapoliert werden. Die Grundannahme hinter Mittelwertbildung und Glättung von Modellen ist, dass die Zeitreihe lokal stationär mit einem langsam variierenden Mittel ist. Daher nehmen wir einen bewegten (lokalen) Durchschnitt, um den aktuellen Wert des Mittelwerts abzuschätzen und dann das als die Prognose für die nahe Zukunft zu verwenden. Dies kann als Kompromiss zwischen dem mittleren Modell und dem random-walk-without-drift-Modell betrachtet werden. Die gleiche Strategie kann verwendet werden, um einen lokalen Trend abzuschätzen und zu extrapolieren. Ein gleitender Durchschnitt wird oft als quotsmoothedquot Version der ursprünglichen Serie, weil kurzfristige Mittelung hat die Wirkung der Glättung der Beulen in der ursprünglichen Serie. Durch die Anpassung des Grades der Glättung (die Breite des gleitenden Durchschnitts), können wir hoffen, eine Art von optimalem Gleichgewicht zwischen der Leistung der mittleren und zufälligen Wandermodelle zu schlagen. Die einfachste Art von Mittelungsmodell ist die. Einfache (gleichgewichtete) Moving Average: Die Prognose für den Wert von Y zum Zeitpunkt t1, der zum Zeitpunkt t gemacht wird, entspricht dem einfachen Durchschnitt der letzten m Beobachtungen: (Hier und anderswo verwende ich das Symbol 8220Y-hat8221 zu stehen Für eine Prognose der Zeitreihe Y, die zum frühestmöglichen früheren Datum durch ein gegebenes Modell gemacht wurde.) Dieser Durchschnitt ist in der Periode t (m1) 2 zentriert, was impliziert, dass die Schätzung des lokalen Mittels dazu neigen wird, hinter dem wahren zu liegen Wert des lokalen Mittels um etwa (m1) 2 Perioden. So sagen wir, dass das Durchschnittsalter der Daten im einfachen gleitenden Durchschnitt (m1) 2 relativ zu dem Zeitraum ist, für den die Prognose berechnet wird: Dies ist die Zeitspanne, mit der die Prognosen dazu neigen, hinter den Wendepunkten in den Daten zu liegen . Zum Beispiel, wenn Sie durchschnittlich die letzten 5 Werte sind, werden die Prognosen etwa 3 Perioden spät in Reaktion auf Wendepunkte. Beachten Sie, dass, wenn m1, das einfache gleitende Durchschnitt (SMA) - Modell entspricht dem zufälligen Walk-Modell (ohne Wachstum). Wenn m sehr groß ist (vergleichbar mit der Länge der Schätzperiode), entspricht das SMA-Modell dem mittleren Modell. Wie bei jedem Parameter eines Prognosemodells ist es üblich, den Wert von k anzupassen, um die besten Quoten für die Daten zu erhalten, d. h. die kleinsten Prognosefehler im Durchschnitt. Hier ist ein Beispiel für eine Reihe, die zufällige Schwankungen um ein langsam variierendes Mittel zeigt. Zuerst können wir versuchen, es mit einem zufälligen Spaziergang Modell, das entspricht einem einfachen gleitenden Durchschnitt von 1 Begriff: Das zufällige Spaziergang Modell reagiert sehr schnell auf Änderungen in der Serie, aber in diesem Fall nimmt es viel von der Quotierung in der Daten (die zufälligen Schwankungen) sowie das quotsignalquot (das lokale Mittel). Wenn wir stattdessen einen einfachen gleitenden Durchschnitt von 5 Begriffen ausprobieren, erhalten wir einen glatteren Prognosen: Der 5-fach einfache gleitende Durchschnitt liefert in diesem Fall deutlich kleinere Fehler als das zufällige Spaziergangmodell. Das Durchschnittsalter der Daten in dieser Prognose beträgt 3 ((51) 2), so dass es dazu neigt, hinter den Wendepunkten um etwa drei Perioden zurückzukehren. (Zum Beispiel scheint ein Abschwung in der Periode 21 aufgetreten zu sein, aber die Prognosen drehen sich nicht um einige Perioden später.) Beachten Sie, dass die Langzeitprognosen des SMA-Modells eine horizontale Gerade sind, genau wie im zufälligen Spaziergang Modell. So geht das SMA-Modell davon aus, dass es keinen Trend in den Daten gibt. Während die Prognosen aus dem zufälligen Wandermodell einfach dem letzten beobachteten Wert entsprechen, sind die Prognosen des SMA-Modells gleich einem gewichteten Durchschnitt der letzten Werte. Die von Statgraphics für die Langzeitprognosen des einfachen gleitenden Durchschnittes berechneten Vertrauensgrenzen werden nicht weiter erhöht, wenn der Prognosehorizont zunimmt. Das ist offensichtlich nicht richtig Leider gibt es keine zugrundeliegende statistische Theorie, die uns sagt, wie sich die Konfidenzintervalle für dieses Modell erweitern sollten. Allerdings ist es nicht zu schwer, empirische Schätzungen der Vertrauensgrenzen für die längerfristigen Prognosen zu berechnen. Zum Beispiel könnten Sie eine Kalkulationstabelle einrichten, in der das SMA-Modell zur Vorhersage von 2 Schritten voraus, 3 Schritten voraus, etc. im historischen Datenmuster verwendet werden würde. Sie können dann die Stichproben-Standardabweichungen der Fehler bei jedem Prognosehorizont berechnen und dann Konfidenzintervalle für längerfristige Prognosen durch Addition und Subtraktion von Vielfachen der entsprechenden Standardabweichung aufbauen. Wenn wir einen 9-fach einfachen gleitenden Durchschnitt versuchen, bekommen wir noch glattere Prognosen und mehr von einem nacheilenden Effekt: Das Durchschnittsalter beträgt nun 5 Perioden ((91) 2). Wenn wir einen 19-fachen gleitenden Durchschnitt nehmen, steigt das Durchschnittsalter auf 10: Beachten Sie, dass die Prognosen in der Tat hinter den Wendepunkten um etwa 10 Perioden zurückbleiben. Welche Menge an Glättung ist am besten für diese Serie Hier ist eine Tabelle, die ihre Fehlerstatistik vergleicht, auch einen 3-Term-Durchschnitt: Modell C, der 5-fache gleitende Durchschnitt, ergibt den niedrigsten Wert von RMSE um einen kleinen Marge über die 3 - term und 9-term Mittelwerte, und ihre anderen Statistiken sind fast identisch. So können wir bei Modellen mit sehr ähnlichen Fehlerstatistiken wählen, ob wir ein wenig mehr Reaktionsfähigkeit oder ein wenig mehr Glätte in den Prognosen bevorzugen würden. (Zurück zum Anfang der Seite) Browns Einfache Exponential-Glättung (exponentiell gewichteter gleitender Durchschnitt) Das oben beschriebene einfache gleitende Durchschnittsmodell hat die unerwünschte Eigenschaft, dass es die letzten k-Beobachtungen gleichermaßen behandelt und alle vorherigen Beobachtungen völlig ignoriert. Intuitiv sollten vergangene Daten in einer allmählicheren Weise abgezinst werden - zum Beispiel sollte die jüngste Beobachtung ein wenig mehr Gewicht als die 2. jüngste, und die 2. jüngsten sollte ein wenig mehr Gewicht als die 3. jüngsten bekommen, und bald. Das einfache exponentielle Glättungsmodell (SES) erreicht dies. Sei 945 eine quotsmoothing constantquot (eine Zahl zwischen 0 und 1). Eine Möglichkeit, das Modell zu schreiben, besteht darin, eine Reihe L zu definieren, die den gegenwärtigen Pegel (d. h. den lokalen Mittelwert) der Reihe repräsentiert, wie er von den Daten bis zur Gegenwart geschätzt wird. Der Wert von L zum Zeitpunkt t wird rekursiv aus seinem eigenen vorherigen Wert wie folgt berechnet: Somit ist der aktuelle geglättete Wert eine Interpolation zwischen dem vorherigen geglätteten Wert und der aktuellen Beobachtung, wobei 945 die Nähe des interpolierten Wertes auf den letzten Wert steuert Überwachung. Die Prognose für die nächste Periode ist einfach der aktuell geglättete Wert: Gleichermaßen können wir die nächste Prognose direkt in Bezug auf vorherige Prognosen und frühere Beobachtungen in einer der folgenden gleichwertigen Versionen ausdrücken. In der ersten Version ist die Prognose eine Interpolation zwischen vorheriger Prognose und vorheriger Beobachtung: In der zweiten Version wird die nächste Prognose erhalten, indem man die vorherige Prognose in Richtung des vorherigen Fehlers um einen Bruchteil 945 anpasst Zeit t. In der dritten Version ist die Prognose ein exponentiell gewichteter (dh diskontierter) gleitender Durchschnitt mit Rabattfaktor 1-945: Die Interpolationsversion der Prognoseformel ist am einfachsten zu bedienen, wenn man das Modell auf einer Tabellenkalkulation implementiert: Es passt in eine Einzelzelle und enthält Zellreferenzen, die auf die vorherige Prognose, die vorherige Beobachtung und die Zelle hinweisen, in der der Wert von 945 gespeichert ist. Beachten Sie, dass bei 945 1 das SES-Modell einem zufälligen Walk-Modell entspricht (ohne Wachstum). Wenn 945 0 ist, entspricht das SES-Modell dem mittleren Modell, vorausgesetzt, dass der erste geglättete Wert gleich dem Mittelwert ist. (Zurück zum Anfang der Seite) Das Durchschnittsalter der Daten in der einfach-exponentiellen Glättungsprognose beträgt 1 945 gegenüber dem Zeitraum, für den die Prognose berechnet wird. (Das soll nicht offensichtlich sein, aber es kann leicht durch die Auswertung einer unendlichen Reihe gezeigt werden.) Die einfache gleitende Durchschnittsprognose neigt daher dazu, hinter den Wendepunkten um etwa 1 945 Perioden zurückzukehren. Zum Beispiel, wenn 945 0,5 die Verzögerung 2 Perioden beträgt, wenn 945 0,2 die Verzögerung 5 Perioden beträgt, wenn 945 0,1 die Verzögerung 10 Perioden und so weiter ist. Für ein gegebenes Durchschnittsalter (d. H. Verzögerung) ist die Prognose der einfachen exponentiellen Glättung (SES) der einfachen gleitenden Durchschnitts - (SMA) - Prognose etwas überlegen, da sie die jüngste Beobachtung - Es ist etwas mehr auffallend auf Veränderungen, die in der jüngsten Vergangenheit auftreten. Zum Beispiel hat ein SMA-Modell mit 9 Begriffen und einem SES-Modell mit 945 0,2 beide ein Durchschnittsalter von 5 für die Daten in ihren Prognosen, aber das SES-Modell setzt mehr Gewicht auf die letzten 3 Werte als das SMA-Modell und am Gleichzeitig ist es genau 8220forget8221 über Werte mehr als 9 Perioden alt, wie in dieser Tabelle gezeigt: Ein weiterer wichtiger Vorteil des SES-Modells gegenüber dem SMA-Modell ist, dass das SES-Modell einen Glättungsparameter verwendet, der stufenlos variabel ist, so dass er leicht optimiert werden kann Indem ein Quotsolverquot-Algorithmus verwendet wird, um den mittleren quadratischen Fehler zu minimieren. Der optimale Wert von 945 im SES-Modell für diese Baureihe ergibt sich auf 0,2961, wie hier gezeigt: Das Durchschnittsalter der Daten in dieser Prognose beträgt 10.2961 3.4 Perioden, was ähnlich ist wie bei einem 6-fach einfach gleitenden Durchschnitt. Die langfristigen Prognosen des SES-Modells sind eine horizontale Gerade. Wie im SMA-Modell und dem zufälligen Walk-Modell ohne Wachstum. Allerdings ist zu beachten, dass die von Statgraphics berechneten Konfidenzintervalle nun in einer vernünftig aussehenden Weise abweichen und dass sie wesentlich schmaler sind als die Konfidenzintervalle für das zufällige Spaziergangmodell. Das SES-Modell geht davon aus, dass die Serie etwas vorhersehbar ist als das zufällige Spaziergangmodell. Ein SES-Modell ist eigentlich ein Spezialfall eines ARIMA-Modells. So bietet die statistische Theorie der ARIMA-Modelle eine fundierte Grundlage für die Berechnung von Konfidenzintervallen für das SES-Modell. Insbesondere ist ein SES-Modell ein ARIMA-Modell mit einer nicht-seasonalen Differenz, einem MA (1) Term und keinem konstanten Term. Ansonsten bekannt als ein quotARIMA (0,1,1) Modell ohne constantquot. Der MA (1) - Koeffizient im ARIMA-Modell entspricht der Menge 1-945 im SES-Modell. Zum Beispiel, wenn man ein ARIMA (0,1,1) Modell ohne Konstante an die hier analysierte Serie passt, ergibt sich der geschätzte MA (1) Koeffizient 0,7029, was fast genau ein minus 0.2961 ist. Es ist möglich, die Annahme eines nicht-null konstanten linearen Trends zu einem SES-Modell hinzuzufügen. Um dies zu tun, geben Sie einfach ein ARIMA-Modell mit einer nicht-seasonalen Differenz und einem MA (1) Begriff mit einer Konstante, d. h. ein ARIMA (0,1,1) Modell mit konstant. Die langfristigen Prognosen werden dann einen Trend haben, der dem durchschnittlichen Trend entspricht, der über den gesamten Schätzungszeitraum beobachtet wird. Sie können dies nicht in Verbindung mit saisonaler Anpassung tun, da die saisonalen Anpassungsoptionen deaktiviert sind, wenn der Modelltyp auf ARIMA eingestellt ist. Allerdings können Sie einen konstanten langfristigen exponentiellen Trend zu einem einfachen exponentiellen Glättungsmodell (mit oder ohne saisonale Anpassung) hinzufügen, indem Sie die Inflationsanpassungsoption im Vorhersageverfahren verwenden. Die jeweilige Quotenquote (prozentuale Wachstumsrate) pro Periode kann als Steigungskoeffizient in einem linearen Trendmodell geschätzt werden, das an die Daten in Verbindung mit einer natürlichen Logarithmus-Transformation angepasst ist, oder sie kann auf anderen, unabhängigen Informationen über langfristige Wachstumsaussichten basieren . (Zurück zum Seitenanfang) Browns Linear (dh Double) Exponentielle Glättung Die SMA Modelle und SES Modelle gehen davon aus, dass es in den Daten keinen Trend gibt (was in der Regel ok oder zumindest nicht so schlecht ist für 1- Schritt-voraus Prognosen, wenn die Daten relativ laut sind), und sie können modifiziert werden, um einen konstanten linearen Trend wie oben gezeigt zu integrieren. Was ist mit kurzfristigen Trends Wenn eine Serie eine unterschiedliche Wachstumsrate oder ein zyklisches Muster zeigt, das sich deutlich gegen den Lärm auszeichnet, und wenn es notwendig ist, mehr als einen Zeitraum voraus zu prognostizieren, dann könnte auch eine Einschätzung eines lokalen Trends erfolgen Ein Problem. Das einfache exponentielle Glättungsmodell kann verallgemeinert werden, um ein lineares exponentielles Glättungsmodell (LES) zu erhalten, das lokale Schätzungen sowohl von Ebene als auch von Trend berechnet. Das einfachste zeitveränderliche Trendmodell ist das lineare, exponentielle Glättungsmodell von Browns, das zwei verschiedene geglättete Serien verwendet, die zu unterschiedlichen Zeitpunkten zentriert sind. Die Prognoseformel basiert auf einer Extrapolation einer Linie durch die beiden Zentren. (Eine ausgefeiltere Version dieses Modells, Holt8217s, wird unten diskutiert.) Die algebraische Form des linearen exponentiellen Glättungsmodells von Brown8217s, wie das des einfachen exponentiellen Glättungsmodells, kann in einer Anzahl von verschiedenen, aber äquivalenten Formen ausgedrückt werden. Die quadratische Form dieses Modells wird gewöhnlich wie folgt ausgedrückt: Sei S die einfach geglättete Reihe, die durch Anwendung einer einfachen exponentiellen Glättung auf die Reihe Y erhalten wird. Das heißt, der Wert von S in der Periode t ist gegeben durch: (Erinnern Sie sich, dass unter einfachem Exponentielle Glättung, das wäre die Prognose für Y in der Periode t1.) Dann sei Squot die doppelt geglättete Reihe, die durch Anwendung einer einfachen exponentiellen Glättung (mit demselben 945) auf die Reihe S erhalten wird: Schließlich ist die Prognose für Y tk. Für irgendwelche kgt1 ist gegeben durch: Dies ergibt e 1 0 (d. h. Cheat ein Bit, und lassen Sie die erste Prognose gleich der tatsächlichen ersten Beobachtung) und e 2 Y 2 8211 Y 1. Nach denen Prognosen mit der obigen Gleichung erzeugt werden. Dies ergibt die gleichen angepassten Werte wie die Formel auf Basis von S und S, wenn diese mit S 1 S 1 Y 1 gestartet wurden. Diese Version des Modells wird auf der nächsten Seite verwendet, die eine Kombination aus exponentieller Glättung mit saisonaler Anpassung darstellt. Holt8217s Lineare Exponential-Glättung Brown8217s LES-Modell berechnet lokale Schätzungen von Level und Trend durch Glättung der aktuellen Daten, aber die Tatsache, dass es dies mit einem einzigen Glättungsparameter macht, legt eine Einschränkung auf die Datenmuster, die es passen kann: das Niveau und den Trend Dürfen nicht zu unabhängigen Preisen variieren. Holt8217s LES-Modell adressiert dieses Problem, indem es zwei Glättungskonstanten einschließt, eine für die Ebene und eine für den Trend. Zu jeder Zeit t, wie in Brown8217s Modell, gibt es eine Schätzung L t der lokalen Ebene und eine Schätzung T t der lokalen Trend. Hier werden sie rekursiv aus dem Wert von Y, der zum Zeitpunkt t beobachtet wurde, und den vorherigen Schätzungen des Niveaus und des Tendenzes durch zwei Gleichungen berechnet, die eine exponentielle Glättung für sie separat anwenden. Wenn der geschätzte Pegel und der Trend zum Zeitpunkt t-1 L t82091 und T t-1 sind. Dann ist die Prognose für Y tshy, die zum Zeitpunkt t-1 gemacht worden wäre, gleich L t-1 T t-1. Wenn der Istwert beobachtet wird, wird die aktualisierte Schätzung des Pegels rekursiv durch Interpolation zwischen Y tshy und dessen Prognose L t-1 T t-1 unter Verwendung von Gewichten von 945 und 1 945 berechnet. Die Änderung des geschätzten Pegels, Nämlich L t 8209 L t82091. Kann als eine laute Messung des Trends zum Zeitpunkt t interpretiert werden. Die aktualisierte Schätzung des Trends wird dann rekursiv durch Interpolation zwischen L t 8209 L t82091 und der vorherigen Schätzung des Trends T t-1 berechnet. Mit Gewichten von 946 und 1-946: Die Interpretation der Trend-Glättungs-Konstante 946 ist analog zu der Niveau-Glättungs-Konstante 945. Modelle mit kleinen Werten von 946 gehen davon aus, dass sich der Trend nur sehr langsam über die Zeit ändert, während Modelle mit Größer 946 nehmen an, dass es sich schneller ändert. Ein Modell mit einer großen 946 glaubt, dass die ferne Zukunft sehr unsicher ist, denn Fehler in der Trendschätzung werden bei der Prognose von mehr als einer Periode sehr wichtig. (Zurück zum Seitenanfang) Die Glättungskonstanten 945 und 946 können in der üblichen Weise durch Minimierung des mittleren quadratischen Fehlers der 1-Schritt-voraus-Prognosen geschätzt werden. Wenn dies in Statgraphics geschieht, ergeben sich die Schätzungen auf 945 0.3048 und 946 0,008. Der sehr kleine Wert von 946 bedeutet, dass das Modell eine sehr geringe Veränderung des Trends von einer Periode zur nächsten einnimmt, so dass dieses Modell grundsätzlich versucht, einen langfristigen Trend abzuschätzen. In Analogie zum Begriff des Durchschnittsalters der Daten, die bei der Schätzung der lokalen Ebene der Serie verwendet wird, ist das Durchschnittsalter der Daten, die bei der Schätzung des lokalen Trends verwendet wird, proportional zu 1 946, wenn auch nicht genau gleich . In diesem Fall stellt sich heraus, dass es sich um 10.006 125 handelt. Dies ist eine sehr genaue Zahl, da die Genauigkeit der Schätzung von 946 wirklich 3 Dezimalstellen ist, aber sie ist von der gleichen allgemeinen Größenordnung wie die Stichprobengröße von 100 Dieses Modell ist durchschnittlich über eine ganze Menge Geschichte bei der Schätzung der Trend. Die prognostizierte Handlung unten zeigt, dass das LES-Modell einen geringfügig größeren lokalen Trend am Ende der Serie schätzt als der im SEStrend-Modell geschätzte konstante Trend. Auch der Schätzwert von 945 ist fast identisch mit dem, der durch die Anpassung des SES-Modells mit oder ohne Trend erhalten wird. Das ist also fast das gleiche Modell. Nun, sehen diese aus wie vernünftige Prognosen für ein Modell, das soll ein lokaler Trend schätzen Wenn Sie diese Handlung, es sieht so aus, als ob der lokale Trend hat sich nach unten am Ende der Serie Was ist passiert Die Parameter dieses Modells Wurden durch die Minimierung der quadratischen Fehler von 1-Schritt-voraus Prognosen, nicht längerfristige Prognosen geschätzt, in welchem Fall der Trend doesn8217t machen einen großen Unterschied. Wenn alles, was Sie suchen, sind 1-Schritt-vor-Fehler, sehen Sie nicht das größere Bild der Trends über (sagen) 10 oder 20 Perioden. Um dieses Modell mehr im Einklang mit unserer Augapfel-Extrapolation der Daten zu erhalten, können wir die Trend-Glättung konstant manuell anpassen, so dass es eine kürzere Grundlinie für Trendschätzung verwendet. Zum Beispiel, wenn wir uns dafür entscheiden, 946 0,1 zu setzen, dann ist das Durchschnittsalter der Daten, die bei der Schätzung des lokalen Trends verwendet werden, 10 Perioden, was bedeutet, dass wir den Trend über die letzten 20 Perioden oder so vermitteln. Hier8217s, was die Prognose Handlung aussieht, wenn wir 946 0,1 gesetzt, während halten 945 0,3. Das sieht für diese Serie intuitiv vernünftig aus, obwohl es wahrscheinlich gefährlich ist, diesen Trend in Zukunft mehr als 10 Perioden zu extrapolieren. Was ist mit den Fehlerstatistiken Hier ist ein Modellvergleich für die beiden oben gezeigten Modelle sowie drei SES-Modelle. Der optimale Wert von 945 für das SES-Modell beträgt etwa 0,3, aber es werden ähnliche Ergebnisse (mit etwas mehr oder weniger Ansprechverhalten) mit 0,5 und 0,2 erhalten. (A) Holts linear exp. Glättung mit alpha 0.3048 und beta 0.008 (B) Holts linear exp. Glättung mit alpha 0,3 und beta 0,1 (C) Einfache exponentielle Glättung mit alpha 0,5 (D) Einfache exponentielle Glättung mit alpha 0,3 (E) Einfache exponentielle Glättung mit alpha 0.2 Ihre Stats sind nahezu identisch, so dass wir wirklich die Wahl treffen können Von 1-Schritt-voraus Prognosefehler innerhalb der Datenprobe Wir müssen auf andere Überlegungen zurückgreifen. Wenn wir stark davon überzeugt sind, dass es sinnvoll ist, die aktuelle Trendschätzung auf das, was in den letzten 20 Perioden passiert ist, zu stützen, so können wir einen Fall für das LES-Modell mit 945 0,3 und 946 0,1 machen. Wenn wir agnostisch darüber sein wollen, ob es einen lokalen Trend gibt, dann könnte eines der SES-Modelle leichter zu erklären sein und würde auch mehr Mittelwert der Prognosen für die nächsten 5 oder 10 Perioden geben. (Rückkehr nach oben) Welche Art von Trend-Extrapolation ist am besten: horizontal oder linear Empirische Evidenz deutet darauf hin, dass, wenn die Daten bereits für die Inflation angepasst wurden (falls erforderlich), dann kann es unklug sein, kurzfristig linear zu extrapolieren Trends sehr weit in die Zukunft. Trends, die heute deutlich werden, können in Zukunft aufgrund unterschiedlicher Ursachen wie Produktveralterung, erhöhter Konkurrenz und zyklischer Abschwünge oder Aufschwünge in einer Branche nachlassen. Aus diesem Grund führt eine einfache, exponentielle Glättung oftmals zu einem besseren Out-of-Sample, als es sonst zu erwarten wäre, trotz der quadratischen horizontalen Trend-Extrapolation. Gedämpfte Trendmodifikationen des linearen exponentiellen Glättungsmodells werden auch in der Praxis häufig verwendet, um eine Note des Konservatismus in seine Trendprojektionen einzuführen. Das LES-Modell mit gedämpftem Trend kann als Spezialfall eines ARIMA-Modells, insbesondere eines ARIMA (1,1,2) - Modells, implementiert werden. Es ist möglich, Konfidenzintervalle um Langzeitprognosen zu berechnen, die durch exponentielle Glättungsmodelle erzeugt werden, indem sie sie als Sonderfälle von ARIMA-Modellen betrachten. (Vorsicht: Nicht alle Software berechnet die Konfidenzintervalle für diese Modelle korrekt.) Die Breite der Konfidenzintervalle hängt von (i) dem RMS-Fehler des Modells ab, (ii) der Art der Glättung (einfach oder linear) (iii) der Wert (S) der Glättungskonstante (n) und (iv) die Anzahl der voraussichtlichen Perioden, die Sie prognostizieren. Im Allgemeinen werden die Intervalle schneller ausgebreitet als 945 im SES-Modell größer und sie breiten sich viel schneller aus, wenn lineare statt einfache Glättung verwendet wird. Dieses Thema wird im ARIMA-Modellteil der Notizen weiter erörtert. (Zurück zum Anfang der Seite) Einführung in ARIMA: Nichtseasonale Modelle ARIMA (p, d, q) Prognose Gleichung: ARIMA Modelle sind in der Theorie die allgemeinste Klasse von Modellen für die Prognose einer Zeitreihe, die gemacht werden kann, um 8220stationary8221 werden Durch Differenzierung (ggf.), vielleicht in Verbindung mit nichtlinearen Transformationen wie Protokollierung oder Entleerung (falls nötig). Eine zufällige Variable, die eine Zeitreihe ist, ist stationär, wenn ihre statistischen Eigenschaften alle über die Zeit konstant sind. Eine stationäre Serie hat keinen Trend, ihre Variationen um ihre Mittel haben eine konstante Amplitude, und es wackelt in einer konsistenten Weise. D. h. seine kurzzeitigen zufälligen Zeitmuster sehen immer in einem statistischen Sinn gleich aus. Die letztere Bedingung bedeutet, daß ihre Autokorrelationen (Korrelationen mit ihren eigenen vorherigen Abweichungen vom Mittelwert) über die Zeit konstant bleiben oder äquivalent, daß sein Leistungsspektrum über die Zeit konstant bleibt. Eine zufällige Variable dieses Formulars kann (wie üblich) als eine Kombination von Signal und Rauschen betrachtet werden, und das Signal (wenn man offensichtlich ist) könnte ein Muster der schnellen oder langsamen mittleren Reversion oder sinusförmigen Oszillation oder eines schnellen Wechsels im Zeichen sein , Und es könnte auch eine saisonale Komponente haben. Ein ARIMA-Modell kann als 8220filter8221 betrachtet werden, das versucht, das Signal vom Rauschen zu trennen, und das Signal wird dann in die Zukunft extrapoliert, um Prognosen zu erhalten. Die ARIMA-Prognosegleichung für eine stationäre Zeitreihe ist eine lineare (d. h. regressionstypische) Gleichung, bei der die Prädiktoren aus Verzögerungen der abhängigen Variablen und Verzögerungen der Prognosefehler bestehen. Das heißt: vorhergesagter Wert von Y eine Konstante undeiner gewichteten Summe von einem oder mehreren neueren Werten von Y und einer gewichteten Summe von einem oder mehreren neueren Werten der Fehler. Wenn die Prädiktoren nur aus verzögerten Werten von Y bestehen, ist es ein reines autoregressives Modell (8220 selbst-regressed8221), das nur ein Spezialfall eines Regressionsmodells ist und mit Standardregressionssoftware ausgestattet werden kann. Zum Beispiel ist ein autoregressives (8220AR (1) 8221) Modell erster Ordnung für Y ein einfaches Regressionsmodell, bei dem die unabhängige Variable nur Y um eine Periode (LAG (Y, 1) in Statgraphics oder YLAG1 in RegressIt hinterlässt). Wenn einige der Prädiktoren die Fehler der Fehler sind, ist es ein ARIMA-Modell, es ist kein lineares Regressionsmodell, denn es gibt keine Möglichkeit, 828last period8217s error8221 als unabhängige Variable anzugeben: Die Fehler müssen auf einer Periodenperiode berechnet werden Wenn das Modell an die Daten angepasst ist. Aus technischer Sicht ist das Problem bei der Verwendung von verzögerten Fehlern als Prädiktoren, dass die Vorhersagen des Modells8217 nicht lineare Funktionen der Koeffizienten sind. Obwohl sie lineare Funktionen der vergangenen Daten sind. So müssen Koeffizienten in ARIMA-Modellen, die verzögerte Fehler enthalten, durch nichtlineare Optimierungsmethoden (8220hill-climbing8221) geschätzt werden, anstatt nur ein Gleichungssystem zu lösen. Das Akronym ARIMA steht für Auto-Regressive Integrated Moving Average. Die Verzögerungen der stationärisierten Serien in der Prognosegleichung werden als quartalspezifische Begriffe bezeichnet, die Verzögerungen der Prognosefehler werden als quadratische Begrenzungsterme bezeichnet, und eine Zeitreihe, die differenziert werden muss, um stationär zu sein, wird als eine quotintegrierte Quotversion einer stationären Serie bezeichnet. Random-Walk - und Random-Trend-Modelle, autoregressive Modelle und exponentielle Glättungsmodelle sind alle Sonderfälle von ARIMA-Modellen. Ein Nicht-Seasonal-ARIMA-Modell wird als ein Quoten-Modell von quaremA (p, d, q) klassifiziert, wobei p die Anzahl der autoregressiven Terme ist, d die Anzahl der für die Stationarität benötigten Nichtseasondifferenzen und q die Anzahl der verzögerten Prognosefehler in Die Vorhersagegleichung. Die Prognosegleichung wird wie folgt aufgebaut. Zuerst bezeichne y die d-te Differenz von Y. Das bedeutet: Beachten Sie, dass die zweite Differenz von Y (der Fall d2) nicht der Unterschied von 2 Perioden ist. Vielmehr ist es der erste Unterschied zwischen dem ersten Unterschied. Welches das diskrete Analog einer zweiten Ableitung ist, d. h. die lokale Beschleunigung der Reihe und nicht deren lokaler Trend. In Bezug auf y. Die allgemeine Prognosegleichung lautet: Hier werden die gleitenden Durchschnittsparameter (9528217s) so definiert, dass ihre Zeichen in der Gleichung nach der von Box und Jenkins eingeführten Konventionen negativ sind. Einige Autoren und Software (einschließlich der R-Programmiersprache) definieren sie so, dass sie stattdessen Pluszeichen haben. Wenn tatsächliche Zahlen in die Gleichung gesteckt sind, gibt es keine Mehrdeutigkeit, aber it8217s wichtig zu wissen, welche Konvention Ihre Software verwendet, wenn Sie die Ausgabe lesen. Oft werden die Parameter dort mit AR (1), AR (2), 8230 und MA (1), MA (2), 8230 usw. bezeichnet. Um das entsprechende ARIMA-Modell für Y zu identifizieren, beginnen Sie mit der Bestimmung der Reihenfolge der Differenzierung (D) die Serie zu stationieren und die Brutto-Merkmale der Saisonalität zu entfernen, vielleicht in Verbindung mit einer abweichungsstabilisierenden Transformation wie Protokollierung oder Entleerung. Wenn Sie an dieser Stelle anhalten und vorhersagen, dass die differenzierte Serie konstant ist, haben Sie nur einen zufälligen Spaziergang oder ein zufälliges Trendmodell ausgestattet. Allerdings können die stationärisierten Serien immer noch autokorrelierte Fehler aufweisen, was darauf hindeutet, dass in der Prognosegleichung auch eine Anzahl von AR-Terme (p 8805 1) und einigen einigen MA-Terme (q 8805 1) benötigt werden. Der Prozess der Bestimmung der Werte von p, d und q, die am besten für eine gegebene Zeitreihe sind, wird in späteren Abschnitten der Noten (deren Links oben auf dieser Seite), aber eine Vorschau auf einige der Typen diskutiert werden Von nicht-seasonalen ARIMA-Modellen, die häufig angetroffen werden, ist unten angegeben. ARIMA (1,0,0) Autoregressives Modell erster Ordnung: Wenn die Serie stationär und autokorreliert ist, kann man sie vielleicht als Vielfaches ihres eigenen vorherigen Wertes und einer Konstante voraussagen. Die prognostizierte Gleichung in diesem Fall ist 8230which ist Y regressed auf sich selbst verzögerte um einen Zeitraum. Dies ist ein 8220ARIMA (1,0,0) constant8221 Modell. Wenn der Mittelwert von Y Null ist, dann wäre der konstante Term nicht enthalten. Wenn der Steigungskoeffizient 981 & sub1; positiv und kleiner als 1 in der Grße ist (er muß kleiner als 1 in der Grße sein, wenn Y stationär ist), beschreibt das Modell das Mittelwiederkehrungsverhalten, bei dem der nächste Periode8217s-Wert 981 mal als vorher vorausgesagt werden sollte Weit weg von dem Mittelwert als dieser Zeitraum8217s Wert. Wenn 981 & sub1; negativ ist, prognostiziert es ein Mittelrückkehrverhalten mit einem Wechsel von Zeichen, d. h. es sagt auch, daß Y unterhalb der mittleren nächsten Periode liegt, wenn es über dem Mittelwert dieser Periode liegt. In einem autoregressiven Modell zweiter Ordnung (ARIMA (2,0,0)) wäre auch ein Y-t-2-Term auf der rechten Seite und so weiter. Abhängig von den Zeichen und Größen der Koeffizienten könnte ein ARIMA (2,0,0) Modell ein System beschreiben, dessen mittlere Reversion in einer sinusförmig oszillierenden Weise stattfindet, wie die Bewegung einer Masse auf einer Feder, die zufälligen Schocks ausgesetzt ist . ARIMA (0,1,0) zufälliger Spaziergang: Wenn die Serie Y nicht stationär ist, ist das einfachste Modell für sie ein zufälliges Spaziergangmodell, das als Begrenzungsfall eines AR (1) - Modells betrachtet werden kann, in dem das autoregressive Koeffizient ist gleich 1, dh eine Serie mit unendlich langsamer mittlerer Reversion. Die Vorhersagegleichung für dieses Modell kann wie folgt geschrieben werden: wobei der konstante Term die mittlere Periodenänderung (dh die Langzeitdrift) in Y ist. Dieses Modell könnte als ein Nicht-Intercept-Regressionsmodell eingebaut werden, in dem die Die erste Differenz von Y ist die abhängige Variable. Da es (nur) eine nicht-seasonale Differenz und einen konstanten Term enthält, wird es als ein quotARIMA (0,1,0) Modell mit constant. quot eingestuft. Das random-walk-without - drift-Modell wäre ein ARIMA (0,1, 0) Modell ohne Konstante ARIMA (1,1,0) differenzierte Autoregressive Modell erster Ordnung: Wenn die Fehler eines zufälligen Walk-Modells autokorreliert werden, kann das Problem eventuell durch Hinzufügen einer Verzögerung der abhängigen Variablen zu der Vorhersagegleichung behoben werden - - ie Durch den Rücktritt der ersten Differenz von Y auf sich selbst um eine Periode verzögert. Dies würde die folgende Vorhersagegleichung ergeben: die umgewandelt werden kann Dies ist ein autoregressives Modell erster Ordnung mit einer Reihenfolge von Nicht-Seasonal-Differenzen und einem konstanten Term - d. h. Ein ARIMA (1,1,0) Modell. ARIMA (0,1,1) ohne konstante, einfache exponentielle Glättung: Eine weitere Strategie zur Korrektur autokorrelierter Fehler in einem zufälligen Walk-Modell wird durch das einfache exponentielle Glättungsmodell vorgeschlagen. Erinnern Sie sich, dass für einige nichtstationäre Zeitreihen (z. B. diejenigen, die geräuschvolle Schwankungen um ein langsam variierendes Mittel aufweisen), das zufällige Wandermodell nicht so gut wie ein gleitender Durchschnitt von vergangenen Werten ausführt. Mit anderen Worten, anstatt die jüngste Beobachtung als die Prognose der nächsten Beobachtung zu nehmen, ist es besser, einen Durchschnitt der letzten Beobachtungen zu verwenden, um das Rauschen herauszufiltern und das lokale Mittel genauer zu schätzen. Das einfache exponentielle Glättungsmodell verwendet einen exponentiell gewichteten gleitenden Durchschnitt von vergangenen Werten, um diesen Effekt zu erzielen. Die Vorhersagegleichung für das einfache exponentielle Glättungsmodell kann in einer Anzahl von mathematisch äquivalenten Formen geschrieben werden. Eine davon ist die so genannte 8220error Korrektur8221 Form, in der die vorherige Prognose in Richtung des Fehlers eingestellt wird, die es gemacht hat: Weil e t-1 Y t-1 - 374 t-1 per Definition, kann dies wie folgt umgeschrieben werden : Das ist eine ARIMA (0,1,1) - ohne Konstante Prognose Gleichung mit 952 1 1 - 945. Dies bedeutet, dass Sie eine einfache exponentielle Glättung passen können, indem Sie es als ARIMA (0,1,1) Modell ohne Konstant und der geschätzte MA (1) - Koeffizient entspricht 1-minus-alpha in der SES-Formel. Erinnern daran, dass im SES-Modell das Durchschnittsalter der Daten in den 1-Perioden-Prognosen 1 945 beträgt. Dies bedeutet, dass sie dazu neigen, hinter Trends oder Wendepunkten um etwa 1 945 Perioden zurückzukehren. Daraus folgt, dass das Durchschnittsalter der Daten in den 1-Periodenprognosen eines ARIMA (0,1,1) - without-constant-Modells 1 (1 - 952 1) beträgt. So, zum Beispiel, wenn 952 1 0.8, ist das Durchschnittsalter 5. Wenn 952 1 sich nähert, wird das ARIMA (0,1,1) - without-konstantes Modell zu einem sehr langfristigen gleitenden Durchschnitt und als 952 1 Nähert sich 0 wird es zu einem zufälligen Walk-ohne-Drift-Modell. Was ist der beste Weg, um Autokorrelation zu korrigieren: Hinzufügen von AR-Terme oder Hinzufügen von MA-Terme In den vorangegangenen zwei Modellen, die oben diskutiert wurden, wurde das Problem der autokorrelierten Fehler in einem zufälligen Walk-Modell auf zwei verschiedene Arten festgelegt: durch Hinzufügen eines verzögerten Wertes der differenzierten Serie Zur Gleichung oder Hinzufügen eines verzögerten Wertes des Prognosefehlers. Welcher Ansatz ist am besten Eine Faustregel für diese Situation, die später noch ausführlicher erörtert wird, ist, dass eine positive Autokorrelation in der Regel am besten durch Hinzufügen eines AR-Termes zum Modell behandelt wird und eine negative Autokorrelation wird meist am besten durch Hinzufügen eines MA Begriff. In geschäftlichen und ökonomischen Zeitreihen entsteht oftmals eine negative Autokorrelation als Artefakt der Differenzierung. (Im Allgemeinen verringert die Differenzierung die positive Autokorrelation und kann sogar einen Wechsel von positiver zu negativer Autokorrelation verursachen.) So wird das ARIMA (0,1,1) - Modell, in dem die Differenzierung von einem MA-Term begleitet wird, häufiger als ein ARIMA (1,1,0) Modell. ARIMA (0,1,1) mit konstanter, einfacher, exponentieller Glättung mit Wachstum: Durch die Implementierung des SES-Modells als ARIMA-Modell erhalten Sie gewisse Flexibilität. Zunächst darf der geschätzte MA (1) - Koeffizient negativ sein. Dies entspricht einem Glättungsfaktor größer als 1 in einem SES-Modell, was in der Regel nicht durch das SES-Modell-Anpassungsverfahren erlaubt ist. Zweitens haben Sie die Möglichkeit, einen konstanten Begriff im ARIMA-Modell einzubeziehen, wenn Sie es wünschen, um einen durchschnittlichen Trend ungleich Null abzuschätzen. Das ARIMA (0,1,1) - Modell mit Konstante hat die Vorhersagegleichung: Die Prognosen von einem Periodenvorhersage aus diesem Modell sind qualitativ ähnlich denen des SES-Modells, mit der Ausnahme, dass die Trajektorie der Langzeitprognosen typischerweise ein Schräge Linie (deren Steigung gleich mu ist) anstatt einer horizontalen Linie. ARIMA (0,2,1) oder (0,2,2) ohne konstante lineare exponentielle Glättung: Lineare exponentielle Glättungsmodelle sind ARIMA-Modelle, die zwei Nichtseason-Differenzen in Verbindung mit MA-Terme verwenden. Der zweite Unterschied einer Reihe Y ist nicht einfach der Unterschied zwischen Y und selbst, der um zwei Perioden verzögert ist, sondern vielmehr der erste Unterschied der ersten Differenz - i. e. Die Änderung der Änderung von Y in der Periode t. Somit ist die zweite Differenz von Y in der Periode t gleich (Y t - Y t - 1) - (Y t - 1 - Y t - 2) Y t - 2Y t - 1 Y t - 2. Eine zweite Differenz einer diskreten Funktion ist analog zu einer zweiten Ableitung einer stetigen Funktion: sie misst die quotaccelerationquot oder quotcurvaturequot in der Funktion zu einem gegebenen Zeitpunkt. Das ARIMA (0,2,2) - Modell ohne Konstante prognostiziert, dass die zweite Differenz der Serie gleich einer linearen Funktion der letzten beiden Prognosefehler ist: die umgeordnet werden kann: wobei 952 1 und 952 2 die MA (1) und MA (2) Koeffizienten Dies ist ein allgemeines lineares exponentielles Glättungsmodell. Im Wesentlichen das gleiche wie Holt8217s Modell, und Brown8217s Modell ist ein Sonderfall. Es verwendet exponentiell gewichtete Bewegungsdurchschnitte, um sowohl eine lokale Ebene als auch einen lokalen Trend in der Serie abzuschätzen. Die langfristigen Prognosen von diesem Modell konvergieren zu einer geraden Linie, deren Hang hängt von der durchschnittlichen Tendenz, die gegen Ende der Serie beobachtet wird. ARIMA (1,1,2) ohne konstante gedämpfte Trend-lineare exponentielle Glättung. Dieses Modell wird in den beiliegenden Folien auf ARIMA-Modellen dargestellt. Es extrapoliert den lokalen Trend am Ende der Serie, aber erhebt es bei längeren Prognosehorizonten, um eine Note des Konservatismus einzuführen, eine Praxis, die empirische Unterstützung hat. Sehen Sie den Artikel auf quotWhy der Damped Trend Workquot von Gardner und McKenzie und die quotGolden Rulequot Artikel von Armstrong et al. für Details. Es ist grundsätzlich ratsam, an Modellen zu bleiben, bei denen mindestens eines von p und q nicht größer als 1 ist, dh nicht versuchen, ein Modell wie ARIMA (2,1,2) zu passen, da dies wahrscheinlich zu Überfüllung führen wird Und quotcommon-factorquot-Themen, die ausführlicher in den Anmerkungen zur mathematischen Struktur von ARIMA-Modellen diskutiert werden. Spreadsheet-Implementierung: ARIMA-Modelle wie die oben beschriebenen sind einfach in einer Kalkulationstabelle zu implementieren. Die Vorhersagegleichung ist einfach eine lineare Gleichung, die sich auf vergangene Werte der ursprünglichen Zeitreihen und vergangene Werte der Fehler bezieht. So können Sie eine ARIMA-Prognosekalkulationstabelle einrichten, indem Sie die Daten in Spalte A, die Prognoseformel in Spalte B und die Fehler (Daten minus Prognosen) in Spalte C speichern. Die Prognoseformel in einer typischen Zelle in Spalte B wäre einfach Ein linearer Ausdruck, der sich auf Werte in vorhergehenden Zeilen der Spalten A und C bezieht, multipliziert mit den entsprechenden AR - oder MA-Koeffizienten, die in anderen Zellen auf der Kalkulationstabelle gespeichert sind. DAS NATUR DES CODE Die Natur des Kodex Einleitung Ich bin zwei mit der Natur. Woody Allen Hier sind wir: der Anfang. Nun, fast der Anfang. Wenn es eine Weile her ist, seit Sie irgendwelche Programmierung in der Verarbeitung (oder irgendeine Mathematik, für diese Angelegenheit) getan haben, wird diese Einleitung Ihren Verstand zurück in das rechnerische Denken erhalten, bevor wir einige der schwierigeren und komplexen Materialien nähern. In Kapitel 1 würden wir über das Konzept eines Vektors sprechen und wie es als Baustein für die Simulation der Bewegung in diesem Buch dienen wird. Aber bevor wir diesen Schritt machen, können wir darüber nachdenken, was es für etwas bedeutet, einfach um den Bildschirm zu bewegen. Lasst uns mit einer der bekanntesten und einfachsten Simulationen der Bewegung auf den zufälligen Spaziergang beginnen. I.1 Zufällige Spaziergänge Stellen Sie sich vor, Sie stehen in der Mitte eines Balance-Balken. Alle zehn Sekunden spiegeln Sie eine Münze. Köpfe, mach einen Schritt vorwärts. Schwänze, mach einen Schritt zurück. Dies ist ein zufälliger Walka-Pfad, der als eine Reihe von zufälligen Schritten definiert ist. Wenn du diesen Balkenbalken auf den Boden gehst, kannst du einen zufälligen Spaziergang in zwei Dimensionen durchführen, indem du dieselbe Münze zweimal mit den folgenden Ergebnissen umdrehst: Ja, das mag ein besonders anspruchsvoller Algorithmus sein. Trotzdem können zufällige Spaziergänge verwendet werden, um Phänomene zu modellieren, die in der realen Welt auftreten, von den Bewegungen der Moleküle in einem Gas zum Verhalten eines Spielers, der einen Tag im Kasino verbringt. Für uns beginnen wir dieses Buch, das einen zufälligen Spaziergang mit drei Toren studiert. Wir müssen ein Programmkonzept zentral für diese bookobjektorientierte Programmierung überprüfen. Der zufällige Wanderer wird als Vorlage dafür dienen, wie wir Objekt-orientiertes Design verwenden, um Dinge zu machen, die sich um ein Verarbeitungsfenster bewegen. Der zufällige Spaziergang veranlasst die beiden Fragen, die wir im Laufe dieses Buches immer wieder fragen werden: Wie definieren wir die Regeln, die das Verhalten unserer Objekte bestimmen und dann, wie wir diese Regeln in der Bearbeitung im ganzen Buch umsetzen, auch in regelmäßigen Abständen brauchen Ein Grundverständnis von Zufälligkeit, Wahrscheinlichkeit und Perlin-Lärm. Der zufällige Spaziergang ermöglicht es uns, ein paar wichtige Punkte zu zeigen, die später in handliches kommen werden. I.2 Die zufällige Walker-Klasse Lässt ein bisschen objektorientierte Programmierung (OOP) zuerst durch den Aufbau eines Walker-Objekts überprüfen. Dies wird nur eine flüchtige Überprüfung sein. Wenn Sie noch nie mit OOP gearbeitet haben, können Sie etwas mehr umfassende Id vorschlagen, hier zu stoppen und die Grundlagen auf der Verarbeitungs-Website zu überprüfen, bevor Sie fortfahren. Ein Objekt in der Verarbeitung ist eine Entität, die sowohl Daten als auch Funktionalität hat. Wir schauen, um ein Walker-Objekt zu entwerfen, das beide seine Daten verfolgt (wo es auf dem Bildschirm existiert) und hat die Fähigkeit, bestimmte Aktionen auszuführen (wie z. B. ziehen sich selbst oder einen Schritt). Eine Klasse ist die Vorlage für den Aufbau von tatsächlichen Instanzen von Objekten. Denken Sie an eine Klasse als Cookie-Cutter die Objekte sind die Cookies selbst. Lass uns anfangen, die Walker-Klasse zu definieren, was es bedeutet, ein Walker-Objekt zu sein. Der Walker braucht nur zwei Stück Datennummer für seine x-location und eine für seine y-location. Objekte haben Daten. Da wir den Hintergrund nur einmal im Setup () zeichnen. Anstatt sie jedes Mal durch Ziehen () fortzusetzen. Wir sehen die Spur des zufälligen Spaziergangs in unserem Verarbeitungsfenster. Dein Browser unterstützt nicht die Leinwand. Es gibt ein paar Verbesserungen, die wir dem zufälligen Wanderer machen könnten. Zum einen sind diese Walker-Schritt-Entscheidungen auf vier Optionen, unten, links und rechts beschränkt. Aber jedes gegebene Pixel im Fenster hat acht mögliche Nachbarn, und eine neunte Möglichkeit ist, an der gleichen Stelle zu bleiben. Um ein Walker-Objekt zu implementieren, das zu jedem benachbarten Pixel wechseln kann (oder bleiben), könnten wir eine Nummer zwischen 0 und 8 (neun mögliche Auswahlmöglichkeiten) auswählen. Eine effizientere Möglichkeit, den Code zu schreiben, wäre jedoch, aus drei möglichen Schritten entlang der x-Achse (-1, 0 oder 1) und drei möglichen Schritten entlang der y-Achse auszuwählen. Erträge -1, 0 oder 1 Alle diese Variationen auf dem traditionellen zufälligen Spaziergang haben eines gemeinsam: zu jedem Zeitpunkt in der Zeit ist die Wahrscheinlichkeit, dass der Wanderer einen Schritt in eine vorgegebene Richtung einnehmen wird, gleich der Wahrscheinlichkeit, dass der Wanderer Wird einen Schritt in jede Richtung machen. Mit anderen Worten, wenn es vier mögliche Schritte gibt, gibt es eine 1 in 4 (oder 25) Chance der Walker wird jeden Schritt Schritt. Mit neun möglichen Schritten ist es eine 1 in 9 (oder 11.1) Chance. Praktisch ist das, wie die zufällige () Funktion funktioniert. Verarbeitungs-Zufallszahlengenerator (der hinter den Kulissen arbeitet) erzeugt eine so genannte gleichmäßige Zahlenverteilung. Wir können diese Verteilung mit einer Verarbeitungsskizze testen, die jedes Mal zählt, wenn eine zufällige Zahl ausgewählt wird und sie als die Höhe eines Rechtecks grafisch macht. Dein Browser unterstützt nicht die Leinwand. Beispiel I.2: Zufallszahlenverteilung Ein Array, um zu verfolgen, wie oft zufällige Zahlen ausgewählt werden Wählen Sie eine Zufallszahl und erhöhen Sie die Anzahl. Darstellung der Ergebnisse Der obige Screenshot zeigt das Ergebnis der Skizze für einige Minuten. Beachten Sie, wie sich jeder Balken des Graphen in der Höhe unterscheidet. Unsere Stichprobengröße (d. h. die Anzahl der zufälligen Zahlen, die wir ausgegeben haben) ist eher klein und es gibt einige gelegentliche Abweichungen, wo bestimmte Zahlen häufiger ausgewählt werden. Im Laufe der Zeit, mit einem guten Zufallszahlengenerator, würde dies sogar raus. Pseudo-Zufallszahlen Die Zufallszahlen, die wir aus der zufälligen () - Funktion bekommen, sind nicht wirklich zufällig, daher sind sie als pseudozufällig bekannt. Sie sind das Ergebnis einer mathematischen Funktion, die Zufälligkeit simuliert. Diese Funktion würde ein Muster im Laufe der Zeit ergeben, aber diese Zeitspanne ist so lang, dass für uns, seine genauso gut wie reine Zufälligkeit Übung I.1 Erstellen Sie einen zufälligen Wanderer, der eine Tendenz hat, sich nach unten und nach rechts zu bewegen. (Siehe die Lösung dazu im nächsten Abschnitt). I.3 Wahrscheinlichkeit und nicht-einheitliche Verteilungen Denken Sie daran, wenn Sie zum ersten Mal in der Bearbeitung begonnen haben. Vielleicht wollten Sie viele Kreise auf dem Bildschirm zeichnen. Also hast du zu dir gesagt: Oh, ich weiß. Ich ziehe alle diese Kreise an zufälligen Orten, mit zufälligen Größen und zufälligen Farben. In einem Computer-Grafik-System, seine oft am einfachsten zu samen ein System mit Zufälligkeit. In diesem Buch aber wollten die Systeme nach dem Vorbild, was wir in der Natur sehen, aufbauen. Default auf Zufälligkeit ist nicht eine besonders nachdenkliche Lösung für ein Design problemin besonders, die Art von Problem, das die Schaffung einer organischen oder natürlich aussehende Simulation beinhaltet. Mit ein paar Tricks können wir die Art und Weise ändern, wie wir zufällig () verwenden, um ungleichmäßige Verteilungen von Zufallszahlen zu erzeugen. Dies wird im ganzen Buch praktisch sein, da wir uns eine Reihe von verschiedenen Szenarien anschauen. Wenn wir genetische Algorithmen untersuchen, brauchen wir zum Beispiel eine Methodik für die Durchführung der Auswahl, welche Mitglieder unserer Bevölkerung ausgewählt werden sollen, um ihre DNA an die nächste Generation weiterzugeben. Erinnere dich an das Konzept des Überlebens der Stärksten Lets sagen, wir haben eine Population von Affen, die sich entwickeln. Nicht jeder Affe wird eine gleichberechtigte Reproduktion haben. Um die darwinistische Evolution zu simulieren, können wir einfach zwei zufällige Affen auswählen, um Eltern zu sein. Wir brauchen die passenderen, um eher zu wählen. Wir müssen die Wahrscheinlichkeit der Stärksten definieren. Zum Beispiel könnte ein besonders schneller und starker Affe eine 90 Chance haben, zu produzieren, während eine schwächere hat nur eine 10 Chance. Lets pause hier und werfen Sie einen Blick auf Wahrscheinlichkeiten Grundprinzipien. Zuerst prüfen die Einzelereigniswahrscheinlichkeit, d. h. die Wahrscheinlichkeit, dass ein gegebenes Ereignis auftreten wird. Wenn Sie ein System mit einer bestimmten Anzahl von möglichen Ergebnissen haben, ist die Wahrscheinlichkeit des Auftretens eines gegebenen Ereignisses gleich der Anzahl der Ergebnisse, die als dieses Ereignis geteilt durch die Gesamtzahl aller möglichen Ergebnisse qualifizieren. Ein Münzwurf ist ein einfaches Beispiel hat nur zwei mögliche Ergebnisse, Köpfe oder Schwänze. Es gibt nur einen Weg, um die Köpfe zu kippen. Die Wahrscheinlichkeit, dass die Münze die Köpfe umdrehen wird, ist also eine von zwei geteilt: 12 oder 50. Nehmen Sie ein Deck von zweiundfünfzig Karten. Die Wahrscheinlichkeit, ein Ass von diesem Deck zu zeichnen, ist: Anzahl der Asse Anzahl der Karten 4 52 0,077 Die Wahrscheinlichkeit des Zeichnens eines Diamanten ist: Anzahl der Diamanten Anzahl der Karten 13 52 0,25 25 Wir können auch die Wahrscheinlichkeit, dass mehrere Ereignisse in Folge auftreten, berechnen . Um dies zu tun, multiplizieren wir einfach die einzelnen Wahrscheinlichkeiten eines jeden Ereignisses. Die Wahrscheinlichkeit, dass eine Münze dreimal hintereinander die Köpfe dreht, ist: (12) (12) (12) 18 (oder 0,125) bedeutet, dass eine Münze dreimal in einer Reihe ein bisschen achtmal auftaucht Drei tosses). Übung I.2 Was ist die Wahrscheinlichkeit, zwei Asse in einer Reihe von einem Deck von zweiundfünfzig Karten zu zeichnen Es gibt ein paar Möglichkeiten, in denen wir die zufällige () Funktion mit Wahrscheinlichkeit in Code verwenden können. Eine Technik ist, ein Array mit einer Auswahl von Zahlen zu füllen, von denen wiederholt werden, wählen Sie zufällige Zahlen aus diesem Array und generieren Ereignisse auf der Grundlage dieser Entscheidungen. 1 wird zweimal in der Anordnung gespeichert, wodurch es wahrscheinlicher wird, dass sie ausgewählt werden. Übung I.3 Erstellen Sie einen zufälligen Wanderer mit dynamischen Wahrscheinlichkeiten. Zum Beispiel können Sie ihm eine 50 Chance geben, sich in Richtung der Maus zu bewegen. I.4 Eine normale Verteilung der zufälligen Zahlen Lasst uns zurück zu dieser Population von simulierten Akten wechseln. Ihr Programm erzeugt tausend Monkey-Objekte, jeweils mit einem Höhenwert zwischen 200 und 300 (da dies eine Welt von Affen mit Höhen zwischen 200 und 300 Pixeln ist). Zeigt das genau die Höhen der realen Welt an. Denken Sie an einen überfüllten Bürgersteig in New York City. Wähle eine Person von der Straße und es scheint, dass ihre Höhe zufällig ist. Trotzdem ist es nicht die Art von zufälligen, die zufällig () produziert. Völker Höhen sind nicht gleichmäßig verteilt gibt es viel mehr Menschen von durchschnittlicher Höhe als es sind sehr groß oder sehr kurz. Um die Natur zu simulieren, mögen wir, dass es wahrscheinlicher ist, dass unsere Affen eine durchschnittliche Höhe (250 Pixel) haben, aber dennoch erlauben, dass sie gelegentlich sehr kurz oder sehr groß sind. Eine Verteilung von Werten, die sich um einen Durchschnitt gruppieren (als Mittelwert bezeichnet), wird als Normalverteilung bezeichnet. Es wird auch die Gaußsche Verteilung genannt (benannt nach Mathematiker Carl Friedrich Gauss) oder, wenn Sie Französisch sind, die Laplace-Verteilung (benannt nach Pierre-Simon Laplace). Beide Mathematiker arbeiteten gleichzeitig in den frühen neunzehnten Jahrhunderts auf die Definition einer solchen Verteilung. Wenn du die Verteilung grafst, bekommst du etwas, das wie folgt aussieht, informell als Glockenkurve bekannt: Die Kurve wird durch eine mathematische Funktion erzeugt, die die Wahrscheinlichkeit eines gegebenen Wertes definiert, der als Funktion des Mittelwerts (oft geschrieben als, Der griechische Buchstabe mu) und Standardabweichung (der griechische Buchstabe sigma). Der Mittel ist ziemlich leicht zu verstehen. Bei unseren Höhenwerten zwischen 200 und 300 haben Sie wahrscheinlich einen intuitiven Sinn für den Mittelwert (dh den Durchschnitt) als 250. Was aber, wenn ich sagen würde, dass die Standardabweichung 3 oder 15 ist, was bedeutet das für die Zahlen Die obigen Grafiken sollen uns einen Hinweis geben. Die Grafik auf der linken Seite zeigt uns die Verteilung mit einer sehr niedrigen Standardabweichung, wo die Mehrheit der Werte genau um den Mittelwert herum hängt. Die Grafik rechts zeigt uns eine höhere Standardabweichung, bei der die Werte gleichmäßig aus dem Durchschnitt verteilt sind. Die Zahlen erarbeiten wie folgt: Bei einer Bevölkerung werden 68 der Mitglieder dieser Bevölkerung Werte im Bereich einer Standardabweichung vom Mittelwert 98 innerhalb von zwei Standardabweichungen und 99,7 innerhalb von drei Standardabweichungen haben. Bei einer Standardabweichung von 5 Pixeln beträgt nur 0,3 der Affenhöhen weniger als 235 Pixel (drei Standardabweichungen unter dem Mittelwert von 250) oder größer als 265 Pixel (drei Standardabweichungen über dem Mittelwert von 250). Berechnen von Mittel - und Standardabweichungen Betrachten Sie eine Klasse von zehn Schülern, die folgende Punkte erhalten (von 100) bei einem Test: 85, 82, 88, 86, 85, 93, 98, 40, 73, 83 Die Standardabweichung wird berechnet als Die Quadratwurzel des Mittels der Quadrate der Abweichungen um den Mittelwert. Mit anderen Worten, nehmen Sie den Unterschied vom Mittelwert für jede Person und quadratisch (Varianz). Berechnen Sie den Durchschnitt aller dieser Werte und nehmen Sie die Quadratwurzel als Standardabweichung. Die Standardabweichung ist die Quadratwurzel der durchschnittlichen Varianz: 15.13 Zum Glück für uns, eine normale Verteilung der Zufallszahlen in einer Verarbeitungsskizze zu verwenden, müssen wir diese Berechnungen nicht selbst machen. Stattdessen können wir eine Klasse verwenden, die als Random bekannt ist. Die wir kostenlos als Teil der Standard-Java-Bibliotheken in die Verarbeitung importiert bekommen (siehe die JavaDocs für weitere Informationen). Um die Random-Klasse zu verwenden, müssen wir zuerst eine Variable vom Typ Random deklarieren und das Random-Objekt in setup () erstellen. Wir verwenden den Variablennamengenerator, weil das, was wir hier haben, als Zufallszahlengenerator gedacht werden kann. Wenn wir eine zufällige Zahl mit einer normalen (oder Gaußschen) Verteilung jedes Mal, wenn wir durch draw () laufen, produzieren wollen. Es ist so einfach wie das Aufrufen der Funktion nextGaussian (). Bitten um eine Gaußsche Zufallszahl. (Anmerkung nextGaussian () gibt ein Doppel zurück und muss in float umgewandelt werden.) Heres das Ding. Was sollen wir mit diesem Wert machen Was, wenn wir es verwenden wollten, um beispielsweise die x-Position einer Form zuzuordnen, die wir auf dem Bildschirm zeichnen Die nextGaussian () - Funktion gibt eine normale Verteilung der Zufallszahlen mit folgenden Parametern zurück: Ein Mittelwert von Null und eine Standardabweichung von einem. Lasst uns sagen, wir wollen einen Mittelwert von 320 (das mittlere horizontale Pixel in einem Fenster von Breite 640) und eine Standardabweichung von 60 Pixeln. Wir können den Wert an unsere Parameter anpassen, indem wir ihn mit der Standardabweichung multiplizieren und den Mittelwert addieren. Dein Browser unterstützt nicht die Leinwand. Beispiel I.4: Gaußsche Verteilung Beachten Sie, dass nextGaussian () ein Doppel zurückgibt. Multiplizieren Sie mit der Standardabweichung und fügen Sie den Mittelwert hinzu. Indem wir die Ellipsen mit etwas Transparenz übereinander ziehen, können wir die Verteilung sehen. Der hellste Punkt ist in der Nähe des Zentrums, wo die meisten der Werte Cluster, aber alle so oft Kreise sind weiter nach rechts oder links von der Mitte gezogen. Übung I.4 Betrachten Sie eine Simulation von Farbe Splatter gezeichnet als eine Sammlung von farbigen Punkten. Die meisten der Lackhaufen um eine zentrale Lage, aber einige Punkte spritzen in Richtung der Ränder. Können Sie eine normale Verteilung von Zufallszahlen verwenden, um die Orte der Punkte zu erzeugen Können Sie auch eine normale Verteilung von Zufallszahlen verwenden, um eine Farbpalette zu erzeugen Übung I.5 Ein Gaußscher Zufallswanderung ist definiert als einer, in dem die Schrittgröße (wie Weit das Objekt bewegt sich in eine vorgegebene Richtung) wird mit einer Normalverteilung erzeugt. Umsetzung dieser Variante unserer zufälligen Spaziergang. I.5 Eine kundenspezifische Verteilung von zufälligen Zahlen Es wird eine Zeit in deinem Leben kommen, wenn du keine gleichmäßige Verteilung von zufälligen Werten oder einen Gaußschen willst. Lets imagine für einen Moment, dass Sie ein zufälliger Wanderer auf der Suche nach Nahrung sind. Bewegen zufällig um einen Raum scheint wie eine vernünftige Strategie für das Finden etwas zu essen. Immerhin weißt du nicht wo das Essen ist, also könntest du auch zufällig suchen, bis du es findest. Das Problem, wie Sie vielleicht bemerkt haben, ist, dass zufällige Wanderer zurück zu vorher besuchten Standorten viele Male (dies ist bekannt als Oversampling). Eine Strategie, um ein solches Problem zu vermeiden, ist, jeder so oft, einen sehr großen Schritt. Dies ermöglicht es dem Wanderer, zufällig um einen bestimmten Ort zu fällen, während er regelmäßig sehr weit weg springt, um den Betrag der Überabtastung zu reduzieren. Diese Variation auf dem zufälligen Spaziergang (bekannt als Lvy Flug) erfordert eine benutzerdefinierte Satz von Wahrscheinlichkeiten. Obwohl nicht eine genaue Umsetzung eines Lvy-Fluges, könnten wir die Wahrscheinlichkeitsverteilung wie folgt angeben: je länger der Schritt, desto weniger wahrscheinlich ist es, je kürzer der Schritt, desto wahrscheinlicher. Früher in diesem Prolog, sahen wir, dass wir benutzerdefinierte Wahrscheinlichkeitsverteilungen erzeugen konnten, indem wir ein Array mit Werten füllten (einige dupliziert, so dass sie häufiger ausgewählt wurden) oder durch Testen des Ergebnisses von zufällig (). Wir könnten einen Lvy-Flug umsetzen, indem wir sagen, dass es eine Chance gibt, dass der Wanderer einen großen Schritt macht. Eine Chance, einen großen Schritt zu machen, das reduziert jedoch die Wahrscheinlichkeiten auf eine feste Anzahl von Optionen. Was wäre, wenn wir eine allgemeinere Rulethe höher eine Zahl machen wollten, desto wahrscheinlicher ist es, dass sie ausgewählt werden 3.145 würde eher als 3.144 ausgewählt werden, auch wenn diese Wahrscheinlichkeit nur ein bisschen größer ist. Mit anderen Worten, wenn x die Zufallszahl ist, können wir die Wahrscheinlichkeit auf der y-Achse mit y x abbilden. Wenn wir herausfinden können, wie man eine Verteilung von Zufallszahlen nach dem obigen Graphen erzeugt, dann werden wir in der Lage sein, dieselbe Methodik auf jede Kurve anzuwenden, für die wir eine Formel haben. Eine Lösung ist, zwei zufällige Zahlen anstelle von eins zu wählen. Die erste Zufallszahl ist genau das, eine zufällige Zahl. Die zweite aber ist, was gut nennen einen qualifizierenden zufälligen Wert. Es wird uns sagen, ob wir das erste benutzen oder es wegwerfen und ein anderes auswählen. Zahlen, die eine einfachere Zeit qualifizieren, werden häufiger ausgewählt, und Zahlen, die selten qualifizieren, werden selten gepflückt. Hier sind die Schritte (für jetzt betrachten wir nur zufällige Werte zwischen 0 und 1): Wählen Sie eine Zufallszahl: R1 Berechnen Sie eine Wahrscheinlichkeit P, die R1 qualifizieren sollte. Lass uns versuchen: P R1. Wählen Sie eine andere Zufallszahl: R2 Wenn R2 kleiner als P ist, dann haben wir unsere Nummer gefunden. R1 Wenn R2 nicht kleiner als P ist, gehen Sie zurück zu Schritt 1 und beginnen Sie über. Hier sagen wir, dass die Wahrscheinlichkeit, dass ein zufälliger Wert qualifizieren wird, gleich der Zufallszahl selbst ist. Lets sagen, wir holen 0,1 für R1. Das bedeutet, dass R1 eine 10 Chance hat, sich zu qualifizieren. Wenn wir 0,83 für R1 wählen, dann wird es eine 83 Chance zu qualifizieren. Je höher die Zahl, desto größer ist die Wahrscheinlichkeit, dass wir sie tatsächlich nutzen werden. Hier ist eine Funktion (benannt nach der Monte-Carlo-Methode, die für das Monte-Carlo-Kasino benannt wurde), die den obigen Algorithmus implementiert und einen zufälligen Wert zwischen 0 und 1 zurückgibt. Wir tun dies für immer, bis wir einen qualifizierten zufälligen Wert finden. Übung I.6 Verwenden Sie eine benutzerdefinierte Wahrscheinlichkeitsverteilung, um die Größe eines Schrittes zu ändern, der von dem zufälligen Wanderer genommen wird. Die Schrittweite kann durch Beeinflussung der gewählten Werte bestimmt werden. Können Sie die Wahrscheinlichkeit exponentiallyi. e abbilden. So dass die Wahrscheinlichkeit, dass ein Wert gleich dem Wert quadriert wird, gleichmäßig verteilt ist. Ändern Sie dies (später sehen Sie, wie dies effizienter mit Vektoren zu tun.) I.6 Perlin Noise (ein glatter Ansatz) Ein guter Zufallsgenerator erzeugt Zahlen, die keine Beziehung haben und kein erkennbares Muster zeigen. Wie wir anfangen zu sehen, kann ein bisschen Zufälligkeit eine gute Sache bei der Programmierung von organischen, lebensechten Verhaltensweisen sein. Allerdings ist die Zufälligkeit als einziges Leitprinzip nicht unbedingt natürlich. Ein Algorithmus, der als Perlin-Rauschen bekannt ist, benannt nach seinem Erfinder Ken Perlin, berücksichtigt dieses Konzept. Perlin entwickelte die Lärmfunktion bei der Arbeit an dem ursprünglichen Tron-Film in den frühen 1980er Jahren wurde es entworfen, um prozedurale Texturen für computergenerierte Effekte zu schaffen. Im Jahr 1997 gewann Perlin einen akademischen Preis in technischer Leistung für diese Arbeit. Perlin Lärm kann verwendet werden, um verschiedene Effekte mit natürlichen Qualitäten wie Wolken, Landschaften und gemusterten Texturen wie Marmor zu erzeugen. Perlin-Rauschen hat ein organischeres Aussehen, weil es eine natürlich geordnete (glatte) Folge von Pseudozufallszahlen erzeugt. Die Grafik unten links zeigt Perlin-Rauschen im Laufe der Zeit, wobei die x-Achse die Zeit für die Glätte der Kurve darstellt. Die Grafik auf der rechten Seite zeigt reine Zufallszahlen im Laufe der Zeit. (Der Code für die Erstellung dieser Graphen ist in den begleitenden Buch-Downloads verfügbar.) Abbildung I.5: Rauschen Abbildung I.6: Random Processing hat eine eingebaute Implementierung des Perlin-Rauschalgorithmus: das Funktionsrauschen (). Die Funktion noise () nimmt ein, zwei oder drei Argumente, da Rauschen in einer, zwei oder drei Dimensionen berechnet wird. Beginnen wir mit einem eindimensionalen Lärm. Noise Detail Die Processing Lärmreferenz sagt uns, dass Rauschen über mehrere Oktaven berechnet wird. Das Aufrufen der noiseDetail () - Funktion ändert sowohl die Anzahl der Oktaven als auch ihre Bedeutung relativ zueinander. Dies ändert sich wiederum, wie sich die Rauschfunktion verhält. Ein Online-Vortrag von Ken Perlin lässt Sie mehr darüber erfahren, wie Lärm von Perlin selbst funktioniert. Betrachten wir einen Kreis in unserem Verarbeitungsfenster an einer zufälligen x-location. Eine zufällige x-location Nun, anstelle einer zufälligen x-location, wollen wir ein Perlin-Rauschen x-Ort, der glatter ist. Sie könnten denken, dass alles, was Sie tun müssen, ist zufällig () mit Rauschen () zu ersetzen. D. h. ein Rauschen x-location Während konzeptionell ist das genau das, was wir einen x-Wert dokumentieren wollen, der zwischen 0 und der Breite nach Perlin noisethis liegt, ist nicht die richtige Implementierung. Während die Argumente der zufälligen () - Funktion einen Wertebereich zwischen einem Minimum und einem Maximum angeben, funktioniert noise () nicht so. Stattdessen gibt der Ausgabebereich immer einen Wert zwischen 0 und 1 ab. Gut sehen wir in einem Moment, dass wir das mit der Processings map () - Funktion einfach umgehen können, aber zuerst müssen wir untersuchen, was genau Lärm () erwartet, dass wir hereinkommen Als Argument Wir können eindimensionales Perlin-Rauschen als lineare Folge von Werten über die Zeit denken. Zum Beispiel: Wie schnell wir inkrementieren t beeinflusst auch die Glätte des Lärms. Wenn wir große Sprünge in der Zeit machen, dann überspringen wir vor und die Werte werden mehr zufällig. Versuchen Sie, den Code mehrmals auszuführen, indem Sie t um 0,01, 0,02, 0,05, 0,1, 0,0001 erhöhen, und Sie sehen unterschiedliche Ergebnisse. Mapping Noise Jetzt waren bereit, die Frage zu beantworten, was mit dem Lärmwert zu tun ist. Sobald wir den Wert mit einem Bereich zwischen 0 und 1 haben, ist es bis zu uns, diesen Bereich zuzuordnen, was wir wollen. Der einfachste Weg, dies zu tun, ist mit Processings map () - Funktion. Die Funktion map () nimmt fünf Argumente an. Zuerst ist der Wert, den wir abbilden wollen, in diesem Fall n. Dann müssen wir ihm die Werte des aktuellen Bereichs (Minimum und Maximum) geben, gefolgt von unserem gewünschten Bereich. In diesem Fall wissen wir, dass Rauschen einen Bereich zwischen 0 und 1 hat, aber wie wir unseren Kreis mit einem Bereich zwischen 0 und der Fensterbreite zeichnen möchten. Beachten Sie, wie das obige Beispiel ein zusätzliches Paar von Variablen erfordert: tx und ty. Das ist, weil wir zwei Zeitvariablen verfolgen müssen, eine für die x-location des Walker-Objekts und eine für den y-location. Aber es gibt etwas ein bisschen seltsam über diese Variablen. Warum tx beginnt bei 0 und ty bei 10.000 Während diese Zahlen willkürliche Entscheidungen sind, haben wir unsere zwei Zeitvariablen sehr unterschiedlich mit unterschiedlichen Werten initialisiert. Dies ist, weil die Rauschfunktion deterministisch ist: Sie gibt Ihnen das gleiche Ergebnis für eine bestimmte Zeit t jedes Mal. Wenn wir für den Rauschwert zur gleichen Zeit t für x und y gefragt haben. Dann wäre x und y immer gleich, was bedeutet, dass das Walker-Objekt nur eine Diagonale bewegen würde. Stattdessen verwenden wir einfach zwei verschiedene Teile des Rauschraums, beginnend bei 0 für x und 10.000 für y, so dass x und y scheinen, unabhängig voneinander zu wirken. In Wahrheit gibt es hier kein aktuelles Spielkonzept. Es ist eine nützliche Metapher, um uns zu helfen zu verstehen, wie die Lärmfunktion funktioniert, aber wirklich was wir haben, ist Platz, anstatt Zeit. Die obige Grafik stellt eine lineare Folge von Rauschwerten in einem eindimensionalen Raum dar, und wir können einen Wert an einer bestimmten x-Position fragen, wann immer wir wollen. In Beispielen sehen Sie oft eine Variable namens xoff, um den x-Versatz entlang des Rauschgraphen anstatt t für die Zeit anzuzeigen (wie im Diagramm angegeben). Übung I.7 Im obigen zufälligen Wanderer wird das Ergebnis der Rauschfunktion direkt dem Standort des Walkers zugeordnet. Erstellen Sie eine zufällige Wanderer, wo Sie stattdessen das Ergebnis der Rauschen () - Funktion zu einer Walker s Schrittgröße abbilden. Zweidimensionale Geräusche Diese Idee von Lärmwerten, die in einem eindimensionalen Raum leben, ist wichtig, weil sie uns direkt in eine Diskussion über den zweidimensionalen Raum führt. Lasst uns das für einen Augenblick darüber nachdenken. Mit eindimensionalem Rauschen haben wir eine Folge von Werten, in denen jeder gegebene Wert seinem Nachbarn ähnlich ist. Weil der Wert in einer Dimension ist, hat es nur zwei Nachbarn: ein Wert, der vor ihm kommt (links neben dem Graphen) und einer, der danach kommt (nach rechts). Abbildung I.10: 1D Rauschen Abbildung I.11: 2D Rauschen Zweidimensionales Rauschen funktioniert genau so konzeptionell. Der Unterschied ist natürlich, dass wir arent Blick auf Werte entlang einer linearen Weg, aber Werte, die auf einem Raster sitzen. Denken Sie an ein Stück Graphenpapier mit Zahlen in jede Zelle geschrieben. Ein gegebener Wert wird allen seinen Nachbarn ähnlich sein: oben, unten, rechts, links und entlang jeder Diagonale. Wenn du dieses Graphenpapier mit jedem Wert visualisieren möchtest, der der Helligkeit einer Farbe zugeordnet ist, bekommst du etwas, das wie Wolken aussieht. Weiß sitzt neben hellgrau, das neben grau sitzt, das neben dunklem grau sitzt, das neben schwarz sitzt, das neben dunkelgrau sitzt, etc. Das ist der Grund, warum Rauschen ursprünglich erfunden wurde. Sie zwicken die Parameter ein bisschen oder spielen mit Farbe, um das resultierende Bild mehr wie Marmor oder Holz oder jede andere organische Textur zu machen. Lass uns einen kurzen Blick darauf werfen, wie man zweidimensionale Geräusche in der Verarbeitung implementiert. Wenn du jedes Pixel eines Fensters zufällig färben wolltest, brauchst du eine verschachtelte Schleife, eine, die auf jedes Pixel zugreift und eine zufällige Helligkeit auswählte. Eine zufällige Helligkeit Um jedes Pixel nach der Rausch - () - Funktion zu färben, gut genau das Gleiche, nur anstatt zufällig () gut rufen Rauschen () aufzurufen. Eine Perlin Lärm Helligkeit Dies ist ein schöner Start conceptuallyit gibt Ihnen einen Lärmwert für jeden (x. Y) Standort in unserem zweidimensionalen Raum. Das Problem ist, dass das nicht die bewölkte Qualität hat, die wir wollen. Das Springen von Pixel 200 zu Pixel 201 ist zu groß von einem Sprung durch Rauschen. Denken Sie daran, wenn wir mit eindimensionalen Rauschen gearbeitet haben, haben wir unsere Zeit variabel um 0,01 pro Frame, nicht um 1 Eine ziemlich gute Lösung für dieses Problem ist es, nur verschiedene Variablen für die Rausch-Argumente verwenden. Zum Beispiel könnten wir eine Variable namens xoff jedes Mal, wenn wir horizontal bewegen, und eine yoff-Variable jedes Mal, wenn wir vertikal durch die verschachtelten Schleifen bewegen. Beispiel I.6: 2D Perlin-Rauschen Start xoff bei 0. Für jedes xoff startet yoff bei 0.
No comments:
Post a Comment