Archivo de la versión MT. - página 6

 
Alexey Viktorov:

Pero según este fragmento de código

El valor devuelto por esta función debe ser procesado de alguna manera. ¿De qué sirve devolver "menos muchos nueves" si no hay ninguna reacción a ello en el resto del código?

Devolver un valor menos grande colocará este pase al final de los resultados. Si no hubo ninguna prueba (la prueba se detuvo, en mi caso en la apertura de la primera barra), entonces no hay nada que calcular, no hay datos que calcular. Por lo tanto, cuando se establece tester_stop, se devuelve un número negativo grande.

Además, no utilizo este resultado en ninguna parte del código, aunque, tal vez, se pueda utilizar, pero cómo - no lo sé en este momento y no lo necesito.

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

El retorno menos un valor grande colocará este pase al final de los resultados. Si en principio no hubo prueba (la prueba se detuvo, en mi caso en la apertura de la primera barra), entonces no hay nada que calcular, no hay datos que calcular. Por lo tanto, cuando se establece tester_stop, se devuelve un número negativo grande.

Además, no utilizo este resultado en ninguna parte de mi código, aunque probablemente se pueda utilizar pero no sé cómo, y no lo necesito actualmente.

Este es un enfoque muy malo para resolver tareas en general y especialmente para resolver tareas de programación.

Por alguna razón no creo en las pruebas en general y menos en la optimización. Por eso no puedo darte un consejo específico sobre cómo organizar el algoritmo, pero veo que tu algoritmo de secuenciación y procesamiento de resultados está roto.

Si antes de llamar a TesterStop() debe haber al menos un pase, por lo que por favor proporcione este pase. ¿Cuál es su problema? ¿Que no lo sé y no necesito saberlo? Eso no es correcto.

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

Lo entiendo todo y no necesito muletas. Y tuve que buscar una muleta aquí leer para qué.

Es posible. Pero no recuerdo que nadie se quejara de ello.

Sus deseos se pueden organizar de una manera mucho más sencilla, sin ningún código inútil.

En lugar de devolver INIT_PARAMETERS_INCORRECT, ponderar alguna variable global, digamos ExtTesterStop=true.

Poner la comprobación en la primera línea de OnTick

void OnTick()
  {
   if(ExtTesterStop)
     {
      TesterStop();
      return;
     }
...
 
Alexey Viktorov:

Este es un enfoque muy malo para la resolución de problemas en general y especialmente para los problemas de programación.

Por alguna razón no creo en las pruebas en general, y en la optimización aún menos. Por lo tanto, no puedo dar consejos específicos sobre la organización del algoritmo, pero veo que su algoritmo de secuencia y procesamiento de resultados está roto.

Si debe haber al menos un pase antes de llamar a TesterStop(), proporcione este único pase. ¿Cuál es su problema? ¿Que no lo sé y no lo necesito? Eso no es correcto.

Alexey, no te ofendas, pero no has entendido en absoluto por qué he utilizado TesterStop(). Además, ni siquiera lo has intentado. Como no has leído para qué lo he utilizado, te lo explico brevemente.

Lo utilizo para filtrar los pases de prueba inútiles y acelerar la optimización. Especialmente la optimización genética. Por eso no necesito ni siquiera un pase en esta situación. Era la sustitución deINIT_PARAMETERS_INCORRECT, pues en caso de su gran cantidad en OnInit() provocaba el crash de la genética.

Creer o no creer, usar o no usar la optimización es un asunto propio que no tiene relación con la solución de este problema ))))

Slava:

Sus deseos se pueden organizar de una manera mucho más sencilla, sin ningún código inútil. Estarás de acuerdo en que es el mismo rastrillo de forma diferente)))

En lugar de devolver INIT_PARAMETERS_INCORRECT, pesa alguna variable global, digamos ExtTesterStop=true

Poner la comprobación en la primera línea de OnTick

Sin embargo, estoy de acuerdo en que el código será un poco más sencillo.

El asunto sigue siendo el mismo. La anulación del pase en la fase de inicialización no se produce. El mismo código estará en OnInit() y OnTick(). ¿Qué ganamos?

TesterStop() seguirá frunciendo el ceño

TesterStop() called on 0% of testing interval

y, en esta versión de MT, el control se pasará a OnTester() de todos modos. Estarás de acuerdo en que tenemos los mismos problemas, pero de forma diferente ))))

Sería estupendo que hubiera una función alternativa, por ejemplo, TesterStopImmediately(). Para los casos en que debamos detener la prueba inmediatamente pasando el control no a OnTester() sino directamente a OnDeinit(const int reason)...

Pero probablemente no lo veremos en nuestra vida...

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

Alexey, no te ofendas, pero no has entendido en absoluto para qué he utilizado TesterStop(). Además, ni siquiera lo has intentado. Como no has leído para qué lo he utilizado, te lo explico brevemente.

Lo utilizo para filtrar los pases de prueba inútiles y acelerar la optimización. Especialmente la optimización genética. Por eso no necesito ni siquiera un pase en esta situación. Era la sustitución deINIT_PARAMETERS_INCORRECT, pues en caso de su gran cantidad en OnInit() provocaba el crash de la genética.

Creer o no creer, usar o no usar la optimización - esto es su propio negocio, que no tiene relación con este problema)))

No me he expresado con precisión y me has malinterpretado completamente. Pero no importa.

 
Alexey Viktorov:

No me he expresado con precisión y me has malinterpretado completamente. Pero no importa.

