Хочу предложить к обозрению небольшую коллекцию функций, для удобной работы со списком структур. Такие списки представляются как таблицы, к ним со временем у меня приработался своеобразный функционал.
программист
Новелла про одну функцию. Основано на реальных событиях
Вот как бывает, пишешь программу, и вдруг видишь, что какой-то кусочек повторяется, и даже не второй раз. Начинаешь понимать, что это кандидат на новую функцию. Не потому, что логика обосабливаемая, а просто потому, что оно повторяется.
Этот кусочек нужно скопипастить, выбрать ему место, подровнять, дать имя этой новорожденной функции, и всем ее параметрам и переменным. Ведь теперь это самостоятельная функция, а не какой-то там временный тестовый код.
И вот получилась маленькая красивенькая функция, которая имеет всего одну функцию, один смысл, одну аккуратную страницу кода. Рекурсия блестит и сверкает своей стройностью и логичностью. В ней ничего лишнего, к ней ничего не нужно добавлять. Пока...
Вероятность выигрыша в покере
Некоторое время назад обратились ко мне с вопросом, как сделать программу, которая будет выигрывать в покер. После некоторого количества обсуждений, заказчик не захотел узнавать результат моих размышлений на эту тему, посчитал что дорого. Поэтому я разместил эти свои размышления здесь и за бесплатно.
Так же будет небольшая программка, которая может грубо и быстро обсчитать начальный расклад.
Сразу оговорюсь, что я в покер не играю, и знаю его хуже чем те, кто играет свои первые партии в жизни. Но может это не так уж и важно?
Что такое вероятность и как ее посчитать
Есть формула Бернулли, которая дает ответ, с какой вероятностью происходит 4 из 5 при известной исходной вероятности. Но она не дает ответ, какая была исходная вероятность, если событий получилось 4 из 5. Оставим пока в стороне формулу Бернулли.
Сделаем маленькую простенькую программку, симулирующую процессы вероятностей для такого случая, и на основе результата вычислений построим график.
Снова прогнозирование, часть 2
А именно цикличность и усложнение варианта с подобием отрезков.
Снова прогнозирование, часть 1
Прогнозирование
Здесь же я буду описывать только алгоритм прогнозирования, без лишней лирики.
Рассматривать буду прогнозирование последовательности байтов или же текста UTF-8. Прогнозирование последовательности дробных чисел — графиков — во многом подобно, только нужно значения сравнивать не на равенство, а на принадлежность окрестностям.
Пусть будет поток байтов (или скажем текст UTF-8) — входящие прогнозируемые данные. Поступающие данные сохраняем во множество сохраненной истории. Каждое очередное поступающее значение учитываем в структуре для накопления статистики:
struct Stat {
uint value; // прогнозируемое значение
uint count; // количество прошедших таких значений
// функция index используется шаблонным классом Index - ключ для rb-дерева
static uint index(const Stat& s) { return s.value; }
Ptrn* owner;
double probability() const { return (double)count/(double)owner->sum_count_of_stat; }
};
// шаблонный класс Index это rb-дерево,
// первый параметр шаблона — тип значения по которому происходит сортировка,
// второй, это класс сохраняемых значений в узлах. Этот класс должен содержать
// функцию index.
struct Ptrn {
// узел, подсчитывающий, какое распределение вероятностей будет
// следовать за значением value
uint value;
Index<uint,Stat> index_of_stat; // распределение вероятностей
uint sum_count_of_stat;
// путем добавления к текущему value еще влево
// будут образовываться паттерны
Index<uint,Ptrn> index_of_prev;
static uint index(const Ptrn& s) { return s.value; }
Ptrn* owner; // owner->index_of_prev->find(value) == this,
// для root этот owner равен nullptr
};
Ptrn root;
Создание искусственного интеллекта
В результате своих изысканий я перестал для себя использовать фразу «искусственный интеллект» как слишком неопределенную и пришел к другой формулировке: алгоритм самостоятельного обучения, исследования и применения найденных результатов для решения любых возможных к реализации задач.
Что такое ИИ, об этом уже много было написано. Я ставлю вопрос по другому, не «что такое ИИ», а «зачем нужен ИИ». Мне он нужен, что бы заработать много денег, затем что бы компьютер выполнял за меня все, что я сам не хочу делать, после построить космический корабль и улететь к звездам.
Вот и буду здесь описывать, как заставить компьютер выполнять наши желания. Если вы ожидаете здесь увидеть описание или упоминание, как работает сознание, что такое самосознание, что значит думать или рассуждать — то это не сюда. Думать — это не про компьютеры. Компьютеры рассчитывают, вычисляют и выполняют программы. Вот и подумаем, как сделать программу, способную рассчитать необходимую последовательность действий для реализации наших желаний.
В каком виде в компьютер попадет наша задача — через клавиатуру, через микрофон, или с датчиков вживленных в мозг — это не важно, это дело вторичное. Если мы сможем компьютер заставить выполнять желания написанные текстом, то после мы можем поставить ему задачу, что бы он сделал программу, которая так же выполняет желания, но через микрофон. Анализ изображений так же лишний.
Информация
- В рейтинге
- Не участвует
- Откуда
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Зарегистрирован
- Активность