Jump to content

Egoist

Mitglieder
  • Gesamte Inhalte

    4.440
  • Benutzer seit

  • Letzter Besuch

5 User folgen diesem Benutzer

Über Egoist

  • Rang
    Analytiker

Profile Information

  • Gender
    Male

Letzte Besucher des Profils

3.338 Profilaufrufe
  1. Von php habe ich leider aktuell keinen Plan, wenn es sein muss, schaue ich mir das mal an. Ich würde die Trennung bei dem Zettel machen, den der Ober am Tisch kritzelt. Die richtige Arbeit läuft in der Küche, die hat auch keine Oberfläche, die jemand sehen soll. Das Restaurant mit sauberen schönen Tischen und lauschiger Beschallung, Beduftung und freundlicher Begrüssung, hat so gar nichts mit der Qualität der Küche zu tun. Der Umfang der Karte lässt allenfalls erahnen, wieviel davon wohl aus der Tiefkühlung kommen muss... Die nächste Abstraktionsstufe bereitet das Elaborat der Küche nun mit Wunderkerzen und sonstigem Schnickschnack am Tisch auf... Wer will, zieht da auch noch eine Frischzellenkur ein. Und Rubi, au Backe, das klingt nach tagelangen Recherechen...
  2. Hallo @onoio eine Oberfläche muss nach meinem Verständnis dem Benutzer ein Angebot machen, was auf der Speisekarte steht. Dann muss sie den Ober simulieren, der die Bestellung aufnimmt. Heraus kommt der Zettel, den der Ober in der Küche abgibt, die macht dann den Output. Der Ober muss dann noch sehen, dass alles richtig zugestellt wird, sonst ist der Gast nicht zufrieden. Gruss vom Ego
  3. Grüss Gott Herr Doktor, bitte bedenke, dass es sich um Dein Programm handelte, welches ich nur etwas aufpoliert hatte. Natürlich habe ich dazu auch Deine "Coup"-Klasse in "roulib01.py" übernommen, durfte ich das nicht? Das ist geplant, aber ich wurde heute davon abgehalten, s.u. Excel werden wir aber nicht nachprogrammieren... Für so einen Vergleich mit Newfish kann man auch mal ganz fix auf einer Ignoreliste landen. Keine Bange, ich habe keine. Meine Bemerkung war eher so gemeint, dass ich mich der Herausforderung stellen wollte, mit Dir weiterhin zu kommunizieren. Dir scheint Deine Aussenwirkung nicht wirklich klar zu sein. Mit mir ist normalerweise recht gut Kirschen essen, nur wenn ungerechtfertigte Kritik kommt, werde ich ironisch. 100%ige Zustimmung. So schlimm ist das mit tkinter doch gar nicht. Wenn Du Dich mit Qt auseinandersetzt, werden Dir auch da üble Nachteile auffallen. Heute habe ich mich über Punkt 1 Deiner GUI-Liste für @onoio hergemacht und einen Dialog mit 37 Pushbuttons mit der Maus zusammengeklickt. Der soll den Benutzer zukünftig davon abhalten, seine Maus loszulassen um blitzschnell die Perm über den Nummernblock einzuhacken Ist soweit fertig, aber ich kriege Schreikrämpfe, wenn ich feststelle, dass die Buttons mit TAB in der falschen Reihenfolge aktiviert werden. Das lässt sich nachträglich nicht mehr ohne EDIT im XML korrigieren. Dann hat PyQt den Nachteil, dass man die Ergebnisdatei nur einmal nach Python übersetzen kann, wenn man den Inhalt danach verändert. Also alle Anbindung an das eigene Programm geht verloren, wenn später im Designer noch was verändert wird. Glücklicherweise kann man die XML-Datei aber auch zur Laufzeit importieren und vom eigenen Programm auf die Namen der Widgets verweisen. Ich hatte nicht "keine", sondern "wenig" geschrieben. Stelle Dir den Zustand aller Textfelder, Radiobuttons, Schalter, Comboboxen etc vor. Dann stelle Dir vor, wie die Ausgabe dieser Info in eine Textdatei aussehen würde, aus der man die Eingaben später wieder erzeugen könnte. Das ist der Informationsgehalt den der User eingefüttert hatte. Dann stelle Dir mal ein Programm vor, welches solche Textdateien automatisch erzeugt und diese als neue Eingabe verfüttert. Siehst Du da gar keine Vorteile? Momentan stellst Du einen Pool händisch zusammen und testest mit Lernphasen von x-Coups Vorlauf. Dann prüfst Du den Pool mit x+1 und x-1 usw. Ein Inputgenerator könnte Dir alles abnehmen, mit einer Schleife von x=1 bis x=100, das ganze auch noch 100x mit 100 verschiedenen Pools... Deine Maus hätte Urlaub und Dein Enkel einen Opa. s.o. Aha, und auf welcher profunden Erkenntnis basiert diese doch recht eindeutige Entscheidung? Dann mach mal erst damit Erfahrungen. Natürlich wird nichts Deiner gewohnten VBA-Umgebung entsprechen, was wir im Pythonlager finden. Aber Python ist stark in der Verarbeitung von Textfiles, es würde mich nicht wundern, wenn schon jemand einen VBA to Python Converter geschrieben hätte. Da kann ich nur die Daumen drücken, aber riskiere nicht zu viel! Ich war nicht sehr fleissig bei der Sache, denn ich habe mich sehr breit informiert (bis verzettelt). Und Deine Wünsche in Sachen GUI lenken auch immer wieder ab. Ich habe nun aber einen Account bei Github angelegt, dort sollen die Quelltexte dann einfacher zum Download bereitliegen. Gruss vom Ego
  4. Meine Importfunktion funktioniert schon fehlerfrei, auch wenn in der Datei Beiwerk wie Disclaimer oder Statistiken herumlungern. Die hat aber noch kein GUI. Daher dürfte es auch weiterhin schwierig sein, mit mir zusammenzuarbeiten, denn ich lasse kein gutes Haar an Dir. Im Gegenzug solltest Du danach trachten, mir alle Haare auszurupfen, derer Du habhaft werden kannst. Nur so kommen wir maximal schnell vorran.
  5. Dir ist sicherlich klar, dass Dich Steve Jobs für so ein "Interface" öffentlich in Streifen hätte schneiden lassen. Sorry, soll nicht wieder vorkommen. Aber es dürfte zur Zeit vollkommen genügen, sich mit tkinter zu befassen, denn so einen unstrukturierten Haufen von Input kann man damit locker stämmen. (Ups, kann nicht aus der Haut) Fangen wir also mal ganz von vorne an. Deinen ersten Entwurf habe ich etwas überarbeitet und alles ohne Funktion herausgeworfen. Jetzt steht die Frage im Raum, wie man die Permanenz wieder löschen kann. Siehe Zeile 31 import roulib01 as roul # Unsere eigene Library V0. import tkinter as tk from tkinter import ttk import os ChArten = roul.Roulette_franz() # Konstruktor, der eine Instanz mit frei wählbarem Namen erzeugt. # globale Strings hinweis01 = ["(Bitte Pfad oben eingeben)"] fehler01 = ["Pfad ist üngültig!"] fehler02 = ["keine Coup-Nr.!"] fehler03 = ["Eingabe ungültig!"] # Erzeuge eine Fenster-Instanz win = tk.Tk() # Füge einen Titel hinzu win.title("Meine erste RouletteGUI") # Enable resizing x-dimension, disable y-dimension win.resizable(True, True) win.geometry('800x300') # Modul-globale Variable # ----------------------------- lastcoup = 0 perm = [] couplist = [] def ResetPerm(): perm = [] # hier sollte die globale Liste gelöscht werden, aber es wird eine neue lokal erzeugt. print("perm reset") def read_Directory(path): txtfiles = [] # leere Liste der Dateinamen, wird nur lokal erzeugt! permfilecount = 0 try: # Die Dateinamen einsammeln for filename in os.listdir(path): txtfiles.append(filename) permfilecount = permfilecount + 1 except: print('Not found: Dir=' + path) txtfiles = fehler01 print(str(permfilecount) + ' Permfiles gefunden') return txtfiles # Dateiliste zurückgeben (ist leer für ungültige und leere Pfade). def click_FillCombo(entry): fileliste = read_Directory(dirtext.get()) # ruft Dateiliste für aktuellen dirtext ab combo_1['values'] = fileliste # Die Combobox befüllen combo_1.current(0) def print_filename(): fn = dirtext.get() fn += "\\" fn += combo_1.get() # angeklickte Datei anhängen print(fn) # Anzahl der Perms wird angezeigt # Die Perm mit allem Drum und Dran in die Liste lines einlesen # ---------------------------------------------------------------- file = open(fn) lines = file.readlines() print(str(len(lines)) + " Permlines gefunden.") file.close() # Die Listen perm und couplist füllen, dabei die Textzeilen aus lienes abtrennen # --------------------------------------------------------------------------------- x = 0 tx = 0 for each in lines: ti = lines[x].rstrip() # Escapes und Blanks herausnehmen try: i = int(ti) # print(i) perm.append(i) # der perm[]-Vektor wird gefüllt cp = roul.Coup() # eine neue Coup-Instanz # die Attribute aktualisieren cp.pl_nr = i cp.ec_SR = ChArten.ec_RS[i] cp.ec_GU = ChArten.ec_UG[i] cp.ec_MP = ChArten.ec_TH[i] # cp.dc_KO = ChArten.dc_col[i] # cp.dc_DU = ChArten.dc_duz[i] # cp.c6_TVS = ChArten.c6_tvs[i] # cp.c12_TVP = ChArten.c12_tvp[i] # ein paar Testausgaben # print(str(cp.pl_nr) + " " + str(cp.ec_SR) + " " + str(cp.ec_GU)) # nur Testanzeige couplist.append(cp) # die Couptabelle wird gefüllt except: tx += 1 # nichtnumerische Zeilen zählen # print("Textzeile:" + ti) x += 1 sizePerm = len(perm) # Anzahl der Permzahlen # Anzeige der Textzeilen und Permzahlen in label6 label6.configure(text=(str(tx) + " Textzeilen, " + str(sizePerm) + " Permzahlen")) def callback(entry): # universelle Ausgabe, als temporäre Debugfunktion print_filename() lastcoup = roul.Coup.counter print(str(lastcoup) + " Coup-Objekte angelegt") def entry1_return(event): try: i = int(entry1.get()) # if i<0 or i>36: print(i) perm.append(i) # der perm[]-Vektor wird gefüllt cp = roul.Coup() # eine neue Coup-Instanz # die aktuellen Attribute holen cp.pl_nr = i cp.ec_SR = ChArten.ec_RS[i] cp.ec_GU = ChArten.ec_UG[i] cp.ec_MP = ChArten.ec_TH[i] # ein paar Testausgaben print(str(cp.pl_nr) + " " + str(cp.ec_SR) + " " + str(cp.ec_GU)) # nur Testanzeige couplist.append(cp) # die Couptabelle wird gefüllt label6.configure(text=(str(len(perm)) + " Permzahlen")) # neue Perm-Anzahl anzeigen label7.configure(text=(str(i) + " angefügt")) # neue Permzahl anzeigen except: label7.configure(text=fehler03) def entry1_del(event): entry1.delete(0, 'end') # Eingabefeld für Permzahlen entry1 = tk.Entry(win, width=40) # win, width=4, textvariable=PZahl) # entry1.bind('<Return>', on_change) entry1.bind("<Escape>", entry1_del) entry1.bind("<Return>", entry1_return) entry1.grid(column=1, row=3) entry1.focus() # Setze den Cursor in die Textbox # Eingabefeld für dirname name = tk.StringVar() dirtext = ttk.Entry(win, width=40, textvariable=name) dirtext.grid(column=1, row=4) dirtext.bind("<Return>", click_FillCombo) # Eine Combobox anlegen # Eine ComboBox hinzufügen combo_1 = ttk.Combobox(win, width=37, values=hinweis01) combo_1.grid(column=1, row=5) combo_1.current(0) combo_1.bind("<<ComboboxSelected>>", callback) # callback als Baustellenschild :) # Textfelder (Labels) hinzufügen # ---------------------------------------------------- label1 = ttk.Label(win, text="Enter a Plein-Nr. & Return:") label1.grid(column=0, row=3) # 2 Überschriftszeilen label2 = ttk.Label(win, text="* User Interface für Roulette-Tests *") label2.grid(column=0, row=0) label3 = ttk.Label(win, text="*************************************") label3.grid(column=0, row=1) # Labels hinzufügen label4 = ttk.Label(win, text="Click on an entry:") label4.grid(column=0, row=5) # Labels hinzufügen label5 = ttk.Label(win, text="Permpool-Directory:") label5.grid(column=0, row=4) # Labels hinzufügen label6 = ttk.Label(win, width=40, text='Anzeigen') label6.grid(column=2, row=5) # Labels hinzufügen label7 = ttk.Label(win, width=40, text='Next Plein') label7.grid(column=2, row=3) # Buttons hinzufügen # -------------------------------------------------------- action1 = ttk.Button(win, text="Reset Perm", command=ResetPerm) action1.grid(column=0, row=2) # action1.configure(text="NO!") # ================== # GUI-Start # ================== win.mainloop() Ausserdem kommen bei mir komische Meldungen nach dem Import einer Perm-Datei, wo ca 2000 Zeilen in 4000 Coups enden.. Es wird dringend Zeit, eine Ausgabe der gelesenen Permanenz zu erzeugen.
  6. Egoist

    54 Treffer in 37 Coups

    Hallo Hans, lass mich mal raten, was Du Dir heute in Deinen Verdampfer geträufelt hast. Ausgehend von einem Gleichsatz mit einem Stück pro Chance, liegt der maximale Gewinn bei 30+ in 10 Coups. Das erfordert aber schon ein ungeheures Glück. 37+ ist ohne Progression nicht möglich! Gruss vom Ego
  7. Hab ich noch nicht angesehen. Python enthält dermassen viele wissenschaftliche Module, dass es schwer fallen sollte, das zu toppen.
  8. Hallo @onoio, hab es mir mal angesehen, allerdings nur auf youtube. Scheinbar ist Watson schon ein marktreifes System, mit dem u.a. Versicherungsunternehmen arbeiten. Ausserdem liegen populäre Erfolge sogar schon 7 Jahre zurück. Watson scheint einen gehörigen Vorsprung zu besitzen... Gruss vom Ego p.s.: Was ich gesehen habe, war ein API für Unity(Gameengine). Unity hatte ich vor gefühlten 10 Jahren mal auf dem Schirm, damals habe ich einen Roulettekessel in blender gebaut und dort eingefügt. Der funktionierte auch, aber nur bis zu einer untauglich kleinen Kugelgeschwindigkeit. Bei realistischer Abwurfgeschwindigkeit flog die Kugel durch die Rinnenwand nach aussen weg. Da habe ich dann aufgesteckt.
  9. Moin Albert, ich habe mir Deine Exceltabellen angesehen und bin noch etwas verwirrt. Es geht daraus gar kein GUI hervor, sondern nur eine bildliche Darstellung der Ausgabe. Wo werden die Benutzereingaben abgefragt, denn die machen das GUI aus!? Zur Erläuterung meiner auch zukünftig evtl harten Kritik, eine kleine Anekdote: Nachdem ich eines meiner ersten Programme fertiggestellt hatte (auf VC20), lud ich einen Nerd ein, den ich im Computershop kennengelernt hatte. Stolz präsentierte ich mein Programm und liess ihn testen Das erste, was er machte, waren bewusst unerwartete Eingaben und mein Programm lag sofort auf der Fresse. Er hatte mir gegenüber einen gehörigen Vorsprung damals, aber dann wurden wir richtige Freunde. Nach einigen Jahren mit wiederkehrenden Programmierwochenenden hat uns das Leben dann leider getrennt. Inzwischen hatten wir aber wirklich interessante Projekte am Wickel, incl erfolgreichem MaschineLearning (VC20-Basic!). In diesem Sinne biete ich Dir gern meine kritische Mitarbeit an, aber Du wirst mich dann ertragen müssen. Kleiner Vorgeschmack: Deine 4 Testspiele mit echtem Geld weisen eher in Richtung (Gleichsatz-)Minus, denn der Saldo ist nur der Martingale geschuldet. Wie gefährlich sowas ist, muss ich Dir sicher nicht herbeten. Mein Vorschlag wäre deshalb, lass die Martingale weg. Entweder bringt die Prognose einen Gewinn, oder sie ist untauglich. Es ist alles nur der Sache geschuldet und nicht persönlich! Gruss vom Ego
  10. Das putzige am Zufall ist, dass er alle Wahrscheinlichkeiten gleichermassen bedient. Die offensichtlichen Chancen, genauso wie die künstlichen. Wir können uns die abstraktesten Modelle ausdenken, wenn sie nur dem Zufall unterliegen, und alle werden gleichermassen mit Treffern und Nieten behagelt. Alle, die das noch nicht verstehen, sollten noch nicht richtiges Geld riskieren.
  11. Ich wollte @Dr. Manque's Lernthread nicht unnötig belasten, daher schreibe ich in meinen aktuellen. Ein Figurenspieler bin ich nicht, auch mit den ECs beschäftige ich mich selten. Aber mit Binärzahlen kenne ich mich prima aus und die decken einen Münzwurf perfekt ab. Soweit ich das überblicke, rechnen alle EC-Figurenspieler die Zero raus, damit sind sie gleichzeitig den Hausvorteil los. Aber fangen wir mal mit einem Roulettekessel für EC ohne Zero an: Im ersten Wurf gibt es Rot oder Schwarz also nur 2 Fächer. Wollen wir 2 Würfe mit einer Kugel simulieren brauchen wir schon 4 (2^2) Fächer, RR, RS, SR und SS. Bei einem Wurf für Figuren mit 3 Ereignissen braucht der Kessel schon 8 Fächer, RRR, RRS, RSR, SRR, RSS, SRS, SSR und SSS. Setzt man das fort, gibt es für jeden weiteren Coup doppelt so viele Fächer. Ein Kessel, der 8 EC-Coups, auch in der richtigen Reihenfolge bestimmt, hat 256 Fächer (2^8). Treibt man das weiter, muss entweder die Kugel kleiner und kleiner werden, oder der Kessel grösser und grösser.. Nun kommt's: Interessanter Weise gilt auch hier immer das 2/3 Phänomen (behaupte ich). Also, egal wieviele Figuren es gibt, es werden 2/3 davon in einer Figurenrotation getroffen. Die Figurenlänge sei = f also treffen durchschnittlich 2^f*2/3 Figuren in 2^f Coups (grob). Lernt man nun eine Maschine über einen gewissen Zeitraum an, so könnte sie auf die Idee kommen, bereits getroffenen Figuren zu bevorzugen, da sich etliche wiederholen werden. Allerdings gebe ich zu bedenken, dass es Coup für Coup schwieriger wird, weil die Möglichkeiten explodieren. Richtigen brainfuck ergibt die Überlegung, einer jeden erschienenen Figur eine zukünftige Trefferwahrscheinlichkeit zuzuordnen, die sich ausserdem Coup für Coup wieder neu ausrichtet (Computer machen das mit links).
  12. Egoist

    Was hat Roulette mit Mathe zutun?

    Es ist genau anders herum! Jede Präzisionsmessung wird durch den Zufall gestört, daher ist er ihr natürlicher Feind. Dem Zufall selbst ist alles Wurst, da er keine Intention hat. Also hat er auch keine Feinde, er schlägt nur blind um sich. Auch das tut er nicht willentlich. Wer sich aber in diesen Gefahrenbereich bewegt, haftet selbst für seinen Leichtsinn.
  13. Ich habe keine Abneigung gegen GUIes, gebe aber zu, dass mir der MacIntosh damals zu teuer war (ca 10kDM). Daher konnte ich mir nur den Amiga 1000 leisten, der hatte schon 2 Maustasten Ich hatte schon lange einen 3000T bevor ich mit Windows 3.1 in Berührung kam. Apple wäre beinahe genauso gestrandet, wie Commodore, hätten sie sich nicht mit NeXT die Basis für ein anständiges Betriebsystem einverleibt. BTW der Amiga 1000 konnte schon Multitasking und davon habe ich auch damals in meinen Programmen Gebrauch gemacht. Du solltest mich erst besser kennenlernen, ehe Du so gewagte Behauptungen aufstellst. Abenteuerlich! Allerdings schaue ich auch nicht viel tiefer in Deine Gedankenwelt. Du darsft mich aber gern als Noob bezeichnen, wenn es um die Begriffe Coup-, Perm- und Massentests geht. Meine Simulationen hatten immer nur je einen mehr oder weniger langen Input aus Coups, mal aus der Konserve, mal aus dem Generator. Das sollten wir beim Python-Deep Learning-Projekt ausprobieren. Auf alle Fälle sollten wir das tun. Ich schlage nun zum wiederholten male vor, dass Du Deinen GUI-Vorschlag hier einreichst. Wenn das noch nicht in Python geht, nimm VBA, aber lass uns was sehen. (Selbst Papier und Bleistift sind willkommen, aber ohne Entwurf regt sich bei mir nix) Einverstanden. Gruss vom Ego
  14. Hallo @onoio, danke für Deine Bereitschaft und Deinen Mut! Mit einem ftp-Server könnte man zB damit anfangen Permanenzen hochzuladen und chronologisch in Deine Datenbank einzusortieren. Das müsste dann aber streng auf eine geschlossene Benutzergruppe beschränkt bleiben, da man die meisten Permanenzen nicht verbreiten darf. Den Umgang mit so einem Server müsste ich mir allerdings noch beibringen. Vor Jahren hatte ich mir mal einen DVB-S Recorder gebastelt, den man mit putty von Windows aus erreichen konnte. Leider vergesse ich solches Wissen dann sehr rasch wieder. Gruss vom Ego
  15. Hab mal bisschen herumgeschaut, für 300 Flocken im Jahr bekommt man wohl schon einen netten rootserver mit 16GB und 1TB FP und 4 VCores. Ich könnte das aber nicht richtig nutzen.
×