5

Я работаю над SDK с нечеткой логикой в ​​течение последних 3 месяцев, и это дошло до того, что мне нужно начать интенсивно оптимизировать двигатель.Использование машинного обучения для прогнозирования краха и стабилизации сложных систем?

Как и в случае с системами AI, основанных на «полезности» или «потребностях», мой код работает, размещая различные рекламные объявления по всему миру, сравнивая указанные рекламные объявления с атрибутами различных агентов и «забивая» рекламу [по каждому агенту основы] соответственно.

Это, в свою очередь, производит очень повторяющиеся графики для большинства симуляторов одного агента. Однако, если принимать во внимание различные агенты, система становится очень сложной и значительно более сложной для моего компьютера для имитации (поскольку агенты могут транслировать рекламные объявления друг с другом, создавая алгоритм NP).

Внизу: Пример повторяемостью системы, рассчитанной на 3 атрибутов в одном агенте:

Топ: Пример системы, рассчитанной на 3 атрибутов и 8 агентов:

exp-system

(Свернуть это в начале и восстановить вскоре после этого. Это лучший пример, который я мог бы создать, который бы поместился на изображении, так как восстановление обычно очень медленное)

Как видно из обоих примеров, даже по мере увеличения количества агентов система все еще очень повторяется и, следовательно, тратит драгоценное время вычисления.

Я пытаюсь перестроить программу таким образом, чтобы в периоды высокой повторяемости функция обновления непрерывно повторяла линейный график.

Хотя, конечно, мой код нечеткой логики может предсказать заранее, чтобы рассчитать коллапс и/или стабилизацию системы, что очень сильно влияет на мой процессор. Я считаю, что машинное обучение было бы лучшим путем для этого, поскольку кажется, что, как только система создала свою первоначальную настройку, периоды нестабильности всегда кажутся примерно одинаковой длины (однако они встречаются в «полу», случайное время. Я говорю полу, поскольку его обычно легко заметны с помощью различных рисунков, показанных на графике, однако, как и длина неустойчивости, эти шаблоны сильно отличаются от настроенных для настройки).

Очевидно, что если неустойчивые периоды имеют одинаковую длину, как только я узнаю, когда система разрушается, ее значительно легко понять, когда она достигнет равновесия.

На боковой ноте об этой системе не все конфигурации на 100% стабильны в периоды повторения.

Это очень хорошо видно на графике:

exception

Таким образом, решению машинного обучения будет нужен способ, чтобы различать «Псевдо» коллапсирует, а также полные обвалы.

Насколько жизнеспособным будет использование решения ML? Может ли кто-нибудь рекомендовать какие-либо алгоритмы или подходы к реализации, которые будут работать лучше всего?

Что касается доступных ресурсов, то код подсчета вообще не сопоставляется с параллельными архитектурами (из-за явных взаимосвязей между агентами), поэтому, если мне нужно посвятить один или два потока ЦП для выполнения этих вычислений, , (Я бы предпочел не использовать GPU для этого, поскольку GPU облагается налогом с не связанной с AI частью моей программы).

Хотя это, скорее всего, не изменит ситуацию, система, в которой работает код, имеет 18 ГБ ОЗУ, оставшихся во время выполнения. Таким образом, использование потенциально высокорейтингового решения было бы, безусловно, жизнеспособным. (Хотя я бы предпочел избежать этого, если это необходимо)

+0

Итак, вместо того, чтобы делать эксперимент, вы хотите заменить его оценкой того, как он может выглядеть? – ziggystar

+0

Да, это именно то, что я хочу сделать. –

+0

Это звучит как неприятная идея. Если бы вы могли как-то вывести, что ваша система периодически от знания своей внутренней работы, это было бы нормально. Но, глядя на какой-то вывод и предполагая, что он, вероятно, продолжится таким образом, кажется, ошибочен. – ziggystar

ответ

2

Да, я также не уверен, есть ли лучшее место на StackExchange для этой темы, но я дам ему шанс, поскольку у меня есть некоторый опыт в этой области.

Это проблема, которая часто встречается при разработке систем управления. Его часто называют проблемой моделирования временных рядов черного ящика. Это «черный ящик» в том смысле, что вы не знаете, что именно внутри. Вы даете ему несколько входов, и вы можете измерить некоторые выходы. Учитывая достаточный объем данных, достаточно простую систему и соответствующий метод моделирования, часто можно приблизить поведение системы.

Многие методы моделирования для этого вращаются вокруг принятия определенного дискретного количества прошлых входов и/или измерений и пытаются предсказать, какими будут следующие измерения во времени. Это часто называют autoregressive model.

