Telegram Web Link
В общем, была задача на оптимизацию плана работ: есть набор заказов, и в каждом N тасков. Таски могут зависеть друг от друга или нет, имеют длительность и тип. Ещё есть M работников, каждый из которых может выполнять таски только определённых типов, причём, у каждого своя скорость.

Если все таски в заказе выполнены, фирма получает сколько-то денег. У заказа есть дедлайн, за просрочку штраф (за каждый день просрочки), который вычитается из цены заказа. И ещё фирма тратит деньги за каждый день своей работы независимо от того, как загружены её сотрудники (то есть просто платит зарплаты по сути). Ещё важен учёт праздников и выходных.

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

!!! Не читайте дальше, если хотите сначала попробовать решить самостоятельно, потому что я сейчас опишу эффективные подходы и результаты.
________________________________________
Так вот. Мы с другим экспертом Андреем сразу сели и написали разные варианты, чтобы задать шкалу, по которой будем оценивать решения команд. За пару часов я собрал примитивный жадный алгоритм, который сортировал заказы по прибыльности и укладывал в сетку кое-как, это дало нам нижнюю оценку. Мой алгоритм заработал ~75 млн виртуальных рублей, мы решили для оценки поставить нижней границей 40 млн. То есть всё, что ещё ниже, оценивалось в ноль баллов за качество оптимизации.

Затем Андрей закрылся дома на три дня и вышел на свет со сложным жадным алгоритмом, который очень хитро сортировал заказы и очень хитро укладывал их в сетку, попутно выбирая разные способы этой укладки в зависимости от конкретного заказа. Это позволило заработать ~275 млн рублей. Мы сделали верхней границей для оценки 280 млн.

К сожалению, в итоге только две команды из десяти прошли нижнюю границу, заработав, соответственно, ~91 и ~105 млн. К верхней границе не приблизился никто. И у четырёх команд алгоритм вообще не смог уложить без нарушений задачи в сетку (то есть, например, произвольно менял длительности, накладывал задачи друг на друга, давал одному работнику две задачи в один момент и так далее). Важной ошибкой команд, на мой взгляд, являлся тот факт, что никто не воспользовался возможностью запустить алгоритм на несколько минут и дать ему поработать. По условиям задания, можно было тянуть до 5 минут на одну оптимизацию, но по факту решения команд отрабатывали за единицы и десятки секунд.

На самом конкурсе, пока команды работали, я решил попробовать сделать быстрое (по времени написания) но эффективное решение. Сначала попробовал жадную сортировку + доведение до лучшего варианта методом имитации отжига. В качестве нового состояния я просто менял местами заказы целиком. Этот вариант работал пару минут и дал мне около ~200 млн дохода. К слову, команда-лидер использовала такой же подход, просто не докрутила число итераций и температуру.

Ну и потом я взял готовую либу по реализации классической генетики с особями и скрещиванием. Особью был массив с приоритетами заказов (которые конечно же нужно было аккуратно уложить чистым алгоритмом). Тип скрещивания: scattered. Всего 15 поколений по 20 особей, и это за минуту-полторы давало ~230-240 млн. Считаю, что для конкурса это самый лучший выбор: пишется одним человеком за день и даёт почти максимум, при этом легко настраивается на нужную длительность работы, легко параллелится.

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

#dev
Вышел трейлер «Киллербота» по серии книг, о которой я вам рассказывал. Выглядит прямо очень многообещающе. Apple TV+ весьма неоднозначный стриминг, потому что часть вещей он сильно испоганил по сравнению с первоисточником (например, «Основание», о чём я тоже писал), а часть вещей вышли превосходными («Silo» очень хорош, хотя, говорят, что книги ещё на голову круче, у меня уже в очереди на прочтение).

В «Киллерботе», как в продукте современной западной писательницы, и так хватает повестки и порой странноватого юмора и странноватых же намёков (возьмём взаимоотношения главного героя с кораблём, например). Так что Apple TV+ не смогут сделать что-то сильно хуже за счёт woke-надстроек — в этом смысле современный роман устойчивее к издевательствам, чем классический труд Азимова полувековой давности. А всё остальное Apple делает хорошо: дорого, со вкусом, с хорошей постановкой.

