Pull to refresh

Перевод учебника по алгоритмам

Reading time 1 min
Views 163K
Образовательные проекты JetBrains corporate blog Algorithms *


Рад сообщить, что вышел перевод отличнейшего учебника Дасгупты, Пападимитриу, Вазирани «Алгоритмы», над которым я работал последние несколько лет. В книге многие алгоритмы объяснены гораздо короче и проще, чем в других учебниках: с одной стороны, без излишнего формализа, с другой — без потери математической строгости. Откройте книгу на каком-нибудь известном вам алгоритме и убедитесь в этом. =)

В общем, угощайтесь: печатный вариант перевода, электронный вариант перевода (PDF), печатный вариант оригинала, электронный вариант оригинала (PDF).
Читать дальше →
Total votes 323: ↑321 and ↓2 +319
Comments 109

Решение задач линейного программирования с использованием Python

Reading time 9 min
Views 68K
Python *

Зачем решать экстремальные задачи


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

К сожалению, не всегда можно положиться на интуицию. Допустим Вы сотрудник коммерческой фирмы и отвечаете за рекламу. Затраты на рекламу в месяц не должны превышать 10 000 денежных единиц (д.е). Минута радиорекламы стоит 5 д.е., а телерекламы 90 д.е. Фирма намерена использовать радиорекламу в три раза чаще чем телерекламу. Практика показывает, что 1 минута телерекламы обеспечивает объём продаж в 30 раз больший чем 1 минута радиорекламы.
Читать дальше →
Total votes 18: ↑15 and ↓3 +12
Comments 8

Линейное программирование в python силами библиотеки scipy

Reading time 4 min
Views 18K
Python *
Sandbox
В своей первой публикации мне хочется рассказать о том, как можно быстро и просто решить задачу линейного программирования с помощью замечательной библиотеки scipy. Для подобных задач в python есть так же pulp, но для новичков в scipy более понятный синтаксис.

Зачем может понадобиться линейное программирование на практике? Как правило, с его помощью решают задачу минимизации функции f(x) (или обратную задачу максимизации для — f(x) ).

Здесь я не буду приводить теоретические выкладки (можно посмотреть тут), а рассмотрю конкретный пример.

Итак, задача.

У нас есть 8 фабрик, которые каждую неделю производят некоторое количество продукции. Нам нужно распределить продукцию по 13 магазинам так, чтобы максимизировать суммарную прибыль, при этом разрешается закрывать нерентабельные магазины.
Читать дальше →
Total votes 15: ↑15 and ↓0 +15
Comments 10

Расширение аналитических возможностей метода линейного программирования средствами Python

Reading time 6 min
Views 6.4K
Python *Mathematics *Development for Windows *

Введение


По линейному программированию средствами Python мною в статье [1] было рассмотрено решение задачи оптимизации с функцией цели альтернативной к основной. Как было показано в статье приём с введением новых функций цели при рассмотрении одной общей задачи оптимизации значительно расширяет аналитические возможности метода. Поэтому логично выбрать и рассмотреть такой пример, в котором при решении общей задачи оптимизации можно сформулировать несколько альтернативных функций цели.

Постановка задачи


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

Формирование целевой функции и начальных условий для минимизации стоимости диеты


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

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


Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Comments 0

Оптимальное расположение шардов в петабайтном кластере Elasticsearch: линейное программирование

Reading time 8 min
Views 7.1K
High performance *Designing and refactoring *Algorithms *Server optimization *Mathematics *
Translation
В самом сердце информационно-поисковых систем Meltwater и Fairhair.ai работает набор кластеров Elasticsearch с миллиардами статей из СМИ и социальных медиа.

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

В этой статье мы расскажем, как применили линейное программирование (линейную оптимизацию) для максимально равномерного распределения рабочей нагрузки поиска и индексирования по всем узлам в кластерах. Это решение уменьшает вероятность, что один узел станет узким местом в системе. В результате мы увеличили скорость поиска и сэкономили на инфраструктуре.
Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Comments 1

