Задать вопрос
@aliver13

Как составить функцию, которая отдала бы вероятность в зависимости от текущего времени?

Имитирую поведение реального юзера.
Простыми словами: я даю в функцию текущее время, функция мне отдаёт вероятность.
Например человек А обычно заходит в интернет в 14 часов и в 18 часов.
Значит в 14 и 18 часов вероятность будет максимальна. А в 0 часов минимальна.

Хочу/нужно создать функцию, которая работала бы следующим образом.
Генерируется некая "синусоида", в которой содержится вероятность действия в определённый момент времени.
Выглядит это так (ось x - час суток, ось y-значение, которая отдаёт функция):
628665a90ddf3913390424.png
p.s. сама кривая должна быть плавная, график начертил я просто примерный

Что я должен получить на выходе.

Закинуть в js-функцию текущее время. Функция должна отдать мне число от min до max, где min примерно 10, а max примерно 50 (эти min и max я буду эмпирически выводить).
Притом от текущего времени будет зависеть та цифра, которую мне функция отдаст.

К примеру, есть время 12:43. Закидываю в функцию. Функция отдаёт 30 (что для меня означает 30% вероятности активации действия).
Закидываю в функцию текущее время 0:43, функция отдаёт 14.
И так далее примерно в соответствии с графиком..

Посоветуйте мне путь решения это вопроса, пожалуйста. С математикой я, прямо скажем, на вы. Но решать задачу как-то придётся.
Предполагаю, сначала нужно будет написать на языке математики искомый график (примерно такой, как показано выше). Далее отталкиваться от графика
  • Вопрос задан
  • 119 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Соберите вашу функцию из квдаратичных или кубических сплайнов.

Когда подберете параметры, функция будет вычислятся кусочно. Сначала найдите к какому отрезку относится текущее время (или тупо циклом или набором if-else, или, если сделаете отрезки одинаковым количеством часов, то можно поделить время на длину отрезка и округлить вниз, чтобы получить номер отрезка). Потом вычислите значение нужного сплайна, что будет просто вычислением полинома второй или третьей степени.

Ну, или можете просто задать нексолько ключевых значений, и проинтерполировать полиномом лагранжа. Правда тут сложно будет заставить его идти именно как вам хочется. Через точки-то он точно пройдет, но вот между ними может иметь какие-то левые пики и изгибы. Так что придется поэксперементировать. Можно поиграться, например, в wolframalpha.com (введите "interpolating polynomial calculator", потом задайте значения функции в точках и получите и график и формулу. Ссылку дать не могу, qna ссылки на wolfram банит за одно со спамерскими ссылками по ошибке).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы