Häufung von Werten

21/03/2010 - 07:38 von Thorsten März | Report spam
Hallo Forum,

ich hab hier ein Problem, bei dem ich die passende Funktion / Lösung suche.

Wir veranstalten jàhrlich einen Sommerbiathlon bei dem die Teilnehmer 11 km
Rad fahren, dann an den Schießstand kommen, 5 Schuss absolvieren um nochmals
11 km zu radeln und abschließend 5 Schuss abzugeben.

Gestartet wird im 30 Sekunden-Takt. Alle 20 Starter machen wir eine Pause
von 3 Minuten, da wir lediglich 17 Schießstànde haben, und somit einem Stau
aus dem Weg gehen.

Zwischenzeitlich haben wir aber bis zu 200 Starter, sodass sich die
Veranstaltung über fast 3 1/2 Stunden hinzieht. Wir möchten nun das ganze
etwas straffen.

Aus Veranstaltungen der vergangenen Jahre habe ich nun Zeiten für die erste
und zweite Runde inkl. Schießen. Durchschnittlich bleiben die Schützen 3
Minuten am Schießstand.

Ich möchte nun herausfinden, wie wir die "optimale" Startprozedur finden,
ohne im Schießstand einen Stau zu verursachen.

Nachfolgend ein Ausschnitt aus der Zeitentabelle:
Uhr Schießstand / Start-Nr
10:41:36 1
11:14:20 1
10:36:14 2
10:57:56 2
10:39:57 3
11:06:00 3
10:38:42 4
11:02:11 4
10:40:52 5
11:07:13 5
10:41:06 6
11:06:37 6
10:45:24 7
11:18:20 7
10:39:38 8
11:01:55 8
10:44:22 9
11:12:22 9
10:43:19 10
11:07:43 10

Ich suche also sowas wie "In welchem Zeitraum (Uhrzeit) von 10 Minuten sind
mehr als 50 Schützen am Schießstand"?

Besten Dank für Eure Ideen / Ratschlàge

Thorsten
 

Lesen sie die antworten

#1 Andreas Killer
21/03/2010 - 13:32 | Warnen spam
Thorsten Màrz schrieb:

Gestartet wird im 30 Sekunden-Takt. Alle 20 Starter machen wir eine
Pause von 3 Minuten, da wir lediglich 17 Schießstànde haben, und somit
einem Stau aus dem Weg gehen.


...
Aus Veranstaltungen der vergangenen Jahre habe ich nun Zeiten für die
erste und zweite Runde inkl. Schießen. Durchschnittlich bleiben die
Schützen 3 Minuten am Schießstand.

Ich möchte nun herausfinden, wie wir die "optimale" Startprozedur
finden, ohne im Schießstand einen Stau zu verursachen.


Ich denke das làßt sich herausfinden.

Nachfolgend ein Ausschnitt aus der Zeitentabelle:


Ja, schön, nur ist die Datenmenge viel zu klein um Dein Problem
nachstellen zu können.

Ich suche also sowas wie "In welchem Zeitraum (Uhrzeit) von 10 Minuten
sind mehr als 50 Schützen am Schießstand"?


Mal überlegen...

Wir könnten die Daten nach den Zeiten sortieren und dann X Minuten
nach vorne schauen und die verschiedenen Làufer zàhlen die da waren.

Somit könnten wir ein Maximum je Uhrzeit bestimmen.

Wenn nun die Làufer in einem làngerem Interval starten, heißt das das
die erste Zeit am Schießstand sich pro Startnummer veràndert, die
folgenden Rundenzeiten bleiben gleich, d.h. alle Zeiten verschieben
sich um einen Interval.

Ich mach mir das mal einfach und gehe von einer fortlaufenden
Startnummer von 1 bis X aus und verschiebe um
Startnummer*Startdifferenz, sonst wird's unnötig kompliziert.

Nun müssen wir einfach nur noch solange iterieren bis im
Beobachtungszeitraum die Anzahl der Làufer zu der Anzahl der Stànde
passt. Eine mathematische Lösung ist hier immer möglich, zur Not
starten die Làufer um einen Tag (oder mehr) versetzt.

Deine vorgebene Datentabelle (mit Überschrift) in Spalte A und B komme
ich auf diese Werte/Formel in den Zellen:

D2 Làuferzeit am Stand
E2 0:10:00
D3 Startversatz (+ 30 Sekunden)
E3 0:00:05
D4 Anzahl Stànde
E4 7
D6 Basisstartinterval
E6 0:00:30
D7 zus. Startinterval
E7 =Interval(A2:A21;B2:B21;E2;E3;E4;0) '0:00:55
D8 neues Startinterval
E8 =SUMME(E6:E7) '0:01:25

F1 Verteilung
F2:F21 {=Interval(A2:A21;B2:B21;E2;E3;E4;1)}
'F1 Verteilung
'F2 7
'F3 7
'F4 7
'F5 7
'F6 6
'F7 5
'F8 4
'F9 4
'F10 3
'F11 2
'F12 4
'F13 6
'F14 6
'F15 5
'F16 5
'F17 4
'F18 4
'F19 3
'F20 2

Der Code muss in ein normales Modul, wie's geht steht hier:
http://www.online-excel.de/excel/si....php?fD#s2

Andreas.

Function Interval(Zeitbereich As Range, Datenbereich As Range, _
Zeitraum, Startdifferenz, Stànde, Optional Verteilung As _
Boolean = False) As Variant
Dim Zeit, Daten, M As Long, Temp As Double, Diff As Double
Dim Res, Dict As Object, I As Long, J As Long

If Startdifferenz <= 0 Or Stànde <= 0 Then Exit Function

Do
'Zeiten und Daten einlesen
Zeit = Zeitbereich.Value2
Daten = Datenbereich
'M. bestimmen, falls Bereiche nicht gleich
M = WorksheetFunction.Max(UBound(Zeit), UBound(Daten))
'Ergebnis reservieren
ReDim Res(1 To M, 1 To 1)

Set Dict = CreateObject("Scripting.Dictionary")

'Zeit = Zeit + Nummer * Startdifferenz
If Diff > 0 Then
For I = 1 To M
Zeit(I, 1) = Zeit(I, 1) + (Daten(I, 1) - 1) * Diff
Next
End If

'Daten sortieren
For I = 1 To M - 1
For J = I + 1 To M
If Zeit(I, 1) > Zeit(J, 1) Then
Temp = Zeit(I, 1)
Zeit(I, 1) = Zeit(J, 1)
Zeit(J, 1) = Temp
Temp = Daten(I, 1)
Daten(I, 1) = Daten(J, 1)
Daten(J, 1) = Temp
End If
Next
Next

'Auswerten
For I = 1 To M
J = I
'Laufe solange wir im Daten-Zeitbereich sind
Do While J <= M And Zeit(J, 1) - Zeitraum <= Zeit(I, 1)
'Làufer schon dagewesen?
If Not Dict.Exists(Daten(J, 1)) Then Dict.Add Daten(J, _
1), J
J = J + 1
If J > M Then Exit Do
Loop
'Anzahl der Làufer merken
Res(I, 1) = Dict.Count
Dict.RemoveAll
Next

M = WorksheetFunction.Max(Res)

Diff = Diff + Startdifferenz
Loop Until M <= Stànde

If Verteilung Then
Interval = Res
Else
Interval = Diff - Startdifferenz
End If
End Function

Ähnliche fragen