Архив версий МТ. - страница 6

 
Alexey Viktorov:

Но ведь судя по этому куску кода

значение возвращённое из этой функции как-то должно обрабатываться. Какой прок от возврата "минус много девяток" если никакой реакции в дальнейшем коде на это не предусмотрено?

Возврат минус большого значения разместит этот проход в с самый низ результатов. Если теста в принципе не было (тест был остановлен, в моём случае на открытии первого же бара), то и считать то в принципе нечего, нет данных для расчёта. Поэтому при установленном tester_stop и возвращается заведомо большое отрицательное число.

К тому же, я этот результат нигде в коде не использую, хотя, возможно, его и можно использовать, но как - на данный момент времени я не знаю и мне это не надо. 

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

Возврат минус большого значения разместит этот проход в с самый низ результатов. Если теста в принципе не было (тест был остановлен, в моём случае на открытии первого же бара), то и считать то в принципе нечего, нет данных для расчёта. Поэтому при установленном tester_stop и возвращается заведомо большое отрицательное число.

К тому же, я этот результат нигде в коде не использую, хотя, возможно, его и можно использовать, но как - на данный момент времени я не знаю и мне это не надо

Это очень плохой подход к решению задач вообще и особенно для решения задач программирования.

Почему-то я не верю в тесты вообще, а в оптимизацию и тем более. Поэтому давать конкретные советы по организации алгоритма не могу, но вижу что у вас нарушен алгоритм последовательности и обработки результатов.

Если перед вызовом TesterStop() должен быть хотя-бы один проход, так будьте добры обеспечить этот один проход. В чём проблема? В том, что не знаю и не надо? Так не правильно.

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

Я всё понимаю  и костыли мне без надобности. А костыль пришлось искать вот тут почитайте для чего

Возможно. Но я что-то не припомню, чтобы на это кто-то жаловался. 

Ваши хотелки можно организовать гораздо проще без наворотов бесполезного кода.

Вместо возврата INIT_PARAMETERS_INCORRECT взведите некую глобальную переменную скажем ExtTesterStop=true

Первой строкой OnTick поставьте проверку

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

Это очень плохой подход к решению задач вообще и особенно для решения задач программирования.

Почему-то я не верю в тесты вообще, а в оптимизацию и тем более. Поэтому давать конкретные советы по организации алгоритма не могу, но вижу что у вас нарушен алгоритм последовательности и обработки результатов.

Если перед вызовом TesterStop() должен быть хотя-бы один проход, так будьте добры обеспечить этот один проход. В чём проблема? В том, что не знаю и не надо? Так не правильно.

Алексей, Вы не обижайтесь, но Вы совершенно не поняли для чего я использовал TesterStop(). Более того, Вы даже не попытались этого сделать. Раз Вы не читали, для чего это мне было нужно, я вкратце поясню.

Это мною используется для отсеивания бесполезных проходов тестирования и ускорения оптимизации. Особенно, генетической. Поэтому при данной ситуации мне совершенно не нужен даже один проход! Это было заменой INIT_PARAMETERS_INCORRECT, ибо при большом их количестве в OnInit() это приводило к падению генетики.

Верить-не верить, использовать-не использовать оптимизацию - это уже Ваше личное дело, к решению данной проблемы не имеющей никакого отношения )))

Slava:

Ваши хотелки можно организовать гораздо проще без наворотов бесполезного кода. Согласитесь - те же грабли, только в профиль )))

Вместо возврата INIT_PARAMETERS_INCORRECT взведите некую глобальную переменную скажем ExtTesterStop=true

Первой строкой OnTick поставьте проверку

Согласен, код будет выглядеть немного проще, но!

Суть от этого не меняется. Отмена прохода на стадии инициализации не происходит. Тот же код будет в OnInit() и в OnTick(). Что мы выигрываем?

TesterStop() всё равно будет материться

TesterStop() called on 0% of testing interval

и, в этой версии МТ, управление всё-равно будет передано в OnTester(). Согласитесь - те же грабли, только в профиль )))

Было бы здорово, кабы была альтернативная функция, например, TesterStopImmediately(). Для случаев, когда требуется прекратить тест немедленно с передачей управления не в OnTester(), а напрямую в OnDeinit(const int reason)...

Но этого, видимо, на нашем веку не предвидится... 

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

Алексей, Вы не обижайтесь, но Вы совершенно не поняли для чего я использовал TesterStop(). Более того, Вы даже не попытались этого сделать. Раз Вы не читали, для чего это мне было нужно, я вкратце поясню.

Это мною используется для отсеивания бесполезных проходов тестирования и ускорения оптимизации. Особенно, генетической. Поэтому при данной ситуации мне совершенно не нужен даже один проход! Это было заменой INIT_PARAMETERS_INCORRECT, ибо при большом их количестве в OnInit() это приводило к падению генетики.

Верить-не верить, использовать-не использовать оптимизацию - это уже Ваше личное дело, к решению данной проблемы не имеющей никакого отношения )))

Я не совсем точно выразился и вы меня совсем не так поняли. Но это уже не важно.

 
Alexey Viktorov:

Я не совсем точно выразился и вы меня совсем не так поняли. Но это уже не важно.

Важно. Я считаю, что все проблемы вообще - это результат недопонимания. Но ведь человеку язык и дан для того чтобы говорить, договариваться ))) Естественно, каждый полагает себя правым, но упёртость в этом вопросе - признак ... неумности. Поэтому прошу объяснить, что Вы имели ввиду. Лично Я готов учиться )))

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

Важно. Я считаю, что все проблемы вообще - это результат недопонимания. Но ведь человеку язык и дан для того чтобы говорить, договариваться ))) Естественно, каждый полагает себя правым, но упёртость в этом вопросе - признак ... неумности. Поэтому прошу объяснить, что Вы имели ввиду. Лично Я готов учиться )))

Чему можно учиться у человека с признаками неумности? Или вы это о себе? Это ведь вы упираетесь и не хотите сделать минимальный код для попытки понять что вы хотите. А так, я уже сказал что оптимизацией не занимаюсь, соответственно события связанные с тестером не использовал никогда. Мои рекомендации касались исключительно узкого направления. Slava повторил мою рекомендацию. Видимо вы не совсем так это использовали раз получаете не то, что ожидаете. Это только предположения от нехватки информации по теме.

 
Alexey Viktorov:

Чему можно учиться у человека с признаками неумности? Или вы это о себе? Это ведь вы упираетесь и не хотите сделать минимальный код для попытки понять что вы хотите. А так, я уже сказал что оптимизацией не занимаюсь, соответственно события связанные с тестером не использовал никогда. Мои рекомендации касались исключительно узкого направления. Slava повторил мою рекомендацию. Видимо вы не совсем так это использовали раз получаете не то, что ожидаете. Это только предположения от нехватки информации по теме.

Вы вообще читаете то, что я пишу Вам?

"Алексей, Вы не обижайтесь, но Вы совершенно не поняли для чего я использовал TesterStop(). Более того, Вы даже не попытались этого сделать. Раз Вы не читали, для чего это мне было нужно, я вкратце поясню.

Это мною используется для отсеивания бесполезных проходов тестирования и ускорения оптимизации. Особенно, генетической. Поэтому при данной ситуации мне совершенно не нужен даже один проход! Это было заменой INIT_PARAMETERS_INCORRECT, ибо при большом их количестве в OnInit() это приводило к падению генетики..."

Что именно Вам в этом не понятно?

П.С. Кстати, в отличие от Вас, Слава прекрасно понимает о чём идёт речь. ))
 
Сергей Таболин:

Вы вообще читаете то, что я пишу Вам?

"Алексей, Вы не обижайтесь, но Вы совершенно не поняли для чего я использовал TesterStop(). Более того, Вы даже не попытались этого сделать. Раз Вы не читали, для чего это мне было нужно, я вкратце поясню.

Это мною используется для отсеивания бесполезных проходов тестирования и ускорения оптимизации. Особенно, генетической. Поэтому при данной ситуации мне совершенно не нужен даже один проход! Это было заменой INIT_PARAMETERS_INCORRECT, ибо при большом их количестве в OnInit() это приводило к падению генетики..."

Что именно Вам в этом не понятно?

П.С. Кстати, в отличие от Вас, Слава прекрасно понимает о чём идёт речь. ))

Сергей, TesterStop() используется для преждевременного прекращения тестирования. А что в этом случае должно быть на выходе - дело программиста. И мне совершенно не надо знать что вы должны получить, главное остановить тестирование. Всё остальное закладывается в алгоритм вычислений.

Если вас не устраивает какой-то промежуточный вариант полученных значений, вы останавливаете тестирование и возвращаете от фонаря придуманный результат. Если у вас это не получается, значит где-то неправильно построен алгоритм. Ведь как остановить тестирование вам сказано не один раз.

 
Alexey Viktorov:

Сергей, TesterStop() используется для преждевременного прекращения тестирования. А что в этом случае должно быть на выходе - дело программиста. И мне совершенно не надо знать что вы должны получить, главное остановить тестирование. Всё остальное закладывается в алгоритм вычислений.

Если вас не устраивает какой-то промежуточный вариант полученных значений, вы останавливаете тестирование и возвращаете от фонаря придуманный результат. Если у вас это не получается, значит где-то неправильно построен алгоритм. Ведь как остановить тестирование вам сказано не один раз.

Если я Вам предложу купить ведро гвоздей, то скорее всего, Вам будет совершенно не интересно откуда я его возьму и сколько оно стоит. Поэтому Ваш ответ может быть любой: нет, не надо, не хочу, нафиг, ну и т.д.. Главное что и Вам и мне будет понятно. Мой ответ в подобном случае "от фонаря придуманный результат", который мне лично абсолютно понятен.

Из всего того, что стало ясно в ходе данного выяснения, это то, что до нового билда TesterStop() и ExpertRemove() передавали управление сразу в OnDeinit(), а в новом билде они передают управление сразу в OnTester() (при его наличии). И если в первом случае результатом тестирования был НОЛЬ, то сейчас в OnTester() нужно проверять был ли выход по данным событиям (само-собой нужно организовать эту проверку) и делать собственный выход. А какой результат в этом случае указать (0 или -99999999) - это уже дело предпочтений.

Причина обращения: