Система искусственной поджелудочной железы, известная как AndroidAPS, является одним из наиболее сложных и продвинутых инструментов для управления диабетом. В основе её работы лежит прогнозирование уровня глюкозы в крови с использованием различных данных и моделей. В этой статье мы подробно рассмотрим, как AndroidAPS формирует прогноз уровня глюкозы и на его основе принимает решения о подаче инсулина.

Казалось бы, когда мы прогнозируем что то, то должны получать единый прогноз для наилучшего предсказания глюкозы. При этом, единый прогноз может иметь разное количество влияющих на него факторов. Однако, на взгляд может показаться, что алгоритмах Android APS используется несколько прогнозов. Однако, это не совсем так. Попробую в этой статье разобраться как же всё-таки работает прогноз Android APS. Пропущу прелюдию о том, что на самом деле это алгоритмы OpenAPS и что данная статья всего лишь попытка понять и вместе с вами порассуждать о принципах формирования прогноза в AndroidAPS. Так же я буду приводить в таких "" кавычках текст из документации Android APS.

Следствием прогноза является определение количества инсулина, необходимого организму (или отсутствие в его потребности).

Прогнозом (в отличие от того к чему мы обычно привыкли) здесь называется ПЕРВИЧНАЯ модель прогнозирования будущего на основе определенных показателей. Первичная, потому что сформировав первичную модель, мы будем сравнивать ее (система будет сравнивать конечно же) с подобными моделями и в конечном счете решать какой же ФИНАЛЬНЫЙ прогноз построить. Финальным назовем тот прогноз, который принимается в целях дозировки инсулина. Ведь логично предположить, что несколько моделей никак не могут лечь в основу одного решения о подачи определенного количества инсулина? нам надо или выбрать или посчитать финальный прогноз на их основе. Именно это и делает система.

Модели ПЕРВИЧНОГО прогноза

Итак, у нас есть два прогноза, которые прогнозируют без углеводов ("без значительного усвоения углеводов"): eventualBG и IOBpredBGs

Один прогноз, который прогнозирует наихудший сценарий (это кажется очень полезным): ZTpredBGs ("пытается предсказать “наихудший вероятный случай”, если наблюдаемое поглощение углеводов внезапно прекратится и если будет применяться нулевая базальная скорость до тех пор, пока уровень сахара в крови не начнет повышаться до / выше целевого уровня").

И два прогноза в которых предусматриваются углеводы: COBpredBGs и UAMpredBGs ("делается попытка предсказать, как долго будет продолжаться наблюдаемое повышение уровня сахара в крови, подобрать соответствующие дозы для объявленных и необъявленных приемов пищи и для всего остального, что вызывает устойчивое повышение уровня сахара в крови")

"Фокусы" начинаются дальше. "Прогнозы уровня сахара в крови на основе COB требуют объявления блюд с приблизительной оценкой содержания углеводов. Подсчет углеводов не обязательно должен быть точным: любой оценки в пределах 1,5 раза от фактического значения, как правило, будет достаточно для почти оптимальной дозировки, поскольку прогнозы на основе COB и UAM смешиваются (при этом дозировка на основе UAM ограничена прогнозами ZTpredBGs) для выработки рекомендаций по дозированию. Если информация о количестве углеводов не указана, прогнозы на основе UAM могут быть использованы для реактивной дозировки при повышении приема пищи, чего с помощью Fiasp достаточно, чтобы уровень сахара в крови довольно быстро вернулся в норму после необъявленного приема пищи."

Так же есть дополнительная корректировка, влияющая на прогноз, описанная здесь:

"Когда объявления о потреблении углеводов недоступны или когда заявленные углеводы в основном усваиваются, а прогнозы на основе COB менее надежны, также можно предсказать, что наблюдаемые отклонения постепенно вернутся к нулю в течение некоторого периода времени. (Термин “отклонение” рассчитывается для обозначения того, насколько в настоящее время повышается или понижается уровень глюкозы относительно того, что он должен делать, основываясь исключительно на активности инсулина.) Как только отклонения достигнут максимума и будут уменьшаться с разумной скоростью, расчеты UAM oref0 предполагают, что отклонения будут продолжать уменьшаться с той же скоростью, пока не достигнут нуля. Если они уменьшаются, но слишком медленно, предполагается, что они будут линейно уменьшаться до нуля в течение 3 часов. Если отклонения все еще увеличиваются, предполагается, что они немедленно достигнут максимума и начнут уменьшаться со скоростью, равной ⅓ скорости, с которой они увеличились по сравнению с недавним минимумом." Это и есть элемент прогноза.

eventualBG

"Самый простой и старый прогноз, называемый eventualBG, использует традиционную математику болюсного калькулятора.

В частности, для naive_eventualBG установлено значение current BG - IOB *ISF."

То есть "простой расчет конечной глюкозы" рассчитывается как Текущая глюкоза минус Инсулин на борту умноженный на Чувствительность к инсулину. Это логично, до использования систем искусственной поджелудочной мы измеряли глюкометром и имея например значение 8 ммол/л мы вкалывали 1 ед если ISF был 2 для корректировки уровня глюкозы с 8 до 6. Что ж, через некоторое время мы могли получить 6.

Он также вычисляет термин “отклонение”, который представляет, насколько уровень глюкозы в данный момент повышается или понижается относительно того, что он должен делать, основываясь исключительно на активности инсулина. Прогнозируется, что эти отклонения сохранятся в течение следующих 30 минут (или, что эквивалентно, будут линейно уменьшаться от текущего значения до нуля в течение следующих 60 минут).

Тогда eventualBG = naive_eventualBG + отклонение

Здесь все понятно, если мы отклонились, то предполагаем что это отклонение еще некоторое время будет сохраняться, однако в остальном имеем простейший расчет. Как если бы мы знали что сахар еще немного повысится так как сьели мармеладку и при этом в остальном сохраняем все остальные расчеты.

При этом, eventualBG подразумевает расчет только финального показателя глюкозы, например как и было в примере выше, мы знаем что "через 2 часа" глюкоза будет 6, но не знаем какая она будет в промежутке. "через 2 часа" это когда весь введенный для данного понижения инсулин будет абсорбирован.

IOBpredBGs

eventualBG по своей природе предсказывает только конечное значение BG, как только вся активность инсулина вступит в силу.

Для того, чтобы предсказать, что BGs будет делать в промежутке времени, oref0 выполняет вычисление, аналогичное вычислению eventualBG, но каждые 5 минут (в течение 4 часов). В этом расчете прогнозируемое влияние инсулина на уровень глюкозы в крови (predBGI) и прогнозируемое отклонение (predDev) рассчитываются для каждого 5-минутного интервала, что позволяет нам прогнозировать значение BG для каждого интервала, которые хранятся в массиве IOBpredBGs. Как и при расчете eventualBG, прогнозируется линейное уменьшение отклонений от текущего значения до нуля в течение следующих 60 минут, тем самым прогнозируется элемент ”импульса".

Что учитывает данный прогноз - достаточно понятно. Это уже продвинутый уровень который чаще всего мы не используем в стандартном расчете "в голове".

ZTpredBGs

"Другой довольно простой прогноз касается того, что произойдет в “наихудшем вероятном случае”, если наблюдаемое поглощение углеводов внезапно прекратится и будет применяться нулевая базальная скорость до тех пор, пока уровень сахара в крови не начнет повышаться до / выше целевого уровня."

То есть каким будет прогноз, если вдруг мы убираем влияющие на повышение углеводы и оставляем только инсулин (без дополнительного ввода).

"Для этого oref0 просто вычисляет, каким будет BGI каждые 5 минут, если он немедленно установит длительный нулевой базал, и использует эти BGI (без каких-либо отклонений) для прогнозирования значения BG для каждого интервала, которые хранятся в массиве ZTpredBGs."

Данный прогноз можно продемонстрировать на таком примере: мы покушали, ввели инсулин, но по какой то причине (например кола оказалась безуглеводой) углеводы не подейстовали. Что будет при текущем значении инсулина, если мы отключаем его дополнительную подачу? Каким будет прогноз на следующее время? Это и вычисляет данный прогноз.

COBpredBG

"Расчет прогнозируемого BG в сценарии, основанном на COB, зависит от расчета COB. В oref0 COB рассчитывается на основе наблюдаемых отклонений с момента поступления углеводов, исходя из предположения, что положительные отклонения были вызваны усвоением углеводов, а любые низкие или отрицательные отклонения были вызваны чем-то другим (например, физической активностью), но что углеводы будут продолжать перевариваться / всасываться в течение этого времени с настраиваемой минимальной скоростью.

Если пользователь выбирает ввести болюс на прием пищи, то oref0 может просто подождать, пока не появятся положительные отклонения, указывающие на усвоение углеводов, и может предположить, что эти отклонения постепенно уменьшатся до нуля в течение периода времени, достаточного для того, чтобы “израсходовать” все оставшиеся углеводы. В этом сценарии oref0 может просто выполнить те же вычисления, что и для IOBpredBGs, но использовать постепенно уменьшающееся прогнозируемое значение воздействия углеводов (predCI) вместо predDev."

Вот мы выявили еще первичные прогнозы в модели. predCI и predDev. Понятно, что используя IOBpredBGs + predCI мы легко получим примерные сахара на будущее. Если бы мы могли строить такую логику в голове, то было бы очень логично построить именно такую предсказательную модель для начала, если нет доп факторов таких как физ нагрузка и проч.

"Прежде чем будет замечено такое всасывание углеводов, oref0 должен спрогнозировать, насколько быстро углеводы, вероятно, начнут всасываться, чтобы убедиться, что по крайней мере часть инсулина, необходимого для приема пищи, поступает через SMB, если пользователь еще не ввел болюсно (в достаточном количестве). Одной из целей разработки oref0 было то, что пользователям не нужно было вводить предположения относительно скорости усвоения пищи. Вместо этого oref0 производит консервативную оценку вероятного усвоения углеводов на основе размера порции, того, как давно она была введена, текущего коэффициента чувствительности (по автосенсам или переопределению целевого значения временной цели). Для приемов пищи <= 60 г начальная оценка времени усвоения начинается с 3 часов, а для > = 90 г предполагается, что первые 90 г усвоятся за 4,5 часа. Все, что превышает 90 г, игнорируется до тех пор, пока не будет наблюдаться фактическое усвоение углеводов при увеличении дозы до 90 г."

Что ж, оценка усвоения разных углеводов у разных людей - это предмет дополнительного исследования.

"Если усвоение углеводов остается низким или снизится через некоторое время, oref0 предсказывает, что оставшийся COB будет усваиваться медленнее, чем при только что введенных углеводах. Это рассчитывается как 1,5 кратное количеству последних углеводов, поэтому предполагается, что для усвоения любых углеводов, которые не усваиваются по истечении 1 часа, потребуется дополнительно 1,5 часа, что означает 4,5 часа для <= 60 г початков и 6 часов для > = 90 г."

Данную логику отлично видно иногда в не самый подходящей и правильной ситуации к сожалению когда как раз мы поели 20 углей, далее была физ нагрузка и после того как эти угли не отобразились как усвоенные (то есть висят те же например 15 оставшихся углей) - но фактически они были усвоены с помощью физ нагрузки, тогда они будут еще долго висеть и плюсоваться к тем новым углям что мы только что снова поели. Итого у нас будет излишнее количество углеводов на борту.

"Как только время усвоения рассчитывается для еще не усвоенных углеводов, оно преобразуется в кривую усвоения углеводов в форме / , которая увеличивается от текущего уровня усвоения до пикового значения на полпути к предполагаемому времени усвоения, а затем линейно уменьшается до нуля в течение предполагаемого времени усвоения (оставшегося периода). Скорость усвоения углеводов, прогнозируемая на оставшийся промежуток времени, рассчитывается таким образом, чтобы гарантировать, что все углеводы (до 90 г) будут усвоены за оставшийся промежуток времени.

