Блог о математике и бизнесе Алексея Тарасова
983 subscribers
95 photos
9 videos
2 files
96 links
Пишу о матмоделях и прикладных задачах.

Сотрудничество: @tarasov_math
Сайт https://tarasov.expert
Download Telegram
#математика #геометрия #задача_раскроя
Рассказывал заказчику по поводу 2д раскроя, что даже сложные примеры часто очень хорошо упаковываются. И если у нас одна деталь, для которой нало вырезать много копий. То надо обязательно делать алгоритм периодической упаковки.
👍7
Универсальный алгоритм написания алгоритмов.
#программирование #алгоритм #икр

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

1. Ставим правильно задачу. Выявляем все требования. Формируем цель задачи, то есть идеальный конечный результат по ТРИЗ.
2. Смотрим базовое решение, то есть то которое имеется на данный момент. Уточняем цель задачи с учетом этого.
3. Решение — это набор микрорешений, то есть выбранных величин булевых переменных. Например работает ли конкретный человек в конкретный час в конкретном месте конкретную работу – да/нет.
4. Рассматриваем зависимости микрорешений между собой.
5. Если есть независимые компоненты (горох) – отлично.
6. Если в компоненте есть зависимость (уровни) в одну сторону – отлично.
7. Выявляем в конце концов ядро задачи, которое уже нельзя упростить, потому что все микрорешения зависят друг от друга.
8. Смотрим на особенности входных данных. Возможно там есть некоторая закономерность, которая может все упростить.
9. Смотрим на требования по скорости, цене продвижения, объему используемых ресурсов.
10. Если задача слишком сложная, огрубляем и упрощаем её. Главное сделать лучше базового решения. После упрощения повторяем весь проход.

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

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

То правильным ответом будет просто отказаться от решения подобной задачи, просто потому что экономика решения заведомо не сойдется.
🔥4💯2👏1
Важное свойство хорошего алгоритма.
#задача #алгоритмы #бутылочное_горлышко

Давно задачек не давал. Вот еще одна уже классическая, её когда-то давали на собеседовании в Microsoft.
Имеется 100-этажный дом и две одинаковые лампочки. Надо узнать с какого этажа сброшенная лампочка разобьется. За какое минимальное число попыток это точно можно узнать и какой алгоритм действий? Если бы лампочка была одна, то пришлось бы потратить последовательно 100 попыток, бросая последовательно с 1 по 100 этаж. А так как у нас две лампочки, то мы можем разбив одну продолжить эксперименты.

Порешайте пожалуйста сами, кто решил сам поставьте палец вверх, а кто нет – вниз.

Правильный ответ: 14 попыток.
Схема следующая.
Бросаем последовательно первую лампочку на следующих номерах: 14, 27, 39, 50, 60, 69, 77, 84, 90,95,99 ( это первые суммы ряда 14+13+12+…)
После того как первая лампочка разобьется (например, на 39 этаже), мы начинаем прибавлять по 1 этажу к последней успешной попытке (то есть 28, 29, ... , 38), и когда вторая лампочка разобьется, мы узнаем правильный ответ.


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

Я проверяю любой алгоритм на такую равномерность, если я вижу, что мой алгоритм недостаточно равномерный, то есть в каких-то местах работает лучше, чем в других. Я смотрю, могу ли я улучшить алгоритм в тяжелом месте, испортив его в хорошем.
Математически этот принцип соответствует условиям Каруша-Куна-Таккера и уравнениям Лагранжа-Эйлера, но это уже совсем другая история.
👍7🔥4
Объединение вместо выбора.
#алгоритмы #мысль

Еще одна идея о том, как написать хороший алгоритм.

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

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

Я же люблю третий вариант – я думаю, как обобщить алгоритм так, чтобы оба старых алгоритма были просто его частными случаями. Чтобы был параметр, который выставлен в 0 – работает, по сути, первый алгоритм, а в 1 – второй. При этом параметр был естественный, а не просто <если>. То есть код должен быть один, а параметр мог меняться непрерывно.
Если думать в этом направлении, то часто получается склеить алгоритм. Плюс тут не только в том, что удалось избежать выбора и потери времени работы алгоритма или ресурсов. А в том, что мы получили качественно новый алгоритм, на который можно снова смотреть и улучшать.
Проблема выбора из двух алгоритмов, это не проблема, а способ получить инсайт.
👍12
#текучка #воронка_продаж #ии

Ура, пришел заказ с полноценным использованием LLM (Large Language Model, искусственный интеллект). Сейчас находимся в процессе обсуждения. Мы сами активно используем LLM – пишем куски кода, англоязычные письма и даже юридические договоры, делаем прототипы разных проектов. И наконец дошли до полноценного заказа. Задача состоит в составлении определенного типа справочников на основании открытых данных. Сейчас эта рутинная работа делается руками временных сотрудников. Тема очень важная, так как мы вступили в эпоху искусственного интеллекта и надо будет успевать меняться вместе с миром.

Расскажите , у вас есть рутинная работа, от которой хочется избавиться или интересный опыт внедрения LLM?
👍10
Если ты бизнесмен, ты работаешь с деньгами.
#мысль #бизнес #психология

Видел у начинающих бизнесменов и стартаперов одну штуку.

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

Тут куча причин почему важно переключатся.
1. Ну собственно, если не заключать договора и не выставлять счета, то денег не будет. Если сделать проект, а деньги не получить, то у клиента появляется соблазн не платить. Или платить меньше.
2. Бизнесмен должен думать не только про производство, но и про деньги. И это маркер, что мышление еще не переключилось.
3. Договора и счета дают настоящую обратную связь, нужен ли ваш продукт и почему. Все остальное слова. Избегание обратной связи, это хороший способ делать ненужные вещи.
4. Когда мышление переключится, восприятие будет совсем другим, тогда уже производство будет напрягать, что деньги тратит и пойдут идеи как его оптимизировать. И главная работа будет идти в понимании ценности для клиента и переформатировании своих продуктов под эту ценность.


Слова умные пишу, а сам еле-еле сегодня сделал счета. Правда, в качестве оправдания, это все для иностранных компаний. А для русских я уже делаю договора и счета с удовольствием. Недавно был клиент, который просто денег перевел, а договор не заключали. Это очень напрягало, так как непонятно, где границы проекта, и чем он в итоге будет доволен, а чем нет.
🔥102👏1
#текучка #демо #задача_раскроя

Пока разбирался в 2д раскрое, неожиданно для себя сделал неплохую версию раскроя листов на прямоугольники разных заданных размеров. То есть имеется заказ выпилить заданное количество прямоугольников заданных размеров. И надо раскидать эти прямоугольники по одному большому или нескольким прямоугольникам. Эта задача нетривиальная, даже если задан всего один тип прямоугольников. А если их несколько, то это вообще уже наука. И просто хороший алгоритмист её не сделает

Я неожиданно быстро запрогал работающий вариант. Эффект на бумаге очень мощный, треть экономии. То есть с заказа в 300 тысяч, 100 тысяч экономии. Это конечно бумажная экономия. По факту эти сто тысяч ранее шли в обрезки, а обрезки можно переиспользовать скажем на 70%. То есть экономия по факту 30 тысяч рублей с заказа. И другие похожие нюансы есть. Но все равно круто.

Вообще забавно, что для раскроя металла оказываются полезны диофантовы уравнения и линейное программирование.🤣

А еще подписал договор с Тинькофф банком. Буду для них небольшую задачу решать.
👍14🔥42👏1
#текучка #воронка_продаж
У меня сегодня день заказов. В пятницу прилетело сразу несколько новых запросов. Сегодня езжу и общаюсь. Масштаб очень разный. На 1 день, на месяц, и один крупный - про планировку квартир в новостройках. Такой проект лет >10 назад делал Дмитрий Завалишин из dz.ru . Я прямо переживал, что не я делаю. :) Когда ИП делал код ОКВЭД под это дело записал, потом с ним маялся. В общем начала сбываться ещё одна мечта! :)
👍84
Ищу разработчика на Python.

#вакансия

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

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

Готов работать с любым уровнем, джун, миддл, сеньор. Главное ваш профиль, чем вы хотите заниматься и чем не хотите. Ну и быть крутым. Удаленка, через ИП или самозанятых. Зарплата нормальная, зависит от уровня разумеется.

Пишите мне @tarasov_math .
Шаринг сообщения всячески приветствуется.
👍3🔥3
#математика
В математике активно используется многомерная геометрия.
Расскажу немного про неë. Это очень важная штука в самой математике и из нее есть  выводы напрямую касающиеся бизнеса.
Для начала просто научу рисовать многомерные кубы. Это весело и не страшно.

Алгоритм простой.
1. Рисуем точку. Это нульмерный куб. Мы уже умеем рисовать некоторые кубы, ура.
2.  Пусть у нас есть какой-то куб.  Нарисуем сдвинутую копию исходного куба.
3. А дальше соединяем все вершины с их копиями в новом кубе.
4. Мы получили куб на одну размерность больше.

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

На последней картинке я нарисовал путь от одной вершины до противоположной, который идет по каждому типа ребра 1 раз.
👍6🔥4🤓1
Многомерный арбуз.

#математика #парадокс #задача

Вот у вас есть арбуз, но не обычный трехмерный, а 10000-мерный. Толщина его корки одна тысячная от радиуса. Какую долю арбуза составляет его мякоть?
Ответ: n-мерный объем растет как степень n. Потому доля мякоти 0.999^10000 = 0.004%. Не арбуз, а сплошная корка.

Следующая загадка. Пусть у нас теперь не арбуз, а 10000-мерная планета. Какая часть территории находится недалеко от экватора? Скажем на расстоянии 1% от радиуса планеты? (для земли это будет 64 километра). Хотя можно снова про арбуз. Можно порезать арбуз на 200 колечек равной толщины и взять пару центральных колечек.
Ответ: тут решение посложнее будет. Если грубо, то так: точка на этой земле имеет 10 тысяч координат, сумма квадратов которых равна 1, то есть в среднем квадрат одной координаты равен 1/10000. В том числе и той которая определяет расстояние от экватора. А сама координата в среднем по модулю 1/100. То есть больше половины земли будет рядом с экватором.

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

Она объясняет, как правильно загадывать желания у Джиннов, делать точные KPI и развивать бизнес.

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

В пост уже не влазит, про бизнес продолжу завтра.
🔥7🤯3
Вот пример из жизни.
#кейс

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

Мы могли легко в нашем алгоритме сделать счетчик ночей в гостиницах поставить на неё штраф и солвер бы минимизировал эти ночевки.
Но мы так делать не стали. Есть много очень похожих формулировок, которые дают заметно различный вариант:
1. Чаще ночевать дома
2. Меньше ночевать в гостиницах.
3. Ограничение числа ночных смен.
4. Ограничение числа смен с ранним вылетом и поздним прилетом.
Казалось бы, какая разница максимизировать ночевки дома, или минимизировать ночевки не дома? А вот оказывается, что минимум 20 дней ночевать дома или максимум 10 дней не ночевать дома отличаются хотя бы потому, что в одном месяце 28 дней, а в другом 31. А еще есть ночные смены, когда он ни дома ни по гостиницам.
Если сформулировать хоть чуть-чуть не точно, то солвер находит решение формально верное, а по сути, издевательство. Прямо как джинны из анекдотов.

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


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

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

И такое ограничение дало совсем другую картинку размещения.

Главная идея, что все требования надо выявлять и записывать буквально. Самое сложно их понять и сформулировать. Потому что заказчик часто не осознает сам требования (есть такая штука неосознанное знание), а в качестве требования обычно формулирует его собственное решение реального требования. И надо узнавать зачем им это надо.
Если я этого не делаю, то уже я как подрядчик становлюсь джинном шутником для клиентов.
👍7🔥3