Julia и оптимизация

Reading time 9 min
Views 4K
Programming *Julia *Machine learning *
Tutorial


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

Читать дальше →
Total votes 17: ↑16 and ↓1 +15
Comments 3

Подробный разбор симплекс-метода

Reading time 6 min
Views 193K
Mathematics *
Sandbox

Пролог


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

Замечание. Пост будет написан достаточно формальным языком, но будет снабжен комментариями, которые должны внести некоторую ясность. Такой формат позволит сохранить научный подход и при этом, возможно, поможет некоторым в изучении данного вопроса.
Читать дальше →
Total votes 33: ↑33 and ↓0 +33
Comments 27

Кластерный метод решения транспортной задачи

Reading time 3 min
Views 2.7K
Mathematics *Business Models *
Sandbox

Оптимизация в бизнесе в подавляющем числе случаев связана с применением метода линейного программирования. Метод достаточно понятен. Кроме того, имеется теорема существования и единственности решения.

Однако на практике все обстоит не совсем просто.
Читать дальше →
Total votes 2: ↑2 and ↓0 +2
Comments 7

Как оптимизировали экономику СССР и что из этого вышло

Reading time 11 min
Views 65K
VDSina.ru corporate blog Mathematics *Reading room Popular science
Translation

Я работаю специалистом по обработке и анализу данных (data scientist), поэтому большая часть моей работы включает в себя подбор оптимизируемых метрик и размышления о том, как выполнять процессы с максимальной эффективностью. Недавно я обнаружил совершенно удивительную книгу об экономических проблемах в СССР и о коллективе экономистов и компьютерных учёных, стремившихся решить их на основе данных. Книга называется Red Plenty. На самом деле она написана в жанре романа, что странно, однако представляет собой точную экономическую историю СССР. Автор активно заимствует информацию из книги 1973 года под названием Planning Problems in the USSR, которую я тоже приобрёл. При чтении этих книг я не мог не обратить внимания на параллели с планированием в любой современной организации. Факт, который покажется сегодня знакомым каждому data scientist: во второй книге есть цитата исследователя, жалующегося на то, что 90% своего времени он потратил на очистку данных, и только 10% — на само моделирование!

Кроме проведения интересных параллелей с современными data science и методами исследований технологических операций, эти книги помогли мне многое понять об интересных аспектах, о которых ранее я почти ничего не знал, например, о линейном программировании, ценовом равновесии и истории Советского Союза. В этом посте я расскажу о том, что узнал.
Читать дальше →
Total votes 141: ↑136 and ↓5 +131
Comments 2043

PuLP-MiA: Мультииндексный аддон для PuLP (python-библиотека линейного программирования)

Reading time 2 min
Views 2K
Python *Mathematics *
Привет, Хабр! Сейчас будет мини-пост без единой строки кода для тех, кто имеет дело с многоиндексными задачами ЛП (линейное программирование) в Python и решает их при помощи библиотеки-порта PuLP… Это ненадолго :-)
Читать дальше →
Total votes 2: ↑2 and ↓0 +2
Comments 0

Транспортная задача линейного программирования

Reading time 11 min
Views 28K
Algorithms *Mathematics *Popular science Systems engineering *

Транспортная задача линейного программирования относится к перечню классических задач, решаемых в практике деятельности людей. Эта задача методами классической математики не решается. В задаче необходимо отыскивать экстремум целевой функции. В задаче целевая функция – линейная. Ограничения на переменные (их может быть очень много) описываются также линейными зависимостями. Казалось бы чего проще. Но как раз ограничения и порождают трудности, связанные не просто с поиском max и min при отсутствии ограничений, а с необходимостью учета таких ограничений. Искать требуется не просто экстремум, а условный экстремум. Методы решения задачи позволяют учитывать особенности структуры задачи и даже отказаться от симплексного метода решения в чистом виде.

Читать далее
Total votes 6: ↑5 and ↓1 +4
Comments 2

«Другие» рекомендации. Часть 1

