Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
deadtronic schrieb: TDeveloper schrieb: Jedenfalls, ich würde sagen, wir schreiben den Code nochmal komplett neu. Und den Algorithmus für die Auswahl der Fragen müsste man auch mal überdenken. Und evtl. das Datenbank-Konzept. Naja, es artet in Arbeit aus....
Code: Ist zwar nicht allzu viel, aber warum alles neu schreiben? Anpassungen lassen sich doch ohne Probleme durchführen, es ist ja nicht so dass es Strukturprobleme geben würde.
Da hast du Recht. Natürlich lassen sich Anpassungen leicht durchführen. Aber ich blick nicht mehr durch, das ist das Problem ☺ Algorithmus: Habe ich nicht angerührt, ich blicke da nicht durch. 😉
Echt jetzt? Bin fast ein bisschen enttäuscht 😉 Datenbank: Wenn es ein besseres Konzept geben würde können wir das gerne Ändern, aber ich kenne keins.
Tja, und da liegt das Problem. Ich kenn auch keines auf die Schnelle, aber ich bin mir sicher dass man das einfacher machen könnte. Was ham wir aktuell eig. für ne DB? Es kann doch nicht so schwer sein, ein funktionierendes Konzept zu entwickeln, oder?! 🙄 Ich rufe hiermit zum Call for Concepts (oder so ähnlich) auf. Jeder der ne Idee hat wie mans realisieren könnte, bitte melden (Und es muss einfach zu realisieren sein) Mir ist da übrigens auch ne Idee gekommen: --------------------
| Hans Dieter | 7 |
| Jürgen K. | 8 |
| Kai Uwe | 13 |
-------------------- Nach dem Binärsystem speichern ☺ (Hatte ich das nicht schonmal erwähnt?) 7 setzt sich zusammen aus 4 + 2 + 1, Hans Dieter besitzt also Eigenschaft 1,2 und 4 (bzw. 1,2 und 3). 8 setzt sich zusammen aus: 8, Jürgen K. besitzt also Eigenschaft 8 (bzw. die 4. Eigenschaft laut Binärsystem) 13 setzt sich zusammen aus: 8 + 4 + 1: Kai Uwe hat die Eigenschaft 1, 4 und 8 (bzw. 1, 3, 4) Mal sehen wers checkt ☺ mfg
|
chris34
Ikhaya- und Webteam
Anmeldungsdatum: 22. Oktober 2010
Beiträge: 3693
|
deadtronic schrieb: Hast eine PN. ☺
Jo, ist angekommen. Klar, mittels Bazaar.
Danke, hat funktioniert!
TDeveloper schrieb:
Code: Ist zwar nicht allzu viel, aber warum alles neu schreiben? Anpassungen lassen sich doch ohne Probleme durchführen, es ist ja nicht so dass es Strukturprobleme geben würde.
Da hast du Recht. Natürlich lassen sich Anpassungen leicht durchführen. Aber ich blick nicht mehr durch, das ist das Problem ☺
Schon mal was von Modulare Programmierung gehört? 😉
Was ham wir aktuell eig. für ne DB?
Sqlite3 (sieht man an den Importen 😉 )
Es kann doch nicht so schwer sein, ein funktionierendes Konzept zu entwickeln, oder?! 🙄
Eigentlich nicht....
Ich rufe hiermit zum Call for Concepts (oder so ähnlich) auf. Jeder der ne Idee hat wie mans realisieren könnte, bitte melden (Und es muss einfach zu realisieren sein) Mir ist da übrigens auch ne Idee gekommen: [...] [...] Mal sehen wers checkt ☺
Hmm, kann man das auch anders als mit hoher Mathematik machen....?? Was gilt jetzt eigentlich, dass was in den Klammern steht oder davor??
Mal mein Vorschlag: Man nehme eine Tabelle/Datenbank, indem die ganzen Infos gespeichert sind, z.B.: Geburtsort, Geburtstag, Geburtsmonat, Geburtsjahr, Beruf, Haarfarbe,.....
Dann nimmt man eine Kopie der Info-Tabelle in den RAM und werkelt mit der weiter. Soll heißen: Durch die Infos vom User werden die unzutreffenden Spalten/Personen gelöscht. Zum Schluss bleibt nur noch eine zur Auswahl (im Idealfall). Da würde es nur ein Problem geben: Was ist, wenn der User einmal falsch liegt, dann könnte man das Ergebnis, was der User erwartet, nicht mehr erreichen.
|
Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
chris34 schrieb: TDeveloper Ich rufe hiermit zum Call for Concepts (oder so ähnlich) auf. Jeder der ne Idee hat wie mans realisieren könnte, bitte melden (Und es muss einfach zu realisieren sein) Mir ist da übrigens auch ne Idee gekommen: [...] [...] Mal sehen wers checkt ☺
Hmm, kann man das auch anders als mit hoher Mathematik machen....?? Was gilt jetzt eigentlich, dass was in den Klammern steht oder davor??
Ich dachte Mathe ist einfach?!
Mal mein Vorschlag: Man nehme eine Tabelle/Datenbank, indem die ganzen Infos gespeichert sind, z.B.: Geburtsort, Geburtstag, Geburtsmonat, Geburtsjahr, Beruf, Haarfarbe,..... Dann nimmt man eine Kopie der Info-Tabelle in den RAM und werkelt mit der weiter. Soll heißen: Durch die Infos vom User werden die unzutreffenden Spalten/Personen gelöscht. Zum Schluss bleibt nur noch eine zur Auswahl (im Idealfall).
Achso, eine lokale Kopie über :memory: im RAM erzeugen und da dann unzutreffende Spalten löschen. Aber kann man bei SQLite Spalten löschen/hinzufügen? Soll ja Datenbanken geben, wo das nicht geht.
Da würde es nur ein Problem geben: Was ist, wenn der User einmal falsch liegt, dann könnte man das Ergebnis, was der User erwartet, nicht mehr erreichen.
Das ist meiner Meinung nach ein Problem des Users. Für was gibts schließlich den "I don't know"-Button? mfg
|
juifeng
Anmeldungsdatum: 16. April 2006
Beiträge: 159
|
TDevelopers Idee zum Speichern der Eigenschaften ist einfach ein Bitfeld, in dem ein Bit an Position i auf 1 gesetzt ist, wenn die i-te Eigenschaft zutrifft, und auf 0 sonst. Das entstehende Bitmuster kann man dann in eine Ganzzahl "umwandeln" (bzw. eben direkt so erzeugen) und in einer DB ablegen. Ist aber nicht so gut erweiterbar, ich gehe davon aus, dass kaum ein DBMS Ganzzahlen in beliebiger Größe abspeichern kann. Und z.B. ein 32-bit-Int reicht eben maximal für 32 unterschiedliche Eigenschaften. Aber selbst wenn ihr eine Möglichkeit zum Abspeichern der Eigenschaften eines Gegenstands oder einer Person gefunden habt, habt ihr ja noch keinen Algorithmus, der möglichst gute Fragen auswählt und dann anhand dieser Fragen die noch möglichen verbleibenden Antworten bestimmt. Und irgendwie habe ich auch das Gefühl, dass ein Algorithmus, der darauf basiert, Spalten aus einer DB-Tabelle zu löschen, vielleicht keine so gute Idee ist. Ihr müsstet wohl einen Weg finden, genau die Frage auszuwählen, bei der für möglichst die Hälfte der noch möglichen Suchobjekte die korrekte Antwort "ja" ist und für die andere Hälfte "nein". (Angenommen, es würde die möglichen Objekte mit jeder Frage halbieren, dann hat man log_2 Laufzeit.) Die "Ja"/"Nein"-Anteile der noch möglichen Objekte für die ausgewählte Frage sollten also möglichst gleich groß sein. Wenn am Ende nur noch ein Objekt übrig ist, das aber nicht das gesuchte war, dann würde ich mir anschauen, welche Frage der Benutzer evtl. falsch beantwortet haben kann. Vielleicht wäre hier am Vielversprechendsten, wenn man die Antwort auf die Frage "vergisst", bei der dadurch am meisten Objekte wieder möglich werden. Vielleicht ist das aber auch Unsinn.. Und irgendwie muss ich beim Thema Akinator auch an neuronale Netze denken. Ich habe mich bisher nicht sonderlich eingehend damit beschäftigt, aber vielleicht kann man die Sache auch damit irgendwie angehen?
|
Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
Hab mich mal ein paar Monate damit befasst und kann nur sagen: Interessant, aber für eine Problemlösung würde ich neuronale Netze nicht verwenden. Wegen SQLITE: Spalten hinzufügen geht, löschen aber nicht mehr. Wobeis dafür nen Workaround gäbe, der zugegebenermaßen recht aufwändig für so etwas simples ist. Achja, der Algorithmus halbiert so wie ich ihn konzipiert habe sowieso wenn möglich die Anzahl der in Frage kommenden Personen. Aber man bräuchte einen der menschliches Fehlverhalten zulässt. Ich hab dafür auch schon ne Idee, beschreib ich euch morgen mal. mfg
|
Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
So, neuer Tag, neues Glück, neuer Versuch: Also, da Spalten hinzufügen kein Problem ist (hab ich extra nachgeschaut), kann mans ja so machen, dass man vorerst nur die wichtigsten Eigenschaften einbaut in die DB. Ganz vorne dran müssen natürlich der Name und das Rating (Rating wird dadurch bestimmt, wie oft diese Person bereits gesucht wurde). Jedenfalls, beim Start des Programms wird ein Dict angelegt mit den Spaltennamen, wobei Name und Rating als Spaltenname ignoriert werden. Damit hat man dann schon mal ein Dict. Und dahinter ist dann eine Liste mit wievielen möglichen Optionen. Das bedeutet zum Beispiel: { "Haarfarbe":[5,8,3]}. Man weiß man braucht die Spalte Haarfarbe. Und in der Spalte Haarfarbe gibt es 3 Möglichkeiten (= len(liste)). Wobei die erste Option 5 Leute betrifft, die 2. Haarfarbe 8 Leute und die dritte Option 3 Leute. Jedenfalls so oder so ähnlich könnt mans aufbauen. Und da es möglich ist, Werte aus dem Dict wieder zu löschen, kann man Antworten ganz schnell wegrationalisieren bzw. den "I don't know"-Button implementieren ☺ Ja, und dann braucht man natürlich noch ein 2. Dict. Darin werden die Antworten gespeichert. Pro Person in der Datenbank muss man halt eine Wahrscheinlichkeit bezogen auf die Antworten ausrechnen. Und wenn die Wahrscheinlichkeit einer Person bei über (sagen wir mal) 90% liegt, dann könnte das die gesuchte Person sein. Liegen 2 oder mehr Personen über 90%, so entscheidet das Rating. So einfach ist das ☺ Hat irgendjemand verstanden wie ich das realisieren will? Meinung, Kritik, Vorschläge dazu? mfg
|
dPhi_dt
Anmeldungsdatum: 15. Juni 2010
Beiträge: 149
|
Also man sollte vielleicht eine Tabelle mit Eigenschaften (ID und Bezeichnung), eine Tabelle mit Personen (ID und Name) und eine Tabelle mit Hat-Beziehungen machen. So bleiben die Spalten immer konstant, man kann erweitern und es ist auch im Sinne der relationalen Datenbank. Davon abgesehen habe ich jetzt das Projekt bei mir im PPA drin, wenn jemand Interesse hat, kann er damit ganz bequem testen helfen.
|
theSoenke
Anmeldungsdatum: 21. April 2011
Beiträge: 5
|
Hallo sehr interessantes Projekt an dem ihr arbeitet. Ich wäre auch interessiert mit zu machen, auch wenn ich nur wenig ahnung von den hier benutzen Programmiersprachen habe. Vielleicht kann ich an der Erstellung von Personenprofile und Fragen mithelfen.
|
dPhi_dt
Anmeldungsdatum: 15. Juni 2010
Beiträge: 149
|
Übersetzen und Testen sind Dinge, die man immer machen kann. Ansonsten ist es auch eine gute Ausrede eine neue Programmiersprache zu lernen ☺
|
BlackRed
Anmeldungsdatum: 24. August 2010
Beiträge: 167
|
Ein wirklich sehr interessantes Projekt, das ihr da am Laufen habt.
Ich würde aber das Spiel auf keinen Fall mit Namen wie "Tux" oder "Pingu" usw. verschändeln.
Ich finde es kommt einfach nur noch unseriös solche Wörter als Namensgeber für Spiele oder Programme zu verwenden. Mfg,
Raphael
|
theSoenke
Anmeldungsdatum: 21. April 2011
Beiträge: 5
|
dPhi dt schrieb: Übersetzen und Testen sind Dinge, die man immer machen kann. Ansonsten ist es auch eine gute Ausrede eine neue Programmiersprache zu lernen ☺
Stimmt hast recht ☺
Womit sollte ich am besten anfangen ?
|
Developer92
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
theSoenke schrieb: dPhi dt schrieb: Übersetzen und Testen sind Dinge, die man immer machen kann. Ansonsten ist es auch eine gute Ausrede eine neue Programmiersprache zu lernen ☺
Stimmt hast recht ☺
Womit sollte ich am besten anfangen ?
Mit dem Erlernen von Python ☺
|
dPhi_dt
Anmeldungsdatum: 15. Juni 2010
Beiträge: 149
|
@theSoenke: das offizielle Python Tutorial ist ganz brauchbar, ich weiß nur nicht, wie man als Programmieranfänger damit klarkommt.
|
BlackRed
Anmeldungsdatum: 24. August 2010
Beiträge: 167
|
Unter den Galileo Openbooks findet man auch ein Super Python-Buch!
Damit lerne ich selbst ohne Vorkenntnisse (nur Html/CSS und ein bisschen PHP) sehr schnell.
|
theSoenke
Anmeldungsdatum: 21. April 2011
Beiträge: 5
|
Woran wird denn momentan gearbeitet ? Ist bald eine alpha Version fertigt, die man testen könnte ? Ich habe jetzt angefangen mich mit Phyton zu beschäftigen, da wird man aber trotzdem nicht von heut auf morgen zum Experten. Gäbe es etwas anderes wo ich momentan helfen könnte ?
|