MT 개발자를 위한 것이 아닙니다! INIT_PARAMETERS_INCORRECT를 대체하는 방법?

 

이러한 문제에 직면했습니다. 프로그램의 논리에 따르면 함수 호출 에 대해 유효하지 않은 옵션을 제거해야 합니다. 이를 위해 INIT_PARAMETERS_INCORRECT를 사용합니다. 그러나 유전자 최적화는 거의 즉시 중단됩니다. 개발자들은 이미 이 상황에 대한 질문에 분노하고 있습니다. 유전자 분석 등을 배우는 것이 좋습니다. 등..

그리고 왜 필요합니까? 나는 사용자로서 결과를 얻고 싶지만 그것이 작동하는 방식은 나에게 짙은 보라색입니다.

따라서 1, 2, 3의 세 가지 기능에 대한 예입니다. 0은 사용하지 않는 것입니다.

함수는 체인에서 반복되어서는 안 되며, 함수 사이에 0이 없어야 합니다(그렇지 않으면 반복 가능).

유효한 체인의 예:

  • 100
  • 120
  • 130
  • 123
  • 132
  • 2..
  • 삼..

잘못된 체인의 예:

  • 010
  • 001
  • 110
  • 101
  • 111
  • 121
  • 122
  • 131
  • 133
  • 112
  • 113
  • 102
  • 103
  • 2..
  • 삼..
보시다시피, 허용 가능한 것보다 훨씬 더 많은 유효하지 않은 체인이 있습니다. 샘플을 만드는 방법? INIT_PARAMETERS_INCORRECT를 대체하는 방법? 어디서 파나요?

 
매개변수가 남아 있으면 On-functions에서 계산을 취소합니다. 실행은 INIT_PARAMETERS_INCORRECT보다 느리지만 크게 중요하지는 않습니다.
 
어떤가요? 작은 예를 들어도 될까요?
 

가능한 입력 매개변수 세트, 바람직하지 않은 세트, 그리고 바람직하지 않은 세트가 너무 많은 이유를 보다 명확하게 기술하는 것이 가능합니다.

원치 않는 세트가 너무 많아서는 안된다는 개발자의 의견에 전적으로 동의합니다. 최적 - 10% 이하

 
Сергей Таболин :
어떤가요? 작은 예를 들어도 될까요?

fxsaber 맞습니다.

잘못된 매개변수 세트가 입력으로 제공되면 즉시 모든 OnTick() 함수를 반환합니다. 그리고 OnTester에서는 가장 최소한의 결과를 반환합니다.

 
Сергей Таболин :
어떤가요? 작은 예를 들어도 될까요?
 input int i = 0 ; 

bool Incorrect;
 
int OnInit ()
{
  Incorrect = !i; // нулевое значение считается некорректным (пример)
  
//  return(Incorrect ? INIT_PARAMETERS_INCORRECT : INIT_SUCCEEDED); // Было
   return ( INIT_SUCCEEDED );
}

void OnTick ()
{
   if (Incorrect)
     return ;
    
   // ...
}
 
이것은 입력 매개변수 세트가 아닙니다! 이것은 반복해서는 안되는 기능 세트입니다! 느린 최적화에서 INIT_PARAMETERS_INCORRECT는 이러한 함수에 대한 유효한 호출 체인을 구축하는 데 실제로 도움이되지만 그 중 6개가 있습니다.117649개의 체인 옵션이 있습니다.그러나 이러한 체인은 일부 입력 매개변수 없이는 쓸모가 없습니다. 그리고 그들과 함께 이미 38,000,000 개 이상이 획득되었습니다! 느린 열거는 우회할 수 없습니다.
 
Сергей Таболин :
이것은 입력 매개변수 세트가 아닙니다! 이것은 반복해서는 안되는 기능 세트입니다! 느린 최적화에서 INIT_PARAMETERS_INCORRECT는 이러한 함수에 대한 유효한 호출 체인을 구축하는 데 실제로 도움이되지만 그 중 6개가 있습니다.117649개의 체인 옵션이 있습니다.그러나 이러한 체인은 일부 입력 매개변수 없이는 쓸모가 없습니다. 그리고 그들과 함께 이미 38,000,000 개 이상이 획득되었습니다! 느린 열거는 우회할 수 없습니다.

유전자는 죽을 것이기 때문에 최적화 기준 의 최적화 표면은 다소 연속적이어야 합니다(부드러움). 귀하의 경우 엄청난 수의 버스트 (실패)가 나타납니다.


이러한 실험을 설정할 수 있습니다. 표준 고문을 선택하고 거기에 몇 가지 추가 사항을 추가하십시오. 최적화를 위한 입력 매개변수는 가짜입니다. 세트의 90%를 부정확하게 만듭니다. GA가 구부러집니다. 가짜 매개변수가 없어도 잘 작동합니다.

 
fxsaber :

이해했다. 옵티마이저에서 적절한 기능과 그 순서를 선택하는 유일한 질문입니다. 그리고 모든 적합하지 않은 체인을 수동으로 처방합니다.... 그러면 옵티마이저는 어떻게 찾을까요?

 
fxsaber :

유전자는 죽을 것이기 때문에 최적화 기준 의 최적화 표면은 다소 연속적이어야 합니다(부드러움). 귀하의 경우 엄청난 수의 버스트 (실패)가 나타납니다.

이해 했어요. 이 문제를 해결하는 방법을 이해하지 못합니까?

 
Сергей Таболин :

이해 했어요. 이 문제를 해결하는 방법을 이해하지 못합니까?

레시피 중 하나는 개발자가 INCORRECT 패스의 결과를 이전에 계산된 가장 가까운 CORRECT 패스로 간주하는 것입니다. 이것은 최적화 표면의 구멍을 제거합니다.

사유: