Продолжение про P=NP
#кейс #касдев #моделирование
На этой неделе поучаствовал вместе с заказчиком как эксперт в разговоре с уже их заказчиком. И продемонстрировал чудеса касдева и бизнес-аналитики. 😂
Задал напрямую вопрос:
“Господа. Вам на вход приходят прогнозные данные, которые явно ппп (пол/палец/потолок), особенно на год вперед. На кой ляд вам тогда абсолютная точность решения?”
И мне было четко сказано: если разрешить хотя бы небольшой геп (зазор между найденным решением и оптимальным), то он может сконцентрироваться в каком-то месте или по какой-то конкретной позиции товара и там будет кривой результат, которым нельзя будет воспользоваться. А еще у нас несколько видов штрафов, и хотя их важность выверена, нельзя чтобы был только один вид штрафа, а остальные нулевые. Такие решения получаются кривые.
Спрашиваю, а если решение не будет содержать такой кривизны, небольшой гэп не страшен?
Да говорят, вообще без проблем.
Занавес.
То есть на практике можно было просто доработать модель так, чтобы она не давала «некрасивые» результаты с точки зрения клиента. Например сделать, чтобы штрафы за день не превышали определенной величины, а не просто минимизировать сумму штрафов. Как показывает опыт, убирание таких кривостей это не только довольно простая задача, но еще иногда сильно сужает пространство поиска и значительно ускоряет работу (а иногда нет).
Как раз убираются схоластические решения, которые не нужны на практике, но из-за которых и вылазит P=NP.
Путем, впрочем, таким мы скорее всего не пойдем. Нашлись еще проще и более надежные варианты. Но этот если успеем тоже попробуем.
Напоминание.
Завтра в 12.00 в будет эфир с Ксенией, приходите!
#кейс #касдев #моделирование
На этой неделе поучаствовал вместе с заказчиком как эксперт в разговоре с уже их заказчиком. И продемонстрировал чудеса касдева и бизнес-аналитики. 😂
Задал напрямую вопрос:
“Господа. Вам на вход приходят прогнозные данные, которые явно ппп (пол/палец/потолок), особенно на год вперед. На кой ляд вам тогда абсолютная точность решения?”
И мне было четко сказано: если разрешить хотя бы небольшой геп (зазор между найденным решением и оптимальным), то он может сконцентрироваться в каком-то месте или по какой-то конкретной позиции товара и там будет кривой результат, которым нельзя будет воспользоваться. А еще у нас несколько видов штрафов, и хотя их важность выверена, нельзя чтобы был только один вид штрафа, а остальные нулевые. Такие решения получаются кривые.
Спрашиваю, а если решение не будет содержать такой кривизны, небольшой гэп не страшен?
Да говорят, вообще без проблем.
Занавес.
То есть на практике можно было просто доработать модель так, чтобы она не давала «некрасивые» результаты с точки зрения клиента. Например сделать, чтобы штрафы за день не превышали определенной величины, а не просто минимизировать сумму штрафов. Как показывает опыт, убирание таких кривостей это не только довольно простая задача, но еще иногда сильно сужает пространство поиска и значительно ускоряет работу (а иногда нет).
Как раз убираются схоластические решения, которые не нужны на практике, но из-за которых и вылазит P=NP.
Путем, впрочем, таким мы скорее всего не пойдем. Нашлись еще проще и более надежные варианты. Но этот если успеем тоже попробуем.
Напоминание.
Завтра в 12.00 в будет эфир с Ксенией, приходите!
Telegram
Ксюша говорит | IT x PRODUCTS
Работала со стартапами в Акселераторе ФРИИ, а теперь сама работаю в стартапе 🦄 Пишу про ИТ-рынок, продажи и продукты. Веду авторский подкаст от предпринимателей для предпринимателей.
Про мой бэкграунд читай в посте-закрепе.
Для связи: @x_kuznetsova
Про мой бэкграунд читай в посте-закрепе.
Для связи: @x_kuznetsova
👍6❤2🔥2👏2
Добавлю, что эфир будет на канале у Ксюши в 12.00
👍6
Forwarded from Ксюша говорит | IT x PRODUCTS
Друзья, всем доброе утро! Всем, кто проснулся, напоминаю про эфир) уже через час обсуждаем решение оптимизационных задач в бизнесе
🔥8😍2
Вот запись эфира. Скоро также будет ссылка на видео.
👍5
Решение оптимизационных задач в бизнесе
Ксюша говорит | IT x PRODUCTS
Друзья, ловите запись эфира с Алексеем!
00:00 — здороваемся и знакомимся!
4:17 — почему мы решили, что будет полезно сделать совместный прямой эфир
5:49 — кейс про создание ценообразования для логистической компании через решение оптимизационной задачи
8:57 — как Алексей превращает бизнес задачи в математические и решает их
20:07 — кейс про изменение модели продаж в производственной компании через решение оптимизационной задачи
22:52 — как HADI циклы помогают решать задачи и отлаживать математические модели
25:16 — как решать задачи в математике, бизнесе и жизни через методы разрыва
29:29 — кейс про изменение подхода к разработке в ИТ стартапах
35:36 — как Алексей решил знаменитую задачу про алмазы и принес бизнесу 400 миллионов $ добавленной стоимости
40:46 — пожелание от Алексея слушателям
41:54 — follow up прямого эфира от меня
🟥 скоро тут будет ссылка на запись на ютубе)
00:00 — здороваемся и знакомимся!
4:17 — почему мы решили, что будет полезно сделать совместный прямой эфир
5:49 — кейс про создание ценообразования для логистической компании через решение оптимизационной задачи
8:57 — как Алексей превращает бизнес задачи в математические и решает их
20:07 — кейс про изменение модели продаж в производственной компании через решение оптимизационной задачи
22:52 — как HADI циклы помогают решать задачи и отлаживать математические модели
25:16 — как решать задачи в математике, бизнесе и жизни через методы разрыва
29:29 — кейс про изменение подхода к разработке в ИТ стартапах
35:36 — как Алексей решил знаменитую задачу про алмазы и принес бизнесу 400 миллионов $ добавленной стоимости
40:46 — пожелание от Алексея слушателям
41:54 — follow up прямого эфира от меня
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥3👍2
Приоритеты задач.
#мысль #программирование #экономика
У вас есть 10 задач, которые надо сделать как определить приоритеты, что делать?
Очень просто, считаете приоритет по формуле <польза> / <потраченное время> и делаете первую задачу из списка.
Если польза не моментальная, а размазана во времени, то можно смотреть по ROI, то есть за какое время возвращаются инвестиции времени.
Мне в свое время взорвал мозг комикс xkcd, который я приложил. Оказывается, экономику можно применять не только к бизнесу, но и к программированию и даже к решению бытовых задач типа планирования дел и покупки бытовой техники.
Удобно, когда польза легко считается. Но в более сложных случаях тоже можно работать. Надо просто считать среднюю пользу.
Вечером напишу конкретный пример определения приоритетов работ из моей практики.
Еще добавлю, что пользу надо считать относительно главной проблемы на данный момент. Обычно это или общая польза проекта или конкретный дедлайн.
#мысль #программирование #экономика
У вас есть 10 задач, которые надо сделать как определить приоритеты, что делать?
Очень просто, считаете приоритет по формуле <польза> / <потраченное время> и делаете первую задачу из списка.
Если польза не моментальная, а размазана во времени, то можно смотреть по ROI, то есть за какое время возвращаются инвестиции времени.
Мне в свое время взорвал мозг комикс xkcd, который я приложил. Оказывается, экономику можно применять не только к бизнесу, но и к программированию и даже к решению бытовых задач типа планирования дел и покупки бытовой техники.
Удобно, когда польза легко считается. Но в более сложных случаях тоже можно работать. Надо просто считать среднюю пользу.
Вечером напишу конкретный пример определения приоритетов работ из моей практики.
Еще добавлю, что пользу надо считать относительно главной проблемы на данный момент. Обычно это или общая польза проекта или конкретный дедлайн.
👍5❤3
#алгоритмы #бизнес #программирование #оптимизация
Вот пример, не самый простой, потому что это свежий пример прямо из практики.
Есть работающая программа (как обычно у меня матмодель на солвере), но она не решает два важных случая, один попроще другой посложнее.
Проект близок к завершению, исправлять проблему надо срочно, но все таки не "вчера".
Варианты исправления:
1. Выбрать вместо одного бесплатного солвера другой бесплатный, но более качественный. Проверяется работоспособность солвера с различными тестами 2 дня. Вероятность улучшения 10%. В случае, если новый солвер потянет, переезд займет 1-2 недели.
2. Выбрать коммерческий солвер. Шансы, что он справится с задачей 20%. Проверка займет те же 2 дня. При выборе этого решения понадобится 1-2 недели на переезд плюс оплата коммерческого солвера, что сильно ухудшит себестоимость проекта (я не знаю цену, но пусть солвер стоит как полгода разработчика).
3. Написать эвристику. Есть перспективная идея, всем нравится. Шансы что заработает, оцениваются примерно в 50%. Можно за 1-2 проверить будет ли ускорение, а потом где-то за неделю сделать прототип эвристики и понять будет ли она работать или нет. При этом переход на эвристику усложнит код и замедлит последующую разработку на процентов на 20%.
4. Изменить модель так, чтобы она стала лучше работать. Есть идея которую проверять 3-5 дней и которая может решить проблему с вероятностью 5-10%.
Первичный приоритет простой. В первой задаче мы получаем 5% успеха в день.
Во второй без учета дедлайнов 20/120 = 0.16% успеха в условный рабочий день. Даже если потом проверка покажет что солвер все решает, 100%/120 = 0.83 < 5. То есть в любом случае выгодней сначала проверить бесплатный солвер.
В третьей задаче приоритет 50%/5 = 10 %/день. Самый высокий приоритет в ближайшей перспективе.
Четвертая задача – 10/5 = 2 %/день
На практике у нас есть жесткий дедлайн и проект близок к завершению.
Получается, что приоритеты задач: третья, первая, четвертая, вторая.
Если бы проект продолжался бы долго, то приоритеты были бы другие с учетом баланса между дедлайном и общей итоговой полезностью. Если проблему надо решать за любые деньги и вчера, то скорее всего надо было покупать коммерческий солвер.
Вот пример, не самый простой, потому что это свежий пример прямо из практики.
Есть работающая программа (как обычно у меня матмодель на солвере), но она не решает два важных случая, один попроще другой посложнее.
Проект близок к завершению, исправлять проблему надо срочно, но все таки не "вчера".
Варианты исправления:
1. Выбрать вместо одного бесплатного солвера другой бесплатный, но более качественный. Проверяется работоспособность солвера с различными тестами 2 дня. Вероятность улучшения 10%. В случае, если новый солвер потянет, переезд займет 1-2 недели.
2. Выбрать коммерческий солвер. Шансы, что он справится с задачей 20%. Проверка займет те же 2 дня. При выборе этого решения понадобится 1-2 недели на переезд плюс оплата коммерческого солвера, что сильно ухудшит себестоимость проекта (я не знаю цену, но пусть солвер стоит как полгода разработчика).
3. Написать эвристику. Есть перспективная идея, всем нравится. Шансы что заработает, оцениваются примерно в 50%. Можно за 1-2 проверить будет ли ускорение, а потом где-то за неделю сделать прототип эвристики и понять будет ли она работать или нет. При этом переход на эвристику усложнит код и замедлит последующую разработку на процентов на 20%.
4. Изменить модель так, чтобы она стала лучше работать. Есть идея которую проверять 3-5 дней и которая может решить проблему с вероятностью 5-10%.
Первичный приоритет простой. В первой задаче мы получаем 5% успеха в день.
Во второй без учета дедлайнов 20/120 = 0.16% успеха в условный рабочий день. Даже если потом проверка покажет что солвер все решает, 100%/120 = 0.83 < 5. То есть в любом случае выгодней сначала проверить бесплатный солвер.
В третьей задаче приоритет 50%/5 = 10 %/день. Самый высокий приоритет в ближайшей перспективе.
Четвертая задача – 10/5 = 2 %/день
На практике у нас есть жесткий дедлайн и проект близок к завершению.
Получается, что приоритеты задач: третья, первая, четвертая, вторая.
Если бы проект продолжался бы долго, то приоритеты были бы другие с учетом баланса между дедлайном и общей итоговой полезностью. Если проблему надо решать за любые деньги и вчера, то скорее всего надо было покупать коммерческий солвер.
👍3❤2💯1
#мысль #бизнес #алгоритм #кейс
Хочу ко вчерашней теме про приоритеты еще добавить пару замечаний.
Мне важнее проверить можно ли сделать работу чем, собственно, её делать. Потому что именно это и влияет в основном на время.
Можно, конечно, еще прибавить время разработки после проверки работоспособности, но и на глаз понятно, что это на порядок приоритетов не влияет.
Этот подход называется HADI-циклы, и я про него напишу позже, это очень важная и крутая штука.
В этой системе приоритетов спрятана еще одна важная мысль.
Делай что любишь и люби что делаешь.
Надо понимать, чем именно ты занимаешься и работать исходя именно из этих приоритетов.
В этой формуле приоритетов зашито, что я выполняю заказ заказчика, то есть занимаюсь проектной деятельностью/бизнесом, и я уже не математик в полном смысле этого слова.
Я пробовал дать задачу по тестированию бесплатного солвера фрилансеру-математику, чтобы закрыть быстрее проект, но он отказался. Так как он математик и хочет решать именно математические задачи. Он бы согласился делать 4 задачу по изменению модели, а остальные ему неинтересны.
Важно понимать, что если ты занимаешься проектной деятельностью, то ты должен перестать быть математиком. А если ты хочешь заниматься математикой, то проектный бизнес должен вести кто-то другой, а ты будешь его подрядчиком или наемным работником. И этот кто-то будешь уже иметь головняк с тем, кто ему будет решать «скучные» задачи.
У меня есть яркий пример знакомого, который делал стартап 13 лет, практически на свои. При этом он хотел решать инженерные задачи и не хотел по-настоящему заниматься планированием работ, денег и рисков. Потому что там первое решение настоящего стартапера было бы выкинуть волшебную красивую, но все-таки громоздкую и дорогую технологию, заменив её на более скучную, но зато сильно более дешевую. И после этого пойти зарабатывать денег. А ему было интересно именно заниматься волшебством.
Результат стартапа думаю объяснять не надо.
Хочу ко вчерашней теме про приоритеты еще добавить пару замечаний.
Мне важнее проверить можно ли сделать работу чем, собственно, её делать. Потому что именно это и влияет в основном на время.
Можно, конечно, еще прибавить время разработки после проверки работоспособности, но и на глаз понятно, что это на порядок приоритетов не влияет.
Этот подход называется HADI-циклы, и я про него напишу позже, это очень важная и крутая штука.
В этой системе приоритетов спрятана еще одна важная мысль.
Делай что любишь и люби что делаешь.
Надо понимать, чем именно ты занимаешься и работать исходя именно из этих приоритетов.
В этой формуле приоритетов зашито, что я выполняю заказ заказчика, то есть занимаюсь проектной деятельностью/бизнесом, и я уже не математик в полном смысле этого слова.
Я пробовал дать задачу по тестированию бесплатного солвера фрилансеру-математику, чтобы закрыть быстрее проект, но он отказался. Так как он математик и хочет решать именно математические задачи. Он бы согласился делать 4 задачу по изменению модели, а остальные ему неинтересны.
Важно понимать, что если ты занимаешься проектной деятельностью, то ты должен перестать быть математиком. А если ты хочешь заниматься математикой, то проектный бизнес должен вести кто-то другой, а ты будешь его подрядчиком или наемным работником. И этот кто-то будешь уже иметь головняк с тем, кто ему будет решать «скучные» задачи.
У меня есть яркий пример знакомого, который делал стартап 13 лет, практически на свои. При этом он хотел решать инженерные задачи и не хотел по-настоящему заниматься планированием работ, денег и рисков. Потому что там первое решение настоящего стартапера было бы выкинуть волшебную красивую, но все-таки громоздкую и дорогую технологию, заменив её на более скучную, но зато сильно более дешевую. И после этого пойти зарабатывать денег. А ему было интересно именно заниматься волшебством.
Результат стартапа думаю объяснять не надо.
✍3
Напишу про HADI цикл. Это очень важная штука при работе с рисками и исследованиями.
#мысль #rnd
HADI это акроним:
• Гипотеза (H) – какое-то наше представление, идея, которую мы хотим проверить.
• Действие (A) – Способ, которым мы будем проверять гипотезу, ну и реализация этого способа.
• Данные (D) – Любые показатели, на которые вы хотите повлиять.
• Инсайт (I) – не очень люблю это слово. Я бы назвал вывод.
Еще два важных момента, с которыми я как раз работал в прошлых постах.
• Вера (%) – вероятность успеха гипотезы на взгляд команды.
• Сложность – сложность выполнения задачи. Я меряю в днях или деньгах, можно просто в баллах от 1 до 5.
Этот фреймворк нужен, чтобы не было каши в голове, а процесс работы с гипотезами и рисками был отсмартован (то есть был по методике SMART). А это нужно просто чтобы не делать лишнюю работу, которой на самом деле может быть очень много, 50-80 и больше процентов.
Очень важно понять сразу какую гипотезу мы тестируем, иначе результаты не интерпретируются. Важно заранее понять на какие показатели мы будем ориентироваться. Очень часто люди работают без показателей, в результате идут не туда забуриваются настолько глубоко, насколько хватает упорства.
Далее, когда есть гипотеза и есть показатели, которые мы хотим оценить, можно понять какими минимальными усилиями это можно сделать. Часто это намного проще, чем выполнять всю работу. Понятно, что если гипотеза оказывается успешной, то экономии и не будет. Все равно придется закончить работу и сделать все целиком. Зато на неуспешных гипотезах экономия будет громадная!
Помимо лишней работы люди склонны обманывать себя, особенно если гипотеза является их любимой. Работа по HADI позволяет подсвечивать такие штуки и убирать эмоциональность там, где она мешает.
Добавлю еще что, чтобы легче было интерпретировать Цель Голдратта, я исследовательскую работу представляю себе как Горно-обогатительный комбинат, в котором идет руда и проходит определенные переделы, дробится, фильтруется и т.п. В стартапе тоже есть одна большая гипотеза (мы можем заработать на этой теме кучу денег), которая дробится на более мелкие гипотезы. Когда гипотеза достаточно мелкая, она прогоняет через HADI цикл, после чего мы получаем инсайт, из которого мы уточняем план работ и переформатируем дерево гипотез при необходимости. Если кратко, то стартап это фабрика по обработке бизнес идей, на выходе дающая работающий бизнес.
Кстати, вопрос про SMART имеет смысл писать или это все знают?
#мысль #rnd
HADI это акроним:
• Гипотеза (H) – какое-то наше представление, идея, которую мы хотим проверить.
• Действие (A) – Способ, которым мы будем проверять гипотезу, ну и реализация этого способа.
• Данные (D) – Любые показатели, на которые вы хотите повлиять.
• Инсайт (I) – не очень люблю это слово. Я бы назвал вывод.
Еще два важных момента, с которыми я как раз работал в прошлых постах.
• Вера (%) – вероятность успеха гипотезы на взгляд команды.
• Сложность – сложность выполнения задачи. Я меряю в днях или деньгах, можно просто в баллах от 1 до 5.
Этот фреймворк нужен, чтобы не было каши в голове, а процесс работы с гипотезами и рисками был отсмартован (то есть был по методике SMART). А это нужно просто чтобы не делать лишнюю работу, которой на самом деле может быть очень много, 50-80 и больше процентов.
Очень важно понять сразу какую гипотезу мы тестируем, иначе результаты не интерпретируются. Важно заранее понять на какие показатели мы будем ориентироваться. Очень часто люди работают без показателей, в результате идут не туда забуриваются настолько глубоко, насколько хватает упорства.
Далее, когда есть гипотеза и есть показатели, которые мы хотим оценить, можно понять какими минимальными усилиями это можно сделать. Часто это намного проще, чем выполнять всю работу. Понятно, что если гипотеза оказывается успешной, то экономии и не будет. Все равно придется закончить работу и сделать все целиком. Зато на неуспешных гипотезах экономия будет громадная!
Помимо лишней работы люди склонны обманывать себя, особенно если гипотеза является их любимой. Работа по HADI позволяет подсвечивать такие штуки и убирать эмоциональность там, где она мешает.
Добавлю еще что, чтобы легче было интерпретировать Цель Голдратта, я исследовательскую работу представляю себе как Горно-обогатительный комбинат, в котором идет руда и проходит определенные переделы, дробится, фильтруется и т.п. В стартапе тоже есть одна большая гипотеза (мы можем заработать на этой теме кучу денег), которая дробится на более мелкие гипотезы. Когда гипотеза достаточно мелкая, она прогоняет через HADI цикл, после чего мы получаем инсайт, из которого мы уточняем план работ и переформатируем дерево гипотез при необходимости. Если кратко, то стартап это фабрика по обработке бизнес идей, на выходе дающая работающий бизнес.
Кстати, вопрос про SMART имеет смысл писать или это все знают?
🔥7👍4
#текучка #трекинг
Встречался недавно с одним заказчиком.
Чтобы договориться нормально об условиях success fee протрекал его по сути.
Спрашиваю сегодня как дела, а он мне отвечает вот так:
Задачу кстати обсуждаем классическую, задача 2d раскроя материала. Жуткая классика, в СССР все книжки по оптимизации с этого начинались. Тем не менее готового свободного алгоритма со всеми необходимыми нюансами нет, и есть что прогать.
В принципе это наверно со всеми задачами так.
Встречался недавно с одним заказчиком.
Чтобы договориться нормально об условиях success fee протрекал его по сути.
Спрашиваю сегодня как дела, а он мне отвечает вот так:
Да привет На самом деле. Ты тогда так такую важную штуку сказал, что я начал пересматривать работу с менеджером, и мы начали вообще пересматривать все наши все наши сделки И вообще смотреть с точки зрения, с кем мы имеем дело, то есть мы раньше и так это делали. Вот, но потом у нас темпы темпы росли, то есть заявок-то вообще к нам много приходит, и мы эту штуку немножко опустили.
Задачу кстати обсуждаем классическую, задача 2d раскроя материала. Жуткая классика, в СССР все книжки по оптимизации с этого начинались. Тем не менее готового свободного алгоритма со всеми необходимыми нюансами нет, и есть что прогать.
В принципе это наверно со всеми задачами так.
🔥5
#математика #геометрия #задача_раскроя
Рассказывал заказчику по поводу 2д раскроя, что даже сложные примеры часто очень хорошо упаковываются. И если у нас одна деталь, для которой нало вырезать много копий. То надо обязательно делать алгоритм периодической упаковки.
Рассказывал заказчику по поводу 2д раскроя, что даже сложные примеры часто очень хорошо упаковываются. И если у нас одна деталь, для которой нало вырезать много копий. То надо обязательно делать алгоритм периодической упаковки.
👍7
Универсальный алгоритм написания алгоритмов.
#программирование #алгоритм #икр
Схемы алгоритмов у меня в голове возникают мгновенно, большая насмотренность и куча вещей доведено до автоматизма уже. Но я все-таки, смог вытащить из головы некоторые правила того, как я пишу алгоритмы.
1. Ставим правильно задачу. Выявляем все требования. Формируем цель задачи, то есть идеальный конечный результат по ТРИЗ.
2. Смотрим базовое решение, то есть то которое имеется на данный момент. Уточняем цель задачи с учетом этого.
3. Решение — это набор микрорешений, то есть выбранных величин булевых переменных. Например работает ли конкретный человек в конкретный час в конкретном месте конкретную работу – да/нет.
4. Рассматриваем зависимости микрорешений между собой.
5. Если есть независимые компоненты (горох) – отлично.
6. Если в компоненте есть зависимость (уровни) в одну сторону – отлично.
7. Выявляем в конце концов ядро задачи, которое уже нельзя упростить, потому что все микрорешения зависят друг от друга.
8. Смотрим на особенности входных данных. Возможно там есть некоторая закономерность, которая может все упростить.
9. Смотрим на требования по скорости, цене продвижения, объему используемых ресурсов.
10. Если задача слишком сложная, огрубляем и упрощаем её. Главное сделать лучше базового решения. После упрощения повторяем весь проход.
Важно помнить, что в реальности решается любая задача. Даже если солвер не может найти составить расписание работы пилотов, самолеты все равно летают и не падают. То есть либо какие-то требования оказываются нежесткими и иногда нарушаются, или есть какие-то неучтенные возможности, или требования к оптимальности в некоторых случаях не такие строгие.
Однако если мне предлагают задачу, в которой:
• Был проведен ранее большой объем исследований и получены хорошие результаты
• Не менялась постановка задачи.
• Нет новых потенциальных методов для взлома этой задачи (теоретические методы, более мощные компьютеры)
• Платят недорого.
То правильным ответом будет просто отказаться от решения подобной задачи, просто потому что экономика решения заведомо не сойдется.
#программирование #алгоритм #икр
Схемы алгоритмов у меня в голове возникают мгновенно, большая насмотренность и куча вещей доведено до автоматизма уже. Но я все-таки, смог вытащить из головы некоторые правила того, как я пишу алгоритмы.
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), и когда вторая лампочка разобьется, мы узнаем правильный ответ.
У этого решения есть важная особенность, зная которую можно это решение легко найти. Здесь большое количество (максимальное на самом деле) этажей, для нахождения которых придется потратить максимальное число попыток. То есть дерево принятия решений максимально равномерное.
Я проверяю любой алгоритм на такую равномерность, если я вижу, что мой алгоритм недостаточно равномерный, то есть в каких-то местах работает лучше, чем в других. Я смотрю, могу ли я улучшить алгоритм в тяжелом месте, испортив его в хорошем.
Математически этот принцип соответствует условиям Каруша-Куна-Таккера и уравнениям Лагранжа-Эйлера, но это уже совсем другая история.
#задача #алгоритмы #бутылочное_горлышко
Давно задачек не давал. Вот еще одна уже классическая, её когда-то давали на собеседовании в Microsoft.
Имеется 100-этажный дом и две одинаковые лампочки. Надо узнать с какого этажа сброшенная лампочка разобьется. За какое минимальное число попыток это точно можно узнать и какой алгоритм действий? Если бы лампочка была одна, то пришлось бы потратить последовательно 100 попыток, бросая последовательно с 1 по 100 этаж. А так как у нас две лампочки, то мы можем разбив одну продолжить эксперименты.
Порешайте пожалуйста сами, кто решил сам поставьте палец вверх, а кто нет – вниз.
Правильный ответ:
Схема следующая.
Бросаем последовательно первую лампочку на следующих номерах: 14, 27, 39, 50, 60, 69, 77, 84, 90,95,99 ( это первые суммы ряда 14+13+12+…)
После того как первая лампочка разобьется (например, на 39 этаже), мы начинаем прибавлять по 1 этажу к последней успешной попытке (то есть 28, 29, ... , 38), и когда вторая лампочка разобьется, мы узнаем правильный ответ.
У этого решения есть важная особенность, зная которую можно это решение легко найти. Здесь большое количество (максимальное на самом деле) этажей, для нахождения которых придется потратить максимальное число попыток. То есть дерево принятия решений максимально равномерное.
Я проверяю любой алгоритм на такую равномерность, если я вижу, что мой алгоритм недостаточно равномерный, то есть в каких-то местах работает лучше, чем в других. Я смотрю, могу ли я улучшить алгоритм в тяжелом месте, испортив его в хорошем.
Математически этот принцип соответствует условиям Каруша-Куна-Таккера и уравнениям Лагранжа-Эйлера, но это уже совсем другая история.
👍7🔥4
Объединение вместо выбора.
#алгоритмы #мысль
Еще одна идея о том, как написать хороший алгоритм.
Иногда бывает ситуация, когда невозможно выбрать из двух подходов, так как каждый лучше для определенного класса входных данных. Например, один алгоритм быстрый, но ненадежный. А второй медленный, но дающий качественный результат.
Есть пара очевидных вариантов что с этим можно делать. Или сделать небольшую систему принятия решения какой из алгоритмов запускать. Или запускать оба алгоритма в параллель.
Я же люблю третий вариант – я думаю, как обобщить алгоритм так, чтобы оба старых алгоритма были просто его частными случаями. Чтобы был параметр, который выставлен в 0 – работает, по сути, первый алгоритм, а в 1 – второй. При этом параметр был естественный, а не просто <если>. То есть код должен быть один, а параметр мог меняться непрерывно.
Если думать в этом направлении, то часто получается склеить алгоритм. Плюс тут не только в том, что удалось избежать выбора и потери времени работы алгоритма или ресурсов. А в том, что мы получили качественно новый алгоритм, на который можно снова смотреть и улучшать.
Проблема выбора из двух алгоритмов, это не проблема, а способ получить инсайт.
#алгоритмы #мысль
Еще одна идея о том, как написать хороший алгоритм.
Иногда бывает ситуация, когда невозможно выбрать из двух подходов, так как каждый лучше для определенного класса входных данных. Например, один алгоритм быстрый, но ненадежный. А второй медленный, но дающий качественный результат.
Есть пара очевидных вариантов что с этим можно делать. Или сделать небольшую систему принятия решения какой из алгоритмов запускать. Или запускать оба алгоритма в параллель.
Я же люблю третий вариант – я думаю, как обобщить алгоритм так, чтобы оба старых алгоритма были просто его частными случаями. Чтобы был параметр, который выставлен в 0 – работает, по сути, первый алгоритм, а в 1 – второй. При этом параметр был естественный, а не просто <если>. То есть код должен быть один, а параметр мог меняться непрерывно.
Если думать в этом направлении, то часто получается склеить алгоритм. Плюс тут не только в том, что удалось избежать выбора и потери времени работы алгоритма или ресурсов. А в том, что мы получили качественно новый алгоритм, на который можно снова смотреть и улучшать.
Проблема выбора из двух алгоритмов, это не проблема, а способ получить инсайт.
👍12
#текучка #воронка_продаж #ии
Ура, пришел заказ с полноценным использованием LLM (Large Language Model, искусственный интеллект). Сейчас находимся в процессе обсуждения. Мы сами активно используем LLM – пишем куски кода, англоязычные письма и даже юридические договоры, делаем прототипы разных проектов. И наконец дошли до полноценного заказа. Задача состоит в составлении определенного типа справочников на основании открытых данных. Сейчас эта рутинная работа делается руками временных сотрудников. Тема очень важная, так как мы вступили в эпоху искусственного интеллекта и надо будет успевать меняться вместе с миром.
Расскажите , у вас есть рутинная работа, от которой хочется избавиться или интересный опыт внедрения LLM?
Ура, пришел заказ с полноценным использованием LLM (Large Language Model, искусственный интеллект). Сейчас находимся в процессе обсуждения. Мы сами активно используем LLM – пишем куски кода, англоязычные письма и даже юридические договоры, делаем прототипы разных проектов. И наконец дошли до полноценного заказа. Задача состоит в составлении определенного типа справочников на основании открытых данных. Сейчас эта рутинная работа делается руками временных сотрудников. Тема очень важная, так как мы вступили в эпоху искусственного интеллекта и надо будет успевать меняться вместе с миром.
Расскажите , у вас есть рутинная работа, от которой хочется избавиться или интересный опыт внедрения LLM?
👍10
Если ты бизнесмен, ты работаешь с деньгами.
#мысль #бизнес #психология
Видел у начинающих бизнесменов и стартаперов одну штуку.
Люди любят делать свою работу, но не любят заключать договора и выставлять счета.
Это очень важный маркер того, что мышление еще не перестроилось из найма в бизнес.
Тут куча причин почему важно переключатся.
1. Ну собственно, если не заключать договора и не выставлять счета, то денег не будет. Если сделать проект, а деньги не получить, то у клиента появляется соблазн не платить. Или платить меньше.
2. Бизнесмен должен думать не только про производство, но и про деньги. И это маркер, что мышление еще не переключилось.
3. Договора и счета дают настоящую обратную связь, нужен ли ваш продукт и почему. Все остальное слова. Избегание обратной связи, это хороший способ делать ненужные вещи.
4. Когда мышление переключится, восприятие будет совсем другим, тогда уже производство будет напрягать, что деньги тратит и пойдут идеи как его оптимизировать. И главная работа будет идти в понимании ценности для клиента и переформатировании своих продуктов под эту ценность.
Слова умные пишу, а сам еле-еле сегодня сделал счета. Правда, в качестве оправдания, это все для иностранных компаний. А для русских я уже делаю договора и счета с удовольствием. Недавно был клиент, который просто денег перевел, а договор не заключали. Это очень напрягало, так как непонятно, где границы проекта, и чем он в итоге будет доволен, а чем нет.
#мысль #бизнес #психология
Видел у начинающих бизнесменов и стартаперов одну штуку.
Люди любят делать свою работу, но не любят заключать договора и выставлять счета.
Это очень важный маркер того, что мышление еще не перестроилось из найма в бизнес.
Тут куча причин почему важно переключатся.
1. Ну собственно, если не заключать договора и не выставлять счета, то денег не будет. Если сделать проект, а деньги не получить, то у клиента появляется соблазн не платить. Или платить меньше.
2. Бизнесмен должен думать не только про производство, но и про деньги. И это маркер, что мышление еще не переключилось.
3. Договора и счета дают настоящую обратную связь, нужен ли ваш продукт и почему. Все остальное слова. Избегание обратной связи, это хороший способ делать ненужные вещи.
4. Когда мышление переключится, восприятие будет совсем другим, тогда уже производство будет напрягать, что деньги тратит и пойдут идеи как его оптимизировать. И главная работа будет идти в понимании ценности для клиента и переформатировании своих продуктов под эту ценность.
Слова умные пишу, а сам еле-еле сегодня сделал счета. Правда, в качестве оправдания, это все для иностранных компаний. А для русских я уже делаю договора и счета с удовольствием. Недавно был клиент, который просто денег перевел, а договор не заключали. Это очень напрягало, так как непонятно, где границы проекта, и чем он в итоге будет доволен, а чем нет.
🔥10❤2👏1
#текучка #демо #задача_раскроя
Пока разбирался в 2д раскрое, неожиданно для себя сделал неплохую версию раскроя листов на прямоугольники разных заданных размеров. То есть имеется заказ выпилить заданное количество прямоугольников заданных размеров. И надо раскидать эти прямоугольники по одному большому или нескольким прямоугольникам. Эта задача нетривиальная, даже если задан всего один тип прямоугольников. А если их несколько, то это вообще уже наука. И просто хороший алгоритмист её не сделает
Я неожиданно быстро запрогал работающий вариант. Эффект на бумаге очень мощный, треть экономии. То есть с заказа в 300 тысяч, 100 тысяч экономии. Это конечно бумажная экономия. По факту эти сто тысяч ранее шли в обрезки, а обрезки можно переиспользовать скажем на 70%. То есть экономия по факту 30 тысяч рублей с заказа. И другие похожие нюансы есть. Но все равно круто.
Вообще забавно, что для раскроя металла оказываются полезны диофантовы уравнения и линейное программирование.🤣
А еще подписал договор с Тинькофф банком. Буду для них небольшую задачу решать.
Пока разбирался в 2д раскрое, неожиданно для себя сделал неплохую версию раскроя листов на прямоугольники разных заданных размеров. То есть имеется заказ выпилить заданное количество прямоугольников заданных размеров. И надо раскидать эти прямоугольники по одному большому или нескольким прямоугольникам. Эта задача нетривиальная, даже если задан всего один тип прямоугольников. А если их несколько, то это вообще уже наука. И просто хороший алгоритмист её не сделает
Я неожиданно быстро запрогал работающий вариант. Эффект на бумаге очень мощный, треть экономии. То есть с заказа в 300 тысяч, 100 тысяч экономии. Это конечно бумажная экономия. По факту эти сто тысяч ранее шли в обрезки, а обрезки можно переиспользовать скажем на 70%. То есть экономия по факту 30 тысяч рублей с заказа. И другие похожие нюансы есть. Но все равно круто.
Вообще забавно, что для раскроя металла оказываются полезны диофантовы уравнения и линейное программирование.🤣
А еще подписал договор с Тинькофф банком. Буду для них небольшую задачу решать.
👍14🔥4❤2👏1
#текучка #воронка_продаж
У меня сегодня день заказов. В пятницу прилетело сразу несколько новых запросов. Сегодня езжу и общаюсь. Масштаб очень разный. На 1 день, на месяц, и один крупный - про планировку квартир в новостройках. Такой проект лет >10 назад делал Дмитрий Завалишин из dz.ru . Я прямо переживал, что не я делаю. :) Когда ИП делал код ОКВЭД под это дело записал, потом с ним маялся. В общем начала сбываться ещё одна мечта! :)
У меня сегодня день заказов. В пятницу прилетело сразу несколько новых запросов. Сегодня езжу и общаюсь. Масштаб очень разный. На 1 день, на месяц, и один крупный - про планировку квартир в новостройках. Такой проект лет >10 назад делал Дмитрий Завалишин из dz.ru . Я прямо переживал, что не я делаю. :) Когда ИП делал код ОКВЭД под это дело записал, потом с ним маялся. В общем начала сбываться ещё одна мечта! :)
👍8❤4
Ищу разработчика на Python.
#вакансия
Пошел такой вал заказов, что нам срочно нужны новые разработчики. Мы занимаемся дискретной оптимизацией.
Задачи очень интересные и разные, оптимизация маршрутов кораблей, планирование городов, постройки новостроек, работы заводов и т.п.
Все это делается методами дискретной оптимизации. Я ищу бекенд-разработчика, которому интересно двигаться в эту сторону. Знать дискретную оптимизацию не обязательно, научим. У меня большой опыт обучения людей. Алгоритмы знать базово надо, дейкстру, алгоритм быстрой сортировки и т.п. Кроме написания алгоритмов необходимо писать бекенд разработку, не бояться задач, а продираться сквозь них эффективно как с мачете в джунглях.
Готов работать с любым уровнем, джун, миддл, сеньор. Главное ваш профиль, чем вы хотите заниматься и чем не хотите. Ну и быть крутым. Удаленка, через ИП или самозанятых. Зарплата нормальная, зависит от уровня разумеется.
Пишите мне @tarasov_math .
Шаринг сообщения всячески приветствуется.
#вакансия
Пошел такой вал заказов, что нам срочно нужны новые разработчики. Мы занимаемся дискретной оптимизацией.
Задачи очень интересные и разные, оптимизация маршрутов кораблей, планирование городов, постройки новостроек, работы заводов и т.п.
Все это делается методами дискретной оптимизации. Я ищу бекенд-разработчика, которому интересно двигаться в эту сторону. Знать дискретную оптимизацию не обязательно, научим. У меня большой опыт обучения людей. Алгоритмы знать базово надо, дейкстру, алгоритм быстрой сортировки и т.п. Кроме написания алгоритмов необходимо писать бекенд разработку, не бояться задач, а продираться сквозь них эффективно как с мачете в джунглях.
Готов работать с любым уровнем, джун, миддл, сеньор. Главное ваш профиль, чем вы хотите заниматься и чем не хотите. Ну и быть крутым. Удаленка, через ИП или самозанятых. Зарплата нормальная, зависит от уровня разумеется.
Пишите мне @tarasov_math .
Шаринг сообщения всячески приветствуется.
👍3🔥3
#математика
В математике активно используется многомерная геометрия.
Расскажу немного про неë. Это очень важная штука в самой математике и из нее есть выводы напрямую касающиеся бизнеса.
Для начала просто научу рисовать многомерные кубы. Это весело и не страшно.
Алгоритм простой.
1. Рисуем точку. Это нульмерный куб. Мы уже умеем рисовать некоторые кубы, ура.
2. Пусть у нас есть какой-то куб. Нарисуем сдвинутую копию исходного куба.
3. А дальше соединяем все вершины с их копиями в новом кубе.
4. Мы получили куб на одну размерность больше.
На примерах я дорисовался до 5-мерного куба. Вообще, если аккуратно рисовать, правильно выбирать длины и направления сдвигов, то можно на большом листочке и 10-мерный нарисовать.
На последней картинке я нарисовал путь от одной вершины до противоположной, который идет по каждому типа ребра 1 раз.
В математике активно используется многомерная геометрия.
Расскажу немного про неë. Это очень важная штука в самой математике и из нее есть выводы напрямую касающиеся бизнеса.
Для начала просто научу рисовать многомерные кубы. Это весело и не страшно.
Алгоритм простой.
1. Рисуем точку. Это нульмерный куб. Мы уже умеем рисовать некоторые кубы, ура.
2. Пусть у нас есть какой-то куб. Нарисуем сдвинутую копию исходного куба.
3. А дальше соединяем все вершины с их копиями в новом кубе.
4. Мы получили куб на одну размерность больше.
На примерах я дорисовался до 5-мерного куба. Вообще, если аккуратно рисовать, правильно выбирать длины и направления сдвигов, то можно на большом листочке и 10-мерный нарисовать.
На последней картинке я нарисовал путь от одной вершины до противоположной, который идет по каждому типа ребра 1 раз.
👍6🔥4🤓1