Я экспериментировал с генетическими алгоритмами в последнее время, и теперь я хотел бы построить математические выражения из геномов (для простоты можно найти выражение, которое соответствует определенному результату).
У меня есть геномы, состоящие из генов, которые представлены байтами. Один геном может выглядеть так: {12, 127, 82, 35, 95, 223, 85, 4, 213, 228}. Длина задана заранее (хотя она должна находиться в определенном диапазоне), равно как и форма, которую она принимает. То есть любая запись может принимать любое значение байта.
Теперь дело в том, чтобы перевести это в математические выражения. Определить базовые выражения довольно просто, например: выбрать первые 2 значения и рассматривать их как продукты, выбрать 3-е значение и выбрать его как оператор (+, -, *, /, ^, mod), выбрать 4-е значение в качестве продукта и выберите 5-е значение в качестве оператора, снова работая над результатом 3-го оператора над первыми 2-мя продуктами. (или просто обрабатывать это как выражение постфикса)
Сложность возрастает, когда вы начинаете разрешать правила приоритета. Теперь, когда, например, запись под индексом 2 представляет собой «(», вы обязаны иметь «)» где-то еще, кроме записи 3, но не обязательно записи 4
Конечно, то же самое относится ко многим вещам, вы не можете получить оператора в конце, вы не можете получить свободный номер и т. Д.
Теперь я могу сделать ОГРОМНЫЙ оператор переключения (например), используя все возможные возможности, но это сделает код нечитаемым. Я надеялся, что кто-нибудь там знает хорошую стратегию, как это сделать.
Заранее спасибо!
** РЕДАКТИРОВАТЬ **
По запросу: цель, которую я пытаюсь достичь, - создать приложение, которое может разрешить функцию для набора чисел. Что касается примера, который я привел в комментарии ниже: {4, 11, 30}, и он может придумать функцию (X ^ 3) + X