Antworten auf deine Fragen:
Neues Thema erstellen

PHP: Anregungen für Funktion gesucht

F0RC3

Noch nicht viel geschrieben

Hallo,

ich sitze an einer Funktion und komme nicht weiter, vielleicht hat ja jmd. von euch eine Idee.

Es dabei um folgendes:
- Wartschlange (WS) mit Anzahl X Inhalt (300)
- Intervall I in dem eins aus der WS raus fliegt (3min)
- Nacht Zeit von 3-7 Uhr
- Nacht Intervall (30min)

d.h. Tagsueber fliegt alle 3min (variabel) ein Ding aus der WS, und Nachts alle 30min (auch variabel)

Nun möchte ich die Zeit (Stunden / Minuten) berechnen bis Warteschlange leer.

Bsp: 17:30 Uhr (Interval 3min), 300 Einträge in WS, Nachmodus von 3-7 Uhr (Interval 30min)
Wie lange dauert es bis die Warteschlange leer ist?

Ich hoffe ich konnte die Problematik verständlich erklären.

Vielleicht hat ja jemand Lust sich damit auseinander zu setzen.
Mir fehlt irgendwie die zündende Idee ;)
 

lonelyhawk

Nicht mehr ganz neu hier

AW: PHP: Anregungen für Funktion gesucht

vom startwert (17:30) rechnest du die zeit bis zum nächsten nachtmodus aus. (also in dem fall bis um 3) also sind das 9,5 stunden (570min). die rechnest du durch 3 min. das sind 190. also werden bis zum nachtmodus, 190 'dinge' aus der ws raus sein. dann nimmst du dir den nachtmodus vor, das sind 4 stunden also acht mal fliegt ein ding raus. sind wir bei 198, und nun rechest du den nächsten interval aus (also von 7 - 3) = min 1200 das durch 3 sind 400... es sind aber nur noch 102 dinge in der ws. also 102*3, das sind 306 min. (am besten mit modulo (mod60) rechnen) das sind fünf stunden und 6 min, also ist die warteschlange 12:06 leer.

das wäre ein ansatz. sicher noch verbesserungswürdig, aber zumindest einfach.
 

blackout

Schaf im Wolfspelz

AW: PHP: Anregungen für Funktion gesucht

Abschnittsweise ist die zeitliche Ableitung der Menge bekannt, aus
d/dt m = c(t) mit c(t) = -30 tagsüber, -3 nachtsüber
ergibt sich m(t) = t * d/dt m + m0 = - [30|3] *t + m0
Jetzt hast du für jede Nacht, für jeden Tag eine Funktion, die dir das Wachstum deiner Menge beschreibt. Diese Funktionen sind dir alle bis auf die Konstante m0 bekannt, die du aus den Randbedingungen bestimmen kannst:
1. Die Menge am Anfang ist bekannt
2. Die Gesamtfunktion muss stetig sein, d.h. der neue Abschnitt muss da anfangen, wo der alte aufgehört hat
Jetzt kannst du die Nullstelle bestimmen.
Viel Spaß damit ;)

(Alternativ kannst du auch direkt über die dann periodische Rechtecksfunktion c(t) integrieren, mit c(t+24h)=c(t), rechnerisch wird das aber auf die gleiche Arbeit rauslaufen.)
 
Zuletzt bearbeitet:

F0RC3

Noch nicht viel geschrieben

AW: PHP: Anregungen für Funktion gesucht

danke für die Antworten schon mal :)

@blackout: wow... ich behaupte zwar mathematisch nicht ganz unbegabt zu sein, aber dass übersteigt zumindest aktuell um diese Uhrzeit mein Verständnis :)

@lonelyhawk: vom Prinzip klar, aber Problem ist folgendes:
Es kann halt passieren, dass z.B. am 09.07.2009 00:30 soviele Einträge drin sind, dass die Warteschlange erst am 11.07.2009 um 09:00 leer ist.
Sprich ich hätte dann Tag(09.07) - Nacht(10.07) - Tag(10.07) - Nacht(11.07) - Tag(10.07) Intervalle.

Daher würde ich gerne eine halbwegs intelligente Funktion schreiben.
An der Umsetzung wirds nicht scheitern, es macht aber einfach nicht "klick" zwecks sinnvoller Berechnung. :(
 

lonelyhawk

Nicht mehr ganz neu hier

AW: PHP: Anregungen für Funktion gesucht

ja das ist kein größeres problem. du musst nur die zeit zwischen dem startpunkt und dem ersten vollständigen intervall individuell berechnen, den rest kannst du mit schleifen machen. der gedankengang (schematische darstellung):

Code:
$startwert    = startwert in timestamp umrechnen
$drei_uhr     = 3 Uhr des Tages in timestamp umrechnen
$sieben_uhr   = 7 Uhr des Tages in timestamp umrechnen
$anzahl_in_ws = 300

falls der startwert außerhalb von 3-7 liegt,

  $zeit_bis_nacht = ($drei_uhr-$startwert)in minuten

  $aus_ws_1 = ($zeit_bis_nacht/3)in ganzer zahl

  $anzahl_in_ws = $anzahl_in_ws - $aus_ws_1

// schleifenbeginn

  falls $anzahl_in_ws == 8

    ERGEBNISS --> um 7 ist ws leer
  
  falls $anzahl_in_ws < 8 

    ERGEBNISS --> um 3 +($anzahl_in_ws * 30min) ist ws leer

  falls $anzahl_in_ws > 8

    $zeit_bis_morgen = $zeit_bis_nacht + 240min 

    $anzahl_in_ws = $anzahl_in_ws - 8

    falls $anzahl_in_ws == 400
  
      ERGEBNISS --> um 3 ist ws leer

    falls $anzahl_in_ws < 400 

      ERGEBNISS --> um 7 +($anzahl_in_ws * 3min) ist ws leer

    falls $anzahl_in_ws > 400

      $zeit_bis_nacht = $zeit_bis_morgen + 1200min

      $anzahl_in_ws = $anzahl_in_ws - 400 

      --> schleife erneut beginnen

// schleifenende 

---------------------------------------------------

falls der startwert innerhalb von 3-7 liegt, 

  $zeit_bis_morgen = ($sieben_uhr-$startwert)in minuten

  $aus_ws_1 = ($zeit_bis_morgen/30)in ganzer zahl

  $anzahl_in_ws = $anzahl_in_ws - $aus_ws_1

// schleifenbeginn

  falls $anzahl_in_ws == 400
  
      ERGEBNISS --> um 3 ist ws leer

    falls $anzahl_in_ws < 400 

      ERGEBNISS --> um 7 +($anzahl_in_ws * 3min) ist ws leer

    falls $anzahl_in_ws > 400

      $zeit_bis_nacht = $zeit_bis_morgen + 1200min

      $anzahl_in_ws = $anzahl_in_ws - 400

    falls $anzahl_in_ws == 8

      ERGEBNISS --> um 7 ist ws leer
  
    falls $anzahl_in_ws < 8 

      ERGEBNISS --> um 3 +($anzahl_in_ws * 30min) ist ws leer

    falls $anzahl_in_ws > 8

      $zeit_bis_morgen = $zeit_bis_nacht + 240min 

      $anzahl_in_ws = $anzahl_in_ws - 8

      --> schleife erneut beginnen

// schleifenende
kann gut sein, dass es eine bessere/kürzere möglichkeit gibt, aber was besseres fällt mir gerade nicht ein.
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben