Campeonato de Otimização de Algoritmos. - página 60

 
Yuri Evseenkov:
Ou seja, é possível passar uma matriz nula e descobrir o valor de FF se todos os parâmetros forem iguais a zero.

0,0 está dentro da faixa[-10,0;10,0]? - Sim, é verdade. Assim, você pode descobrir o valor FF com parâmetros de matriz preenchidos com valores 0,0.

Na verdade, ninguém proíbe que você alimente absolutamente qualquer número no FF, mas você receberá uma resposta adequada apenas na faixa[-10,0;10,0], enquanto que além da faixa os números serão cortados para estes limites. Se você não levar isso em consideração, então seu algoritmo pode pensar que ele ficou em uma superfície verde suave, porque o valor do FF sempre será dado o mínimo (qualquer, mas não mudará) para FF, e vagará infinitamente em uma vasta extensão de números reais (até que seu processo não pare o verificador).

 
Andrey Dik:

0,0 está dentro da faixa[-10,0;10,0]? - Sim, é verdade. Assim, você pode descobrir o valor FF com parâmetros de matriz preenchidos com valores 0,0.

Em geral, ninguém proíbe que você alimente absolutamente qualquer número no FF, mas você receberá uma resposta adequada apenas na faixa[-10,0;10,0], enquanto que além da faixa, os números serão cortados para estes limites. Se você não levar isto em consideração, então seu algoritmo pode pensar que ficou em uma superfície lisa de grizontalnuyu, porque o valor do FF será sempre emitido um mínimo (qualquer, mas não mudar) para FF, e vagar infinitamente nas vastas extensões de números reais (até que seu processo não pare o verificador).

Entendi. Obrigado. Pretendo fazer as 4 primeiras chamadas com matrizes preenchidas com -10,0, 0,0, 10,0 e 2,7 cada uma. Eu gostaria de 2.718 para minhas baratas, mas passo 0.1. Você não pode fazer isso.
 
Dmitry Fedoseev:

OK, estou indo, fique do-mi, em seu mundo quieto do-mi. Tire-me do painel.

Explicarei, é claro, a todos aqui com bolas de armadura. Na segunda versão do roteiro, você não precisa importar FF(), porque afunção participante tambémé importada para lá, portanto FF() não será visível na função participante. A função FF() deve ser importada na biblioteca dos membros. Até mesmo um exemplo de tal besteira trivial é apresentado de forma incorreta. Eu sei, eu sei, você dirá que é claro. Mas se é tão claro, por que não é fornecido o exemplo correto? Com um ar de idiota aqui.

Tchauzinho.

Dim, você deveria ao menos ter verificado o funcionamento das funções de exportação antes de competir no pódio. Eu, por exemplo, antes de publicar meu protótipo, naturalmente verifiquei sua capacidade de trabalho. E é claro que funciona, ou seja, nenhuma biblioteca personalizada carrega sua própria instância de uma função.

O ambiente de execução do MT geralmente funciona de forma diferente do que você pensa. Apenas uma instância de biblioteca com apenas uma instância de variáveis é carregada no espaço de endereço do script de verificação, ou seja, todos usarão apenas um ff específico com seus parâmetros específicos. Se você não acredita em mim, baixe meu exemplo e confira-o.

 
Vasiliy Sokolov:

Dimitri simplesmente não viu que existem duas opções de biblioteca de algoritmos para o membro, também. E o segundo tem a função FF de importação (como ele diz). E a primeira não o faz.

 
Vasiliy Sokolov:

Dim, pelo menos você deveria ter verificado o trabalho das funções de exportação antes de fazer um grande pronunciamento a partir do pódio. De outra forma, resulta de uma série de "Eu não assisti, mas julgo". Eu, por exemplo, antes de publicar um protótipo, é claro, verifiquei seu desempenho. E é claro que funciona, ou seja, nenhuma biblioteca personalizada carrega sua própria instância de uma função.

