2016-09-30 9 views
0

Visual Studio C++을 플랫폼으로 사용하여 전역 최소값으로 수렴하려고합니다.유전자 알고리즘을 사용하여 2 가변 함수의 전역 최소값에 수렴

이 함수가 블랙 박스 함수라고 가정 해 봅시다. 여기서 입력 (x, y)에 z를 얻습니다.

또한 사용 된 알고리즘은 샘플을 이진 코드로 변환하지 않고 대신 부동 소수점으로 변환하는 실제 값 유전 알고리즘입니다. 가변 기능 -

https://karczmarczuk.users.greyc.fr/TEACH/IAD/GenDoc/carrGenet.pdf

I는 2의 최소치를 찾는 부록 B. 거기에 언급 된 알고리즘을 사용 하였다.

F (X, Y) = Z I 문제의 그래프를 얻을 수있는 그리드 값 검색했을

. 나는 그래프를 첨부했다. 여기

f(x,y) = z

그래프 만 한 점 (0.6, 1.3)에있을에서 볼 수 있듯이, 그래프의 최소값.

0.1의 배수로 (x, y)의 불연속 값을 사용하면 알고리즘이 수렴됩니다. 예를 들면. 0.8,0.9,2.2,5.6 등. 그러나 그렇지 않으면 수렴하지 않습니다.

그래프를 알고리즘에 맞게 수정할 수 있습니까? 아니면 알고리즘을 수정하여 함수를 최소화 할 수 있습니까?

+1

왜 그래프를 수정하겠습니까? 마치 집에 더 많은 공간을두고 싶을 때 사진을 찍어 집을 크게 만드는 것과 같습니다. 그리고 어떤 알고리즘? – plasmacel

+0

@plasmacel 처음에는이 그래프를 얻기 위해 z의 로그를 취했습니다. 알고리즘을 수렴하기가 쉽도록 다시 처리하는 다른 방법이 있다면. –

+3

최소화 할 함수 나 최소화 알고리즘에 대한 정보는 제공하지 않습니다. 어떻게 도움을 기대합니까? – plasmacel

답변

2

여기 전체적으로 매우 뾰족한 부분입니다. 당신은 그것에 빠지기 위해 많은 행운이 필요합니다 (즉, 실제로 그것을 발견 할 기회가 거의없는 많은 무작위 개인).

경사면에서 개인을 구하면 GA가 최적으로 수렴합니다. 그래서 나는 더 매끄러운 최적을 얻거나 더 많은 무작위 값을 시도 할 것을 조언 할 것이다.

+0

그래프를 더 부드럽게 만들 수있는 방법이 있습니까? 아니면이 알고리즘을 시도 할 수있는 알고리즘이 있습니까? –

+0

우리는 함수를 명시 적으로 알지 못해서 더 매끄럽게 만들 수 있는지 알 수 없습니다. 또한 문제 도메인을 아는 것도 도움이 될 수 있습니다. – Ray

+0

@Ray 명시 적 기능이 없으므로이 그래프는 기본적으로 내 시뮬레이션에서 2 개의 입력 변수를 출력 중 하나에 공동 연결하려고합니다. 나는 0.05의 폭을 가진 x - (-2,2)와 y - (0.5,10)의 도메인에서 함수를 스캔하여 출력에 대해 그려 냈다. 이것이 내가이 그래프를 얻은 방법입니다. –

0

블랙 박스의 난수 생성기 부분을 고려하면 확실하지 않습니다. 무작위 초기화 나 무작위 돌연변이 발생의 방식으로 입력 함수에 구조가 있습니까?

+0

함수의 극단 대부분이 그래프의 한 부분에 집중되어 있기 때문에 반복 할 때마다 그 영역에 더 가깝다고 생각합니다. 돌연변이는 동일한 샘플 공간 내에서 무작위로 생성됩니다. –

+0

@RahulKaruppiah 나는 '점프 돌연변이'에 대한 아이디어를 발견했습니다. [여기] (https://github.com/orthopteroid/psychic-sniffle)는 표현형의 바이트 분포를 사용하여 돌연변이를 수행하고 임의의 인구 합성을 수행하는 코드입니다. –