Ждём выхода 16-го мая, в общем. #fiction

https://www.youtube.com/watch?v=vEioDeOiqEs
Новый (седьмой) сезон «Чёрного зеркала» реабилитировал для меня сериал после откровенно проходных предыдущих двух. В своё время шестой сезон я досмотрел с трудом: из пяти серий три вообще мимо сериала. А вот в седьмом, разве что, чуть проваливается эпизод о съёмках кино, но и в нём есть любопытные моменты. Остальное очень хорошо, в духе сериала. И ещё куча мелких отсылок к предыдущим сезонам.

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

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

Понравилась задумка в серии про девушку-кондитера. Посмотрел бы побольше такого. Можно целый сериал даже: как разные люди справляются с такими способностями. Причём, сериал можно сделать очень мрачный, под лозунгом «бойся своих желаний».

В серии о роевом интеллекте было приятно увидеть Капальди, но сюжетный ход я разгадал с первых минут. Слишком много читаю и смотрю фантастики. Нечто подобное было в одном из эпизодов «The Outer Limits» (к слову, «Чёрное зеркало» не впервые почти дословно цитирует его).

Ну и продолжение Каллистера — очень в тему. Не так много серий «Зеркала» было бы уместно продолжать, выбор считаю крайне удачным. Конечно, никаких хитрых сюжетных флипов и глубоких мыслей там нет, но во многом от этого даже проще после в целом тяжёлых предыдущих эпизодов.

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

#fiction
Мне очень нравится монолог детектива из фильма «Достать ножи: Стеклянная луковица». По сюжету эксцентричный миллиардер, «непонятый гений» Майлс Брон собирает своих друзей на личном острове на вечеринку, и закручивается дело. Детектив Бенуа Бланк, оказавшийся там же, проводит с этими мажорами несколько дней, и ближе к концу рассказывает им, как его осенило, и он нашёл ключ к делу.

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

И он приходит к такому выводу: Майлс Брон на самом деле идиот. Он глупый. Заработанные им деньги и миллиардная корпорация объясняются как-то ещё (в итоге сюжет даёт ответы на это), а чел просто тупой. И с помощью принятия этой гипотезы куча деталей встали на свои места.

Вот и в жизни можно применять. Если ты слишком долго не можешь объяснить поведение какого-то человека, попробуй предположить, что он тупой. Почти Бритва Хэнлона, но более персонализированная.

Бывший игрок в интеллектуальную игру несёт отборнейшую неадекватную ересь? Возможно, он просто тупой, а навык игры это единственное, что он в себе развивал.

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

Опытный специалист в какой-то сфере отрицает профессиональные подходы? Возможно, он просто тупой, а годы работы не сказались значимо на росте навыков.

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

И всё равно, в большом подмножестве случаев метод, кажется, работает. #life
Нейросеть очень не любит соблюдать DRY, поэтому её частенько нужно заставлять отдельной командой обернуть повторяющуюся логику в методы, вынести константы в конфиги итд.

Но вот еще забавная вещь. Я тут делаю софт для чтения данных по ModbusRTU, и кодом на питоне эмулирую устройство, чтобы читать его потом кодом на сишарпе. У устройства есть 16-битные регистры. Если нужно записать int32 или float, используются два последовательных регистра.

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

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

Лезу в гитхаб той питоновой библиотеки, которую нейросеть предложила. Нахожу старый закрытый issue с такой же жалобой, а там в ответ: "as intended due to historical reasons...".

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

Но когда-нибудь научатся, конечно.

#dev
Сегодня закрыли Skype после 22 лет работы, ушла эпоха.

Когда-то мне приходила в голову такая мысль: если подростком вы пошли в кино на фильм с взрослыми известными актёрами, то вероятнее всего в какой-то момент прочитаете новость о смерти каждого из них.

Вот и с сервисами — нашему поколению суждено читать новости о смерти того, чем мы пользовались в школе, университете, в более молодые годы. Я вот застал смерть Flash, ICQ (и QIP), ATI (видеокарты), мобильных веток Nokia и Siemens, Башорга и Лурка, НародРу, SonyEricsson, Motorola, WinAmp. Есть вещи, которые номинально существуют, но в любом значимом смысле из практического поля вышли: ЖЖ, Rambler, FlyBoard...

Интересно, что десктопный софт, похоже, крепче, чем интернет-сервисы. Помню в школе начинал изучать 3D max, тогда ещё принадлежавший фирме Discreet, и вот он до сих пор живее всех живых, правда уже под эгидой Autodesk. Даже Blender его не убил, что не перестаёт меня удивлять.

Или MS Office — всех нас переживёт, похоже. Microsoft в своё время сделали превосходную ставку, догадавшись оцифровать самую базовую офисную рутину. В 2025 году у нас везде ИИ и SPA с формами, но в бухгалтерию ты всё равно кидаешь docx-файл со вставленным сканом собственной подписи.

Погуглил: даже Dreamweaver существует и обновляется, помните такой? Для меня он всегда будет продуктом Macromedia. Да, я был там, Гэндальф, 3000 лет назад.

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

Сколько из того, чем я пользуюсь сейчас каждый день, сохранится через 10, 20 лет? 50? Вот и посмотрим. Skype RIP, о тебе только хорошие воспоминания, хоть и недолгие.

#web
В этом блоге я стараюсь побольше писать о технологиях, и в тему сегодняшнего праздника стоит упомянуть музей «1418 шагов к победе» (1418 дней продолжалась Великая Отечественная Война), который находится в Московской области.

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

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

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

3. Шикарные диорамы в натуральную величину, со звуком и экранами (имитация пространства за окном, например). Кстати, ещё очень атмосферные диорамы есть в музее «Пропавшие в кинохронике» у нас на Ленфильме. Музей о деятельности военных кинооператоров во Вторую Мировую, тоже настоятельно рекомендую.

4. Интерактивные карты с анимацией, возможностью перемещать время, смотреть, как менялась линия фронта. Меня впечатлила карта боев с Финляндией. Я помнил, что финны воевали на стороне нацистов, но вот так вот видеть глазами финский флаг рядом со свастикой на одной стороне — отрезвляюще.

5. И, стоит сказать, что «1418 шагов к победе» очень грамотно топологически выстроен. Я не слишком люблю музеи-лабиринты, где, например, можно что-то пропустить, или просмотреть не в том порядке. В этом же музее простая и понятная навигация, а, если у вас мало времени, то отдельные комнаты можно пропускать.
Давно подписан на группу Mighty Box, автор которой придумывает и выпускает органайзеры для настолок. Изначально я просто следил за процессом, но недавно заказал два орга: для «Ведьмака» (ещё не собрал) и для «Подводных городов» (на фото).

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

1. Хороший орг позволяет вместить в одну коробку компоненты, например, из базовой игры и дополнения, и сильно экономить место на полке

2. Раскладывать такую игру гораздо проще, потому что достаточно вытащить части органайзера с нужными карточками и ресурсами, положить поле, и вы готовы

Второй пункт особенно важен для меня, поскольку тот же «Ведьмак» чудовищно долго сетапится: около десяти колод, элементы из нескольких дополнений, жетоны, деньги, кубики... Уже расхочешь играть, пока это всё разворачиваешь.

Ну ладно, орг для «Ведьмака» ждёт пары свободных выходных, а вот «Города» я склеил. Автор очень внимательно подходит к процессу проектирования: собственно, я изначально подписался на его группу, потому что мне нравилось наблюдать за инженерной составляющей. Проектируется всё на листовом ХДФ и акриле под лазерную резку. Помимо геометрической составляющей много внимания уделено UX: чтобы всё удобно было вытаскивать и складывать. Собирается на клей ПВА без особых проблем, укладывается чётко.

Органайзер для «Городов» предусматривает место под фигурки подводных лодок вместо картонных токенов, так что я не удержался и сразу напечатал на фотополимернике лодки и здания (модельки нашёл в сети). Надо будет ещё их покрасить, чтобы проще отличать.

В целом очень доволен. Сразу скажу: органайзеры не дешёвые, но для игр, которые точно останутся в коллекции годами, это, на мой взгляд, уместная покупка.

#games #окр
2025/07/07 04:23:10
Back to Top
HTML Embed Code: