Дифференциальная эволюция терпит неудачу при добавлении рабочего аргументаPython

Программы на Python
Ответить
Anonymous
 Дифференциальная эволюция терпит неудачу при добавлении рабочего аргумента

Сообщение Anonymous »

Чтобы настроить функцию подгонки кривой Different_evolve, я позаимствовал значительную часть данных из https://bitbucket.org/zunzuncode/ramans ... aphyFit.py. Моя реализованная функция работает отлично, когда я не использую «работников».
Мой минимальный воспроизводимый пример:

Код: Выделить всё

#### Python 3.9 ####
#### Windows 10 ####

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import warnings
from scipy.optimize import differential_evolution as DE

def LCR(f, L, C, R):
TPF = 2*np.pi*f
return np.sqrt(R**2 + (TPF*L - 1/(TPF*C))**2)

def sumOfSquaredError(parameterTuple):
warnings.filterwarnings("ignore")
return np.sum((ydata - LCR(xdata, *parameterTuple))**2)

def generateParameterBounds():
parameterBounds = []
parameterBounds.append([1,5]) # parameter bounds for L
parameterBounds.append([1,5]) # parameter bounds for C
parameterBounds.append([1,5]) # parameter bounds for R
result = DE(sumOfSquaredError, parameterBounds, popsize=30, init='sobol', polish=False, seed=3)
# result = DE(sumOfSquaredError, parameterBounds, popsize=30, init='sobol', polish=False, workers=2, seed=3)
return result.x

xdata = np.linspace(1e-3,1,1000)
ydata = LCR(xdata,1.5,2,2.5) + np.random.randn(len(xdata))
plt.plot(xdata, ydata, 'b-', label='Measured')

#### REGULAR CURVE FIT ####
popt, pcov = curve_fit(LCR, xdata, ydata, bounds=([1, 1, 1], [5, 5, 5]))
print(*popt)
fit = LCR(xdata, *popt)
plt.plot(xdata, fit, 'g-')

#### DIFFERENTIAL EVOLUTION CURVE FIT ####
ParameterRanges = generateParameterBounds()
geneticParameters, pcov = curve_fit(LCR, xdata, ydata, ParameterRanges, maxfev=1000000)
print(*geneticParameters)
g_fit = LCR(xdata, *geneticParameters)
plt.plot(xdata, g_fit, 'r-')

plt.show()
Когда я комментирую/раскомментирую две строки result = DE(...), добавляющие рабочий параметр, я получаю следующую ошибку.
Ошибка:

Код: Выделить всё

RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.

This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:

if __name__ == '__main__':
freeze_support()
...

The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.
Я не знаю, как использовать этот комментарий об ошибке для обновления моего кода. Я бы хотел остаться в рамках пакета scipy.optimize, если это возможно.

Подробнее здесь: https://stackoverflow.com/questions/793 ... t-is-added
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»