В зависимости от сложности системы, которую вы пытаетесь моделировать, выбор nonlinear autoregressive exogenous model может быть лучшим выбором. Это может быть в виде нейронной сети или radial basis function, которая еще раз принимает последние n измерений во времени в качестве входов и дает предсказание следующего измерения в качестве выхода.

Глядя на ваши данные, применяя аналогичные методы, простые модели колебательного поведения можно легко построить. Что касается вашего краха или псевдо-коллапсного моделирования, я думаю, что это можно было бы захватить, используя достаточно сложную модель, но может быть сложнее.

Итак, давайте рассмотрим простой пример, чтобы попытаться проиллюстрировать, как вы можете построить авторегрессионную модель какого-то колебательного поведения.

Для системы, мы возьмем простую гармоническую волну с частотой, и немного гауссовского шума, добавленным в. Это может быть представлены, как показано ниже с измерением x, некоторой частотой \omega и гауссовским шумом \phi в некоторых дискретная точка времени k.

x_k = sin(\omega t_k) + \phi_k

Используя это, мы можем произвести измерения в течение нескольких секунд данных. Затем мы создадим набор данных, состоящий из 2 массивов. Первые содержащие наборы исторических измерений G для любого временного шага, а вторая содержит измерения на любом заданном временном шаге H.

Если мы используем линейную модель от wikipedia article, параметры b для модели авторегрессии можно найти с линейной регрессией, используя linear least squares method.

H = Gb

b = (G^T G)^{-1} G^T H

Сравнивая результаты этой модели непосредственно к набору данных, довольно легко получить точные результаты для этой проблемы игрушек. Если нужно предсказать только один шаг в будущем, а реальные измерения будут снова собраны перед тем, как сделать следующее предсказание, ошибка в предсказаниях не накапливается. Это иногда называют предсказаниями с открытым контуром.

open loop predictions from AR model

Замкнутое предсказание петли, где вы только придают модели одно начальное измерение. После этого вы используете свои собственные прогнозы как вход для последующих прогнозов. Шум в предсказаниях может накапливаться, делая долгосрочное предсказание неточным. Хотя эти долгосрочные прогнозы могут быть неточными, это не означает, что результаты не будут одинаковыми или достаточно хорошими. Я немного поиграл с игрушечной системой выше, и мои предсказания с замкнутым циклом, как правило, недооценивали амплитуду и часто приводили к затухающему колебанию правильной частоты.

closed loop predictions from AR model

Если такие проблемы, как это происходит, вы можете добавить еще исторические образцы в качестве входных данных для вашей модели, дать ему больше данных обучения или использовать более нелинейную модель.

В описанной выше проблеме с игрушками моделируется только одно значение. На ваших графиках кажется, что есть несколько «каналов» данных от агентов и что они каким-то образом взаимодействуют друг с другом. Чтобы моделировать это поведение, вы можете включить n исторических значений из каждого канала в качестве входов в вашу модель, и выходы будут прогнозами каждого канала.

Пожалуйста, дайте мне знать, если я смогу прояснить это в некотором роде, чтобы лучше решить вашу проблему. Я могу разделить код matlab, который я использовал на игрушечной проблеме, если у вас есть интерес.

+0

Не думаю, что необходимы какие-либо разъяснения: D. С помощью моего собственного метода, описанного выше с использованием цепей Маркова, у меня все еще была проблема неспособности полностью отличать псевдообложения от коллапсов. Я знаю, вы сказали, что это будет намного сложнее, но можете ли вы порекомендовать какие-либо способы приблизиться к этому? –

+0

Ну, это действительно зависит от того, что вы пытаетесь моделировать относительно того, насколько сложнее было бы. К сожалению, не пытаясь это сделать, трудно определить, требуется ли нечто большее, чем линейная модель. Еще один фактор, который следует учитывать, заключается в том, хотите ли вы моделировать фактическое поведение или моделировать то, что выглядит «достаточно близко». Если вам нужно только «достаточно близко», все становится намного проще. – kerblogglobel

+0

Кроме того, что-то, о чем следует помнить, это модели, которые так же хороши, как данные, с которыми вы их тренируете.Если вы надеетесь воспроизвести полное коллапс и поведение псевдо-краха, важно иметь примеры как в вашем наборе учебных материалов. – kerblogglobel

0

Я пришел к выводу, что лучший способ сделать это - использовать цепь марков. Вместо того, чтобы использовать один для хранения ряда атрибутов, я сохраняю вероятность следующей рекламы, которую агент будет выбирать.

Итак, если я ем, есть 15% шанс, что я буду спать дальше. Тогда, если я сплю, есть 70% шанс, что я пойду на работу по утрам. Очевидно, просто сделайте rand() между итерациями

Смежные вопросы