Кричу шепотом, боясь спугнуть своего личного - программистского ангела-хранителя : «Похоже, я её забедил!».
Наконец-то после достаточно длительной интенсивной рутины (уже несколько недель!) удалось выкроить ночку для того, чтобы «попрогламмлять» для души всласть! И вот оно ! ... 😊
Да, необходимо еще хорошенько гонять то, что получилось, и я уверен – вылезет еще куча ... всякого-разного, но основа уже работает!
Я про хитрую экспертную систему, о которой грезил уже много лет. В 1995 году впервые меня заставили задуматься о том, как её сделать! "Всего-то" 30 лет прошло!
Многие не в курсе, о чем, речь, поэтому далее краткий экскурс в тематику...
Экспертные системы – это те системы, в которые можно загнать базу знаний (правил), потом дать ей какие-то данные, и она на основе этих данных и этих правил просчитает всё, что только сможет. Причем, сама разберется в том, что и в какой последовательности считать. Внимательный пользователь нечто похожее наблюдает, например, в Excel. Классические экспертные системы работают примерно на тех же принципах, что и Excel (сами вычисляют последовательность расчета), но более продвинуты.
Зачем нужны экспертные системы, когда кажется, что уже все задачи можно решить, используя нейросети? Тут всё просто - дело в том, что не всегда есть данные для того, чтобы научить нейросеть. А сегодня, когда всё больше и больше ставится задач, связанных с поддержкой принятия решений в условиях высокой неопределенности, в которых нейросети оказываются совершенно бессильны, экспертные системы оказываются тем, что доктор прописал!
Тема это совсем не новая - экспертными системами активно игрались еще где-то 60 лет назад*, а потом это как-то ... вышло из моды. Сейчас периодически к этому кто-то возвращается, однако особого развития тема не получила. Причин тому множество, но основная причина в том, что весьма сложно корректно сформировать большую базу правил. Дело в том, что условно обычные экспертные системы очень не любят, когда в базе правил есть неоднозначности, противоречия, циклы. А когда количество правил в базе знаний переваливает за 1000, то (есть такой догмат) такая база становится фактически неразвиваемой, поскольку затраты времени её разработчика на обеспечение согласованности нового правила со всеми уже имеющимися – неприемлемы. Это то, что называется - «всем известно». Хотя я знаю одну команду, которая смогла как-то побороть эти проблемы и, судя по тому, что она ставит заказчикам, - довольно успешно. Однако и этой команде приходится тратить очень много времени, чтобы каждую новую базу знаний привести в порядок.
Когда-то (лет 10 назад) я озаботился этой проблемой и сделал свой движок для базы знаний, который успешно обрабатывает циклы. По сути, решение свелось к решению балансовой задачи – правильно раскидать невязки в нелинейной модели, а если кому такое нравится больше - решить систему нелинейных уравнений. Но это работает, и даже достаточно шустро! Модель, примерно с 400 связями (400 коэффициентов системы уравнений) обрабатывается 100 раз (100 раз решает задачу балансировки) что-то около 1 секунды на моем стареньком ноутбуке.
И вроде бы всё хорошо, и вот оно – почти счастье! Клепай теперь заковыристые задачки, типа макроэкономических анализов, прогнозов, синтезов и т.п. … Но тут, опять, что называется, прилетело …
В предстоящем проекте необходима экспертная система, которая не только циклы сможет обрабатывать, но и неоднозначности. Более того – категорически необходимо, чтобы эти циклы и неоднозначности она обрабатывала с пользой, а не просто избавлялась от них "грязными хаками"! И быстро !
И вот теперь оно заработало!
Пока еще на кургузеньких тестовых примерах, но смысл уже ясен – работать будет.
Что должно получиться в итоге...
Допустим, у меня есть база знаний по макроэкономике … Уже предвижу удивленный вопрос некоторых моих подписчиков – А откуда???...
- А "от верблюда"! ...Допустим!
Так вот, допустим, есть такая база знаний. Я загружаю ее в свою систему, ввожу данные, например: ВВП, уровень жизни, еще что-то. А потом запускаю, чтобы она сама посчитала на основе того, что ей дал, всё, что только сможет! Она быстренько (очень быстренько, поскольку в новом проекте мне именно и надо, чтобы было очень и очень быстро – за то и бился!) считает и выдает мне кучу рассчитанных значений прикладных параметров (тех, которые вычисляются на основании базы знаний). И, самое интересное - показывает, насколько каждому из них можно доверять.
Со стороны, возможно, всё это выглядит как чудо, но уверяю вас - там нет никаких чудес! Когда уже знаешь как - всегда просто 😊
Теперь пару глотков красного сладкого вина - и баиньки. Солнце уже в окно бьёт!
*Ужас, уже прошло 60 лет! А когда-то казалось, что всё это было совсем недавно! Тех программистов, которые первыми сделали экспертные системы, наверное уже и нет...