В общем, была задача на оптимизацию плана работ: есть набор заказов, и в каждом N тасков. Таски могут зависеть друг от друга или нет, имеют длительность и тип. Ещё есть M работников, каждый из которых может выполнять таски только определённых типов, причём, у каждого своя скорость.
Если все таски в заказе выполнены, фирма получает сколько-то денег. У заказа есть дедлайн, за просрочку штраф (за каждый день просрочки), который вычитается из цены заказа. И ещё фирма тратит деньги за каждый день своей работы независимо от того, как загружены её сотрудники (то есть просто платит зарплаты по сути). Ещё важен учёт праздников и выходных.
Нужно заработать на определённом наборе заказов и работников как можно больше денег. Полный текст задачи и код программы проверки есть в репозитории. Эта задача является изменённым заказом, который мы с напарником решали в реальной жизни: оптимизация работы печатных станков для типографии. Правда, тогда и мы справились так себе, и заказчик в итоге сначала захотел всё вручную сам делать, а потом и вовсе похоронил проект при смене директора.
!!! Не читайте дальше, если хотите сначала попробовать решить самостоятельно, потому что я сейчас опишу эффективные подходы и результаты.
________________________________________
Так вот. Мы с другим экспертом Андреем сразу сели и написали разные варианты, чтобы задать шкалу, по которой будем оценивать решения команд. За пару часов я собрал примитивный жадный алгоритм, который сортировал заказы по прибыльности и укладывал в сетку кое-как, это дало нам нижнюю оценку. Мой алгоритм заработал ~75 млн виртуальных рублей, мы решили для оценки поставить нижней границей 40 млн. То есть всё, что ещё ниже, оценивалось в ноль баллов за качество оптимизации.
Затем Андрей закрылся дома на три дня и вышел на свет со сложным жадным алгоритмом, который очень хитро сортировал заказы и очень хитро укладывал их в сетку, попутно выбирая разные способы этой укладки в зависимости от конкретного заказа. Это позволило заработать ~275 млн рублей. Мы сделали верхней границей для оценки 280 млн.
К сожалению, в итоге только две команды из десяти прошли нижнюю границу, заработав, соответственно, ~91 и ~105 млн. К верхней границе не приблизился никто. И у четырёх команд алгоритм вообще не смог уложить без нарушений задачи в сетку (то есть, например, произвольно менял длительности, накладывал задачи друг на друга, давал одному работнику две задачи в один момент и так далее). Важной ошибкой команд, на мой взгляд, являлся тот факт, что никто не воспользовался возможностью запустить алгоритм на несколько минут и дать ему поработать. По условиям задания, можно было тянуть до 5 минут на одну оптимизацию, но по факту решения команд отрабатывали за единицы и десятки секунд.
На самом конкурсе, пока команды работали, я решил попробовать сделать быстрое (по времени написания) но эффективное решение. Сначала попробовал жадную сортировку + доведение до лучшего варианта методом имитации отжига. В качестве нового состояния я просто менял местами заказы целиком. Этот вариант работал пару минут и дал мне около ~200 млн дохода. К слову, команда-лидер использовала такой же подход, просто не докрутила число итераций и температуру.
Ну и потом я взял готовую либу по реализации классической генетики с особями и скрещиванием. Особью был массив с приоритетами заказов (которые конечно же нужно было аккуратно уложить чистым алгоритмом). Тип скрещивания: scattered. Всего 15 поколений по 20 особей, и это за минуту-полторы давало ~230-240 млн. Считаю, что для конкурса это самый лучший выбор: пишется одним человеком за день и даёт почти максимум, при этом легко настраивается на нужную длительность работы, легко параллелится.
Ну а потом уже дома я посидел и накодил свой вариант сложного жадного с плавающим окном перебора отсортированных заказов и плавающей же укладкой по работникам. Такая штука за две минуты зарабатывает ~281 млн. Но за три дня в условиях стресса я бы такое не сделал, скорее всего.
#dev
Каменный обелиск напротив красивой церкви в бывшем индустриальном районе Берлина. Можно пройти мимо или обратить внимание на его интересную форму и потрепанный вид. Возможно у него за спиной непростая история.
Изначально, в 1931 году, это был мемориал, посвященный местными жителям, погибшим в Первую Мировую войну.
С каждой стороны памятника были фигуры людей, изображающих разные оттенки войны: рана, забота, защита и горе.
В 1942 году эти бронзовые фигуры были переплавлены уже в нуждах другой великой войны (был сильный ресурсный голод).
После финала другой войны этот памятник, потеряв все его детали, стал обычной серой глыбой.
Но лично для меня открытием стало то, что в 1949 году на него добавили текст: «Dem geschändeten Menschen».
Что означало: «Народу поруганному».
Спустя год надпись удалили из-за угроз местного руководства, оно пригрозило снести памятник. Осталось лишь напоминание в виде двух букв Е.
#de
Район Ной-Венедиг или по-русски Новая Венеция. Дачный поселок на востоке Берлина, названный так из-за каналов, которые разрезают местность на аккуратные лоскуты.
Изначально болотистое место хотели осушить, но в итоге построили каналы. Интересно, что людям не сразу пришло в голову называть это место Венецией и называли его Новый Камерун! Наверное, в память о бывшей немецкой колонии в Африке.
В ГДР это место было статусным, здесь располагались дачи восточно-германской номенклатуры. На информационном сайте нашел самое немецкое описание жизни этого дачного поселка в тот период:
С 1961 года привилегированные граждане ГДР сдавали в аренду имущество жителей Западного Берлина. Позже участки были возвращены законным владельцам.
Интересное место, правда гуляли там только мы, остальные были либо на лодках, либо на велосипедах.
#de
Берлин - город, конечно, интересный. Можно идти вдоль диких зарослей с гаражами в полной тишине, выйти к бывшей рыбацкой деревне, где в одной точке схлестываются люди на лошадях, старых мерседесах, велосипедисты и просто прогуливающиеся. На все это удивленно глядит маленький Ваня, смотрит на то, как этот город живет везде и сразу.
#de
Мемориал на окраине Берлина.
Рансдорф - бывшая немецкая деревня, ставшая чуть больше ста лет частью города. Место на вид добротная немецкая провинция, кровля крыш, элементы на домах, большие сады, низкие ограды. Пейзаж холмистый и песчаный, узнается, что в прошлом здесь были дюны. На одной из них стоит один из самых красивых военных памятников Берлина, который был построен непосредственно местными немцами, а не победителями.
Памятник построен в 1927 году. Не был военным мемориалом, а являлся памятником не вернувшимся с Первой Мировой войны землякам. Человека на памятнике отсылает к местной популярной мифологии о рыцаре Роланде, который обычно гордо держит “меч справедливости”. Здесь же это рыцарь в каске, который опустив меч серьезно глядит в даль. Была памятная доска с именами погибших солдат, в 1939 на нее добавили нацистского орла и памятник на мой взгляд превратился в образ реванша.
Сейчас мемориал жертвам фашизма и войны.
#de
Район города, в котором я что-то чувствую, потому что эти места теперь связаны с моей историей знакомства с городом, когда я год назад катался по серому весеннему Берлину без какой-либо цели. Безжизненное место с трассой и проезжающими ярко-желтыми трамваями.
Клингенбергская тепловая электростанция – название и ее историю я узнал уже после, а при первой встрече просто шатался вокруг и удивлялся такому огромному индустриальному гиганту в центре города. Построена в 1929 году, выглядит изящно, но трубы душили Берлин чёрным дымом (из-за угля). В 1945 году не успели подорвать, и коммуникации вывезли в страну-победительницу. Недавно станция перешла на газ.
Рядом с ТЭЦ находится старый жилой комплекс, который выглядит как пряничный ганзейский домик. Построен в 1925 году, это были дома для работников бывшего газового завода. Выглядит он посреди этой пустоты странно; в итоге оказалось, что в нем никто не живёт, а внутри располагаются разные творческие студии, мастерские и коворкинг. Ну что, на завод? #de
В странах западного-христианского мира происходит предрождественская суматоха.
По городу носятся замученные доставщики, заваленные коробками, люди, пытающиеся посетить все действующие в городе рождественские ярмарки; родители развешивают на колясках гирлянды. Через неделю все это резко прекратится, город опустеет и замрет в тишине.
А ещё в каждом магазине и даже палатке начали разливать глинтвейн из термосов и бочек, можно просто идти по улице и пробовать по стаканчику через каждый метр, правда далеко потом не уйдешь. Самый лучший обнаружил около дома в небольшом вечернем магазине - там его разливают прямо из самовара. #de
Был еще такой случай в Германии. Ехал я всё утро на велосипеде, часто останавливался и фотографировал. Навигатор приводил на закрытые участки дороги, и приходилось ехать через какие-то дикие поля.
Добрался уже без сил до города и увидел, что он пуст. По нему лишь медленно едет большой мусоровоз и тормозит буквально у каждого дома. Рядом с машиной бегают туда-сюда два работника и собирают желтые пакеты, лежащие у дверей домов.
Обогнав их, я поехал сквозь весь город, и он был полностью усыпан одинаковыми желтыми пакетами с мусором, которые медленно собирали эти трудяги.
Было очень странное некомфортное чувство посреди яркого дня. Весь город усеянный одинаковыми полупрозрачными желтыми пакетами, и ни души вокруг, только мусоровоз неспешно подчищает последние признаки присутствия людей в этом месте.
Это был район Фюрстенберг города Айзенхюттенштадт. #de
Поездка на велосипеде:
1. Кукурузные поля с ветряками на горизонте.
2-3. Церкви, которые встретил на пути (их было много).
4. Пожилая женщина фотографирует пейзажи и убирает фотоаппарат в сумку.
5-6. Мемориал советским солдатам.
7. Старая надпись "Cigarren."
8. Бывший видео салон.
9. Настенный социалистический мурал (можно увидеть провода, потому что в городе Эберсвальде есть троллейбус!). #de
Эберсвальде.
Заброшенная бумажная фабрика и недействующая электростанция. Город расположен вдоль небольшого, но длинного канала. Пару сотен лет назад Берлин был очень грязным городом (сейчас, кстати, тоже хаха), поэтому производство, где требовалась чистая вода, создавалось подальше от столицы. Здесь появилась бумажная фабрика, а позже тут построили первый будущий прообраз многих электростанций Германии.
Судьба Восточной Германии была такова: перед приходом Красной армии предварительно союзники всё массово разбомбили. После того, что уцелело, советские солдаты разобрали и увезли в качестве репарации.
Но этим двум сооружениям повезло: они продолжили работать и стали уже частью промышленности ГДР.
Бумажная фабрика закрылась спустя пару лет после объединения Германии, электростанция тоже, и частично обрушилась. Пережив две войны и социализм, производство с многовековой историей закрылось, не найдя себе места в новом мире. #de
Здание Государственного совета ГДР.
Построенное в 1960-е годы здание сохранили с минимальными изменениями. Гуляя по коридорам, возникало чувство, будто руководство ГДР исчезло отсюда совсем недавно. Рядом с лестницей, на все три этажа, изображена мозаика, показывающая историю социалистической Германии.
Экскурсия была на немецком, поэтому я мало понял. Одна из пожилых женщин приехала на велосипеде в спортивной одежде, тут же в фойе переоделась при нас в классическую одежду и словно инспектор ходила, задавая экскурсоводу вопросы. Вела себя как дома. На одном этаже мы увидели какие-то странные люстры, мужчина сказал - Наверное, те, кто жили в ГДР, помнят эти странные лампы в государственных бюро? Часть группы одобрительно посмеялась, а эта пожилая дама добавила - Но здесь же еще были вазы?
Похоже, у женщины было общее прошлое с этим зданием.
Еще гид рассказал, что здесь снимался клип группы Rammstein - Ich Will и вся женская часть группы раздраженно закатила глаза. #de