O ambiente de execução do MT geralmente funciona de forma diferente do que você pensa. Apenas uma instância de biblioteca com apenas uma instância de variáveis é carregada no espaço de endereço do script de verificação, ou seja, todos usarão apenas um ff específico com seus parâmetros específicos. Se você não acredita em mim, baixe meu exemplo e confira-o.

Já falei sobre um exemplo de importação dupla (não consegui encontrar meu posto, há muitos aqui). Sim, é por isso que é possível controlar as chamadas FF por algoritmo de membro. Se o roteiro e o algoritmo chamassem cada instância do FF, então o campeonato não aconteceria, porque seria impossível verificar se o algoritmo realmente chama o FF tantas vezes quanto ele diz.

...

Embora, provavelmente, você pudesse sobreviver com uma única importação no algoritmo, não acho que seja possível executar *.ex5, descarregar e executar novamente, para reiniciar o contador (plano inteligente do concorrente), mas então você precisaria que o próprio concorrente chamasse toda a estatística e outras possibilidades teriam que ser consideradas pelos concorrentes para produzir resultados, e isso é uma complexidade adicional para os concorrentes. É mais fácil na lateral do roteiro solicitar todas as informações necessárias sobre se eles estão ou não usando o FF.

Mas, de qualquer forma, a dupla importação em nosso caso não pode ser considerada um erro.

 

Andrey Dik:

Você não precisa saber disso. Fique dentro da faixa [-10,0;10,0] e você não terá problemas.


0,0 está dentro da faixa[-10,0;10,0]? - Sim, é verdade. Assim, você pode descobrir o valor de FF com parâmetros da matriz preenchidos com valores 0,0.

Na verdade, ninguém proíbe que você alimente absolutamente qualquer número no FF, mas você receberá uma resposta adequada apenas na faixa[-10,0;10,0], enquanto que além da faixa os números serão cortados para estes limites. Se você não levar isso em consideração, então seu algoritmo pode pensar que ele ficou em uma superfície verde suave, porque o valor do FF sempre será dado o mínimo (qualquer, mas não mudar) para FF, e vagar sem parar em imensas dimensões de números reais (até que seu processo não pare o verificador).

Para não nos preocuparmos em cortar os limites e não limitar o algoritmo, podemos adicionar uma linha ao FF:

if(array[ArrayMaximum(array)]>10.0 || array[ArrayMinimum(array)]<-10.0) return(0.0);
 
Sergey Chalyshev:

Para não se preocupar com os limites de recorte e para não limitar o algoritmo, você pode adicionar uma única linha ao FF:

por quevoltar(0,0);?

ou mais precisamente, por que 0,0?

 
Andrey Dik:

por quevoltar(0,0);?

ou mais precisamente, por que 0,0?

Se estamos procurando apenas o máximo, então a resposta correta é

return(-DBL_MAX);
 
Sergey Chalyshev:

Se estamos procurando apenas o máximo, então o correto

A questão é que na fase de projeto é possível obter "superfícies" com descontinuidades, com picos até o infinito (para baixo ou para cima), mas o FF deve retornar o valor correto na saída, de modo que todas as condições de limite já são levadas em conta no FF, o que não causaria um colapso por culpa do FF.

É por isso que eu acho melhor cortar parâmetros para limites aceitáveis e calcular FF com tais parâmetros e emitir o que você obtém do que emitir conscientemente -DBL_MAX a um parâmetro incorreto.

Os participantes conhecem limitações de parâmetros e devem observá-los, caso contrário há muitas perguntas que são difíceis de responder em cada caso particular de algoritmos. Como está, colocamos todos os algoritmos em pé de igualdade.

ss. .... será inundado com perguntas "como assim na fase de projeto?! você disse que ninguém saberá sobre FF!!!" .... para aqueles que vão fazer tal pergunta - leia primeiro a linha.

 
Por que os números de faixa são fracionários? Em vez de -10,0 a 10 em incrementos de 0,1, você pode ir de -100 a 100, em incrementos de 1.