В статье ниже я представил проблему Rendezvous сетевых систем управления:
И в моей последней статье я подробно описал аналитическое решение для упрощенного случая N = 2 агентов и предположил, каким может быть решение для произвольно большого числа агентов (центроид ищет закон управления):
В этой статье я предоставляю код для моделирования рандеву для произвольного числа агентов и произвольного количества измерений для пространства состояний. Однако для статьи я иллюстрирую рандеву в 1D и 2D.
Из вышеизложенного мы можем видеть, что сходимость к точке или рандеву действительно происходит, и два агента встречаются в своей средней точке, как и подсказывала нам математика! Из приведенного выше мы видим, что два агента сходятся к началу координат.
Опять же, два агента сходятся к исходной точке здесь, в 2D. Вы можете видеть, что агенты очень быстро сходятся, и точки начинают группироваться по мере того, как два агента приближаются к началу координат. Сходимость можно увеличить быстрее, выбрав большее значение гаммы.
Наконец, мы можем увидеть для этой симуляции агента N = 3, к какой 2D-точке сошлись три агента ниже. Теперь вернитесь к фазовому портрету, и вы увидите, что именно здесь точки начинают группироваться и подтверждают сближение или рандеву агентов!
Код рандеву, который вы можете получить:
def rendezvous(num_agents=10, num_dims=2, num_steps=100): """ Takes in a specified number of agents, the state space dimension, and the simulation steps and returns the state space trajectory of each agent running our centroid seeking rendezvous local controllers. """ # random initial positions for all agents: X_inits = np.random.rand(num_agents, num_dims) # Store state trajectories: Xs = np.zeros((num_agents, num_dims, num_steps)) # Store initial positions Xs[:,:,0] = X_inits # For gamma take 1 over number of neighbors: gamma = 1/(num_agents-1) for k in range(1, num_steps): # Need double for loop to run Rendezvous: for i in range(num_agents): for j in range(num_agents): if (j!= i): Xs[i,:,k] += gamma*Xs[j,:,k-1] return Xs
До скорого,
Калеб.
Подумайте о том, чтобы стать участником Medium, чтобы не пропустить ни одной из моих историй. Получите неограниченный доступ к моим произведениям и произведениям других авторов:
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:
- 👏 Хлопайте за историю и подписывайтесь на автора 👉
- 📰 Смотрите больше контента в публикации Level Up Coding
- 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"