파이썬 최적화 문제 시작하기

배경.


3탄이지만 제목처럼 입문편으로 실었다.

이른바 최적화 문제


간단하게 말하면 어떤 정의 함수의 최소값을 내보내는 문제다.

정의 함수 예


간단한 2차 함수를 선택합니다.
def f(x):
    return x**2
알기 쉽게 그리다.
import matplotlib.pyplot as plt
import numpy
x = numpy.arange(-5, 5.1, 0.1)
plt.plot(x, f(x))
plt.show()

네, 아주 간단한 예입니다.

주의 사항 정의


최적화 문제의 함수는scipy에 포함됩니다. (미리 설치하십시오)
여기서 주의해야 할 것은 일반적으로 import이 정의하면 욕을 먹는다는 것이다.
import scipy
scipy.optimize
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'optimize'
scipy.optimize를 사용하려면 공식 사이트에도 쓰여 있습니다
from scipy import optimize
정의할 수 있습니다.

최적화


일반 활강 기호법, Nelder – Mead법으로 진행됩니다.
이것은 scipy에서 scipy입니다.optimize.fmin 함수와 일치합니다.
이 함수 뭐였지?어떻게 사용하더라?이 경우 numby입니다.info를 통해 확인할 수 있습니다.
import numpy
from scipy import optimize
numpy.info(optimize.fmin)
 fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None,
      full_output=0, disp=1, retall=0, callback=None, initial_simplex=None)

Minimize a function using the downhill simplex algorithm.

This algorithm only uses function values, not derivatives or second
derivatives.

Parameters
----------
func : callable func(x,*args)
    The objective function to be minimized.
x0 : ndarray
    Initial guess.
args : tuple, optional
    Extra arguments passed to func, i.e. ``f(x,*args)``.
xtol : float, optional
    Absolute error in xopt between iterations that is acceptable for
    convergence.
ftol : number, optional
    Absolute error in func(xopt) between iterations that is acceptable for
    convergence.
maxiter : int, optional
    Maximum number of iterations to perform.
maxfun : number, optional
    Maximum number of function evaluations to make.
full_output : bool, optional
    Set to True if fopt and warnflag outputs are desired.
disp : bool, optional
    Set to True to print convergence messages.
retall : bool, optional
    Set to True to return list of solutions at each iteration.
callback : callable, optional
    Called after each iteration, as callback(xk), where xk is the
    current parameter vector.
initial_simplex : array_like of shape (N + 1, N), optional
    Initial simplex. If given, overrides `x0`.
    ``initial_simplex[j,:]`` should contain the coordinates of
    the j-th vertex of the ``N+1`` vertices in the simplex, where
    ``N`` is the dimension.

Returns
-------
xopt : ndarray
    Parameter that minimizes function.
fopt : float
    Value of function at minimum: ``fopt = func(xopt)``.
iter : int
    Number of iterations performed.
funcalls : int
    Number of function calls made.
warnflag : int
    1 : Maximum number of function evaluations made.
    2 : Maximum number of iterations reached.
allvecs : list
    Solution at each iteration.
이런 형식으로 매개 변수, 출력, 이 함수의 의미 등 세부 사항을 볼 수 있습니다.
구문을 사용합니다.
optimize.fmin(f, 1)
Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 18
         Function evaluations: 36
array([-1.77635684e-15])
최소값은 -1.777635684e-15로 계산된다.
기타 내용은 함수 값, 최적화 시 교체 횟수와 함수 횟수 등이다.

보태다


일정한 범위 내에서optimize입니다.fminbound라는 함수도 있다.
optimize.fminbound(f, 2, 3, full_output=1)
(2.000005960860986, 4.000023843479476, 0, 25)
말하자면, 한 번 함수면optimize다.brent라는 함수도 존재합니다.
optimize.brent(f, brack=(1,2), full_output=1)
(0.0, 0.0, 4, 5)
더 나아가optimize.함수minimize가 있습니다.
optimize.minimize(f, 1.0, method='Nelder-Mead')
final_simplex: (array([[-8.8817842e-16],
       [ 9.7656250e-05]]), array([7.88860905e-31, 9.53674316e-09]))
           fun: 7.888609052210118e-31
       message: 'Optimization terminated successfully.'
          nfev: 34
           nit: 17
        status: 0
       success: True
             x: array([-8.8817842e-16])
미니미즈 공식 문서 다른 다양한 방법을 볼 수 있습니다.
이상은 최적화 문제의 입문편이다.

좋은 웹페이지 즐겨찾기