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.pdf https://blobtestweb.opal-rt.com/medias/L00161_0436.pdf https://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 wiedergegeben Sima80 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.
:
Bearbeitet durch User
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.