Ich möchte eine physikalische Simulation mit zeitlich akkurat
aufgelösten Vorgängen durchführen. Dabei will ich aber keine unnötigen
Wartezeiten. Ich will nicht so etwas wie sleep(2). Ich will die zur
Verfügung stehende Rechenkapazität auslasten können. Die Simulation soll
vom Anwender nicht in Echtzeit beobachtet werden. Das Programm soll mit
maximaler Geschwindigkeit die Simulation berechnen. Und danach kann der
Anwender die einzelnen aufgezeichneten Vorgänge abspielen.
Nun habe ich aber keine Erfahrung damit wie man so etwas am besten
macht. Das was mir einfällt ist folgendes: ich habe eine Schleife. Ein
Durchlauf würde den kleinst möglichen Zeitschritt der Simulation
repräsentieren. Sagen wir jeder Durchlauf steht für 1 ms. Dabei ist es
also egal wie lange ein Durchlauf wirklich dauert. Es wird mit maximaler
Geschwindigkeit ausgeführt.
Angenommen ich will einen physikalischen Vorgang simulieren der alle 2
ms aktiv wird und eine Dauer von 4 ms hat. Dann würde ich in jedem
Schleifendurchlauf einen Zähler allein für diesen Vorgang hochzählen.
Beim zweiten Durchlauf würde der Vorgang dann ausgelöst werden und nach
weiteren 4 Durchläufen würde der Vorgang wieder deaktiviert werden.
Das würde wohl funktionieren aber ist das ideal? Wenn ich 10.000
Vorgänge/Objekte habe, die nicht zeitgleich aktiviert werden, sondern
dynamisch in der Simulation, dann müsste ich in jedem Schleifendurchlauf
10.000 Zähler verwalten und hochzählen.
Wäre das unvermeidbar? Welche Möglichkeiten gibt es noch?
Vielleicht schreibst Du mal, was Du simulieren willst. Ich bin mir nicht
sicher ob Du Dein Problem richtig beschreibst oder ob ich Deine an sich
korrekte Beschreibung richtig verstehe.
Aber, - falls ich das recht Problem verstehe -, dann wäre
eine Analogie zu Deinem unbekannten Simulat z.B. eine VHDL-Simulation,
bei der sämtliche Prozesse getaktet sind (was eine Design-Regel ist,
aber nicht zwingend) und sich also zwischen den Taktflanken die
Ausgangssignale nicht ändern können .
In dem Fall würden bei jeder Flanke des Taktes, alle Bedingungen
sämtlicher Prozesse geprüft werden, ob sie zutreffen. Die Prozesse
gelangen dann in einen neuen Zustand, bei dem die Bedingungen anders
sind und die dann evtl. bei der nächsten Taktflanke zutreffen.
Das braucht keine besondern Zähler für die Prozesse; die Zustände
selbst, ihre Kodierung, sind die Zähler. Der Zeitablauf ergibt sich aus
der Beschreibung der Prozesse und dem Fortschreiten der Zustände.
Hm. OK. Wer mit VHDL oder der Idee dahinter nicht vertraut ist, wird
damit wenig anfangen können. Aber ich musste meine Antwort auch erstmal
entwickeln.
Der Punkt auf den ich hinauswollte, ist, dass Dein Ansatz das Problem
aus einer bestimmten Perspektive, nämlich dem Zeitablauf auffasst. Das
Simulat verhält sich aus dieser Perspektive entlang der Zeit auf eine
bestimmte Weise. Das suggeriert evtl. bei Dir, das die Zeit sozusagen,
der "Antrieb" des Verhaltens ist. Deswegen scheint es nahe zu liegen,
die individuelle Zeit jedes Simulats mit zu führen.
Ich will den Fokus darauf richten, dass sich das Simulat je nach seinem
inneren Zustand und den gegenwärtigen Stimuli verhält. Die Zeit ist
dabei "nur" die Koordinate, an der die Stimuli und der innere Zustand zu
einem neuen Zustand und einer Reaktion führen. Jedes Simulat "hat" dabei
die selbe Zeit, nur einen anderen inneren Zustand und evtl. andere
"lokale" Stimuli.
Ist das verständlich?
Das zweite scheint mir ohnehin die korrekte Betrachtungsweise zu sein.
Sima80 schrieb:> mit zeitlich akkurat aufgelösten Vorgängen durchführen. Dabei will ich> aber keine unnötigen Wartezeiten. Ich will nicht so etwas wie sleep(2).
Ich sehe da 0 Zusammenhang.
Sima80 schrieb:> Welche Möglichkeiten gibt es noch?
Für zeitlich exakt vorhersehbare Ereignisse kann man alle Objekte in
einer Warteschlange (gemäß Zeit zum nächsten Eireignis) verwalten, so
kann man die Verarbeitung auf Objekte beschränken, die tatsächlich etwas
beim aktuellen Zeitschritt tun müssen. Problem: schwieriger zu
parallelisieren. Für z. B. eine Partikelsimulation wo man eh auf alles
für jeden Zeitschritt zugreifen muss wäre das allerdings unnütz.
Statt Zähler hochzuzählen kann man übrigens auch die Zeit des nächsten
Ereignisses speichern, damit vergleichen und bei Bedarf aktualisieren,
das vermeidet Schreibzugriffe, was ggf. vorteilhaft ist.
Jemand schrieb:> Sima80 schrieb:>> mit zeitlich akkurat aufgelösten Vorgängen durchführen. Dabei will ich>> aber keine unnötigen Wartezeiten. Ich will nicht so etwas wie sleep(2).>> Ich sehe da 0 Zusammenhang.
Vielleicht meint ja der TO mit seinem Gestammel nicht Simulation sondern
Emulation, genau Hardware in the Loop -> HIL
Obwohl, was den von Nicht-Echtzeit eingefordert wird, spricht dann
wieder dagegen.
> Sima80 schrieb:>> Welche Möglichkeiten gibt es noch?
Mal sich selbstständig die Grundlagen von Simulation, modellierung
physikalischer Vorgänge erarbeiten, vielleicht ?!
Was du verstehen musst, ist die Numerik physikalischer Vorgänge, also
wie löst man DGL-Systeme durchzeitliche Diskretisierung, Runge-Kutta ist
dar ein gängiger Einstieg:
https://de.wikipedia.org/wiki/Runge-Kutta-Verfahren
Die Simulation von einfachen mechanischen Systemen aus Feder und Massen
kann man sich auch mit xspringies anschauen. Das findet sich in
Linux-Distries, quelltext sollte auch dabei sein.
Allerdings ist das schon reichlich alt, vielleicht hilft das modernere
SOFA eher:
https://www.sofa-framework.org/https://www5.in.tum.de/lehre/vorlesungen/konkr_math/05_06/vorl/Handout_01.pdfhttps://blobtestweb.opal-rt.com/medias/L00161_0436.pdfhttps://de.wikipedia.org/wiki/Ereignisorientierte_Simulation
Sima80 schrieb:> Angenommen ich will einen physikalischen Vorgang simulieren der alle 2> ms aktiv wird und eine Dauer von 4 ms hat.
Das klingt seltsam. Hast du mal ein Beispiel für einen solchen
physikalischen Vorgang? Die Physik in der realen Welt hat keine
begrenzte Dauer und bleibt auch nicht alle 2 Millisekunden stehen.
Vermutlich will er etwas so simulieren, dass es dann ich Echtzeit läuft
oder so aussieht. Also nicht sehr schnell simulieren und dann mit
normaler Zeit wiedergegeben sondern zur Laufzeit berechnen aber auch
nicht so, dass sich die CPU langweilt.
Ein primitives Beispiel wäre ein Pendel. Der Benutzer soll interaktiv
über einen Schieberegler die Länge ändern können.
Jetzt reicht es für jedes Frame des Bildschirms einmal zu rechnen. Aber
da langweilt sich die CPU. Er will wohl, dass die dann eben genauer
rechnet oder noch zwischen den Frames Schritte rechnet.
> Vermutlich will er etwas so simulieren, dass es dann ich Echtzeit läuft> oder so aussieht.
Er schreibt eigentlich ziemlich klar, dass er gerade das nicht will:
Sima80 schrieb:> Die Simulation soll vom Anwender nicht in Echtzeit beobachtet werden.Gustl B. schrieb:> Also nicht sehr schnell simulieren und dann mit normaler Zeit wiedergegebenSima80 schrieb:> Das Programm soll mit maximaler Geschwindigkeit die Simulation berechnen. Und> danach kann der Anwender die einzelnen aufgezeichneten Vorgänge abspielen.
Formeln für jedes Objekt programmieren und Stepweite festlegen.
Dann alle Objektberechnungen durchführen, Ergebnisse speichern und
wieder von vorn anfangen.
Ob sich ein Ojekt nun bewegt hat oder nicht ist an den Ergebnisse
erkennbar.
Eigentlich ganz einfach.
Interessante anregende Antworten.
Ich simuliere verschiedene Dinge. Aktuell ist es ein Netz von noch
primitiven Neuronen. In dem Netz feuern einige Neuronen mit einer
bestimmten Frequenz. Die maximale Frequenz liegt bei 500 Signale pro
Sekunde.
Wenn ein verbundenes Neuron ein Signal erhält wird ein interner Zähler
des Neuron hochgezählt. Sobald ein Schwellenwert erreicht wird feuert
das Neuron.
Das ist das einfache Ausgangsmodell und das will ich nun nach und nach
verfeinern. Das Verhalten der Neurone wird komplexer. Es werden mehrere
innere Zustände pro Neuron zu berechnen sein. Und die Frage ist wie
modelliere ich am besten zeitliche Prozesse.
Ein Beispiel für ein zeitlichen Vorgang in einem echten Neuron:
Die Zahlen sind für das Beispiel erfunden.
Empfängt ein biologisches Neuron einen elektrischen Impuls steigt
vereinfacht gesagt die Spannung des Neurons an. Sagen wir die
Schwellenspannung wäre nach 10 elektrischen Impulsen erreicht und das
Neuron würde dann feuern.
Es ist so dass diese 10 Impulse innerhalb eines bestimmten Zeitfensters
stattfinden müssen, weil das Neuron die wachsende Spannung langsam
wieder abbaut und zu seiner Ausgangsspannung zurückfällt. Sagen wir es
sind 10 Impulse innerhalb von 200 µs notwendig damit das Neuron feuert.
Ich möchte solche zeitabhängigen Eigenschaften einbringen um zu sehen
welchen Einfluss es auf die Simulation hat. Und inwiefern diese
Eigenschaften für den Signalverlauf im neuronalen Netz vernachlässigbar
sind.
Und ich muss ja eine Grenze für die zeitliche Auflösung setzen. Ich
könnte sagen der kleinste Schritt meiner Simulation repräsentiert 1 µs.
Im Eingangspost habe ich 1 ms gesagt. Welchen Wert ich letztendlich
nehme müsste ich noch festlegen.
Rolf M. schrieb:> Er schreibt eigentlich ziemlich klar, dass er gerade das nicht will:
Sorry. Ja dann quasi wie bei einem normalen Simulationsprogramm. 3ds Max
kann Physiksimulation. Da kannst du das Video rendern lassen und danach
bequem angucken. Der rendert die Framerate die du einstellst, das ist
völlig frei, Auflösung auch.
Sima80 schrieb:> Das ist das einfache Ausgangsmodell und das will ich nun nach und nach> verfeinern. Das Verhalten der Neurone wird komplexer. Es werden mehrere> innere Zustände pro Neuron zu berechnen sein. Und die Frage ist wie> modelliere ich am besten zeitliche Prozesse.
Ja man kann das Rad auch zweimal erfinden und vom Anfangsmodell
'Dreieckiges Rad' ausgehend die Komplexität auf 'zwei dreieckige Räder'
verfeinern ...
Pilotanwärter Pirx schrieb:> Ja man kann das Rad auch zweimal erfinden und vom Anfangsmodell> 'Dreieckiges Rad' ausgehend die Komplexität auf 'zwei dreieckige Räder'> verfeinern ...
Nach dem selben Grundprinzip bist du als Mensch evolutiv entstanden :D
Ich frage ja nach Tipps. Gerne auch Hinweise auf ein fehlerhaftes
Vorgehen. Wie könnte man es besser machen?
Sima80 schrieb:> Pilotanwärter Pirx schrieb:>> Ja man kann das Rad auch zweimal erfinden und vom Anfangsmodell>> 'Dreieckiges Rad' ausgehend die Komplexität auf 'zwei dreieckige Räder'>> verfeinern ...>> Nach dem selben Grundprinzip bist du als Mensch evolutiv entstanden :D> Ich frage ja nach Tipps. Gerne auch Hinweise auf ein fehlerhaftes> Vorgehen. Wie könnte man es besser machen?
Es ist wie im richtigen Leben: Auf manche Bemerkungen muss man nichts
erwidern. Man kann auch 'nen Schluck Kaffee trinken oder die Zeitung
aufschlagen.
Aber ist denn jetzt noch eine Frage offen? Dein Beitrag scheint das
anzudeuten.
Ich würde das so machen:
Ausgangspunkt ist der Vorgang des Zustandsübergangs mit 2ms. Diesen
willst bspw mit 1000 Schritten auflösen. Dann beträgt deine Zykluszeit
2µs und du hast eine Taktrate von 500'000/sek.
Jetzt hast du eine Liste mit allen Elementen diese gehst du für jeden
Takt komplett durch. Ist der Eingang gleich dem vorherigen Zustand, dann
bleibt auch der Ausgang gleich - keine Berechnung für dieses Element
nötig. Ist das Element in der Übergangsdynamik, dann muss der Ausgang in
Abhängigkeit der Zeit berechnet werden. Die Änderung ist so zu
berechnen, dass sie für die 2µs passt.
Für die Ausgabe reicht es vermutlich auch nur jeden 100sten Wert oder so
herzunehmen, falls es eher um die übergeordneten Werte geht.
Wegen der Echtzeit Beobachtung: damit wollte ich nur sagen ich will die
Simulation nicht gleichzeitig berechnen und visuell anzeigen.
Bei sehr großen neuronalen Netzen werden die Berechnungen so lange
dauern dass vielleicht für die Simulation von 1 Sekunde der Computer
vielleicht 5 Minuten braucht.
Ich will das also nicht in Zeitlupe beobachten und durch das zeichnen
von Frames unnötig Ressourcen nutzen.
Daher einmal im Hintergrund die Simulation durchlaufen lassen, die
Zustände der einzelnen Neuronen in einer Datei aufzeichnen und dann die
Aufzeichnung in beliebiger Geschwindigkeit abspielen können. Dadurch
kann man die ganze Simulation auch besser untersuchen. Man kann
beliebige Zeitschritte vor und zurück gehen und Messungen am Datensatz
durchführen.
Theor schrieb:> Ich will den Fokus darauf richten, dass sich das Simulat je nach seinem> inneren Zustand und den gegenwärtigen Stimuli verhält. Die Zeit ist> dabei "nur" die Koordinate, an der die Stimuli und der innere Zustand zu> einem neuen Zustand und einer Reaktion führen. Jedes Simulat "hat" dabei> die selbe Zeit, nur einen anderen inneren Zustand und evtl. andere> "lokale" Stimuli.>> Ist das verständlich?
Hm eigentlich nicht. Mal ein konkretes Beispiel: ich will einen Neuron
simulieren. Nachdem das Neuron einmal gefeuert hat, soll es für eine
kurze Zeit nicht mehr feuern können. Eine Art Erholungsphase bis das
Neuron für neue Impulse empfänglich ist. Wie soll ich das in diskreten
Schritten simulieren ohne einen Zähler der die verstrichene Zeit
repräsentiert?
Sima80 schrieb:> Wie soll ich das in diskreten Schritten simulieren ohne einen Zähler der> die verstrichene Zeit repräsentiert?
Ich glaube dein grundsätzliches Problem ist die Trennung von Zuständen
des Neuronen (jedes Neuron hat n Attribute/Eigenschaften/Variablen) und
der einen Zeit t (z.b. ein Zähler mit Auflösung 1us)
In der simu zahlst Du t z.b. jeden Takt 10us hoch und berechnest jedes
Neuron. Wenn ein Neuron jetzt feuert, wird sein "Feuertimer" = t
gesetzt. Erholt ist es dann erst, wenn die Zeit t um die Erholungszeit
Te fortgeschritten ist: (t-"Feuertimer")>Te.
Du hast also keine Zähler pro Neuron, die laufend verändert werden,
sondern Variablen, die feste Zeitpunkte speichern und in jedem
Simulationsschritt vergleichen.
Ob du dann später 1us, 10 oder 100us-schritte machst, ist dann egal.
Kannst du sogar beliebig mixen.
Sima80
>Ich möchte eine physikalische Simulation mit zeitlich akkurat>aufgelösten Vorgängen durchführen.> Mal ein konkretes Beispiel: ich will einen Neuron> simulieren.
Klingt interessant. Für Echtzeitanwendungen käme vielleicht ein FPGA in
Frage:
Beitrag "Neuronale Netze in FPGAs"
Ist es einfach ein Privatprojekt oder eher eine Diplomarbeit?
Die Beschreibungen von Maxe und A. S. sind richtig und für dein Problem
geeignet.
Ich vermute dass du viel mehr Neuronen hast, als tatsächlich in einem
Zeitschritt feuern.
Dann ist es vielleicht CPU-technisch effizienter, nicht alle Neuronen
jeden Schritt anzuschauen, sondern nur die, die in diesem Zeitschritt
von anderen Neuronen befeuert werden.
Dazu braucht man eine Warteschlange die diese Ereignisse speichert.
Beispiel: Annahme Neuron A feuert bei t=0 und sei mit den Neuronen B und
C verbunden. Der Strom erreicht B und C etwas später, ich schreibe hier
der Einfachheit halber t=1. (Deine Zeitskala kann in µs oder beliebig
fein sein).
In die Warteschlange kommt jetzt (t=1, "B wird befeuert") und (t=1, "C
wird befeuert"). Du könntest auch unterschiedlich lange Laufzeiten
abbilden mit (t=2, "C wird befeuert")
Alle weiteren Simulationsschritte bestehen jetzt darin, die nach t
sortierte Warteschlange der Reihe nach abzuarbeiten, d.h. den inneren
Zustand des betreffenden Neurons zu berechnen und daraus resultierend
ggf. weitere Events in die Warteschlange einzustellen.
Sima80 schrieb:> Ich frage ja nach Tipps. Gerne auch Hinweise auf ein fehlerhaftes> Vorgehen. Wie könnte man es besser machen?
Einfach mal in einen Grundkurs Künstliche neuronale Netze schauen?!
Dann sollte klar sein das man die 'Impulfolgensmodulierten'
Nervensignale locker durch konstante Werte ersetzen kann. Diese
'zeitliche Simulation' ist völlig irrelevant für die mathematische
Modellierung eines neuronalen Netzes, das lernt man bereits in der
ersten Vorlesungsstunde zu diesem Thema:
https://cdn.weka-fachmedien.de/media_uploads/images/1462777275-270-worptzaup.jpg
Was bleibt ist ein zeitunabhängiges Skalarprodukt, das
zyklen(Layer-)weise durchgerechnet wird. Das man die Signalwerte nicht
als 'Digitalzahl' sondern wie in der Natur über die Frequenz
repräsentiert und weiterverarbeit ist IMHo Stand der Technik von 1935
wie seinerzeit von Helmut Hölzer mit seinem Analogrechner für das
Aggregat-4 eingesetzt wurde.
https://www.cdvandt.org/Hoelzer%20V4.pdf
Und der musste das so machen weil der AD-Wandler nocht nicht erfunden
war und man letzlich ohnehin ein analogas signal für die Steuerung der
servos brauchte.
Wobei das damals auch nur ein Verfahren des 'analogen Rechens' von
vielen war:
https://tuprints.ulb.tu-darmstadt.de/5383/1/deBeauclair-Mathematik-ohne-Ziffern2016.pdf
Tilo R. schrieb:> Die Beschreibungen von Maxe und A. S. sind richtig und für dein Problem> geeignet.
Ja wirklich interessante Perspektiven die mir weiter helfen können.
Danke dafür.
Tilo R. schrieb:> Ich vermute dass du viel mehr Neuronen hast, als tatsächlich in einem> Zeitschritt feuern.
Richtig. Das sehe ich in den bisherigen Simulationen mit sehr einfachen
Modellneuronen. Bei einer stabilen Einstellung der verschiedenen Werte
werden immer nur begrenzte Teile des Netz aktiv und andere Bereiche
werden in rhythmischen Zeitabständen aktiviert.
Selbst bei einem gegenwärtig noch chaotisch generierten Netz entstehen
interessante Effekte. Man kann temporäre Signal-Schleifen und
rhythmische Wellen beobachten. Ich bin gespannt wie sich diese Effekte
in einem weitgehend strukturierten Netz verhalten werden. Macht
definitiv Spaß dem Signal Gewitter zuzuschauen :D
Jede zufällig generierte Netzstruktur hat dabei Eigenschaften die man
kategorisieren kann.
Tilo R. schrieb:> Beispiel: Annahme Neuron A feuert bei t=0 und sei mit den Neuronen B und> C verbunden. Der Strom erreicht B und C etwas später, ich schreibe hier> der Einfachheit halber t=1. (Deine Zeitskala kann in µs oder beliebig> fein sein).> In die Warteschlange kommt jetzt (t=1, "B wird befeuert") und (t=1, "C> wird befeuert"). Du könntest auch unterschiedlich lange Laufzeiten> abbilden mit (t=2, "C wird befeuert")
Auch das ist eine interessante Idee!
C. A. Rotwang schrieb:> Einfach mal in einen Grundkurs Künstliche neuronale Netze schauen?!
Ich kenne und nutze einige KNN Modelle aus dem Bereich des machine
learning bereits. Das geht in eine ganz andere Richtung. Ich möchte
keine Bilderkennung oder dergleichen sondern das Verhalten biologischer
Neuronen nachbilden.
C. A. Rotwang schrieb:> Das man die Signalwerte nicht> als 'Digitalzahl' sondern wie in der Natur über die Frequenz> repräsentiert und weiterverarbeit ist IMHo Stand der Technik von 1935> wie seinerzeit von Helmut Hölzer mit seinem Analogrechner für das> Aggregat-4 eingesetzt wurde.
Ich habe noch vorhin zwei aktuelle Software Projekte gesehen Neuron und
NEST. Die simulieren Neuronen immer noch mit Spannungskurven. Und ich
glaube auch in den großen Projekten z.B. beim Human Brain Project
simulieren die das analoge Verhalten biologischer Neuronen.
Diese wissenschaftlichen Modelle haben denke ich wenig mit den Modellen
aus dem machine learning oder deep learning gemeinsam.
C-Rotwang
>Sima80 schrieb:>> Ich frage ja nach Tipps. Gerne auch Hinweise auf ein fehlerhaftes>> Vorgehen. Wie könnte man es besser machen?>Einfach mal in einen Grundkurs Künstliche neuronale Netze schauen?!>Dann sollte klar sein das man die 'Impulfolgensmodulierten'>Nervensignale locker durch konstante Werte ersetzen kann. Diese>'zeitliche Simulation' ist völlig irrelevant für die mathematische>Modellierung eines neuronalen Netzes, das lernt man bereits in der>ersten Vorlesungsstunde zu diesem Thema:>https://cdn.weka-fachmedien.de/media_uploads/images/1462777275-270-worptzaup.jpg
Das mit dem "einfach mal in einen Grundkurs schauen" würde ich dir dann
dringend mal ans Herz legen, bevor du meinst, den großen Max hier
spielen zu müssen. Deiner Aussage zu Folge ist hier dein Fachkenntnis
nämlich "Zero".
Damit es mit der Weiterbildung auch klappt, gebe ich dir mal das
Sichwort "Spikin Neurons" als Start- und Suchbegriff.
Sima80: Was die Simulationstruktur deiner Netze anbelangt, kannst du bei
den Vorträgen von Intel und IBM zu ihren Spiking-Neurons-Chips einige
Anregungen finden.
Um mal nur auf die Frage aus dem ersten Post einzugehen, dein Problem
ist nicht ganz untypisch, man findet dieses Muster -- viele Dinge, die
nach einer bestimmten Zeit oder Schrittzahl irgendwann abgearbeitet
werden müssen -- immer wieder in Software.
Es gibt grundsätzlich zwei Möglichkeiten damit umzugehen:
1. man diskretisiert die Zeit, und merkt sich in jedem Objekt, in
welchem Zeitschritt es wieder aktiv wird. Dann geht man alle
Zeitschritte durch und schaut jeweils in den Objekten nach.
2. man diskretisiert nicht, sondern hält eine sortierte Liste vor, in
der die nächsten Ereignisse in ihrer Reihenfolge eingetragen sind. Die
Schleife, die das abarbeitet, nimmt dann immer den ersten Eintrag aus
der Liste raus.
Typischer ist Vorgehen (2), weil keine Diskretisierung notwendig ist und
es für viele Problemklassen effizienter ist. Das gilt aber nicht
unbedingt. Ich denke insbesondere dann, wenn die vorkommenden
Intervalle sich ohnehin auf einem Grid unterbringen lassen und ein
signifikanter Teil der Objekte in jedem Intervall angeschaut werden
müssen, kann (1) effizienter sein.
Man kann auch eine Mischform bauen, wo man diskretisiert und alle
Zeitschritte durchgeht, aber trotzdem die sortierte Liste mit
Ereignissen hat statt alle Objekte durchzugehen.
Sven B. schrieb:> Man kann auch eine Mischform bauen, wo man diskretisiert und alle> Zeitschritte durchgeht, aber trotzdem die sortierte Liste mit> Ereignissen hat statt alle Objekte durchzugehen.
Am Ende ist es nur eine "Optimierungsaufgabe".
Wenn ein Großteil der Objekte in 10 Zeitschritten seinen Zustand ändert,
ist der naive Ansatz (eine Schleife und rechnen) eher der effektivste
(einfacher Code, einfache Operationen).
Wenn nur ein Bruchteil in 1000 Zeitschritten was tut UND die Simulation
zu langsam wird, dann kann man je nach persönlicher Erfahrung das ganze
optimieren.
Das unterscheidet sich kaum von z.B. einem RTOS: Die Warteschlangen
sortieren oder es tickless zu machen.
Wenn allerdings in jedem Tick beliebig viele Eingänge sich ändern
können, dann wird es schwierig, das zu optimieren. Da wäre es
sinnvoller, eine angemessene Tickrate zu finden.
Sima80 schrieb:> Ich möchte> keine Bilderkennung oder dergleichen sondern das Verhalten biologischer> Neuronen nachbilden.
Das ist in deinem verquasten Start-post nicht unbedingt zu erkennen, da
steht nix von Biologie.
"Ich möchte eine physikalische Simulation mit zeitlich akkurat
aufgelösten Vorgängen durchführen."
Unter einer Physik-Simulation versteht man aber keine
Neuronennachbildung,
https://en.wikipedia.org/wiki/Physics_engine
und schon der Begriff Neuron ist nicht ganz frei frei von
Mehrdeutigkeiten:
https://de.wikipedia.org/wiki/Liste_menschlicher_Zelltypen#Nervensystem
Wenn es dir um eine Modellierung des Gehirns geht, dann ist dort eine
populärwissenschaftliche Darstellung:
https://www.spektrum.de/pdf/82-91-sdw-09-2012-pdf/1159593?file
Dort ne website:
https://www.humanbrainproject.eu/en/brain-simulation/brain-simulation-platform/
Am besten, du gehst erstmal in Dich und formulierst deine Absicht als
Aufruf zur Mithilfe in einem neuen thread.
--
> Damit es mit der Weiterbildung auch klappt, gebe ich dir mal das> Sichwort "Spikin Neurons" als Start- und Suchbegriff.
Danke, ist aber falsch geschrieben und geht auch nicht über das bisher
gesagte hinaus und ist lediglich ein Beispiel dafür mit welchen
Formulierungstricks man Fördergelder für kalten Kaffee lostreten kann.
SCNR
A. S. schrieb:> Am Ende ist es nur eine "Optimierungsaufgabe".
Naja, in diesem Fall würde ich mich ganz klar auf die "Performance
always matters"-Seite stellen, aber stimmt natürlich ;)
>C. A. Rotwang (Gast)> Hans schrob:>> Damit es mit der Weiterbildung auch klappt, gebe ich dir mal das>> Sichwort "Spikin Neurons" als Start- und Suchbegriff.>Danke, ist aber falsch geschrieben und geht auch nicht über das bisher>gesagte hinaus und ist lediglich ein Beispiel dafür mit welchen>Formulierungstricks man Fördergelder für kalten Kaffee lostreten kann.
Über Rechtschreibfehler unterhält man sich im allgemeinen nur, wenn man
sonst keinen Inhalt zu bieten hat.
Ansonsten, ja, das Thema "Spiking Neurons" ist sicherlich noch ein
Forschungsthema und abgesehen von den großen Neuroprozessor-Racks die
von Intel und IBM an die die Forschungslabore der Rüstungsindustrie
verkauft werden, fließt da eher noch weniger Geld und die Universitäten
leben da von Fördergeldern.
Was ich aber immer wieder bei alternden Ingenieuren feststellen muss,
ist der Glaube, schon alles zu wissen und tatsächliche Neuerungen nicht
mehr erkenn zu können und auch nicht erkennen zu wollen. Das geht dann
meist so: Ki und Neuronen? Das hatte ich schon im ersten Semester im
Studium. Da gbit's nicht wesentlich Neues.
Dem ist mitnichten so: Seit man vor ca. 25 Jahren in den Unis angefangen
hat, die Grundlagen der KI zu vermitteln ist viel Zeit vergangen. Wie
und mit welchen Verfahren man die Netze trainiert, welche Schichttiefe
und Strukturen notwendig sind, das alles hat riesige Fortschritte
gemacht.
Was die Spiking Neurons oder Pulsneuronen anbelangt, sind diese wieder
eine völlig neue Richtung, das die einzelnen Neuronen und Synapsen dort
interne Zustandsvariablen haben, die wieder ganz andere Algorithmen
ermöglichen, die bisher noch gar nicht alle gefunden sind.