Это своего рода странный вопрос, и может быть не совсем подходит для переполнения стека, но я не мог найти ничего об этом в Интернете, поэтому здесь ...Генерация случайных математических функций
Есть (или как лучше всего) генерировать случайные математические функции? Под этим я не имею в виду, что мне нужна функция, которая генерирует случайное число (строка RNG), но я хочу динамически создать некоторую функцию, которая отображает один или несколько реальных входов из домена в один вывод с использованием некоторого мутанта .
Например, в простейшем случае я мог бы просто сгенерировать функцию вида f(x1,x2) -> Y
, применяя случайный оператор к x1 и x2. Например е могут быть:
f = x1 + x2
or f = x1 - x2
or f = x1 * x2
etc...
Однако, я хотел бы иметь возможность включать более сложные формулы, включая тригонометрию, функцию питания, псевдослучайные константы, возможно, некоторые функции математического анализа, и т.д. ... Очевидно, что я не могу просто сцепить разные куски совершенно случайным образом, так как эти функции всегда должны иметь действительный синтаксис.
Это не что-то связанное с криптосвязью, поэтому оно не должно быть совершенным, но чем больше энтропия, тем лучше. Было бы также здорово, если бы был простой способ отслеживать, какие операции предварительно формируются и мутировать их.
Я не уверен, что если у кого есть какие-либо идеи по этому поводу, или, если это даже имело смысл, но все равно спасибо
Есть слишком много способов решить эту проблему. Ответы просто превратились бы в соломенный опрос, который понравился одному человеку.Лучше всего сделать некоторые исследования по теме самостоятельно, найти два или три, проанализировать их, определить, работают ли они на вас или нет, и вывести их из себя. Приходите к нам, когда у вас есть конкретный вопрос о том, что вы пытались сделать. –
Это не очень точно сформулированный вопрос. Что вы подразумеваете под «сгенерированием функции»? Вы хотите просто показать функцию как текст? Или сгенерировать код, который выполняет эту функцию? Знаете ли вы, какие операции вы хотите ограничить своим поколением (например, включают ли трансцендентные функции или всего 4 операции +, -, *, /)? Один из подходов - написать генератор дерева синтаксического анализа, а затем перевести дерево разбора в выражение. Генератор дерева разбора применил бы случайность в каждом узле дерева. – lurker
Вам нужны ограничения (особенно по глубине, или генерация никогда не может заканчиваться) при построении генератора этого типа, иначе вы можете в конечном итоге получить такие термины, как (например, как пример): 'gamma (sqrt (gamma (sqrt (гамма (sqrt (sin (x + sqrt ((гамма (sqrt (x)))))))))))) ' –