Reading time 15 min
Views 3.4K
Инфосистемы Джет corporate blog Programming *Mathematics *Machine learning *Artificial Intelligence
Tutorial

Сейчас в различных источниках имеется огромное количество статей, материалов конференций, телеграм-каналов и открытых репозиториев в GitHub на любую тему из сферы Data Science. В статье хочется обратить ваше внимание на отдельный класс задач, которому, по нашему мнению, уделяют меньше внимания и который не так часто встречается в рамках Data Science кейсов, соревнований или хакатонов.

Речь пойдет о «Других» рекомендациях -- ML-системах, которые уже нельзя отнести к рекомендательным в популярном/классическим смысле. Давайте разберемся, что для нас классика, а что — нет.

Читать далее
Total votes 3: ↑2 and ↓1 +1
Comments 2

Планирование производственных операций

Reading time 14 min
Views 5.9K
Python *Programming *Mathematics *GitHub *Industrial Programming *
Sandbox

Недавно столкнулся с интересной задачей в интернете. Компания BIA Technologies организовала конкурс для математиков, в рамках которого предлагалось решить реальную прикладную задачу, а именно — построить оптимальное расписание производственных заданий для предприятия на горизонт планирования в 30 дней. Я решил поучаствовать в конкурсе, так как данный вызов показался мне интересным, плюс у меня уже был за плечами опыт реализации подобных задач на практике. В этой статье я хотел поделиться с вами результатами и продемонстрировать лучшие, на мой взгляд, подходы к решению таких задач.

Читать далее
Total votes 7: ↑7 and ↓0 +7
Comments 15

Задача коммивояжера (TSP) точное решение — метод целочисленного линейного программирования (Integer programming)

Reading time 20 min
Views 19K
High performance *Python *Perfect code *Algorithms *

Дочитав эту статью до конца, вы сможете решать точно задачу коммивояжёра на сотню элементов за считанные секунды!

Заинтригованы? Тогда, добро пожаловать под кат.

Читать далее
Total votes 124: ↑124 and ↓0 +124
Comments 40

Путешествие в космос или введение в симплекс-метод для школьников

Level of difficulty Medium
Reading time 18 min
Views 7.9K
Entertaining tasks Mathematics *Popular science
Tutorial

На Хабре уже были публикации о симплекс-методе раз и два. И они очень даже хороши. Но это не те публикации, которые расчитаны на школьников или учителей школ. Я же хотел обратить внимание на одну довольно старую статью, вышедшую в журнале "Юный техник" в августе 1985 года. Естественно, она была нацелена на школьников. И мне давно хотелось разобрать её детально...

Ключ на старт!
Total votes 56: ↑56 and ↓0 +56
Comments 14

Математическая оптимизация и моделирование в PuLP: задача о назначениях

Level of difficulty Easy
Reading time 11 min
Views 3K
Mathematics *Reading room
Tutorial
Sandbox

Приветствую! Я, Ложкинс Алексей, консультант и разработчик оптимизационных решений и математических моделей для бизнеса. Это первая в цикле работ обучающая статья, часть личного образовательного проекта "Make optimization simple". Цель проекта – продемонстрировать доступность технологий и показать на примерах, что моделировать можно без глубокого математического фундамента.

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

Читать далее
Total votes 8: ↑8 and ↓0 +8
Comments 8

Метод генерации столбцов для решения задач математической оптимизации большой размерности

Level of difficulty Medium
Reading time 8 min
Views 5.3K
Algorithms *Mathematics *Machine learning *Business Models *Statistics in IT
Sandbox

Теперь к истокам задачи: часто, чтобы математическая модель была применима в реальном секторе, необходимо использовать очень много ограничений и большое количество переменных. Задачи, возникающие в бизнесе в реальных условиях, требуют использования моделей с большим количеством ограничений и большим количеством переменных.  Временами задача в лоб может и не решиться, поэтому были придуманы различные трюки. Один из них - метод « генерации столбцов» (Column generation).

Читать далее
Total votes 22: ↑22 and ↓0 +22
Comments 8