Projekt: Terminkalender optimieren

Sie haben ein bestimmtes Projekt zu bearbeiten und wissen nicht, wie Sie an die Aufgabe heran gehen sollen? Sie sind sich nicht sicher, ob Ihr Netzentwurf zu Ihrem Problem passt oder ob es da Optimierungsmöglichkeiten gibt? Ist es überhaupt sinnvoll an Ihre Daten mit einem NN basierten Ansatz heranzugehen? Ist MemBrain das richtige Werkzeug für Ihr Problem und Ihre Infrastruktur?

Hier ist der richtige Platz für diese Art von Fragen.
Post Reply
KaroLin
Posts: 4
Joined: Wed 6. May 2015, 17:42

Projekt: Terminkalender optimieren

Post by KaroLin »

Hallo Liebe Community,
ich bastel derzeit aus Spass an einem neuen Projekt und bin mir in der Konzeption des Netzes nicht sicher.
Dazu hätte ich gerne mal eure Meinung, wie soetwas am besten umzusetzen wäre. Vielleicht habt ihr ja das gleiche Problem :)

Ersteinmal das Szenario:
Ich möchte durch das NN meinen Terminkalender bewerten lassen und so herausfinden, welche "Belegung", dh. Zeitplanung für mich am effizientesten ist.
(Bitte die Idee nicht zu ernst nehmen, aber ich finde es eine interessante Fragestellung für ein NN)
Folgende Prämissen:
Ich kann meinen Tagesablauf gänzlich eigenverantwortlich planen. Dazu teile ich den Tag in 24 Terminslots von 1h auf. (später wenns gut klappt auch 30min aber erstmal das Prinzip)
Diese Terminslots kann ich jetzt verschieden planen: (ich habe mal Zahlenwerte vergeben)
"schlafen"=0
"Arbeit"=1
"Freizeit"=2
"Sport"=3
"keine Belegung"=4
Außerdem möchte ich eine ganze Woche als Planungshorizont voraussetzen, da man ja nicht jeden Tag gleich verbringt. Ich habe also 7(Tage) a 24(Termine)=168 Terminslots=1 Wochenplanung als "Ausgangsdaten"

Als Zielwert, den das NN auch als einzigen Output ausgeben soll, habe ich mal eine fiktive "aus dem Bauch heraus" Bewertungen alter Terminkalender erstellt. Ich habe also "Trainingsdaten" :)

Meine Frage ist, wie der Inputlayer des NN am besten zu konzipieren ist.
Erstmal gehe ich von einem zeit-invariante MLP aus, da einfacher. Die Bewertung einer Woche basiert nur auf ebendieser Woche und nicht, wie die Woche zuvor war.
Wie präsentiere ich jetzt die Informationen, die die Belegung eines Wochenplans dartellt, am Besten dem NN.
Ich würde intuitiv einfach jeden Terminslot über ein Neuron (also 168 Stück) abbilden und die Werte 0 bis 3 (siehe oben) als Inputwert übergeben.

Da ich noch nie solche irgendwie zeit-wiederspiegelnde Werte, was die Terminslots ja sind, als Input hatte sondern nur zb Prozentanteile bin ich mir nicht über die "Codierung" der Informationen als Input für das NN sicher.

Wie würdet ihr vorgehen? Vielen Dank für eure Ideen schonmal
Karo
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Projekt: Terminkalender optimieren

Post by TJetter »

Hallo Karo,

nochmal eine kleine Rückfrage vorab:Verstehe ich es richtig, dass das NN jeweils eine als Inputs angelegte Kalenderwoche bewerten soll, also auf einer gut/schlecht Skala z.B. mit 0 - 100 % oder ähnlich?
Das wäre dann ein Ausgangsneuron?
Was mich in diesem Zusammenhang etwas verwirrt, ist der folgende Satz:
KaroLin wrote: Ich habe also 7(Tage) a 24(Termine)=168 Terminslots=1 Wochenplanung als "Ausgangsdaten"

Das sind also nicht Ausgangsdaten im Sinne von Outputs für das Netz, richtig? Sondern nur Daten 'von denen Du ausgehst'? Oder geht es darum, das NN eine Kalenderwoche vorschlagen zu lassen?

Viele Grüße
Thomas Jetter
KaroLin
Posts: 4
Joined: Wed 6. May 2015, 17:42

Re: Projekt: Terminkalender optimieren

Post by KaroLin »

Hi, das war wohl tatsächlich etwas missverständlich formuliert mit "Ausgangsdaten"
das NN jeweils eine als Inputs angelegte Kalenderwoche bewerten soll
genauso so ist es gedacht
Leopold
Posts: 7
Joined: Wed 17. Jun 2015, 02:51

Re: Projekt: Terminkalender optimieren

Post by Leopold »

Hey Karo,
man könnte den Terminkalender auch anders abbilden. Eine Idee wäre, für jede mögliche PlanAktivität, die für ein Terminslot vergeben werden kann, ein Neuron einzuplanen.
Die könnten dann Binärwerte als Input bekommen.
Dann hättest du für das Beispiel, dass der Terminslot n mit "Arbeit" beplant ist, folgende Struktur:
Neuron "n_schlafen" =0
Neuron "n_Arbeit"=1
Neuron "n_Freizeit"=0
Neuron "n_keineBelegung"=0
Entsprechend hättest du insgesamt 4mal soviele Inputneuronen.

Eine Aussage darüber, welche Darstellung besser/schlechter ist, vermag ich nicht zu treffen. Habe da auch keine Erfahrung.

Vielleicht gibts ja noch eine ganz andere Variante, auf die ich gerade nicht komme.

Gruß
Leopold
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Projekt: Terminkalender optimieren

Post by TJetter »

Hallo Karo,

hier noch eine weitere mögliche Variante:

- Tageszeit als Sinus und Cosinus mit 24 h Periode ins Netz geben (also als zwei Input-Neuronen mit Aktivierungsfunktion IDENTICAL):
-- Input 'T1' = sin(t * 2 * Pi / 24)
-- Input 'T2' = cos(t * 2 * Pi / 24)

wobei t = aktuelle Stunde von 0 bis 23.

Das hätte den folgenden Reiz:
- 12 mal weniger Input-Neuronen.
--> viel weniger benötigte Datensätze, um eine vernünftige Trainingsmenge zustande zu bekommen.
--> viel schnelleres Training
- Intakte Nachbarschaftsbeziehung der Terminslots in der Zahlendarstellung: Das Netz könnte also ein 'Gefühl' für abends, morgens, nachts usw. entwickeln. Vielleicht bewertest Du einen Tag ja besonders deshalb als 'gut', weil abends immer eine Stunde Sport liegt. Diese Regel könnte das Netz dann gut erlernen.
- Keine Änderung der Netzarchitektur nötig, wenn Du auf andere Terminslot-Länge gehst. Dann muss nur die Periode für die Sin/Cos-Berechnungen geändert werden.

Bzgl. des Wochentags wäre solch eine Kodierung natürlich auch möglich (mit der Periode 7). Da bin ich mir aber nicht so sicher, ob das gut ist. Evtl. macht es eher Sinn, für jeden Wochentag ein eigenes, binär belegtes Neuron zu nehmen.

Viele Grüße und viel Erfolg
Thomas Jetter
KaroLin
Posts: 4
Joined: Wed 6. May 2015, 17:42

Re: Projekt: Terminkalender optimieren

Post by KaroLin »

Erstmal vielen Dank erstmal für eure Ideen.

Ich fürchte, dass mit den Uhrzeiten habe ich nicht vollständig verstanden.
Ich fasse meinen Stand mal zusammen:
Die Informationen, die in das NN eingehen sollen, sind
-Terminslot (=Terminuhrzeit und Tag), zb Terminslot 1 entspricht Montag 0:00 Uhr; Terminslot 2 entspricht Montag 1:00 Uhr...
-Belegungsausprägung des Terminslots(zB die oben genannten 4 Ausprägungen)

Die Transformation dieser Informationen für das NN, wenn man die Uhrzeiten mit einbezieht, sähe dann aus wie folgt: (bitte berichtigen wenn ich falsch liege)
Um die Informationen eines Terminslots (zB Montag 0:00, Schlafen) dem NN vorzulegen werden folgende Input-Neuronen angelegt:
-7 Tages-Neuronen (binärkodiert, Aktivierungsfunktion = identical [0,1]), wobei dann im Beispiel das erste (für "Montag") den Wert 1 bekommt
-2 Uhrzeit-Neuronen (identical [-1,1], je eines mit Werten der Sinus- bzw Cosinus-Funktion), wobei dann im Beispiel das Sinus-Neuron den Wert sin(0), und das Cosinus-Neuron den Wert cos(0) bekommt
-4 Ausprägungs-Neuronen (binärkodiert, identical[0,1]), wobei dann im Beispiel das für "Schlafen" den Wert 1 bekommt

Dann habe ich 13 Inputneuronen zur Darstellung einer Termininformation.
Das ergibt, da pro Woche 7*24 Termine zu planen sind, 13*7*24=2184 Neuronen, um die Informationen einer Terminwoche abzubilden.

Das wirkt für mich auf den ersten Blick nicht wirklich zielführend. Wo ist da der Denkfehler?

Zudem ließt man immer wieder in der Literatur, dass für einen Layer (oder sogar das ganze Netz) dieselbe Aktivierungsfunktion verwendet wird /werden soll. Das wäre ja dann hier auch nicht der Fall.
Leopold
Posts: 7
Joined: Wed 17. Jun 2015, 02:51

Re: Projekt: Terminkalender optimieren

Post by Leopold »

Hallo Karo,
deine Konstruktion mit 13 Neuronen pro Terminslot kann ich nicht ganz nachvollziehen.
Meiner Meinung nach würden die Neuronen, die du für Tage und Uhrzeiten einplanst, immer den gleichen Inputwert bekommen.
Der Tag von Terminslot 1 ist ja immer "Montag" und die Uhrzeit immer "0:00" also sin(0) bzw cos (0).
Somit würden diese Neuronen IMMER diese gleichen Inputwerte bekommen, der Outputwert hängt entsprechend überhaupt nicht von diesen Werten ab. Dadurch sind sie überflüsig.
Da weiß ich nicht wo der Mehrwert für das NN entsteht.

Auf der anderen Seite sehe ich auch nicht, wie die Uhrzeit und der Tag hier gewinnbringend eingebaut werden können.

Vielleicht kann TJetter seine Idee nochmal ausführen.
Mich würde das auch interessieren, da ich derzeit einer ähnlichen Problematik gegenüberstehe.
KaroLin
Posts: 4
Joined: Wed 6. May 2015, 17:42

Re: Projekt: Terminkalender optimieren

Post by KaroLin »

Leopold wrote:...Somit würden diese Neuronen IMMER diese gleichen Inputwerte bekommen, der Outputwert hängt entsprechend überhaupt nicht von diesen Werten ab.
Da hast du Recht. Vielen Dank.
Eine andere Lösung für die Uhrzeit fällt mir aber nicht ein..da stehe ich auf dem Schlauch :cry:

Könnt ihr mir vielleicht Quellen (Bücher, Internet, ...) nennen, wo man sich mal schlau lesen kann? Ich habe schon gesucht aber nur immer etwas zu Grundlagen, Lernalgorithmen etc gefunden aber nichts, wo es um die konkrete Konstruktion und genau solche Probleme verschiedener Codierungsmöglichkeiten geht.
Last edited by KaroLin on Thu 18. Jun 2015, 10:24, edited 1 time in total.
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Projekt: Terminkalender optimieren

Post by TJetter »

Hallo Karo, hallo Leopold
Leopold wrote:Vielleicht kann TJetter seine Idee nochmal ausführen.
Nicht nötig, in der Eile habe ich einen fatalen Denkfehler gemacht, wie ich gerade festgestellt habe: Ich habe gedanklich die Bewertung auf jeden einzelnen Terminslot bezogen und nicht auf den ganzen Kalender.
Das macht natürlich aber keinen Sinn, einzelne Einträge zu bewerten.
Sorry für die Verwirrung, vergesst meinen Beitrag also bitte einfach wieder, ich melde mich, wenn mir noch was anderes sinnvolles einfallen sollte ;)

Viele Grüße
Thomas Jetter
Leopold
Posts: 7
Joined: Wed 17. Jun 2015, 02:51

Re: Projekt: Terminkalender optimieren

Post by Leopold »

Hallo,
noch eine kleine Anmerkung zu meinem Vorschlag, pro mögliche Ausprägung ein binäres Neuron einzuplanen.
Wenn es N mögliche Ausprägungen gibt (also hier N=5) müsste es theoretisch auch reichen N-1 Neuronen einzuplanen, um N Ausprägungen abzubilden.

In deinem Beispiel bietet sich (nach menschlichen Gesichtspunkten) zB die Ausprägung "keineBelegung" dazu an, kein eigenes Neuron zu bekommen.
Entsprechend deiner Reihenfolge hättest du:

_________________________ |-------------------------Terminslot 1--------------------------------------------|
Inputlayer:_________________ Neuron1(schlafen), Neuron2(Arbeit), Neuron3(Freizeit), Neuron4(Sport)
Werte bei "keineBelegung":___ 0 , 0 , 0 , 0
Werte bei "Sport":___________ 0 , 0 , 0 , 1
usw...


So verringert sich die benötigte Anzahl Neuronen zumindest ein wenig.
KaroLin wrote:Könnt ihr mir vielleicht Quellen (Bücher, Internet, ...) nennen, wo man sich mal schlau lesen kann? Ich habe schon gesucht aber nur immer etwas zu Grundlagen, Lernalgorithmen etc gefunden aber nichts, wo es um die konkrete Konstruktion und genau solche Probleme verschiedener Codierungsmöglichkeiten geht.
Ist mir in der Form auch noch nicht untergekommen. Liegt vermutlich daran, dass die Konstruktion immer sehr anwendungsspezifisch ist.
Post Reply