Давайте назовем эту проблему проблемой Slinger-Bird (на самом деле Slinger аналогичен серверу, а птица - запросу, но у меня был нервный срыв, думая об этом, поэтому я изменил их, надеясь чтобы получить другую перспективу!).
Я пытаюсь найти оптимальное решение, которое минимизирует время и количество выстрелов, необходимых для убийства птиц, с учетом конкретной схемы прибытия птиц. Позвольте мне дать пример с абсолютными числами: 3 стропальщика и 4 птицы.
Time 1 2 3 4 5
Slinger
S1 B1, B2 B1, B2, B3 B4
S2 B1 B1, B2 B3,B4
S3 B1 B3, B4 B1,B2,B3,B4
и мои данные выглядят s следующим образом:
>> print t
[
{
1: {S1: [B1, B2], S2: [], S3: [B1]},
2: {S1: [B1, B2, B3], S2: [B1], S3: [B3, B4]},
3: {S1: [B4], S2: [B1,B2], S3: []},
4: {S1: [], S2: [B3, B4], S3: [B1, B2, B3, B4]}
}
]
Есть несколько решений, которые я мог бы придумать (Sx при t = k подразумевает, что стропальщик Sx делает выстрел в момент времени k):
Мне кажется, что решение 3 является оптимальным в данном случае.Конечно, я делал это вручную (так что есть вероятность, что я что-то пропустил), но я не могу придумать масштабируемого способа сделать это. Кроме того, меня беспокоят случаи, когда решение одного стрелка может повлиять на решение других, но поскольку у меня есть глобальный взгляд, может быть, это не имеет значения.
Каков быстрый и хороший способ решить эту проблему в Python? Мне сложно придумать хорошую структуру данных, чтобы сделать это, не говоря уже об алгоритме, который это сделает. Я думаю об использовании динамического программирования, потому что это, кажется, связано с исследованием пространства состояний, но я немного не понимаю, как действовать дальше. Есть предложения?