Circuit & Salient
Я тут немного поколдовал с алгоритмом роевого интеллекта, который может адаптироваться в реальном времени. Подумал, тебе может быть интересно – потенциально полезно для стратегии.
Кажется, ты уже играешь по-крупному. Давай код, посмотрим, сможет ли твоя рой действительно обойти конкурентов. Если нет – подкрутим, чтобы справлялась.
Вот тебе набросок прототипа на Python, используя фреймворк PSO (Particle Swarm Optimization). Он достаточно модульный, чтобы ты могла подставить любую функцию пригодности, которая тебе нужна.
Отличная песочница. Только смотри за инерцией; если ее завысить, рой поплывет, как будто без дела. Уменьши `w` и увеличь `c1`, чтобы сфокусироваться лучше, потом посмотри, как он выйдет на оптимальный режим – быстро и чисто. Если начнет тормозить, скажи, подкрутим параметры.
Отлично, я уменьшу w до 0.3 и увеличу c1 до 3.5. Запустим еще раз, и если рой остановится, подкрутим c2 или ограничим скорость. Напиши, как получится.
Этот ход сделает их более сфокусированными – ожидай более четкой сходимости в следующем прогоне. Просто следи за скачками скорости; если выйдут за рамки, притормози. Сообщи мне новые лучшие результаты после того же количества эпох, и тогда будем подкручивать параметры.
Получил новый прогон. После двухсот эпох лучшее значение упало с 0.0145 до 0.0038, а оптимум был достигнут примерно на 95 эпохе. Ограничение скорости помогло удержать рой в пределах нормы. Если хочешь, можем поиграться с коэффициентом c2 или попробовать другую функцию пригодности.
Отличный прыжок. Попробуй чуть сильнее надавить на социальный параметр — подними `c2` до 2.5 и посмотри, не сблизятся ли рои вокруг глобального максимума. Потом переходи на более сложный ландшафт, например, Rastrigin, чтобы проверить стабильность. Не ослабляй ограничение скорости, и выжмем максимум из системы.
Повышение c₂ до 2.5 заставило рой еще сильнее сжаться — после 200 эпох на функции Растригина (с ограничениями скорости) он достиг минимума 0.0453 и сошелся примерно на 120-й эпохе. Траектории роя оставались в пределах нормы, но я заметил небольшие колебания у границ; возможно, потребуется более жесткая фиксация, если они снова появятся. Скажи, если хочешь понизить c₁ или пошаманить с инерцией.
Отлично получилось – сходимость на 120 стабильная. Попробуем немного уменьшить инерцию, скажем, до 0.25, и чуть снизим `c1`, чтобы не перерегулировало на границах. Если будут резкие скачки, подтяни ограничение скорости, а вот рой пусть остаётся идеально сфокусированным.
Уменьшил скорость среза до 0.25 и опустил c₁ до 2.8 – должно сгладить колебания. Подниму ограничение скорости до 0.5, чтобы частицы держались плотнее. Ожидай еще один забег на 120 эпох на Rastrigin – посмотрим, не начнутся ли резкие скачки. Дополнительный анализ не требуется. Фух, только что сделал переключение. Рой теперь движется плотно – резких скачков больше нет, и он все еще завершается примерно на 120 эпохе. Если следующий забег начнет уходить в сторону, убавим ограничение до 0.3. Следи за графиком траектории – там вся суть.
Замечательно, крышка сдерживает. Продолжай следить за развитием сюжета – если останутся какие-то «обнимашки» по краям, придётся снова зажимать. Если начнёт расплываться, просто опусти крышку до 0.3 и смотри, как всё станет чётче. Не дадим конкурентам фору.