UAMpredBGs

"Когда объявления о потреблении углеводов недоступны или когда заявленные углеводы в основном усваиваются, а прогнозы на основе COB менее надежны, также можно предсказать, что наблюдаемые отклонения постепенно вернутся к нулю в течение некоторого периода времени. Как только отклонения достигнут максимума и будут уменьшаться с разумной скоростью, расчеты UAM oref0 предполагают, что отклонения будут продолжать уменьшаться с той же скоростью, пока не достигнут нуля. Если они уменьшаются, но слишком медленно, предполагается, что они будут линейно уменьшаться до нуля в течение 3 часов. Если отклонения все еще увеличиваются, предполагается, что они немедленно достигнут максимума и начнут уменьшаться со скоростью, равной ⅓ скорости, с которой они увеличились по сравнению с недавним минимумом."

Ну что ж, рассмотрев прогнозы, можем сказать, что теперь надо перейти ко главному вопросу - как же на самом деле происходит прогноз глюкозы? Ведь данные прогнозы могут как заменять друг друга так и комбинироваться, верно? На этот счет есть так же комментарий в документации."

Смешивание соответствующих прогнозов

После того, как oref0 сгенерирует все соответствующие прогнозы (различные массивы predBG, в зависимости от наличия или отсутствия COB и положительных отклонений), он:"

Мы сразу понимаем что все прогнозы строятся в любом случае и они есть у нас под рукой.

  • "объединяет их для получения оценок наименьшего прогнозируемого уровня глюкозы, который, вероятно, будет наблюдаться в течение периода времени, соответствующего дозированию.,"

На этом этапе мы получили прогноз с самым низким прогнозируемым сахаров крови.

  • "вычисляет, сколько инсулина требуется (insulinReq), чтобы приблизить minimum predicted BG к целевому,"

Замечательно, если наш уровень глюкозы даже самый низкий из прогнозируемых все еще выше цели - мы вычислим сколько же инсулина необходимо для приближения к цели.

  • "затем использует insulinReq для вычисления соответствующего microbolus or temp basal."

    И вот мы получили сколько же инсулина нам требуется для корректировки глюкозы к целевому значению!

    Далее, в зависимости о том, есть ли "объявление об употреблении углеводов".

    "Если объявление о потреблении углеводов отсутствует, minPredBG обычно устанавливается на большее значение из minIOBPredBG, наименьшее значение IOBpredBG (начиная с 90 м. в будущем) и minZTUAMPredBG, которое является средним значением наименьшего UAMpredBG (начиная с ~ 60 м. в будущем, minUAMPredBG) и наименьшего ZTpredBG (начиная немедленно, minZTGuardBG).

    Когда присутствует COB из объявления о приеме пищи, oref0 устанавливает minPredBG, смешивая minPredBG на основе UAM и ZT, описанный выше (minZTUAMPredBG) с наименьшим COBpredBG (начиная с ~ 90 м в будущем, minCOBPredBG), в соответствии с долей углеводов, оставшихся в виде COB (fractionCarbsLeft).

Затем insulinReq устанавливается равным разнице между minPredBG и target BG, деленной на ISF. В каждом цикле половина insulinReq доставляется в виде микроболюса, и в каждом последующем цикле minPredBG пересчитывается для вычисления нового insulinReq и микроболюса.

Можем так и сказать, что настоящим является сочетание которое выдается на этом этапе – на этапе insulinReq? Ведь именно здесь мы использовали как minPredBG так и ISF.

В файлеdetermine-basal.js параметр insulinReq вычисляется на основе нескольких факторов, таких как прогнозируемый уровень глюкозы (minPredBG), целевой уровень глюкозы (target_bg), и чувствительность к инсулину (ISF).

Логика расчета insulinReq

  1. Основной расчет:

    • insulinReq рассчитывается как разница между прогнозируемым уровнем глюкозы и целевым уровнем, деленная на чувствительность к инсулину (ISF). Это вычисление отражает количество инсулина, необходимое для снижения уровня глюкозы до целевого значения.

  2. Ограничение максимальной дозы:

    • После вычисления insulinReq его значение ограничивается максимально допустимым значением max_iob, чтобы предотвратить введение избыточного количества инсулина.

Код расчета insulinReq

Вот фрагмент кода, где происходит расчет insulinReq:

// insulinReq is the additional insulin required to get minPredBG down to target_bg
insulinReq = round( (Math.min(minPredBG, eventualBG) - target_bg) / future_sens, 2);

// if that would put us over max_iob, then reduce accordingly
if (insulinReq > max_iob - iob_data.iob) {
    rT.reason += "max_iob " + max_iob + ", ";
    insulinReq = max_iob - iob_data.iob;
}

Объяснение кода:

  1. Первичный расчет:

    • insulinReq вычисляется как разница между минимальным прогнозируемым уровнем глюкозы (minPredBG) или eventualBG и целевым уровнем глюкозы (target_bg), деленная на чувствительность к инсулину (future_sens).

  2. Ограничение по max_iob:

    • После первичного расчета программа проверяет, не превышает ли рассчитанная доза инсулина максимально допустимое значение активного инсулина (max_iob). Если превышает, insulinReq уменьшается до допустимого значения.

  3. Округление:

    • Результат округляется до двух знаков после запятой для точности дозировки.

Вывод:

insulinReq определяет, сколько инсулина требуется для достижения целевого уровня глюкозы. Программа корректирует это значение, чтобы избежать избыточной дозировки, используя заданное ограничение max_iob.

При этом хочу отметить, что

  • Для расчетов прогнозов (avgPredBG, IOBpredBG, UAMpredBG, COBpredBG):

    • В прогнозах такие значения, как avgPredBG, IOBpredBG, UAMpredBG, и COBpredBG, используют ISF для вычисления ожидаемого влияния активного инсулина на уровень глюкозы.

    • Эти прогнозы строятся на основе текущих данных о глюкозе и активном инсулине, и ISF помогает предсказать, насколько сильно изменится уровень глюкозы под воздействием оставшегося инсулина.

  • Влияние на insulinReq:

    • После расчета прогнозов программа определяет, сколько инсулина необходимо ввести для достижения целевого уровня глюкозы, и ISF снова используется для перевода этой разницы в необходимую дозу инсулина.

Как формируется прогноз:

  1. Расчет eventualBG:

    • Программа сначала рассчитывает, каким должен быть уровень глюкозы в будущем на основе текущего уровня, активности инсулина и чувствительности.

    • Этот прогноз корректируется на основе возможных отклонений, учитывая такие вещи, как потребление углеводов и скорость их поглощения.

  2. Комбинирование прогнозов:

    • Программа создает несколько прогнозов, основанных на различных моделях: на активном инсулине, углеводах и так далее.

    • Эти прогнозы объединяются для создания среднего значения, которое будет наиболее точным. Это объединение учитывает, сколько углеводов осталось для поглощения и насколько активен инсулин.

  3. Корректировка на основе условий:

    • Программа также учитывает текущие условия, такие как шум в данных глюкометра или время последнего болюса, чтобы корректировать прогноз и необходимые дозы инсулина.

Ну и наконец где же находится финальный прогноз

avgPredBG? minPredBG? insulinReq? eventualBG?

EventualBG — это прогнозируемый уровень глюкозы в будущем, рассчитанный на основе текущих данных об активном инсулине (Insulin On Board, IOB) и чувствительности к инсулину (Insulin Sensitivity Factor, ISF). Этот прогноз показывает, к какому уровню глюкоза придёт, если не учитывать другие возможные факторы, такие как потребление углеводов.

