От Румен: Здравейте, от известно време се интересувам от последните новости в OpenAPS алгоритъма и намерих този интересен пост на Katie DiSimone публикуван в нейния блог, който обяснява една от новостите ( UAM – Unannounced Meals ) на доста по-прост език. Надявам се превода да Ви помогне и на Вас.
Под капака на OpenAPS oref1
(Издърпайте един стол, това е пост за желаещите да се задълбочат)
UAM е функцията за “необявена храна” в oref1 за OpenAPS. Можете да прочетете за UAM функциите и развитието й в блог на Дейна тук .
Ето как моят процес на мислене за UAM вървеше , откакто аз за първи път прочетох за него:
Първа мисъл: О, няма да имам нужда от това, тъй като ние винаги въвеждаме нашите въглехидрати и правим преболус. UAM няма да ми предложи подобрения, тъй като ние винаги “обявяваме” нашите хранения.
Втората мисъл: Е, има случаи ( лафката в училище), където дъщеря ми или аз се затрудняваме при изчислението на въглехидратите. Чудя се дали може би, когато бяхме въвели с 20% по-малко въглехидрати, UAM можеше да ни помогне тогава? Защото, ако сме 20% подценили на броя на въглехидратите, това би било като да имаш 20% от необявено хранене, нали? Хммм … нека се опитаме да го пуснем и да видим.
Трета мисъл: Уау, това работи много добре. Но защо работи добре? Как е различно? О, по дяволите… По-добре да запретна ръкавите и да видя кода.
И така стигнах до това, че научих повече за логиката на oref0 за задаване на временни базали и (сега с oref1) настройка на SMB.
Странична бележка: Ако искате да направите същото като това, което съм направила … логиката за това как oref0 определя временни базали и пуска SMB е изложена във файл, наречен determine-basal.js в GitHub . Този същият файл се изтегля вгражда вашата система, когато я изграждате. Аз не съм на ти с програмирането, но бавното и методично четене на файла може да даде някакво вникване в логиката за това как са зададени базовите стойности на временните базали. Освен това в този файл има някои редове, които започват с “//” … това коментари на авторите на чист английски, които помагат на читателите да разберат кода, който следва под самия коментар. Ако започнете с // линиите, това може да помогне за първоначалното разбиране на файла.
Когато отидох на първата си среща с ендокринолог след диагнозата, бях шокирана, че нямаха диаграма, която да ни каже как да дозираме инсулин. Такива диаграми, които гласят: “Ако отговорът е” да “, отидете на този следващото квадратче … ако отговорът е “не”, отидете на другата секция. Както ми се наложи да науча по трудния начин, отговорът на”Колко инслин да сложа за КЗ от 250 mg / dl? “Ще има около 18 въпроса, които следва да отговорите, преди да можете да получите точен отговор – Какво е нейното ISF число ? Колко е нейния IOB? Спортува ли тя в ? Нейната КЗ се вдига или пада? Наскоро ли се е хранила? Колко време се храни? Колко храна изядее? Колко сте сигурни, че сте въвели точно броя на въглехидратите? Тя да не е стресирана / развълнувана / нервна? И така нататък. Не е чудно, че намирането на детегледачка за дете с Диабет Тип 1 е почти невъзможно.
Същите усложнения съществуват и за логиката на OpenAPS. В зависимост от това дали захарите се покачват / спадат / стабилизират, колко бързо се увеличават, дали храната е в действие и дали има временни цели … как вашият “изкуствен панкреас” взема тези предвид? Преди бях чувала, че разработчикът на OpenAPS Скот Лайбранд се занимава със “смесването” на всички тези неща в неговата система, но не разбирах напълно термина, докато не погледнах в действителност кода на determine-basal.js.
Как така това смесване работи? Традиционно бихте започнали математика с помощта на инсулин и въглехидрати, за да предскажете бъдещите КЗ. Бихте предположили по какъв начин ще се държи инсулинът въз основа на публикуваните криви на ефективността му (като пиковата инсулинова активност се достига за около 60-90 минути и след това спада) и бихте прибавили абсорбцията на въглехидрати (подобно на това, което прави системата Loop като използва модела от Think Like A Panceas ). Бихте добавили низходящия ефект на инсулина и възходящия ефект на въглехидратите и воала … предсказана крива на КЗ включваща ефектите на инсулин и въглехидрати.
Но една добра система ще отиде делече отвъд това просто изчисление, за да се опита да помогне с неща, които се случват извън сценария на перфектния свят. Неща като “ретроспективна корекция” и “КЗ импулс” в системата Loop се опитват да включат “Какво се случва сега? Не съм сигурен. “сценарий в опита за по-добра прогноза на КЗ.
OpenAPS прави това рафиниране на кричвата чрез използването на няколко различни предсказани криви на КЗ. Винаги сте се чудили “Защо OpenAPS има всички тези лилави линии, които се показват в Nightscout?”. Ето защо … тези линии са движещите сили на логиката. Те помагат да се съчетаят различните сценарии за покачване / пропадане / постоянни захари, скорошно хранене и активност, за да може се излезе с по-добре предвидена крива на КЗ. По-добре предвидената крива би трябвало да доведе до по-добра работа на системата … избягвайки ниски и по-бързо възстановяване от високите захари.
Готови ли сте за това? OpenAPS има следните типове “основни” прогнозирани криви на КЗ:
- IOBpredBGs: въз основа само на инсулин
- COBpredBG: въглехидрати и инсулин заедно
- UAMpredBGs: “плаващи въглехидрати” и инсулин заедно
Това не е пълния списък на използваните криви … в зависимост от ситуацията (например, нарастващи или падащи кръвни захари), OpenAPS също прави други изчисления, използващи криви на предполагаеми стойности (например minPredBG и avePredBG), за да осигурят безопасна работа на APS системата.
По принцип, determine-basal.js съдържа цял куп “ако това (се случва), след това направи това (използвай тази preBG крива, за да определи количеството на нужен инсулин)”. Например, ако има активни въглехидрати на борда и UAM и SMB са активирани и КЗ се покачва, но не толкова, колкото се очаква, а IOB е отрицателен и прогнозата е над целта … след това използвай кривата XXXpredBG, за да изчислиш колко инсулин да доставиш/пуснеш , Ако промените някой от тези ако входящи данни … например КЗ да падна и то по-бързо от очакваното … тогава OpenAPS ще вземе друго решение за това как да коригира доставянето на инсулин и може да използва различна крива за това.
Така че, determine-basal.js е този сложен набор от 18 въпроса, включващи “АКО това и това и това и това, но не това или онова, тогава пусни толкова инсулин”, през което всички бяхме свикнали да минаваме, преди да си сложим доза инсулин с писалка. Той дори има ако-параметър, наречен “Deviation” (Отклонение), който основно е мярка за това колко сме далеч от очаквате поведението на КЗ. Параметърът “отклонение” е голяма част от решението на OpenAPS. Всички ние сме го използвали преди … “, По-дяволите, захарта трябва да ПАДА точно сега, но не го прави!”
Това е мястото, където UAM и плаващите въглехидрати влизат в играта по нов начин. Преди това, затвореният цикъл се ограничаваше математически около храненето -количеството въведени въглехидрати. Кривата COBpredBG може да стигне до определено ниво в прогнозирането си за КЗ, понеже е ограничена до въведените въглехидрати.
UAMpredBG не се ограничава само до въведените от вас въглехидрати. В известен смисъл той не “вярва” на подадените му въглехидрати толкова. Той фактически проверява въвеждането на въглехидратите, като разглежда сравненията на отклоненията. По-математически казано, UAM прогнозира бъдещите КЗ въз основа на наклона (скоростта на промяна в КЗ) на вашите актуални КЗ по време на храненията. [“момента на хранене” е дефиниран от потребителя чрез въведени въглехидрати, временна цел от типа “Eating soon” и / или болус]. Така че, ако Вашите КЗ се покачват по време на хранене и продължават да се покачват отвъд очакваното за вкараните въглехидратите (силни отклонения), UAM ще пренесе тази прогноза напред … независимо от въглехидратите, които сте въвели и това ще продължи до тогава, докато покачването се спре и нещата се успокоят. Преди UAM, това продължително предсказване щеше да бъде ограничено до малко след поглъщане на храната поради факта, че въглехидратите биха се усвоили (COB = 0) доста бързо въз основа на ръста на КЗ.
Така че, случвало ли Ви се е някога, да не сте преброили въглехидратите правилно? Гледали ли сте КЗ да се покачва в следствие на хранене с неизвестни сосове и неидентифицирани съставки в ястието? Възстановяването на КЗ в границите в такава ситуация, може да бъде забавено от факта, че въглехидратите в края на краищата са “изчерпани” от логиката на APS, за да обяснят нарастването на КЗ. За всяко допълнително покачване системата няма да има обяснение и е склонно да се отнася към него леко (внимателно).
С UAM кривата APS казва: “Виждам, че тези скокове/отклонения не се очакват. Ще помогна. Дори ако отклоненията надхвърлят простото обяснение за това, какво би очаквало COB. “Така че математическата свобода помага при бедното броене на въглехидратите. (Не означава неограничена свобода – все още съществуват механизми за безопасност.)
В конкретния случай … този мини МакМъфин с неизвестен брой въглехидрати.
Вижте как UAMpredBG се насочва към 294, докато другите прогнози имат по-ниски евентуални КЗ прогнози? UAM взема предвид това Отклонение от 67 и COB от 16г … казвайки “УАУ, не се случва поведението, което бих очаквал в този момент във времето на база въглехидрати и болус, за които ми разказахте. Ще повярвам, че въведените въглехидрати са по-малко от погълнатите и вместо това ще се доверя на отклоненията повече. Ако моите прогнози са прави, ще се нуждаете от 1,85 допълнителни единици инсулин, за да контролира това неочаквано отклонение, но прогнозите могат да се променят. Така че нека да пуснем SMB от 0.4 единици, за да помогне с това точно сега. Ако съм превишил прогнозата си, мога да спра базала по-късно, за да предотвратя проблем, но каточели 0.4 е добра помощ сега за вашите отклонения, които виждам. Нека да опитаме това, ще се прегрупираме със следващата КЗ и ще видим какво се случва. “
Следващото четене идва и кривата има някаква нова информация, която трябва да се разгледа. Ръста на КЗ се забавя и има повече инсулин на борда от 0,4 SMB
Отклонението е по-малко (наклона на нарастващите КЗ е намалял), ние се приближаваме до очакваното поведение. Всъщност, кривата на UAMpredBG сега прогнозира евентуална КЗ от 104 и необходимият инсулин сега е -0.12 единици. Така че, цикълът ще спре базалите и ще изчака следващата КЗ да влезе … и да мине през всичките си АКО и ТОГАВА отново, преди да реши какво да прави с инсулин. Системата започва да е в състояние да се довери отново на COB; Тя е доставила достатъчно инсулин, за да покрие въглехидратите, които сме подценявали, и чрез помощта SMB ще прекараме по-малко време извън границите.
Какво ще кажете за ситуации, в които сте прекалили въглехидратите? Ще може ли UAM да помогне и там? Да. Когато UAM не вижда достатъчно абсорбция на въглехидрати в сравнение с това, което сте му казали да очаква (“хей, ти ми обеща 25 грама въглехидрати,а виждам само достатъчно влияние върху КЗ, все едно си изял 10 грама “), ще намали/спре базовия инсулин , докато захарите догонят. (сравнява кривите на COBpredBG с кривите на UAMpredBG за вземане на решения).Всички онези лилави линии и стойностите на отклонение са част от логическата последователност за доставяне на инсулин.)
Тъй като кривата на UAMpredBG не е ограничена толкова много от действителното въвеждане на въглехидрати, тя ще има склонност да има много по-променлива прогноза след всяка нова КЗ от сензора. Тя ще предскаже много високи захари, когато КЗ силно се покачва, а след това ще предскаже по-ниска , ако Вашата КЗ се понижи. Така че, ако и когато решите да активирате UAM … не се изненадвайте, ако видите постоянно променяща се UAM крива, това е очакван резултат, тъй като това не е толкова ограничено от въвеждането на въглехидратите.
Доколкото разбрах, отне няколко повторения за Скот и Дана, за да разберат правилното смесване (АКО и ТОГАВА) на UAM в кода на oref0 determine-basal.js. След това има много смели потребители, които са го изпробвали, за да потвърдят или подобрят алгоритъма.
Поради предположението си, че UAM ще има много малко влияние, защото винаги въвеждаме храненията и правим преболус … се оказва, че греша. Аз не съм експерт по преброяване на въглехидратите. Понякога и аз греша,а UAM помага да изчистим грешките и в двете посоки. Когато съм права за количеството въглехидрати, UAM не играе почти никаква роля … но с UAM няма да бъда изненадана от КЗ-удар, когато нещата се объркат.
Автор: Katie DiSimone
Оригинален текст:http://seemycgm.com/2017/05/24/under-the-hood/