NEU! UPGRADE IP 10 verfügbar!
Optimierte Darstellung von VISU Editor und VISU Client - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/8HzePCm3

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur IP 10
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[TIPP] [Custom-Code ab V2.0] Generator für Pseudo-Zufallszahlen

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

[Custom-Code ab V2.0] Generator für Pseudo-Zufallszahlen

#1

Beitrag von Robosoc »

Fall mal jemand Zufallszahlen benötigt, ich habe einen kleinen Zufallszahlengenerator nach der Anleitung im Webartikel
https://www.lernhelfer.de/schuelerlexik ... allszahlen
geschrieben. Dieser Erzeugt gleichverteilte Zahlen von 1 - 99999, wobei es ein wiederkehrendes Muster ist und nicht alle Zahlen in diesem Muster vorkommen.

Irgendwann wird daraus vielleicht ein einfacher Abwesenheits-Lichtsimulator. Die Zufallszahlen sind keine echten Zufallszahlen und sollten nicht für IT-Sicherheitsanwendungen genutzt werden.

Da der Custom-Code die Funktion CalcFormula (Freie Formel) nutzt, geht der Code erst ab V2.0 IP4.

Der Code wird nicht automatisch getriggert und muss durch einen zu setzenden Trigger-Eingang ausgelöst werden.
Ich teste gerade mit einen zyklischen Trigger jede Sekunde und schreibe mir eine TimeSeries damit voll um zu sehen, wie gleichverteilt das Ganze ist.

[edit: Code in V1.1 eingefügt, weil V1.0 durch Rund Integer->Float Rundungsfehler nicht zufriedenstellend war (siehe Beiträge 2 und 3)]

Code: Alles auswählen

/**
* Pseudozufallszahlengenerator V1.1 - erzeugt Werte von 1 bis 99999 (exklusiv)
* erzeugt Zahlen, die weitestgehend dieselben Eigenschaften von echten Zufallszahlen haben, aber deterministisch (rekursiv) erzeugt werden und daher einem wiederkehrenden Muster unterliegen.
* nach folgendem Webartikel: https://www.lernhelfer.de/schuelerlexikon/mathematik-abitur/artikel/pseudozufallszahlen
*
* Nutzungsrechte:
* Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht. 
*/
{
  "Level": [
	["$Wert","integer",62347],
	["$Produkt","integer",0],
	["$Aufgerundet","bool",false],
	["$Out","integer",0],
	["$Faktor","integer",173],
	["$Formel_A","string","X1*X2"],
	["$Formel_B","string","(X1-rint(X1/100000)*100000+X2*100000)"],
	["$VAR<Inhibit?>","bool",false]
  ],
  "Module": [
	["Break", ["$VAR<Inhibit?>"]],
	["CalcFormula",["$Faktor","$Wert"], "$Produkt", "$Formel_A"],
	["CalcFormula",["$Produkt",0], "$Wert", "$Formel_B"],
	["Comparator" , "$Wert" , "-$Aufgerundet" , 0],
	["CalcFormula",["$Produkt","$Aufgerundet"], "$Wert", "$Formel_B"]
  ],  
  "Input": [
	["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
  ],
  "Output": [
	["Zahl","Pseudo-Zufallszahl von 1 bis 99999","$Wert","c"]
  ]
}
Zuletzt geändert von Robosoc am Mo Jan 03, 2022 2:45 pm, insgesamt 6-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#2

Beitrag von Robosoc »

Schade der genutzte Algorithmus ist leider nicht sehr chaotisch und somit nicht wirklich zufällig....Schade, das hatte ich mir anders vorgestellt!

Nach etwas mehr als 1h habe ~4.000 Zufallszahlen generiert und die Verteilung ist wie folgt:
Bild

Leider ist auch das Muster zu deutlich zu erkennen:
Bild
Zuletzt geändert von Robosoc am Mo Jan 03, 2022 12:32 pm, insgesamt 1-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#3

Beitrag von Robosoc »

hm...gerade entdeckt, dass die ersten 15 min. sehr brauchbare Werte geliefert hat und das Muster danach eingefallen ist:
Bild

Die Verteilung der ersten 830 recht chaotisch verteilten Werte war:
Bild
Zuletzt geändert von Robosoc am Mo Jan 03, 2022 1:07 pm, insgesamt 2-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

gbglace
Reactions:
Beiträge: 3603
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1266 Mal
Danksagung erhalten: 1672 Mal

#4

Beitrag von gbglace »

Interessant.

Ich hätte da ja irgendwie um es halt pseudozufällig zu machen noch andere Faktoren verarbeitet die bei sowas die Startwerte von so einem Algorithmus definieren. Im TWS Umfeld könnte man so einen Startwert regelmäßig durch einen hoch aufgelösten Wert eines Stromzählers (Spannung, mA) oder so einfließen lassen. Das würde ich schon als recht variabel erachten, auch wenn man es später für eine Anwesenheitssimulation nutzt die den Startwert ja auch irgendwie indirekt beeinflusst.
Grüße
Göran

#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#3 PBM 3 Kanäle, #4 Modbus-Extension

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#5

Beitrag von Robosoc »

Habe das ganze jetzt mal mit Excel überprüft und stelle fest, dass mein TWS-Custom-Code ab dem 51.ten Iterationsschritt zu Abweichungen im Ergebnis kommt...
Ich hatte schon beim Erstellen des Codes festgestellt, dass ich im TWS besser nicht mit float-Werten Arbeiten sollte, soweit es sich vermeiden lässt, weil da scheinbar irgendeine Rundung greift, die sonst nicht weiter auffällt oder Probleme bereitet (wer braucht schon normaler Weise eine 5.te oder 6.te Stelle nach dem Komma.). Deshalb habe ich im Code auch mit 100.000 multipliziert und dividiert...aber scheinbar hat das noch nicht gereicht.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#6

Beitrag von Robosoc »

gbglace hat geschrieben: Mo Jan 03, 2022 1:36 pm Ich hätte da ja irgendwie um es halt pseudozufällig zu machen noch andere Faktoren verarbeitet die bei sowas die Startwerte von so einem Algorithmus definieren.
Ja, dachte ich auch zunächst, aber die Wahl eines ungünstigen Startwertes kann sehr ungünstige Folgen für die Zufälligkeit haben. Wird der Startwert für einen Algorithmus nun also zufällig vorgegeben, dann kann das Ergebnis am Ende vielleicht schlechter sein, als mit einem fest vorgegebenen Startwert...Ich würde die Zufallsgenerator auch nicht immer wieder beim Startwert starten lassen, sondern ihn im Persistenzmodus halt inhibiten oder laufen lassen...für den Anwendungsfall Anwesenheitssimulator kommt man dadurch schon sehr weit. Die ersten 830 Werte in meinem Ergebnis sind meines Erachtens sehr gut geeignet und jetzt suche ich noch den Rundungsfehler... dann sollte das gut helfen.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#7

Beitrag von Robosoc »

So, nächster Versuch läuft mit 0,3Sek Taktung und ohne Float:D

Code: Alles auswählen

/**
* Pseudozufallszahlengenerator V1.1 - erzeugt Werte von 1 bis 99999 (exklusiv)
* erzeugt Zahlen, die weitestgehend dieselben Eigenschaften von echten Zufallszahlen haben, aber deterministisch (rekursiv) erzeugt werden und daher einem wiederkehrenden Muster unterliegen.
* nach folgendem Webartikel: https://www.lernhelfer.de/schuelerlexikon/mathematik-abitur/artikel/pseudozufallszahlen
*
* Nutzungsrechte:
* Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht. 
*/

{
  "Level": [
	["$Wert","integer",62347],
	["$Produkt","integer",0],
	["$Aufgerundet","bool",false],
	["$Out","integer",0],
	["$Faktor","integer",173],
	["$Formel_A","string","X1*X2"],
	["$Formel_B","string","(X1-rint(X1/100000)*100000+X2*100000)"],
	["$VAR<Inhibit?>","bool",false]
  ],
  "Module": [
	["Break", ["$VAR<Inhibit?>"]],
	["CalcFormula",["$Faktor","$Wert"], "$Produkt", "$Formel_A"],
	["CalcFormula",["$Produkt",0], "$Wert", "$Formel_B"],
	["Comparator" , "$Wert" , "-$Aufgerundet" , 0],
	["CalcFormula",["$Produkt","$Aufgerundet"], "$Wert", "$Formel_B"]
  ],  
  "Input": [
	["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
  ],
  "Output": [
	["Zahl","Pseudo-Zufallszahl von 1 bis 99999","$Wert","c"]
  ]
}
Zuletzt geändert von Robosoc am Mo Jan 03, 2022 2:28 pm, insgesamt 1-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#8

Beitrag von Robosoc »

Ergebnis aus dem Code in Version V1.1 sieht nach ca. 2250 Iterationsschritten sehr sehr gut aus und stimmt mit meinem Ergebnis in Excel zu 100% überein:
Bild

Jetzt lasse ich es mal laufen und schaue mal, ab wann es doppelte Werte gibt oder sich ein ungewolltes Muster einstellt.
Zuletzt geändert von Robosoc am Mo Jan 03, 2022 2:42 pm, insgesamt 1-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#9

Beitrag von Robosoc »

Nach ziemlich genau 5000 Werten wiederholt sich das Bild...aber 5000 Werte reichen mir... :D
Mache jetzt nicht mehr weiter
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK
Benutzeravatar

Chris M.
Reactions:
Beiträge: 1194
Registriert: Sa Aug 11, 2018 10:52 pm
Wohnort: Oberbayern
Hat sich bedankt: 236 Mal
Danksagung erhalten: 857 Mal
Kontaktdaten:

#10

Beitrag von Chris M. »

gbglace hat geschrieben: Mo Jan 03, 2022 1:36 pm Ich hätte da ja irgendwie um es halt pseudozufällig zu machen noch andere Faktoren verarbeitet [...]
Sorry, aber bei einem Pseudo-Zufallsgenerator gilt das gleiche wie bei Kryptographie (sind ja sehr verwandte Themen): bitte niemals selber basteln! :shock:

Es gibt viele gute, veröffentlichte Algorithmen die lange von Experten geprüft wurden, so dass sichergestellt ist, dass die die Anforderungen erfüllen. :handgestures-thumbsup:
CometVisu Entwickler - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

CometVisu Fragen, Bugs, ... bitte im Entwicklungs-Forum, hier nur spezifisches für CV<->Timberwolf.

TWS 2500 ID: 76 + TP-UART - VPN offen, Reboot nur nach Absprache
Antworten

Zurück zu „Zusätzliche Logikbausteine“