Es importante. Creo que todos los problemas en general son el resultado de malentendidos. Pero el hombre nació con el lenguaje para hablar, negociar )))) Naturalmente, todo el mundo piensa que tiene razón, pero la obstinación en este tema es un signo de ... la estupidez. Así que, por favor, explique lo que quiere decir. Personalmente estoy dispuesto a aprender)))

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

Es importante. Creo que todos los problemas en general son el resultado de malentendidos. Pero el hombre nació con el lenguaje para hablar, negociar )))) Naturalmente, todo el mundo piensa que tiene razón, pero la obstinación en este tema es un signo de ... la estupidez. Así que, por favor, explique lo que quiere decir. Personalmente estoy dispuesto a aprender ))))

¿Qué podemos aprender de una persona que muestra signos de ineptitud? ¿O estás hablando de ti mismo? Eres tú el que es terco y no quiere hacer el mínimo código para intentar entender lo que quieres. Bueno, ya he dicho que no me dedico a la optimización y, por tanto, nunca he utilizado los eventos relacionados con los probadores. Mis recomendaciones se dirigían sólo a un campo más reducido. Slava repitió mi recomendación. Tal vez lo hayas utilizado de una manera diferente, ya que no obtienes lo que esperas. Es sólo una suposición por falta de información sobre el tema.

 
Alexey Viktorov:

¿Qué podemos aprender de una persona con signos de ser poco inteligente? ¿O estás hablando de ti mismo? Eres tú el que está dando largas y no hace el mínimo código para intentar averiguar lo que quieres. Bueno, ya he dicho que no me dedico a la optimización, por lo que nunca he utilizado eventos relacionados con el probador. Mis recomendaciones se dirigían sólo a un campo más reducido. Slava repitió mi recomendación. Tal vez lo hayas utilizado de una manera diferente, ya que no obtienes lo que esperas. Es sólo una suposición por falta de información sobre el tema.

¿Acaso lees lo que te escribo?

"Alexey, no te ofendas, pero no has entendido en absoluto para qué he utilizado TesterStop(). Además, ni siquiera lo has intentado. Como no has leído para qué lo he utilizado, te lo explico brevemente.

Lo utilizo para filtrar los pases de prueba inútiles y acelerar laoptimización. Especialmente la optimización genética. Por eso no necesito ni siquiera un pase en esta situación. Se trataba de la sustitución de INIT_PARAMETERS_INCORRECT, ya que si su cantidad en OnInit() era grande, provocaba el bloqueo de la genética..."

¿Qué parte de esto no entiendes?

P.D. Por cierto, a diferencia de ti, Slava sabe exactamente de qué estamos hablando. ))
 
Сергей Таболин:

¿Acaso lees lo que te escribo?

"Alexey, no te ofendas, pero no has entendido en absoluto para qué he utilizado TesterStop(). Además, ni siquiera lo has intentado. Como no has leído para qué lo he utilizado, te lo explico brevemente.

Lo utilizo para filtrar los pases de prueba inútiles y acelerar laoptimización. Especialmente la optimización genética. Por eso no necesito ni siquiera un pase en esta situación. Se trataba de la sustitución de INIT_PARAMETERS_INCORRECT, ya que si su cantidad en OnInit() era grande, provocaba el bloqueo de la genética..."

¿Qué parte de esto no le queda clara?

P.D. Por cierto, a diferencia de ti, Slava sabe exactamente de qué estamos hablando. ))

Sergei, TesterStop() se utiliza para detener prematuramente las pruebas. Lo que debería ser la salida en este caso es asunto del programador. No necesito saber lo que debes conseguir, lo principal es dejar de probar. Todo lo demás se establece en el algoritmo de cálculo.

Si no se está satisfecho con alguna variante intermedia de los valores obtenidos, se detiene la prueba y se devuelve un resultado inventado desde el fondo. Si no puede hacerlo, significa que su algoritmo no está construido correctamente en alguna parte. Al fin y al cabo, cómo dejar de hacer pruebas te lo dicen más de una vez.

 
Alexey Viktorov:

Sergei, TesterStop() se utiliza para detener prematuramente las pruebas. Y lo que hay que conseguir en este caso es un negocio de programación. No necesito saber lo que debes conseguir, lo principal es dejar de probar. Todo lo demás se establece en el algoritmo de cálculo.

Si no está satisfecho con alguna variante intermedia de los valores obtenidos, deja de probar y devuelve un resultado inventado. Si no puede hacerlo, significa que ha construido el algoritmo equivocado en alguna parte. Al fin y al cabo, cómo dejar de hacer pruebas te lo dicen más de una vez.

Si te ofrezco comprar un cubo de clavos, es probable que no te interese en absoluto de dónde lo voy a sacar y cuánto cuesta. Así que su respuesta puede ser cualquier cosa: no, no quiero, no lo quiero, bueno, etc. Lo principal es que tú y yo seamos comprensibles. Mi respuesta en tal caso "de una antorcha inventado resultado", que es absolutamente claro para mí personalmente.

Lo que ha quedado claro en el transcurso de esta investigación es que TesterStop() y ExpertRemove() pasaban el control inmediatamente a OnDeinit() antes de la nueva compilación, mientras que en la nueva compilación, pasan el control inmediatamente a OnTester() (si existe). Y si en el primer caso el resultado de la prueba fue un NULL, ahora con onTester() tenemos que comprobar si la salida estaba disponible en esos eventos (por supuesto esta comprobación debe ser organizada) y hacer nuestra propia salida. Y qué resultado especificar en este caso (0 o -99999999) - es una cuestión de preferencias.