Campionato di ottimizzazione degli algoritmi. - pagina 60

 
Yuri Evseenkov:
Cioè è possibile passare un array nullo e trovare il valore di FF se tutti i parametri sono uguali a zero.

0.0 rientra nell'intervallo[-10.0;10.0]? - Sì, è così. Così potete trovare il valore FF con i parametri dell'array riempito con i valori 0,0.

In realtà, nessuno vi proibisce di inserire assolutamente qualsiasi numero in FF, ma otterrete una risposta adeguata solo nell'intervallo[-10.0;10.0], mentre oltre l'intervallo i numeri saranno tagliati fuori a questi limiti. Se non si tiene conto di questo, allora il vostro algoritmo può pensare di essere arrivato su una superficie verde liscia, perché il valore di FF sarà sempre dato il minimo (qualsiasi, ma non cambia) per FF, e vagare all'infinito in una vasta distesa di numeri reali (finché il suo processo non fermerà il controllore).

 
Andrey Dik:

0.0 rientra nell'intervallo[-10.0;10.0]? - Sì, è così. Così si può trovare il valore FF con i parametri dell'array riempito con i valori 0,0.

In realtà, nessuno vi proibisce di inserire assolutamente qualsiasi numero in FF, ma otterrete una risposta adeguata solo nell'intervallo[-10.0;10.0], mentre oltre l'intervallo i numeri saranno tagliati fuori a questi limiti. Se non si tiene conto di questo, allora il vostro algoritmo può pensare che ha ottenuto su una superficie liscia grizontalnuyu, perché il valore di FF sarà sempre dato il minimo (qualsiasi, ma non cambiare) per FF, e vagare all'infinito in dimensioni immense di numeri reali (fino a quando il suo processo non si fermerà il checker).

Capito. Grazie. Ho intenzione di fare le prime 4 chiamate con array riempiti con -10.0, 0.0, 10.0 e 2.7 ciascuno. Vorrei 2.718 per i miei scarafaggi ma passo 0.1. Beh, non puoi farlo.
 
Dmitry Fedoseev:

Ok, me ne vado, rimani do-mi, nel tuo tranquillo mondo do-mi. Cancellami dal pannello.

Lo spiegherò, ovviamente, a tutti i presenti con le palle di armatura. Nella seconda versione dello script, non è necessario importare FF(), perché lafunzione membroè ancheimportata lì, e con questa importazione, FF() non sarà visibile nella funzione membro. La funzione FF() deve essere importata nella libreria dei membri. Anche un esempio di una stronzata così banale è presentato in modo scorretto. Lo so, lo so, direte che è chiaro. Ma se è così chiaro, perché non viene fornito l'esempio corretto? Con uno sguardo come se fossi un idiota.

Arrivederci.

Dim, avresti dovuto almeno controllare il funzionamento delle funzioni di esportazione prima di gareggiare dal podio. Io, per esempio, prima di pubblicare il mio prototipo, ho naturalmente verificato la sua capacità di funzionare. E naturalmente funziona, cioè nessuna libreria personalizzata carica la propria istanza di una funzione.

L'ambiente runtime di MT funziona generalmente in modo diverso da quanto si pensi. Solo un'istanza di libreria con una sola istanza di variabili viene caricata nello spazio degli indirizzi dello script di controllo, cioè ognuno userà solo uno specifico ff con i suoi specifici parametri. Se non mi credi, scarica il mio esempio e controlla.

 
Vasiliy Sokolov:

Dimitri non ha visto che ci sono due opzioni di libreria di algoritmi anche per il membro. E il secondo ha la funzione FF import (come dice lui). E il primo non lo fa.

 
Vasiliy Sokolov:

Dim, almeno avresti dovuto controllare il lavoro delle funzioni di esportazione prima di fare un grande pronunciamento dal podio. Altrimenti si scopre da una serie di "non ho guardato, ma giudico" io, per esempio, prima di pubblicare un prototipo, naturalmente, controllato le sue prestazioni. E naturalmente funziona, cioè nessuna libreria personalizzata carica la propria istanza di una funzione.

L'ambiente runtime di MT funziona generalmente in modo diverso da quanto si pensi. Solo un'istanza di libreria con una sola istanza di variabili viene caricata nello spazio degli indirizzi dello script di controllo, cioè ognuno userà solo uno specifico ff con i suoi specifici parametri. Se non mi credi, scarica il mio esempio e controlla.

Ho già detto di un'istanza per la doppia importazione (non ho trovato il mio post, ce ne sono molti qui). Sì, è per questo che è possibile controllare le chiamate FF tramite l'algoritmo dei membri. Se lo script e l'algoritmo chiamassero ogni singola istanza del FF allora il campionato non accadrebbe, perché sarebbe impossibile controllare se l'algoritmo chiama effettivamente il FF tutte le volte che dice di farlo.

...

Anche se si potrebbe probabilmente cavarsela con una sola importazione nell'algoritmo, non credo che sia possibile eseguire *.ex5, scaricare ed eseguire di nuovo, per azzerare il contatore (piano intelligente del concorrente), ma poi si dovrebbe avere il concorrente stesso che chiama l'intera statistica e altre possibilità dovrebbero essere considerate dai concorrenti per produrre risultati, e questa è una complessità aggiuntiva per i concorrenti. È più facile da parte dello script richiedere tutte le informazioni necessarie per sapere se stanno usando o meno le FF.

Ma comunque, in ogni caso, la doppia importazione nel nostro caso non può essere considerata un errore.

 

Andrey Dik:

Non c'è bisogno che tu lo sappia. Rimanete nell'intervallo [-10.0;10.0] e non avrete problemi.


0.0 rientra nell'intervallo[-10.0;10.0]? - Sì, è così. Quindi potete ottenere il valore di FF con i parametri dall'array riempito con valori 0,0.

In realtà, nessuno vi proibisce di inserire assolutamente qualsiasi numero in FF, ma otterrete una risposta adeguata solo nell'intervallo[-10.0;10.0], mentre oltre l'intervallo i numeri saranno tagliati fuori a questi limiti. Se non tieni conto di questo, allora il tuo algoritmo può pensare di essere arrivato su una superficie verde liscia, perché il valore di FF sarà sempre dato il minimo (qualsiasi, ma non mutevole) per FF, e vagare all'infinito in una vasta distesa di numeri reali (finché il suo processo non fermerà il checker).

Per non preoccuparsi dei limiti di ritaglio e per non limitare l'algoritmo, possiamo aggiungere una linea al FF:

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

Per non preoccuparsi dei limiti di ritaglio e per non limitare l'algoritmo, si può aggiungere una sola linea al FF:

perchéreturn(0.0);?

o più precisamente, perché 0.0?

 
Andrey Dik:

perchéreturn(0.0);?

o più precisamente, perché 0.0?

Se stiamo cercando solo il massimo, allora la risposta corretta è

return(-DBL_MAX);
 
Sergey Chalyshev:

Se stiamo cercando solo il massimo, allora il corretto

Il punto è che in fase di progettazione è possibile ottenere "superfici" con discontinuità, con picchi all'infinito (verso il basso o verso l'alto), ma FF dovrebbe restituire il valore corretto in uscita, quindi tutte le condizioni al contorno sono già prese in considerazione in FF, ciò che non causerebbe un crash per colpa di FF.

Ecco perché penso che sia meglio tagliare i parametri a limiti accettabili e calcolare FF con tali parametri e produrre ciò che si ottiene piuttosto che produrre consapevolmente -DBL_MAX a un parametro errato.

I partecipanti conoscono i limiti dei parametri e devono osservarli, altrimenti ci sono molte domande a cui è difficile rispondere in ogni caso particolare di algoritmi. Così com'è, mettiamo tutti gli algoritmi su un piano di parità.

hmm. .... sarà bombardato di domande "come mai in fase di progettazione?! hai detto che nessuno saprà di FF!!!".... per coloro che stanno per fare una domanda del genere - leggete prima il thread.

 
Perché i numeri dell'intervallo sono frazionari? Invece di -10,0 a 10 in incrementi di 0,1, si può andare da -100 a 100, in incrementi di 1.