Championnat d'optimisation des algorithmes. - page 60

 
Yuri Evseenkov:
C'est-à-dire qu'il est possible de passer un tableau nul et de trouver la valeur de FF si tous les paramètres sont égaux à zéro.

Est-ce que 0,0 est compris dans l'intervalle[-10,0;10,0]? - Oui, c'est vrai. Vous pouvez donc trouver la valeur FF avec les paramètres du tableau rempli de valeurs 0.0.

En fait, personne ne vous interdit d'entrer n'importe quels chiffres dans FF, mais vous n'obtiendrez une réponse adéquate que dans la plage[-10.0;10.0], tandis qu'au-delà de cette plage, les chiffres seront coupés à ces limites. Si vous ne prenez pas cela en compte, alors votre algorithme peut penser qu'il est arrivé sur une surface verte et lisse, parce que la valeur de FF sera toujours donnée au minimum (quelconque, mais ne changeant pas) pour FF, et errera infiniment dans une vaste étendue de nombres réels (jusqu'à ce que son processus n'arrête pas le vérificateur).

 
Andrey Dik:

Est-ce que 0,0 est compris dans l'intervalle[-10,0;10,0]? - Oui, c'est vrai. Vous pouvez donc trouver la valeur FF avec les paramètres du tableau rempli de valeurs 0.0.

En fait, personne ne vous interdit d'entrer n'importe quels chiffres dans FF, mais vous n'obtiendrez une réponse adéquate que dans la plage[-10.0;10.0], tandis qu'au-delà de cette plage, les chiffres seront coupés à ces limites. Si vous ne prenez pas cela en compte, alors votre algorithme peut penser qu'il est arrivé sur une surface lisse grizontalnuyu, parce que la valeur de FF sera toujours donnée le minimum (n'importe lequel, mais ne change pas) pour FF, et errer sans fin dans les dimensions immenses des nombres réels (jusqu'à ce que son processus n'arrête pas le vérificateur).

Je l'ai. Merci. Je prévois de faire les 4 premiers appels avec des tableaux remplis de -10.0, 0.0, 10.0 et 2.7 chacun. J'aimerais 2.718 pour mes cafards mais l'étape 0.1. Vous ne pouvez pas faire ça.
 
Dmitry Fedoseev:

OK, je m'en vais, reste do-mi, dans ton monde do-mi tranquille. Rayez-moi du panel.

Je l'expliquerai, bien sûr, à tous ceux qui sont ici avec des balles blindées. Dans la deuxième version du script, vous n'avez pas besoin d'importer FF(), car lafonction membre y est égalementimportée, et avec cette importation, FF() ne sera pas visible dans la fonction membre. La fonction FF() doit être importée dans la bibliothèque membre. Même un exemple de connerie aussi triviale est présenté de manière incorrecte. Je sais, je sais, vous allez dire que c'est clair. Mais si c'est si clair, pourquoi l'exemple correct n'est-il pas fourni ? Avec un regard comme si j'étais un idiot ici.

Bye-bye.

Dim, vous devriez au moins avoir vérifié le fonctionnement des fonctions d'exportation avant de concourir sur le podium. Moi, par exemple, avant de publier mon prototype, j'ai naturellement vérifié sa capacité à fonctionner. Et bien sûr, cela fonctionne, c'est-à-dire qu'aucune bibliothèque personnalisée ne charge sa propre instance d'une fonction.

L'environnement d'exécution de MT fonctionne généralement différemment de ce que vous pensez. Une seule instance de bibliothèque avec une seule instance de variables est chargée dans l'espace d'adressage du script de vérification, c'est-à-dire que chacun n'utilisera qu'un seul ff spécifique avec ses paramètres spécifiques. Si vous ne me croyez pas, téléchargez mon exemple et vérifiez-le.

 
Vasiliy Sokolov:

Dimitri n'a simplement pas vu qu'il y a deux options de bibliothèque d'algorithmes pour le membre, aussi. Et le second a la fonction FF import (comme il le dit). Et le premier ne le fait pas.

 
Vasiliy Sokolov:

Dim, tu aurais au moins dû vérifier le travail des fonctions d'exportation avant de faire une grande déclaration depuis le podium. Sinon, il s'avère d'une série de "je n'ai pas regardé, mais je juge" J'ai, par exemple, avant de publier un prototype, bien sûr, vérifié ses performances. Et bien sûr, cela fonctionne, c'est-à-dire qu'aucune bibliothèque personnalisée ne charge sa propre instance d'une fonction.

L'environnement d'exécution de MT fonctionne généralement différemment de ce que vous pensez. Une seule instance de bibliothèque avec une seule instance de variables est chargée dans l'espace d'adressage du script de vérification, c'est-à-dire que chacun n'utilisera qu'un seul ff spécifique avec ses paramètres spécifiques. Si vous ne me croyez pas, téléchargez mon exemple et vérifiez-le.

J'ai déjà parlé d'une instance pour l'importation double (je n'ai pas pu trouver mon message, il y en a beaucoup ici). Oui, c'est pourquoi il est possible de contrôler les appels FF par l'algorithme des membres. Si le script et l'algorithme appelaient chaque instance du FF, le championnat n'aurait pas lieu, car il serait impossible de vérifier si l'algorithme appelle effectivement le FF autant de fois qu'il le dit.

...

Bien que vous puissiez probablement vous en sortir avec une seule importation dans l'algorithme, je ne pense pas qu'il soit possible d'exécuter *.ex5, de décharger et d'exécuter à nouveau, pour remettre le compteur à zéro (plan astucieux du concurrent), mais il faudrait alors que le concurrent appelle lui-même toute la stat et que d'autres possibilités soient envisagées par les concurrents pour sortir les résultats, et c'est une complexité supplémentaire pour les concurrents. Il est plus facile du côté du script de demander toutes les informations nécessaires sur l'utilisation ou non du FF.

Mais quoi qu'il en soit, la double importation dans notre cas ne peut être considérée comme une erreur.

 

Andrey Dik:

Vous n'avez pas besoin de savoir ça. Restez dans la fourchette [-10.0;10.0] et vous n'aurez pas de problème.


Est-ce que 0,0 est compris dans l'intervalle[-10,0;10,0]? - Oui, c'est vrai. Vous pouvez donc obtenir la valeur de FF avec les paramètres du tableau rempli de valeurs 0.0.

En fait, personne ne vous interdit d'entrer n'importe quels chiffres dans FF, mais vous n'obtiendrez une réponse adéquate que dans la plage[-10.0;10.0], tandis qu'au-delà de cette plage, les chiffres seront coupés à ces limites. Si vous ne tenez pas compte de cela, alors votre algorithme peut penser qu'il est arrivé sur une surface verte et lisse, car la valeur de FF sera toujours donnée au minimum (quelconque, mais ne changeant pas) pour FF, et errera sans fin dans une vaste étendue de nombres réels (jusqu'à ce que son processus n'arrête pas le vérificateur).

Afin de ne pas s'embêter avec les limites d'écrêtage et de ne pas limiter l'algorithme, nous pouvons ajouter une ligne au FF :

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

Afin de ne pas s'embêter avec les limites d'écrêtage et de ne pas limiter l'algorithme, vous pouvez ajouter une seule ligne au FF :

pourquoireturn(0.0);?

ou plus précisément, pourquoi 0.0 ?

 
Andrey Dik:

pourquoireturn(0.0);?

ou plus précisément, pourquoi 0.0 ?

Si nous ne cherchons que le maximum, alors la réponse correcte est

return(-DBL_MAX);
 
Sergey Chalyshev:

Si nous ne recherchons que le maximum, alors la bonne méthode

Le fait est qu'au stade de la conception, il est possible d'obtenir des "surfaces" avec des discontinuités, avec des pics à l'infini (vers le bas ou vers le haut), mais FF devrait renvoyer la valeur correcte à la sortie, de sorte que toutes les conditions limites sont déjà prises en compte dans FF, ce qui ne causerait pas un crash par la faute de FF.

C'est pourquoi je pense qu'il vaut mieux réduire les paramètres à des limites acceptables et calculer FF avec ces paramètres et sortir ce que vous obtenez plutôt que de sortir sciemment -DBL_MAX à un paramètre incorrect.

Les participants connaissent les limites des paramètres et doivent les respecter, sinon il y a beaucoup de questions auxquelles il est difficile de répondre dans chaque cas particulier d'algorithmes. En l'état actuel des choses, nous mettons tous les algorithmes sur un pied d'égalité.

hmm. .... va être bombardé de questions "comment ça au stade de la conception ?! vous avez dit que personne ne saura pour FF !!!".... pour ceux qui vont poser une telle question - lisez d'abord le fil de discussion.

 
Pourquoi les nombres de l'échelle sont-ils fractionnés ? Au lieu d'aller de -10,0 à 10 par incréments de 0,1, vous pouvez aller de -100 à 100, par incréments de 1.
Raison: