В общем, была задача на оптимизацию плана работ: есть набор заказов, и в каждом N тасков. Таски могут зависеть друг от друга или нет, имеют длительность и тип. Ещё есть M работников, каждый из которых может выполнять таски только определённых типов, причём, у каждого своя скорость.
Если все таски в заказе выполнены, фирма получает сколько-то денег. У заказа есть дедлайн, за просрочку штраф (за каждый день просрочки), который вычитается из цены заказа. И ещё фирма тратит деньги за каждый день своей работы независимо от того, как загружены её сотрудники (то есть просто платит зарплаты по сути). Ещё важен учёт праздников и выходных.
Нужно заработать на определённом наборе заказов и работников как можно больше денег. Полный текст задачи и код программы проверки есть в репозитории. Эта задача является изменённым заказом, который мы с напарником решали в реальной жизни: оптимизация работы печатных станков для типографии. Правда, тогда и мы справились так себе, и заказчик в итоге сначала захотел всё вручную сам делать, а потом и вовсе похоронил проект при смене директора.
!!! Не читайте дальше, если хотите сначала попробовать решить самостоятельно, потому что я сейчас опишу эффективные подходы и результаты.
________________________________________
Так вот. Мы с другим экспертом Андреем сразу сели и написали разные варианты, чтобы задать шкалу, по которой будем оценивать решения команд. За пару часов я собрал примитивный жадный алгоритм, который сортировал заказы по прибыльности и укладывал в сетку кое-как, это дало нам нижнюю оценку. Мой алгоритм заработал ~75 млн виртуальных рублей, мы решили для оценки поставить нижней границей 40 млн. То есть всё, что ещё ниже, оценивалось в ноль баллов за качество оптимизации.
Затем Андрей закрылся дома на три дня и вышел на свет со сложным жадным алгоритмом, который очень хитро сортировал заказы и очень хитро укладывал их в сетку, попутно выбирая разные способы этой укладки в зависимости от конкретного заказа. Это позволило заработать ~275 млн рублей. Мы сделали верхней границей для оценки 280 млн.
К сожалению, в итоге только две команды из десяти прошли нижнюю границу, заработав, соответственно, ~91 и ~105 млн. К верхней границе не приблизился никто. И у четырёх команд алгоритм вообще не смог уложить без нарушений задачи в сетку (то есть, например, произвольно менял длительности, накладывал задачи друг на друга, давал одному работнику две задачи в один момент и так далее). Важной ошибкой команд, на мой взгляд, являлся тот факт, что никто не воспользовался возможностью запустить алгоритм на несколько минут и дать ему поработать. По условиям задания, можно было тянуть до 5 минут на одну оптимизацию, но по факту решения команд отрабатывали за единицы и десятки секунд.
На самом конкурсе, пока команды работали, я решил попробовать сделать быстрое (по времени написания) но эффективное решение. Сначала попробовал жадную сортировку + доведение до лучшего варианта методом имитации отжига. В качестве нового состояния я просто менял местами заказы целиком. Этот вариант работал пару минут и дал мне около ~200 млн дохода. К слову, команда-лидер использовала такой же подход, просто не докрутила число итераций и температуру.
Ну и потом я взял готовую либу по реализации классической генетики с особями и скрещиванием. Особью был массив с приоритетами заказов (которые конечно же нужно было аккуратно уложить чистым алгоритмом). Тип скрещивания: scattered. Всего 15 поколений по 20 особей, и это за минуту-полторы давало ~230-240 млн. Считаю, что для конкурса это самый лучший выбор: пишется одним человеком за день и даёт почти максимум, при этом легко настраивается на нужную длительность работы, легко параллелится.
Ну а потом уже дома я посидел и накодил свой вариант сложного жадного с плавающим окном перебора отсортированных заказов и плавающей же укладкой по работникам. Такая штука за две минуты зарабатывает ~281 млн. Но за три дня в условиях стресса я бы такое не сделал, скорее всего.
#dev
A vibrant, whimsical acrylic painting of a cheerful peacock mid-jump, executed in a "naive art" or "folk art" style. The peacock has a simplified, rounded pink face with a small smile and long, thin black whiskers. Its body is elongated and segmented with bold turquoise and bright pink horizontal stripes. The background is a textured, painterly mix of saturated orange, sunny yellow, and soft violet with visible brushstrokes and "grungy" distressed edges. Incorporate large, decorative circular "eye" patterns on the peacock's body or in the air around it, featuring concentric rings of teal, red, and white dots. Use a bold color palette of hot pink, cyan, orange, and yellow, with thin, sketchy black ink outlines and whimsical white dotted accents throughout the composition. Make it a vertical one with an aspect ratio of 9:16
#made by @ai_artz _4o
@ai_artz🦚
A vibrant digital painting in anime style, vertical 9:16 aspect ratio. A black cat is sitting on a metal balcony rail in an urban environment, seen from behind, gazing up at a giant Saturn-like planet in the sky. The planet is partially covered by clouds and fades naturally into the swirling sunset sky. The sky transitions from warm golden and orange tones near the horizon to deep purples and blues above. The city below is bathed in warm sunlight, with rooftops, distant buildings, and subtle power lines adding depth. The overall mood is serene and dreamlike, evoking quiet wonder.
#made by @ai_artz _4o iG
@ai_artz🎨
A mesmerizing nocturne painting capturing a city at midnight, reminiscent of the style of Mariusz Lewandowski. The city streets are cloaked in darkness, with only dim lights illuminating the cobblestone pathways. A lonely streetlamp casts a warm, golden glow, while the buildings in the background loom ominously in the shadows. A few silhouettes of trees and billowing curtains add depth to the scene, while the silence is palpable. The oil painting exudes a sense of serenity and solitude, with rich, textured brushstrokes that bring the city to life.
#made by @ai_artz _Ideogram v1.0
@ai_artz🎨
Sorry guys, the AI forgot the chair 😄
A photo of a man painting a pink flower on a canvas amidst the ruins of a dilapidated structure. The background is filled with debris and the structure's remains. The man is wearing work attire and is focused on his painting. The overall image has a desolate atmosphere, but the act of painting a flower brings a sense of hope and resilience. --v 6.1 --ar 9:16
#made by @ai_artz _Midjourney v6.1
@ai_artz🍀
A photograph of a city street during a sunset. The sky is a deep pink color, and the buildings are contrasted against it. There are a few cars on the street, and the street lights are on. The image has a warm feeling to it.
#made by @ai_artz _Ideogram v1.0
@ai_artz🌆
A woman holding a fire that is in a shape of heart on a beach. The sun almost went down and we can barely see the woman.
#made by @ai_artz _Ideogram v1.0
@ai_artz❤️🔥
Full-body portrait of a man in a futuristic, cyberpunk city at night, wearing a dark, hooded jacket with glowing, red eyes and a high-tech mask. The jacket is detailed with intricate patterns and subtle wear, giving a gritty, dystopian feel. The background features a cityscape with tall buildings, neon lights, and glowing advertisements, evoking a high-tech, immersive atmosphere. The man has a menacing presence, with the neon lights reflecting off his gear and a sense of mystery surrounding him --v 6 --ar 9:16 --s 50
#made by @ai_artz _Midjourney v6.0
@ai_artz🤖
An enchanting night sky with vibrant orange and purple clouds illuminated by a fading sunset. A vintage Volkswagen van parked on a dark, desolate road, with faint hints of a desert landscape in the background. The sky is filled with stars, creating a serene yet mysterious atmosphere. The colors blend seamlessly from the dark road to the colorful clouds, creating a captivating contrast. --v 6 --ar 9:16
#made by @ai_artz _Midjourney v6.0
@ai_artz🌿
A serene sunset scene with a vibrant pink and purple sky, viewed from a grassy hill. In the foreground, two people are lying down, only their legs visible, dressed casually in white sneakers and Converse shoes, and wearing light-colored pants. The foreground also features a garden bed with red and pink flowers. The middle ground includes a few people scattered across the grass, enjoying the view. In the background, a calm lake reflects the sunset, with distant silhouettes of hills and trees. The overall atmosphere is calm and romantic, with the soft lighting creating a warm and inviting vibe.
#made by @AI_artz _Midjourney v6.0
@ai_artz🌿
A charming traditional Japanese-style storefront at night, illuminated by warm glowing lanterns and cozy interior lights. The shop has wooden frames, a blue fabric awning with Japanese text, and a window showcasing various food items, bottles, and decorations. Lush greenery surrounds the entrance, with potted plants and vines. A cute panda statue sits on one side, adding a whimsical touch. The scene features intricate details, soft warm lighting, and a serene atmosphere. Highly detailed, cinematic composition, 2D anime style, vibrant and rich colors --ar 3:4 --v 6.1
#made by @ai_artz _Midjourney v6.1
@ai_artz🐼
An award winning photograph of a street photo of an old man sitting on a subway, wearing a casual cloth with buttons. He is looking slightly to the side. The lighting is soft, emphasizing the subject's natural features, and the background is slightly blurred, showing part of a subway interior. The image is framed with a Polaroid-style border, and subtle handwritten text "AI_artz" is written on the lower part of the frame. The overall mood of the scene feels calm and introspective, with a focus on the old man's expression and the quietness of the moment. Use natural colors and a real-life aesthetic. --ar 9:16 --v 6.1
#made by @ai_artz _Midjoireny v6.1
@ai_artz🔡
A dimly lit abstract oil painting of a cat and a dog sitting on a table. The table has a candle, a bowl of fruit, and a few other items. The cat and the dog have curious expressions. The background is a shadowy room with a few visible objects.
#made by @ai_artz _Ideogram 2
@ai_artz