SciPy 차동 진화

Scipy Chadong Jinhwa



이 문서는 SciPy Differential Evolution(DE)에 관한 것입니다. SciPy는 Python 언어의 라이브러리이고 Differential Evolution은 SciPy 라이브러리의 메서드 또는 기능입니다. 대부분의 사람들은 개발자이든 아니든 Python을 배우고 있습니다. Python의 수많은 라이브러리와 기능이 매우 안전하고 신뢰할 수 있기 때문입니다. SciPy는 미분 및 대수 방정식, 보간, 최적화 등을 해결하는 데 자주 사용됩니다. 여기서는 Python 애플리케이션에서 SciPy 미분 진화 기능을 구현하는 방법을 이해하는 데 도움이 되도록 SciPy DE 사용법에 대해 설명합니다.

Python 언어에서 SciPy Differential Evolution이란 무엇입니까?

Scipy는 과학적 및 수학적 문제를 해결하는 데 사용되는 피상적이고 무료이며 이해하기 쉬운 라이브러리입니다. SciPy는 라이브러리가 귀중한 모듈로 가득 차 있기 때문에 개발자에게는 보물 상자입니다. SciPy는 유용한 알고리즘 클러스터로 NumPy 기능을 확장합니다. SciPy 라이브러리에는 scipy.io, scipy.optimize 등과 같이 계산에 사용할 수 있는 하위 패키지가 있습니다. SciPy는 scipy.optimize 패키지에서 '차등 진화' 기능과 많은 강력한 기능을 생성합니다. scipy.optimize는 Python 애플리케이션에서 최적화에 사용됩니다.

Differential Evolution Function은 다변량 함수의 글로벌 최소값을 찾는 데 사용되는 SciPy 최적화 패키지에서 획득한 글로벌 함수입니다. 비선형이고 미분할 수 없는 다차원 목적 함수를 관리할 수 있습니다. 연속 공간 함수의 영역을 검색하는 데 사용되는 검색 알고리즘입니다. 이 함수는 실제 값에서 작동합니다.







Differential Evolution 함수의 구문

Differential evolution 함수는 Differential_evolution() 함수를 사용하는 Python에 있습니다. 미분 진화 함수의 구문은 다음과 같습니다.





함수 매개변수를 살펴보겠습니다.





함수는 f(x,*args)로 호출 가능해야 합니다. bounds는 두 가지 방법으로 지정할 수 있는 일련의 변수를 나타냅니다. 전략은 선택 사항이거나 기본값이 'best1bin'인 문자열입니다. maxiter는 선택적이거나 int 값입니다. popsize는 int 또는 선택적입니다. tol은 int 또는 선택적입니다. 돌연변이 값은 float 또는 optional입니다. 재결합 값은 float 또는 optional입니다. 시드는 none, int, NumPy 및 Random입니다.

다음 섹션에서는 쉬운 예제를 통해 미분 진화 함수에 대해 설명합니다.



예 1

미분 진화 함수의 개념을 이해하는 데 관심을 갖게 될 직접적인 예부터 시작하겠습니다. 최소값을 찾기 위해 Differential_evolution() 함수를 사용했습니다. 그러나 최소값을 찾으려면 함수에 검색 범위와 정의된 호출 가능한 목적 함수가 필요했습니다. 결과적으로 프로그램에서 differential_evolution 함수를 사용하기 전에 함수를 정의합니다. 프로그램의 참조 코드는 다음과 같습니다.

수입 넘피 같이 예를 들어
~에서 싸이피 수입 최적화하다
~에서 사이피. 최적화하다 수입 미분_진화
수입 matplotlib입니다. 파이플롯 같이 파이
~에서 매트플롯립 수입 센티미터

데프 기능 ( ) :

~와 함께 , 엑스 =

시간 = 예를 들어 평방미터 ( 와 함께 ** 4 + 엑스 ** 4 )

반품 예를 들어 평방미터 ( 시간 )


DE_bounds = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

입술 = 미분_진화 ( 기능 , DE_bounds )

인쇄 ( 입술 )

배열 수치 계산을 위해 SciPy 및 NumPy와 같은 라이브러리를 가져왔습니다. scipy.optimize 모듈에서 differential_evolution 함수를 가져왔습니다. 그런 다음 키워드 'def'를 사용하여 호출 가능한 목적 함수를 정의하고 매개 변수 'p'를 전달합니다. NumPy 변수 추가의 제곱근인 z, x를 찾는 함수를 성공적으로 정의했습니다. 제곱근 값은 변수 'h'에 저장됩니다. 정의된 함수에서 제곱근 값을 반환합니다. 인수로 반환됩니다.

그런 다음 함수의 최소값과 최대값을 설명하여 항목화할 수 있는 변수의 경계를 정합니다. 'DE_bounds''를 인수로 하는 differential_evolution 함수를 실행합니다. res라는 변수로 함수 값을 호출했습니다. 마지막으로 print 문을 사용하여 출력을 표시합니다. 프로그램을 실행한 후 결과가 표시되었습니다. 예상되는 출력 스크린샷은 다음과 같습니다.

Differential_evolution()은 함수의 최소값이 (0, 0) 지점에 표시됨을 보여줍니다.

예 2

이것은 미분 진화 함수의 또 다른 예입니다. 여기서는 배열을 가져와 배열 간에 다른 작업을 적용합니다. 프로그램의 참조 코드는 다음과 같습니다.

수입 넘피 같이 예를 들어
~에서 싸이피 수입 최적화하다
~에서 사이피. 최적화하다 수입 미분_진화

데프 objective_func ( ) :
반품 ( [ 1 ] - 1.2 ) / 2 + 0.5 * 디 [ 0 ] * 1.3 * ( [ 1 ] + 0.5 ) **

_범위 = [ ( - 0.3 , 0.3 ) , ( - 0.3 , 0.3 ) ]

디스플레이 = 미분_진화 ( objective_func , _범위 , 팝사이즈 = 80 , 광택 = 거짓 )

인쇄 ( 디스플레이 )

이전 스크린샷에서 볼 수 있듯이 SciPy.optimize.differential_evolution 라이브러리와 NumPy 라이브러리를 프로그램으로 성공적으로 가져왔습니다. 이제 최소값을 찾는 목적 함수를 정의합니다. 목적 함수에 수식을 전달하고 정의된 함수에 대한 인수로 값을 반환했습니다. 함수 값 사이의 경계는 필수입니다. 따라서 함수를 정의한 후 두 값(최대 및 최소)을 모두 고정했습니다.

모든 필수 변수를 정의한 후 함수의 최소값을 찾기 위해 Differential_evolution 함수를 호출했습니다. 함수의 최소 반환 값을 disp라는 변수에 저장했습니다. 프로그램의 끝에서 결과를 표시하기 위해 print 문에 disp 변수를 전달합니다. 프로그램을 실행하면 정의된 함수의 최소값이 범위와 함께 화면에 표시됩니다. 다음은 출력입니다.

예 3

보시다시피 미분 진화는 정의에 따라 목적 함수의 다른 최소값을 반환합니다. 여기에서는 Differential_evolution()과 관련된 또 다른 예를 들어 보겠습니다. 이 프로그램의 참조 코드는 다음과 같습니다.

수입 넘피 ~처럼 예를 들어
~에서 싸이피 수입 최적화하다
~에서 사이피. 최적화하다 수입 미분_진화

데프 obj_func ( 오퍼레이터 ) :
반품 ** 9 / 0.2 + 6 / * 2 ** 이십

경계 = [ ( - 0.5 , 0.5 ) , ( - 0.5 , 0.5 ) ]

밖으로 = 미분_진화 ( obj_func , 경계 , 광택 = 진실 )

인쇄 ( '출력은 : ' , 밖으로 )

라이브러리 없이는 원하는 작업을 수행할 수 없기 때문에 라이브러리를 이 프로그램으로 성공적으로 가져왔습니다. 결과적으로 프로그램에 SciPy 라이브러리를 포함합니다. 그런 다음 필요한 연산으로 목적 함수를 정의합니다. 정의된 함수의 최소값을 찾습니다. 함수의 경계를 조정한 후 함수의 최소값을 찾기 위해 미분 진화에서 정의된 함수를 호출했습니다. 그런 다음 변수에 보관됩니다. print 문에서 이 변수를 호출하여 이를 표시합니다. 이 프로그램의 출력은 다음과 같습니다.

이전 스크린샷에서와 같이 함수의 최소값은 [0.29236931, 0.16808904]입니다. Differential_evolution 함수 개념을 더 잘 이해하기 위해 환경에서 이러한 예제를 실행할 수도 있습니다.

결론

이 기사를 간단히 요약해 보겠습니다. Python의 SciPy 라이브러리에 속하는 차동 진화 방법의 기본 기능을 파악했습니다. Python은 수많은 유연한 라이브러리가 있는 최신 언어입니다. 대부분의 개발자는 미리 정의된 함수와 라이브러리를 통해 복잡한 코드 구조를 해결하는 데 도움을 받았습니다. Differential evolution은 SciPy 패키지 최적화 기능 또는 최소화에 사용되는 방법입니다. 코드에서 이러한 이전 예제를 사용하면 차동 진화의 개념을 더 명확하게 이해할 수 있습니다.