Я бы не рекомендовал генетические алгоритмы. Вместо этого перейдите на Оптимизацию вперед.
Scipy имеет некоторые ресурсы.
Вы не указали какие-либо данные или нет, так что я просто отправлю что-то, что должно бежать. Ниже вы можете начать. Я не знаю, работает ли это, не видя данных. Кроме того, вероятно, есть способ динамически подавать objectivefunc
ваши данные x
и y
. Это, вероятно, в документах до scipy.optimize.minimize
.
Что я сделал. Создайте функцию для минимизации. Здесь я назвал его objectivefunc
. Для этого я взял вашу функцию y = x^2 * p^2 * g/...
и преобразовал ее в форму x^2 * p^2 * g/(...) - y = 0
. Затем соберите левую сторону и попытайтесь свести ее к минимуму. Поскольку у вас будет несколько выборок данных (x/y), я бы минимизировал сумму квадратов. Поместите все это в функцию и передайте ее до минимума из scipy.
import numpy as np
from scipy.optimize import minimize
def objectivefunc(pgq):
"""Your function transformed so that it can be minimised.
I've renamed the input pgq, so that pgq[0] is p, pgq[1] is g, etc.
"""
p = pgq[0]
g = pgq[1]
q = pgq[2]
x = [10, 9.4, 17] # Some input data.
y = [12, 42, 0.8]
sum_ = 0
for i in range(len(x)):
sum_ += (x[i]**2 * p**2 * g - y[i] * ((c**2 - x**2)**2 + x**2 * g**2))**2
return sum_
pgq = np.array([1.3, 0.7, 0.5]) # Supply sensible initivial values
res = minimize(objectivefunc, pgq, method='nelder-mead',
options={'xtol': 1e-8, 'disp': True})
В настоящее время я пытаюсь использовать второй дифференциал экспериментальных данных, чтобы узнать, могу ли я найти пики. Параметр c, как вы можете видеть, центрирует соответствующий граф, поэтому, если я могу как-то найти пики из экспериментальных данных, параметр c может быть аналитически решен для ... Кроме того, я не упомянул выше, но экспериментальные данные могут быть бесконечными сочетание волны, описанной выше, поэтому она может включать бесконечный набор параметров p, g и c, поэтому я пытаюсь решить для параметров c перед применением генетического алгоритма – ShawK
Я не уверен, что предложить , Вы просили просить [MathOverflow] (http://mathoverflow.net/) («* Для профессиональных математиков *)) или [math.stackexchange] (http://math.stackexchange.com/) (« * Для люди, изучающие математику на любом уровне и профессионалы в смежных областях *)? Вы вполне можете найти, что получите больше внимания и, возможно, ответы на них. –
Почему вы так уверены, что вам нужен генетический алгоритм? Вы устали от старого [Levenberg-Marquardt] (http://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm), как это реализовано в Levenberg-Marquardt.vi. Если это не соответствует вашим потребностям, вы можете попробовать [Waptia library] (https://lavag.org/topic/10984-cr-waptia-genetic-optimization-algorithm/) для LabVIEW с помощью одного из реализованных генетических алгоритмов. – mzu