Laden...

Logik zur Berechnung des aktuellen BAKs (Promillewert)

Erstellt von erazor vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.627 Views
E
erazor Themenstarter:in
19 Beiträge seit 2010
vor 13 Jahren
Logik zur Berechnung des aktuellen BAKs (Promillewert)

Hallo,

bin gerade dabei eine Anwendung zu entwickeln, mit der ich den aktuellen BAK-Wert (Promillewert) berechnen kann.
Als Grundlage soll die Watson Formel verwendet werden.

Nun steh ich aber vor einem Problem:
Um den Wert so realistisch wie möglich ausgeben zu können, möchte ich natürlich auch den Abbau/Std mit einberechnen. Und genau hier komme ich nicht weiter.

Was gegeben ist:
Getränk mit dem alokohlgehalt in Gramm
Beginn des Konsums (individuell für jedes Getränk).

Was möglich sein soll:
Ich möchte nun ein Datum bzw. eine Uhrzeit eingeben, um zu sehen, wieviel Promille ich zu diesem Zeitpunkt hatte.

Das Problem was ich nun konkret habe:
Sagen wir mal ich hab gestern Abend um 22:00 angefangen zu trinken (1 Bier) und mache erst wieder um 3 Uhr Nachts weiter, dann krieg ich keine realistischen Ergebnise raus, da aktuell die Dauer von 22:00 des Vortags bis sagen wir mal 06:00 Morgens berechnet wird. Die Promille des ersten Biers (um 22:00) sollten aber in ca. 2 Std wieder abgebaut sein, sodass wenn ich um 3 Uhr weiter mache, der Wert auch wirklich bei 0 beginnt.

Ich hoffe ihr könnt das Problem nachvollziehen.

Kann mir da vielleicht einer auf die Sprünge helfen, um mein Vorhaben zu realisieren? Es hapert einfach an der Logik 😕

S
902 Beiträge seit 2007
vor 13 Jahren

HAllo,

ich versteh dein Problem nicht ganz.
Wenn das Bier ausgewählt wird, muss das System ja wissen, wieviel Alkohol es hat, und wieviel Zeit benötigt wird, diesen abzubauen, oder?

Somit kannst du doch, wenn er 22 Uhr und 1 Bier wählt, einfach berechnen!
Wahrscheinlich habe ich dein problem nciht richtig verstanden 😦

mfg
serial

E
erazor Themenstarter:in
19 Beiträge seit 2010
vor 13 Jahren

Bei dem von dir genannten Beispiel wäre es einfach zu berechnen.

Aber wir berechne ich den Promillewert, wenn ich die Getränke zeitversetzt trinke?

Beispiel:

Bier1 -> Beginn 18:00
Bier2 -> Beginn 18:30

Jetzt kommt beispielweise ne Trinkpause und es geht erst um 00:00 weiter (bis hier hin sollte der alkohol vom Vorabend abgebaut sein)

Bier3 -> 00:00
Bier4 -> 00:45
usw.

Entweder hab ich total den Denkfehler, oder es ist wirklich nicht so einfach zu lösen.

Denn betrachten will ich ja die komplette Zeit, also von 18:00 bis xx:xx.
Jetzt kann ich aber nicht einfach jede Stunde 0,2 Promille abbauen, da ja der Wert vom Vorabend irgendwan auf 0 ist, bevor es mit dem trinken weiter geht.
Ich will wie bereits schließlich sehen, zu welcher Zeit ich wieviel Promille hatte.

Kannst es nun nachvollziehen?

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Du musst eben den gesamten zeitlichen Verlauf betrachten.

Bier1 -> Beginn 18:00
-> Wert steigt an

Bier2 -> Beginn 18:30
-> Wert vermindert sich zunächst (Abbau 30 min)
-> steigt wieder an (neues Getränk)

Bier3 -> 00:00
-> Wert vermindert sich zunächst (Abbau 330 min)
-> steigt wieder an (neues Getränk)

Bier4 -> 00:45
-> Wert vermindert sich zunächst (Abbau 45 min)
-> steigt wieder an (neues Getränk)

An den Stellen wo sich der Wert zunächst vermindert, darf die 0 nicht unterschritten werden.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

731 Beiträge seit 2006
vor 13 Jahren

Hi, schau mal unter

Alkohol Lexikon

Da findest Du alle Formeln. Für dich ist speziell die Verbindung mit der Widmark-Formel interessant.

MfG
wax

S
902 Beiträge seit 2007
vor 13 Jahren

Hallo,

du musst eben von einer Zeitmarke zur nächsten rechnen.
Erst den abbau, und auf den rest den neuen drauf (keine ahnung wie man das wirklich berechnet).

mfg
serial

B
48 Beiträge seit 2010
vor 13 Jahren

Beispiel:

Bier1 -> Beginn 18:00
Bier2 -> Beginn 18:30

Jetzt kommt beispielweise ne Trinkpause und es geht erst um 00:00 weiter (bis hier hin sollte der alkohol vom Vorabend abgebaut sein)

Bier3 -> 00:00
Bier4 -> 00:45
usw.

Ist doch kein Problem, wenn du die Sache für alle Getränke einzeln berechnest und dann aufsummierst. Wenn ein Getränk zu einem bestimmten Zeitpunkt entweder noch garnicht getrunken oder bereits vollständig abgebaut wurde, liefert es eben den Wert 0 bei.

E
erazor Themenstarter:in
19 Beiträge seit 2010
vor 13 Jahren

Genau das habe ich mir auch erst überlegt es so umzusetzen. Aber dann wäre es ja rechnerisch falsch. Denn dann wär der Abbau pro Getränk berechnet, also die 0,2 Promille.
Meiner Recherche nach baut der Körper aber maximal 0.2 Promille pro Stunde ab.

S
902 Beiträge seit 2007
vor 13 Jahren

Hallo,

müsste es nicht einfach sowas einfaches amchen?


public class AlcoholCalculator
    {
        double _currentValue = 0.0;
        DateTime _lastDate = DateTime.MinValue;
        TimeSpan _elapsedTime;

        public AlcoholCalculator(double value, DateTime date)
        {
            _currentValue = value;
            SetStandardValues(date);
        }

        public void Add(double newValue, DateTime date)
        {
            _elapsedTime = date - _lastDate;
            ClaculateNewValue(newValue);
            SetStandardValues(date);
        }

        private void ClaculateNewValue(double newValue)
        {
            //minuten errechnen
            int elapsedMinutes = _elapsedTime.Hours * 60 + _elapsedTime.Minutes;

            //alle stunde wird 0.1 promille verarbeitet
            _currentValue -= (0.1 * elapsedMinutes) / 60;

            //negative promille gibts net
            _currentValue = _currentValue < 0.0 ? _currentValue = 0.0 : _currentValue;

            _currentValue += newValue;
        }

        private void SetStandardValues(DateTime date)
        {
            _lastDate = date;
            _elapsedTime = new TimeSpan(0, 0, 0);
        }

        public Double CurrentValue
        {
            get
            {
                return _currentValue;
            }
        }
    }

Anwendung:


//2 bier um 10
Alcohol alc = new Alcohol(0.4, new DateTime(2010, 10, 1, 10, 00, 00));
//gibt 0.4 aus
            MessageBox.Show(alc.CurrentValue.ToString());
//und nochmal 1 bier um 13uhr
            alc.Add(0.2, new DateTime(2010, 10, 1, 13, 0, 0));
//gibt 0.3 aus
            MessageBox.Show(alc.CurrentValue.ToString());

mfg serial

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

wenn das alles so idealisiert* angenommen wird dann reicht doch ein Superposition von Abbau des Alks und der Zufuhr -> siehe angehängtes Bild.

Der Abbau findet unabhängig von der Zufuhr statt und hat eine konstante negative Steigung. Bei der Zufuhr wird der aktuelle Wert einfach unstetig erhöht während der Abbau weiter geht. Der Wert von 0 kann jedoch nicht unterschritten werden.
Das Problem ist somit ein (triviales) Geradenproblem.

So, wenn nun Superposition angewandt wird dann kann beginnend mit BAK=0 der Abbau einfach berechnet werden -> dieser geht dann ins negative. Der tatsächliche Wert entspricht dann dem negativen Wert aus dem Abbau + der Summe aller zugeführten Alkoholmengen -> sollte hier ein negativer Wert herauskommen so ist der BAK 0 und andernfalls (also bei positivem Wert) der Wert der ausgegeben wird.

* die Theorie dass alles linear bezweifle ich denn das wäre gegen die Natur denn ist keinerlei Sättigungsverhalten, etc. berücksichtig. Der tatsächliche Verlaufe müsste sich mMn mit einer Exponentialfunktion berechnen lassen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
902 Beiträge seit 2007
vor 13 Jahren

@erazor:

das lineare problem was gfoidl darstellt wird mit meiner lösung erreicht.
Aber ich bin auch der meinung, dass es wohl nicht linear ist?!

mfg
serial

S
401 Beiträge seit 2008
vor 13 Jahren

das lineare problem was gfoidl darstellt wird mit meiner lösung erreicht.
Aber ich bin auch der meinung, dass es wohl nicht linear ist?!

Dem schließe ich mich an. Es gibt eine Menge Einflussfaktoren die das ganze etwas verzerren.

  • z.B. nüchtern (bezogen auf Essen) oder gerade eine Sau verspeist.
  • die Abbaurate schwankt sehr Stark von Mensch zu Mensch.
  • Wie schnell geht der Alkohol ins Blut über. z.B. mit sehr viel Zucker eingenommen
  • ....
R
96 Beiträge seit 2010
vor 13 Jahren

Soweit ich weiss wird der Abbau eines Medikamentes im menschlichen Körper mit Differentialgleichungen erster Ordnung abgebildet (also eine Funktion die ihre eigene erste Ableitung enthält)

Ich habe aber keine Ahnung, wie die jetzt konkret aussehen muss; das weiss sicher ein anderer 😃

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

wie die jetzt konkret aussehen muss

A = -T * dA/dt
wobei dA/dt die Abbaurate und T die Zeitkonstante ist.
Die Lösung der DGL ist dann: A(t) = A0 * exp(-t/T)
In der Konstante T und in der Abbaurate dA/dt steckt dann das Interessante drin -> diese Werte gilt es zu bestimmen.

Vereinfacht kann hier für dA/dt der konstante Wert von 0,0002/h verwendet werden. Somit könnte dann am Selbstversuch die Konstante T ermittelt werden 😉

Für die Zunahme des BAK beim Konsum werden höchstwahrscheinlich ähnliche Überlegungen gelten.
A = T * dA/dt => A(t) = A0 * exp(t/T)

In beiden Fällen also das oben erwähnte exponentionelle Verhalten.
Der aktuelle Wert wäre dann wieder die Superposition.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"