AvgPredBG — это средневзвешенный прогноз, который учитывает несколько сценариев, включая остаточные углеводы (Carbs On Board, COB) и неожиданные изменения уровня глюкозы (Unannounced Meals, UAM). Этот прогноз позволяет более точно оценить, как будет изменяться уровень глюкозы в реальных условиях, когда присутствуют разные факторы, такие как задержка в усвоении пищи или физическая активность.

Вот пример расчета avgPredBG

var avgPredBG;
if ( minUAMPredBG < 999 && minCOBPredBG < 999 ) {
    // weight COBpredBG vs. UAMpredBG based on how many carbs remain as COB
    avgPredBG = round( (1-fractionCarbsLeft)*UAMpredBG + fractionCarbsLeft*COBpredBG );
} else if ( minCOBPredBG < 999 ) {
    avgPredBG = round( (IOBpredBG + COBpredBG)/2 );
} else if ( minUAMPredBG < 999 ) {
    avgPredBG = round( (IOBpredBG + UAMpredBG)/2 );
} else {
    avgPredBG = round( IOBpredBG );
}

Объяснение логики:

  1. Инициализация переменных прогнозов:

    • minUAMPredBG, minCOBPredBG, IOBpredBG - это минимальные прогнозируемые уровни глюкозы, рассчитанные на основе различных моделей.

  2. Условия для комбинирования:

    • Если есть как UAMpredBG, так и COBpredBG, они комбинируются с учетом оставшихся углеводов (fractionCarbsLeft).

    • Если присутствует только один из них, то комбинирование происходит с использованием IOBpredBG.

    • Если есть только IOBpredBG, то он используется без комбинирования.

  3. Использование средневзвешенного значения:

    • Если оба прогноза (UAMpredBG и COBpredBG) доступны, они комбинируются с использованием весового коэффициента, который зависит от оставшихся углеводов. Это означает, что большее количество оставшихся углеводов приведет к большему весу прогноза COBpredBG.

(rT.reason - причины на основе которых идет расчет)

Формирование Прогноза в Системе AndroidAPS

Этапы Формирования Прогноза

Программа AndroidAPS использует несколько шагов для создания прогноза уровня глюкозы:

  1. Сбор и анализ данных

    Программа собирает данные о текущем уровне глюкозы (bg), скорости его изменения (дельта), объёме активного инсулина (iob_data) и активных углеводов (meal_data). Эти данные используются для расчётов.

  2. Расчёт Blood Glucose Impact (BGI)

    Программа рассчитывает, как текущий объём инсулина в организме будет влиять на уровень глюкозы. Этот расчёт основан на данных о чувствительности к инсулину (ISF). BGI показывает, насколько быстро и на сколько единиц изменится уровень глюкозы под действием активного инсулина в течение 5 минут.

    var bgi = round(( -iob_data.activity * sens * 5 ), 2);
  3. Расчёт различных прогнозов

    Программа создаёт несколько прогнозов на основе BGI и других факторов:

    • EventualBG: Основной прогноз, учитывающий только активный инсулин.

    • COBpredBG: Прогноз на основе оставшихся углеводов, который учитывает их усвоение.

    • UAMpredBG: Прогноз на основе неожиданных изменений уровня глюкозы из-за несообщенных приемов пищи.

  4. Комбинирование прогнозов

    Программа использует несколько логик для комбинирования прогнозов:

    • Если в организме присутствуют активные углеводы (COB), программа может использовать avgPredBG, который усредняет результаты нескольких прогнозов, включая eventualBG и COBpredBG.

    • Если углеводов нет или их мало, программа может основываться только на eventualBG.

    • В случае включенной функции UAM программа может использовать UAMpredBG или комбинированный прогноз.

    Вот пример кода, который показывает, как программа комбинирует прогнозы:

