Мой день планирует алгоритм

Позвольте представить вам Боба. Боб — это алгоритм, и он только что согласился стать моим помощником.

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

  1. Большинство приложений для планирования дня делают то же самое, что и их бумажные аналоги: записывают созданный вами план. Я не хочу составлять план; кто-то должен сделать это за меня.
  2. Они помогают вам создать план в начале дня, которому вы должны следовать в течение дня. Мои дни не такие статичные, поэтому мое расписание должно меняться в течение дня.
  3. Они не очень хорошо справляются с переездами между местами.

Чтобы решить эти проблемы, я решил, что кусок кремния в моем кармане, способный выполнять миллион вычислений в секунду, должен помочь мне сделать что-то еще, кроме пустой траты времени на прокрутку. Он должен позволить мне сделать больше дел в течение дня и помочь мне найти больше времени для того, что я хочу сделать. Именно поэтому я создал Боба.

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

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

Как работает Боб? Боб получает список задач, некоторые из них из моего календаря (как рабочего, так и личного), некоторые из «рутин» (это ежедневные задачи, которые я хочу выполнять чаще всего, например, позавтракать или забрать ребенка), а некоторые задачи приходят из «целей», которые представляют собой список завершаемых пунктов. Эти задачи поступают к Бобу, и он пытается составить план на ближайшие несколько дней, в котором я сделаю все, что наметил.

Задачи имеют немного больше данных, чем стандартные события календаря, чтобы обеспечить хорошее планирование

  • «Самое раннее время начала» и «Самое позднее время начала». Они определяют, когда задача может быть добавлена в расписание.
  • Список мест, где задание может быть выполнено.
  • Продолжительность.
  • Если задача является обязательной.
  • Приоритет

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

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

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

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

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

У Боба есть четыре различные стратегии для поиска плана.

  • Первая верная: это поиск первого плана, который удовлетворяет всем ограничениям, но может привести к удалению необязательных задач, хотя можно было бы найти план, включающий все задачи. Эта стратегия является самой быстрой и наименее точной.
  • First complete: выполняет то же самое, что и «First valid», но выходит раньше, только если найден план, включающий все задачи. Эта стратегия обычно создает довольно хорошие планы, но может содержать избыточное количество транзитов. Если не будет найдено ни одного плана, содержащего все задачи, переключится на стратегию «All valid».
  • Все действительные: эта стратегия исследует все пути до тех пор, пока путь не будет либо мертвым, либо завершенным. Затем он находит план с наивысшей оценкой. Если нет ни одного действительного плана, он переключается на стратегию «Все».
  • Все: исследует все пути, даже мертвые, и в конце возвращает план с наивысшей оценкой. Эта стратегия позволяет создать план, даже если из него нужно удалить некоторые необходимые задачи.

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

Для анализа выбирается лист с наибольшим количеством баллов. Такой подход позволяет двум первым стратегиям создать достойные результаты, хотя они и не гарантируют, что будут лучшими. Все сводится к тому, насколько хорошо настроены переменные скоринга. В настоящее время это не так, но в какой-то момент я планирую создать алгоритм обучения для Боба, который будет создавать планы, оценивать их через «Все», а затем пытаться подстроить переменные, чтобы прийти к правильному варианту с как можно меньшим количеством проанализированных узлов при выполнении того же плана через «Первый действительный»/»Первый завершенный».

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

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

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

Есть также несколько функций, которые я хочу добавить позже. Самая важная из них — это система «активов». Например, при расчете транзита нужно знать, взял ли я с собой велосипед, потому что если я добирался до работы на общественном транспорте, то не имеет смысла рассчитывать транзит на велосипеде позже в течение дня. Эта система будет работать, если «активы» привязать к задаче и местоположению, и тогда, когда Боб создает планы, он будет знать, нужно ли учитывать, есть там актив или нет. Активы также могут быть привязаны к задачам, поэтому одна задача может заключаться в том, чтобы забрать что-то, а другая — в том, чтобы отнести. В этих случаях активы будут действовать как зависимость, так что я должен забрать актив, прежде чем смогу его занести. Эта система довольно проста в реализации, но приводит к сильному росту графа, поэтому мне нужно провести некоторые оптимизации, прежде чем будет смысл ее вводить.

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

Оцените статью
Procodings.ru
Добавить комментарий