설명해 주셔서 대단히 감사합니다. 중복 제거에 대한 질문이 만족스럽게 답변되었습니다. 루프의 패스 횟수 감소를 보여주는 원본 및 최적화 된 함수를 보여주는 스크립트 코드를 첨부합니다. 현재 댓글에서 저는 함수의 버그를 지적하는 것이 아니라 최적화를 제안하고 있으며, 저의 주요 목표는 중복 제거의 원리를 알아내는 것이었고 이에 대한 포괄적 인 답변을 받았습니다. 다시 한 번 라이브러리와 기능에 대한 설명에 감사드립니다.
110과 160은 20 염색체에 비해 너무 많습니다.... 카운터를 잘못된 위치에 놓았습니다.
여기가 맞습니다:
//쌍 중 두 번째 선택....for (Ch2=Ch+1;Ch2<PopulChromosCount;Ch2++)
{
//count_cicles++; // DEBUG 사이클 Ch와 Ch2를 전달한 횟수를 계산합니다.if (Ch!=Ch2 && chromosomeUnique[Ch2]!=0)
{
count_cicles++; // DEBUG는 염색체를 비교하는 횟수를 계산합니다.//동일한 유전자 개수를 초기화해 보겠습니다.
cnt=0;
//유전자가 동일하다면 유전자를 확인합니다.for (Ge=1;Ge<=GeneCount;Ge++)
{
if (Population[Ge][Ch]!=Population[Ge][Ch2])
break;
else
cnt++;
}
//동일한 유전자의 수가 전체 유전자 수와 동일한 경우//...염색체가 중복으로 인식됩니다.if (cnt==GeneCount)
chromosomeUnique[Ch2]=0;
}
알겠습니다. 이제 동일한 염색체로 동일한 모집단을 이 순서대로 시도해 보세요:
int m_init[20] = {7,7,7,3,9,2,4,5,3,3,5,6,2,4,3,5,10,6,2};
설명해 주셔서 대단히 감사합니다. 중복 제거에 대한 질문이 만족스럽게 답변되었습니다. 루프의 패스 횟수 감소를 보여주는 원본 및 최적화 된 함수를 보여주는 스크립트 코드를 첨부합니다. 현재 댓글에서 저는 함수의 버그를 지적하는 것이 아니라 최적화를 제안하고 있으며, 저의 주요 목표는 중복 제거의 원리를 알아내는 것이었고 이에 대한 포괄적 인 답변을 받았습니다. 다시 한 번 라이브러리와 기능에 대한 설명에 감사드립니다.
110과 160은 20 염색체에 비해 너무 많습니다.... 카운터를 잘못된 위치에 놓았습니다.
여기가 맞습니다:
알겠습니다. 이제 동일한 염색체로 동일한 모집단을 이 순서대로 시도해 보세요:
무엇을 관찰할 수 있을까요?
슈릭에게:
맞습니다. 모든 다른 염색체에 대한 고유성 검사 횟수는 다음 공식으로 계산할 수 있습니다.
(PopulChromosCount^2-PopulChromosCount)/220개의 염색체가 있는 예제(모든 염색체가 다르다고 가정)에서 확인 횟수는 다음과 같습니다:
(20*20-20)/2=190이 검사로 확인됩니다:
중복이 발견되면 확인 횟수는 더 줄어들게 됩니다.
프로젝트에 적극적으로 참여해 주셔서 감사합니다!
라이브러리에 적절한 변경이 이루어질 것입니다. 변경 사항이 알고리즘의 검색 기능에는 영향을 미치지 않지만, 알고리즘이 더 합리적으로 작동하도록 할 것입니다.
무엇을 보고 있나요?
변경 사항은 알고리즘의 검색 기능에 어떤 식 으로든 영향을 미치지 않습니다.
절대적으로 맞습니다. 알고리즘의 품질은 처음에는 의심했지만 이제는 나에게 그것을 증명했지만 이러한 의심에 대해 최적화 방법을 찾았습니다 :)
나는 기사를 연구했고 코드에서 이러한 불일치를 발견했는데, 범위 값을 얻기위한 두 함수에서 동일한 공식이 사용되었습니다:
즉, 두 유전자의 값을 벗어난 데이터가 얻어지며 이는 "인공 돌연변이"의 특징입니다. 이것이 버그인가요 아니면 다른 설명이 있나요?
복제 방법의 경우 부호를 변경해야하는 것 같습니다:
최소 = C1+((C2-C1)*ReplicationOffset);
최대 = C2-((C2-C1)*복제 오프셋);
기사를 살펴본 결과 코드에서 이 불일치를 발견했는데, 두 함수가 동일한 수식을 사용하여 범위 값을 가져옵니다:
즉, 두 유전자의 값을 벗어난 데이터가 얻어지는데, 이는 "인공 돌연변이"의 특징입니다. 이것이 버그인가요, 아니면 다른 설명이 있나요?
복제 방법의 경우 부호를 변경해야하는 것 같습니다:
최소 = C1+((C2-C1)*ReplicationOffset);
최대 = C2-((C2-C1)*복제 오프셋);
오류나 불일치가 없습니다. 복제와 인공 돌연변이 모두에서 새로운 유전자의 출현 가능성의 경계 (인용한 코드 섹션)는 동일한 방식으로 정의됩니다.
그러나 복제의 경우 확률의 영역은 이러한 경계 내에 있고 인공 돌연변이의 경우 이러한 경계를 넘어서는 영역에 있습니다.
복제는 두 부모 유전자의 특징적인 특성을 (경계 내에서) 전달하는 역할을 합니다.
인공 돌연변이는 부모의 유전자와는 다른 새로운 유전자를 생성하는 역할을 합니다(경계 밖).
오류나 불일치는 없습니다. 복제와 인공 돌연변이 모두 새로운 유전자의 출현 가능성의 경계 (인용하신 코드 섹션)는 동일한 방식으로 정의됩니다.
그러나 복제의 경우 확률의 영역은 이러한 경계 내에 있고 인공 돌연변이의 경우 이러한 경계를 넘어서는 영역에 있습니다.
복제는 두 부모 유전자의 특징적인 특성을 (경계 내에서) 전달하는 역할을 합니다.
인공 돌연변이는 부모의 유전자와는 다른 새로운 유전자를 생성하는 역할을 합니다(경계 밖).
그건 그렇고, ZZ와 관련된 가장 유명한 상인 신화 중 하나 (기사의 두 번째 작업)의 파괴자가되는 것은 매우 기쁩니다. :)
분명히 나는 작업의 표현을 이해하지 못했습니다. 내 진술:
최소 거래가 N 핍이라는 조건으로 최대 수익을위한 진입 점은 최소 무릎 N + 스프레드 핍의 조건으로 지그재그의 상단에 있습니다.
MQL4 포럼 스레드 "다변수 극한 함수 테스트" 에 몇 가지 흥미로운 테스트 함수를 게시했는데, 그 중 하나가 이 문서에 나와 있습니다.
원하신다면 GA가 아닌 다른 최적화 알고리즘을 사용하여 제안된 함수의 극한을 찾아보시고 그 결과를 여기에 게시해 주셔도 됩니다. 그렇게 하셔도 좋습니다. 처음에는 모든 사람과 저에게 흥미로울 것입니다.
저는 적합도의 유효성을 평가하는 것이 매우 중요하다는 것을 알고 있습니다. 그 방법 중 하나는 원본 데이터에 노이즈를 추가하는 것입니다.
다른 최적화 방법의 소스 코드는 여기(http://alglib.sources.ru/optimization/) 와 여기(http://ool.sourceforge.net/) 에서 찾을 수 있습니다.
물론 각 최적화 알고리즘은 고유한 대상 함수 클래스에서 더 나은 성능을 발휘합니다.
실제로 어떤 타깃 함수를 사용하시나요?