var avgPredBG;
if (minUAMPredBG < 999 && minCOBPredBG < 999) {
    avgPredBG = round((1 - fractionCarbsLeft) * UAMpredBG + fractionCarbsLeft * COBpredBG);
} else if (minCOBPredBG < 999) {
    avgPredBG = round((IOBpredBG + COBpredBG) / 2);
} else if (minUAMPredBG < 999) {
    avgPredBG = round((IOBpredBG + UAMpredBG) / 2);
} else {
    avgPredBG = round(IOBpredBG);
}
  1. Принятие решения о подаче инсулина

    На основе финального прогноза программа принимает решение о подаче инсулина. Программа использует переменную minPredBG, которая рассчитывается на основе комбинированного прогноза и сравнивается с целевым уровнем глюкозы. На этом этапе также учитывается, насколько сильно текущий уровень глюкозы отклоняется от целевого значения.

Вот пример кода, который показывает, как программа использует minPredBG для принятия решения:

if (meal_data.carbs) {
    if (!enableUAM && minCOBPredBG < 999) {
        minPredBG = round(Math.max(minIOBPredBG, minCOBPredBG));
    } else if (minCOBPredBG < 999) {
        var blendedMinPredBG = fractionCarbsLeft * minCOBPredBG + (1 - fractionCarbsLeft) * minZTUAMPredBG;
        minPredBG = round(Math.max(minIOBPredBG, minCOBPredBG, blendedMinPredBG));
    } else if (enableUAM) {
        minPredBG = minZTUAMPredBG;
    } else {
        minPredBG = minGuardBG;
    }
} else if (enableUAM) {
    minPredBG = round(Math.max(minIOBPredBG, minZTUAMPredBG));
}

В зависимости от значения minPredBG, программа может принять решение о подаче дополнительного инсулина или приостановке подачи для предотвращения гипогликемии.

Заключение

Программа AndroidAPS использует сложную систему прогнозирования уровня глюкозы в крови, чтобы принимать решения о подаче инсулина. Основные прогнозы, такие как eventualBG и avgPredBG, помогают создать точную картину будущих изменений уровня глюкозы. Комбинируя различные модели прогнозов, которые я назвал первичными, программа адаптируется к реальным условиям и минимизирует риски для пользователя. Использование переменной minPredBG в качестве финального прогноза позволяет AndroidAPS эффективно управлять инсулиновой терапией и поддерживать уровень глюкозы в пределах целевых значений. Финально, для расчета необходимого инсулина программа вычисляет insulinReq.

Комментарии (6)


  1. Arastas
    26.08.2024 08:12

    А как вообще дела у AIAPS? Вы движетесь в сторону своего продукта на базе openAPS? Было бы интересно узнать про команду, что и где вы делаете.


    1. AIAPS Автор
      26.08.2024 08:12

      Тут можно даже писать отдельную статью. Но скажу вкратце, команда работает и находится в поисках партнеров для подключения помп и сенсоров - работа и интеграция с данными продуктами оказалась крайне сложной, почти никто не идет на контакт а те кто идут - сложно интегрируются. AIAPS изначально не был продуктом от openAPS - все, логика прогноза, подача инсулина, наличие нейросетей, интерфейс, код на С++ - все совсем другое не как у openAPS. Единственное что бралось это протокол работы с помпами и то он был практически сразу переработан улучшен и интегрирован в приложение. Могу сказать что мы продолжаем создавать решения - много было сделано для подготовки к исследованиям. Так же мы планируем доработать часть опенсорсных продуктов, работы уже идут в том числе по доработке AndroidAPS.


      1. Arastas
        26.08.2024 08:12

        Напишите, я бы почитал.
        По помпам и сенсорам - есть же линейка, которая в openAPS и/или Loop. Или вы пытаетесь её расширить?
        Вы делаете коммерческий продукт, DIY APS, или исследовательсткий?


        1. AIAPS Автор
          26.08.2024 08:12

          AIAPS уже подключен для некоммерческих целей

          Для прохождения исследований нужны официальные партнеры, я об этом


          1. Arastas
            26.08.2024 08:12

            Подключен куда? Вы где-то для DIY APS доступны для широкой аудитории, как freeAPS? Я гуглить разучился, но не нахожу вас...


            1. AIAPS Автор
              26.08.2024 08:12