Algoritmi neurali per il lotto

di il
90 risposte

90 Risposte - Pagina 6

  • Re: Algoritmi neurali per il lotto

    Come da post n°11 del link
    https://www.iprogrammatori.it/forum-programmazione/programmatori/algoritmi-riduzione-utili-per-gioco-numerico-t18743.html
    posto il risultato.
    (è solo per una completezza delle informazioni)

    Non ci saranno altri messaggi, vi chiedo cortesemente di non censurare inutilmente.

    Ho ricevuto via mail gli auguri di Natale dal forum.
    Contraccambio di cuore gli auguri a tutto il forum.
    Allegati:
    13569_b7863829a77e30ada7557d4ff0aa3a42.jpg
    13569_b7863829a77e30ada7557d4ff0aa3a42.jpg
  • Re: Algoritmi neurali per il lotto

    La domanda piu' interessante invece e': ma una rete neurale ha senso per un problema del genere?

    Ora, una rete neurale, alla fin fine, non e' altro che uno strumento per trovare i coefficienti di un certo numero di iperpiani con i quali partizionare R^n.

    L'addestramento consiste a dire che un certo punto di R^n deve appartenere ad una certa partizione. Quindi la rete modifica di conseguenza i coefficienti delle n equazioni relative agli iperpiani che delimitano quella particolare partizione, tenendo anche conto delle indicazioni precedenti.

    Ora la domanda sorge spontanea: che c'azzecca una cosa del genere con il gioco del lotto, dove non c'e' nessun tipo di regolarita''?

    Secondo me non c'azzecca nulla, da cui risula evidente che la risposta della rete risultera' paragonabile al lancio della classica monetina.

    Pero' potrei sbagliarmi !

    Nota: un test su 25 numeri non e' significativo: bisogna provarlo su taaaaanti casi.
  • Re: Algoritmi neurali per il lotto

    Non sò cosa dirti........
    abbiamo uno "scollamento" tra le due parti:

    -chi conosce la sistemistica applicata al gioco
    per cui ad es: 20 numeri sviluppati in decine sono 184756 combinazioni
    e non trilioni come erroneamente segnalato
    da "migliorabile" nel terzo post linkato sopra

    -chi conosce i linguaggi di programmazione
    a cui è difficile far superare preconcetti,
    e dove nonostante tutta la cortesia possibile
    è riuscito a far bloccare un thread
    (vedi "oregon" dal post n°12 in poi)

    Negli anni ho sviluppato sia algoritmi utili per la compressione numerica
    (quelli che nel gioco del lotto/totocalcio e simili chiamate "ridotti" )
    sia la applicazione di modelli già esistenti in natura
    che per similitudine riescono con buon risultato ad essere
    utilizzati anche per il gioco numerico per il calcolo delle combinazioni
    a più elevato valore di prossima sortita.

    Ero interessato alla sola compressione numerica, purtroppo in mancanza
    di risposte mi sono dovuto esporre anche per la parte previsionale solo
    per attirare quel minimo di attenzione utile all'argomento.

    Al momento, causa censura, non avete più i link( liberi e ufficiali sul web) di
    - siti universitari di raccolta di matrici matematiche
    - sito per le formule del corretto calcolo delle combinazioni
    - sito per le ulteriori informazioni sul caso.
  • Re: Algoritmi neurali per il lotto

    Mi piacerebbe non vedere morire l'argomento

    proviamo con un incontro a metà strada

    Avrei un buon algoritmo genetico in C++ per tutti gli interessati
    (valido su qualsiasi tipo di gioco numerico)

    Nel caso qualcuno voglia cimentarsi in qualcosa di simile
    ( ma un filo superiore come resa , sempre in C++)
    può tranquillamente contattarmi anche in PM.

    (lo allegherei anche , ma dopo 2 tentativi non ho compreso perchè non lo vedo allegato)
  • Re: Algoritmi neurali per il lotto

    Un algoritmo genetico non e' altro che un implementazione alternativa di un algoritmo per cercare il massimo (o il minimo) di una funzione. Invece di un approccio locale, cioe' si parte da un punto e si cerca di salire verso la cima (e questo ha come conseguenze che si potrebbe trovare solo un massimo locale), un algoritmo genetico usa un approccio globale.

    Che c'azzecca questo con il lotto? Ovviamente nulla. Quindi NON PUO' FUNZIONARE.

    Oppure, se vogliamo essere precisi: funziona con la stessa probabilita'di scegliere un numero a caso e sperare che quello appartenga ai numeri forniti dalle estrazioni.

    Ma riassumendo velocoemente: il gioco del lotto e', nella sua prima versione, del 1400.
    Diciamo che la versione attuale e' del 1700.
    Quindi sono 300 (diconsi trecento) anni, che milioni e milioni di persone stanno tentando di craccarlo.
    Se non ci sono riusciti fior fiore di matematici con background startosferici, fior fiore di studiosi, che hanno fatto solo quello per tutta la vita, che probabilita' c'e' che una persona con un livello cultural-matematico medio o medio basso, possa riuscire a scardinare un gioco basato totalmente sul caso?

    E poi, se ci riuscisse e pubblicasse l'algoritmo perche', miracolosamente, ha trovato una regolarita' nel gioco (dovuto a truffa o a un errore di progettazione delle palline/macchina di estrazione/generatore di numeri casuali/...) quanto tempo richiedera' al gestore del Lotto di fare le correzioni del caso?

    La statistica e' una bella cosa: permette anche di scoprire delle truffe. Non subito, ma prima o poi ...

    Nota: il primo post e' del 2007. Siamo nel 2015.
    Sono passati 8, diconsi otto anni ...
  • Re: Algoritmi neurali per il lotto

    Nessun miglioramento rispetto al passato.

    Io parlo di COMPRESSIONE NUMERICA , l'equivalente del winzip per un integrale numerico.

    Usarlo o meno per il lotto DEVE essere una scelta personale , non criticabile.

    Aggiungo il listato, non sono riuscito ad allegarlo correttamente prima
    
    #include<iostream.h> // Header file for receiving input and generating output.
    #include<stdlib.h> // Header file containing C++ standard libraries.
    #include<iomanip.h> // Header file for manipulating output.
    #include<fstream.h> // Header file for using files.
    #include<time.h> // Header file for calculating iteration times.
    #include<math.h> // Header file for mathematical functions.
    #include<stl.h> // Header file for Standard Template Library (STLs) <set, multiset>.
    // Fitness of playing set is given by: fitness = # vertices dominated by candidate
    # vertices in graph = 	`(m; n; k)
    
    long double fact (const int &);
    long int round (const long double);
    bool ValidTicket (const short int *, const short int &, const short int &);
    // Compute the factorial of n (i.e. n!).
    long double fact (const int &n) f if (n < 2) return 1; // Stop recursion.
    else return n * fact(n - 1); // (n > 1).
    g// Rounds a number off to the nearest integer to avoid possible numerical truncation errors.
    long int round (const long double n) f long int flrnum = (long int)floor(n);
    if (n - flrnum < 0.5) return flrnum;
    else return (long int)ceil(n); // (n - flrnum >= 0.5)
    g// Determine whether a ticket (n-set) is valid (ticket contains no double numbers).
    bool ValidTicket(short int *ticket, const short int &m, const short int &n) f multiset<short int, less<short int> > index;
    multiset<short int, less<short int> >::iterator i;
    for (short int counter = 0;counter < n;counter++) f index.insert(ticket[counter]); // Add number to index.
    if (index.count(ticket[counter]) > 1) return false; // Ticket is invalid.
    gi
    = index.begin(); // Arrange ticket elements lexicographically.
    for (short int counter = 0;i != index.end();ticket[counter++] = *i++);
    return true; // Ticket is valid.
    gint main () f short int m, n, k, L, p = 1, cMutate = 1, gMutate = 1; // Parameters for the lottery <m,n;k>, playing set size (L),
    population size (p), candidate mutate size (cMutate < p), mutate set size (gMutate < L).
    long int t, gen, iter=1; // Time limit (t), generation limit (gen), number of iterations on the same parameters (iter).
    cout << endl << \nt GENETIC ALGORITHM (GA)" << endl;
    cout << \Please specify the following parameters for the lottery hm,n;ki:" << endl;
    cout << \m = "; cin >> m;
    cout << \n = "; cin >> n;
    cout << \k = "; cin >> k;
    // If the user specified invalid lottery parameters.
    if ((n > m-1) || (k > n-1) || (m < 3) || (n < 2) || (k < 1)) f cout << endl << \Invalid lottery parameters entered." << endl;
    return 0; // Exit program.
    gconst long int NumTickets = round(fact(m)/(fact(n)*(fact(m-n))));
    cout << endl << \The order of the lottery graph Gh" << m << \," << n << \;" << k << \i is " << NumTickets << \." << endl;
    cout << endl << \Please specify the following GA parameters:" << endl;
    cout << \Playing set size = "; cin >> L;
    do f if (gMutate >= L)
    cout << \Mutation set size must be strictly less than the playing set size (" << L << \)." << endl;
    cout << \gMutation set size = "; cin >> gMutate;
    g while (gMutate >= L);
    while (floor(p/2) < ((double)p/2)) f cout << \Population size = "; cin >> p;
    if (floor(p/2) < ((double)p/2)) cout << \Population size needs to be a multiple of 2." << endl;
    gdo f if (cMutate >= p)
    cout << \# of candidates to mutate per generation must be strictly less than the population size (" << p << \)." << endl;
    cout << \cMutation set size = "; cin >> cMutate;
    g while (cMutate >= p);
    cout << \Generation limit = "; cin >> gen; cout << \Time limit (in sec) = "; cin >> t;
    // If the user specified invalid GA parameters.
    if ((L < 2) || (L > (NumTickets-1)) || (p < 2) || (gen < 2) || (t < 2) || (cMutate < 1) ||
    (gMutate < 1) || (iter < 1)) f cout << endl << ``Invalid GA parameters." << endl; return 0; // Exit program.
    gshort int Population[p][L][n], TempInt, CurrentNumber = n, CurTicket[n], dcounter, tcounter, Intersect = 0,
    candidate1, candidate2; // A GA population (of size p) consisting of playing sets (of size L).
    
    oat GAPopFit[p], selection, ccandidate, fitnessmin, fitnessavg, fitnessmax; // Vector for storing fitness of candidate
    playing sets (GAPopFit), values used for determining crossover partners (fitnesssum, selection, ccandidate), generation
    minimum fitness (fitnessmin), generation average fitness (fitnessavg), generation maximum fitness (fitnessmax).
    time t StartTime; // Trace execution time.
    long int NumDominated, fitnesssum, UniquelyDominated[p+1][L], curgen = 0, NewFitness[L];
    set<short int> CrossoverIndex, CrossoverGenes; // (Integrity) Check for crossover procedure (CrossoverIndex), check genes
    used during crossover procedure (CrossoverGenes).
    struct Fitness f long int fitness; // Fitness of generation candidate (given by the number of dominated vertices.
    bool used, changed; // Candidate has been used and/or changed for crossover during a previous crossover procedure.
    short int number; // Generation candidate indentification number.
    Fitness *next; // Pointer to next fitness information of nextcandidate in linked-list.
    g;
    Fitness *FitnessList = new Fitness, *TempFitness, *TempFitness2;
    fstream GAFitnessFile(\GAFitness.txt", ios::out); // Open \GAFitness.txt" for output of GA fitness information.
    if (!GAFitnessFile) f // Check whether the file \GAFitness.txt" could be opened.
    A.7. Intelligent genetic algorithm (Algorithm 7) 169
    cerr << \The le n\GAFitness.txtn" could not be opened." << endl;
    exit(1); // Exit program.
    gfstream GAPopulationFile(\GAPopulation.txt", ios::out); // Open \GAPopulation.txt" for output of GA population info.
    if (!GAPopulationFile) f // Check whether the file \GAPopulation.txt" could be opened.
    cerr << \The le n\GAPopulation.txtn" could not be opened." << endl;
    exit(1); // Exit program.
    gGAPopulationFile << \GA for h" << setw(2) << m << `,' << setw(2) << n << `;' << setw(2) << k << \i :" << endl;
    GAFitnessFile << \GA for h" << setw(2) << m << `,' << setw(2) << n << `;' << setw(2) << k << \i :" << endl << endl;
    cerr << endl << \Initialising GA with " << p << \ random playing set candidates, please wait. . . ";
    GAFitnessFile << \GA Parameters:" << endl
    << \Playing set size = " << setw(5) << L << endl
    << \gMutation set size = " << setw(5) << gMutate << endl
    << \Population size = " << setw(5) << p << endl
    << \cMutation set size = " << setw(5) << cMutate << endl
    << \Generation limit = " << setw(5) << gen << \ generations" << endl
    << \Time limit = " << setw(5) << t << \ seconds" << endl << endl;
    GAFitnessFile << \Initialising GA population. . . ";
    srandom(StartTime = time(NULL)); // Initialise execution time & pseudo random number generator.
    for (short int i = 0;i < p;i++) // Initialise GA with random population consisting of (p) playing set candidates.
    for (short int j = 0;j < L;j++)
    do
    for (short int l = 0;l < n;l++)
    Population[i][j][l] = ((short int)(((random())/(
    oat)RAND MAX)*m)+1); // Generate random ticket.
    while (!ValidTicket(Population[i][j],m,n)); // Check whether generated ticket is valid.
    GAFitnessFile << \OK! (" << time(NULL)-StartTime << \ s)" << endl << \Initialising GA tness. . . ";
    StartTime = time(NULL); // Re-initialise execution time.
    fitnessmax = fitnesssum = 0; fitnessmin = 1; TempFitness = FitnessList;
    for (short int PopNum = 0;PopNum < p;PopNum++) f NumDominated = 0;
    for (short int i = 0;i < n;i++) CurTicket[i] = i+1; // Initialise ticket to [1,2,...,n]
    for (long int counter = 1;counter <= NumTickets;counter++) f Intersect = 0; // Check whether current ticket is dominated.
    for (short int DomTicketNum = 0;(DomTicketNum < L) && (Intersect < k);DomTicketNum++) f Intersect = dcounter = tcounter = 0;
    while ((dcounter < n) && (tcounter < n) && (Intersect < k))
    if (Population[PopNum][DomTicketNum][dcounter] < CurTicket[tcounter])
    dcounter++;
    else if (Population[PopNum][DomTicketNum][dcounter] > CurTicket[tcounter])
    tcounter++;
    else f // (Population[PopNum][DomTicketNum][dcounter] == CurTicket[tcounter])
    Intersect++; dcounter++; tcounter++; // Tickets intersect in 1 element.
    g if (Intersect == k) NumDominated++; // Check whether current ticket is dominated by candidate playing set.
    gCurTicket[CurrentNumber-1]++; // Generate next ticket in lexicographic sequence.
    if (CurTicket[CurrentNumber-1] > m) f CurTicket[CurrentNumber-1]--;
    while ((CurrentNumber > 0) && (CurTicket[CurrentNumber-1] == m-(n-CurrentNumber))) CurrentNumber--;
    CurTicket[CurrentNumber-1]++;
    for (short int i = CurrentNumber;i < n;i++) CurTicket[i] = CurTicket[i-1] + 1;
    CurrentNumber = n;
    g
    gGAPopFit[PopNum] = (
    oat)NumDominated/(
    oat)NumTickets; // Store playing set candidate fitness.
    TempFitness->next = new Fitness; TempFitness = TempFitness->next;
    TempFitness->fitness = NumDominated; // Store playing set candidate fitness.
    TempFitness->number = PopNum; TempFitness->next = NULL; TempFitness->used = false;
    if (GAPopFit[PopNum] > fitnessmax) fitnessmax = GAPopFit[PopNum]; // Store maximum fitness of generation.
    if (GAPopFit[PopNum] < fitnessmin) fitnessmin = GAPopFit[PopNum]; // Store minimum fitness of generation.
    fitnesssum += NumDominated;
    gfitnessavg = fitnesssum/p; // Store average fitness of generation.
    cerr << \nished!" << endl;
    GAFitnessFile << \OK! (" << time(NULL)-StartTime << \ seconds)" << endl << endl;
    cerr << \Genetic algorithm initialised, running. . . (generation limit " << gen << \ generations, time limit " << t << \s)" << endl;
    StartTime = time(NULL); // Re-initialise execution time.
    GAFitnessFile << \ 0"; // Output initial GA population fitness.
    for (TempFitness = FitnessList;TempFitness->next != NULL;TempFitness = TempFitness->next)
    GAFitnessFile << setw(9) << setprecision(4) << setiosflags(ios::fixed|ios::showpoint) << TempFitness->next->fitness;
    GAFitnessFile << endl;
    short int inputgene1, outputgene1, inputgene2, outputgene2, curcandidate, TempArray[L];
    long int newcandidate1fitness, newcandidate2fitness;
    while ((time(NULL)-StartTime < t) && (curgen++ < gen)) f // Start GA.
    GAPopulationFile << \Generation " << setw(4) << curgen << \:" << endl; // Write GA Population to file.
    for (short int i = 0;i < L;i++) f for (short int j = 0;j < p;j++) f GAPopulationFile << `f' << Population[j][i][0];
    for (short int l = 1;l < n;l++) GAPopulationFile << `,' << Population[j][i][l];
    GAPopulationFile << \g ";
    gGAPopulationFile << endl;
    g
    GAPopulationFile << endl;
    for (TempFitness = FitnessList,fitnesssum = 0;TempFitness->next != NULL;TempFitness = TempFitness->next) f TempFitness->next->used = TempFitness->next->changed = false; // Candidate has not been used nor changed during
    crossover operation/procedure.
    fitnesssum += TempFitness->next->fitness; // Determine fitness range.
    g // CROSSOVER procedure (mating) relative to fitness of chromosomes (candidate playing sets).
    for (short int cocounter = 0;cocounter < p/2;cocounter++) f // Find crossover partners for 1
    2 of population.
    // Determine crossover partners for crossover procedure.
    ccandidate = (((random())/(
    oat)RAND MAX)*(
    oat)fitnesssum/(
    oat)NumTickets); // First mating candidate.
    selection = 0; TempFitness = FitnessList;
    while (selection < ccandidate) f // Search for chosen first candidate.
    while (TempFitness->next->used) TempFitness = TempFitness->next;
    selection += (
    oat)TempFitness->next->fitness/(
    oat)NumTickets; TempFitness = TempFitness->next;
    gcandidate1 = TempFitness->number; // Store first crossover candidate.
    TempFitness->used = true; // Candidate has been used for crossover during this crossover procedure.
    fitnesssum -= TempFitness->fitness; // Remove chosen first candidate from fitness list by rescaling fitness range
    for next candidate.
    ccandidate = (((random())/(
    oat)RAND MAX)*(
    oat)fitnesssum/(
    oat)NumTickets); // Second mating candidate.
    selection = 0; TempFitness2 = FitnessList;
    while (selection < ccandidate) f // Search for chosen second candidate.
    while (TempFitness2->next->used)
    TempFitness2 = TempFitness2->next;
    selection += (
    oat)TempFitness2->next->fitness/(
    oat)NumTickets; TempFitness2 = TempFitness2->next;
    gcandidate2 = TempFitness2->number; // Store second crossover candidate.
    TempFitness2->used = true; // Candidate has been used for crossover during this crossover procedure.
    fitnesssum -= TempFitness2->fitness; // Remove chosen second candidate from fitness list by rescaling fitness range
    for next candidate.
    // Check which single gene exchange from different crossover candidates would yield fitness increase.
    curcandidate = candidate1;
    docrossover:
    if (curcandidate == candidate2) f // Store evolving maximum fitness.
    fitnessmax = (
    oat)(TempFitness2->fitness)/(
    oat)NumTickets;
    candidate2 = candidate1; candidate1 = curcandidate; inputgene2 = -1; // Exchange between crossover candidates.
    gelse f // (curcandidate != candidate2) || (curcandidate == candidate1)
    fitnessmax = (
    oat)(TempFitness->fitness)/(
    oat)NumTickets; inputgene1 = -1;
    gfor (short int i = 0;i < L;i++) f // First check if input gene is equivalent to any gene in crossover candidate.
    Intersect = 0;
    for (short int j = 0;(j < L) && (Intersect < k);j++) f dcounter = tcounter = 0; Intersect = k;
    while ((dcounter < n) && (tcounter < n) && (Intersect == k))
    if (Population[candidate1][j][dcounter] == Population[candidate2][i][tcounter]) f dcounter++; tcounter++;
    gelse Intersect = 0; // (Population[candidate1][j][dcounter] != Population[candidate2][i][tcounter])
    gif (Intersect < k) f // Input gene is distinct from all genes in first candidate.
    for (short int j = 0;j < L;j++) f for (short int l = 0;l < n;l++) f TempArray[l] = Population[candidate1][j][l]; Population[candidate1][j][l] = Population[candidate2][i][l];
    gNumDominated = 0; // Recalculate chromosome fitness with new gene.
    for (short int l = 0;l < n;l++) CurTicket[l] = l+1; // Initialise ticket to [1,2,...,n]
    for (long int counter = 1;counter <= NumTickets;counter++) f Intersect = 0; // Check whether current ticket is dominated.
    for (short int DomTicketNum = 0;(DomTicketNum < L) && (Intersect < k);DomTicketNum++) f Intersect = dcounter = tcounter = 0;
    while ((dcounter < n) && (tcounter < n) && (Intersect < k))
    if (Population[candidate1][DomTicketNum][dcounter] < CurTicket[tcounter]) dcounter++;
    else if (Population[candidate1][DomTicketNum][dcounter] > CurTicket[tcounter]) tcounter++;
    else f // (Population[candidate1][DomTicketNum][dcounter] == CurTicket[tcounter])
    Intersect++; dcounter++; tcounter++; // Tickets intersect in 1 element.
    g if (Intersect == k) // Check whether current ticket is dominated by candidate playing set.
    NumDominated++;
    gCurTicket[CurrentNumber-1]++; // Generate next ticket in lexicographic sequence.
    if (CurTicket[CurrentNumber-1] > m) f CurTicket[CurrentNumber-1]--;
    while ((CurrentNumber > 0) && (CurTicket[CurrentNumber-1] == m-(n-CurrentNumber))) CurrentNumber--;
    CurTicket[CurrentNumber-1]++;
    for (short int l = CurrentNumber;l < n;l++) CurTicket[l] = CurTicket[l-1] + 1;
    CurrentNumber = n;
    g
    gif (((
    oat)NumDominated/(
    oat)NumTickets) > fitnessmax) f // Store specific gene exchange information.
    fitnessmax = (
    oat)NumDominated/(
    oat)NumTickets;
    if (curcandidate == TempFitness->number) f inputgene1 = j; outputgene1 = i; newcandidate1fitness = NumDominated;
    g
    A.7. Intelligent genetic algorithm (Algorithm 7) 171
    else f // (curcandidate != TempFitness->number) || (curcandidate == TempFitness2->number)
    inputgene2 = j; outputgene2 = i; newcandidate2fitness = NumDominated;
    g
    g // Copy gene information back to candidate.
    for (short int l = 0;l < n;l++) Population[candidate1][j][l] = TempArray[l];
    g
    g
    gif (curcandidate != TempFitness2->number) f // Repeat crossover procedure for other crossover candidate.
    curcandidate = candidate2; goto docrossover;
    g // If an exchange in genes is considered reasonable (causes fitness increase).
    if (inputgene1 > -1) f // Change first crossover candidate.
    TempFitness->fitness = newcandidate1fitness; // Change candidate 1 fitness.
    TempFitness->changed = true; // Candidate was changed during crossover operation/procedure.
    for (short int j = 0;j < n;j++) f TempArray[j] = Population[candidate2][inputgene1][j];
    Population[TempFitness->number][inputgene1][j] = Population[TempFitness2->number][outputgene1][j];
    g
    gif (inputgene2 > -1) f // Change second crossover candidate.
    TempFitness2->fitness = newcandidate2fitness; // Change candidate 2 fitness.
    TempFitness2->changed = true; // Candidate was changed during crossover operation/procedure.
    if (inputgene1 == outputgene2)
    for (short int j = 0;j < n;j++) Population[TempFitness->number][inputgene2][j] = TempArray[j];
    else // (inputgene1 != outputgene2)
    for (short int j = 0;j < n;j++)
    Population[TempFitness2->number][inputgene2][j] = Population[TempFitness->number][outputgene2][j];
    g
    gfor (short int i = 0;i < cMutate;i++) f // MUTATE (gMutate) elements of cMutate candidates of the population (p).
    candidate1 = (short int)((random()/(
    oat)RAND MAX)*p); TempFitness = FitnessList;
    while (TempFitness->next->number < candidate1) // Search for selected mutation candidate.
    TempFitness = TempFitness->next;
    for (short int j = 0;j < gMutate;j++) f candidate2 = (short int)((random()/(
    oat)RAND MAX)*L);
    do // Move current domination ticket to nearest neighbour (maybe further).
    Population[candidate1][candidate2][(short int)((random()/(
    oat)RAND MAX)*n)] =
    ((short int)(((random())/(
    oat)RAND MAX)*m)+1);
    while (!ValidTicket(Population[candidate1][candidate2],m,n)); // Check whether generated ticket is valid.
    gNumDominated = 0; // Recalculate mutated chromosome fitness.
    for (short int j = 0;j < n;j++) CurTicket[j] = j+1; // Initialise ticket to [1,2,...,n].
    for (long int counter = 0;counter < NumTickets;counter++) f Intersect = 0;
    // Check whether current ticket is dominated.
    for (short int DomTicketNum = 0;(DomTicketNum < L) && (Intersect < k);DomTicketNum++) f Intersect = dcounter = tcounter = 0;
    while ((dcounter < n) && (tcounter < n) && (Intersect < k))
    if (Population[candidate1][DomTicketNum][dcounter] < CurTicket[tcounter]) dcounter++;
    else if (Population[candidate1][DomTicketNum][dcounter] > CurTicket[tcounter]) tcounter++;
    else f // (Population[candidate1][DomTicketNum][dcounter] == CurTicket[tcounter])
    Intersect++; dcounter++; tcounter++; // Tickets intersect in 1 element.
    g if (Intersect == k) NumDominated++; // Check whether current ticket is dominated by candidate playing set.
    gCurTicket[CurrentNumber-1]++; // Generate next ticket in lexicographic sequence.
    if (CurTicket[CurrentNumber-1] > m) f CurTicket[CurrentNumber-1]--;
    while ((CurrentNumber > 0) && (CurTicket[CurrentNumber-1] == m-(n-CurrentNumber))) CurrentNumber--;
    CurTicket[CurrentNumber-1]++;
    for (short int j = CurrentNumber;j < n;j++) CurTicket[j] = CurTicket[j-1] + 1;
    CurrentNumber = n;
    g
    gTempFitness->next->fitness = NumDominated; // New fitness of mutated candidate.
    gGAFitnessFile << setw(3) << curgen; // Write population fitness to file.
    for (TempFitness = FitnessList;TempFitness->next != NULL;TempFitness = TempFitness->next)
    GAFitnessFile << setw(9) << TempFitness->next->fitness;
    GAFitnessFile << endl; cerr << `.';
    if ((long int)(curgen/20) == (
    oat)curgen/20) cerr << \ (" << setw(4) << curgen << \/" << gen << \)" << endl;
    gGAFitnessFile << \GA simulation time: " << time(NULL)-StartTime << \s." << endl;
    GAFitnessFile.close(); // Close the Genetic Algorithm (GA) Fitness file.
    GAPopulationFile.close(); // Close the Genetic Algorithm (GA) Population file.
    cout << endl;
    return 0; // Exit program.
    g
    
  • Re: Algoritmi neurali per il lotto

    Basta che scrivi il listato tra i tag "code" (senza spazi tra le parentesi ed il testo)

    [ code ]
    ...
    [ /code ]
  • Re: Algoritmi neurali per il lotto

    In modo serio: ti ringrazio , non lo sapevo allegare , non ti sto prendendo in giro.

    Anche questo è una mano di aiuto nella mia ricerca

    Spero di ricambiare facendo un esempio matematico.

    Il Lotto esiste da come hai accennato, così un inseme numerico
    costruisce un numero preciso di colonne chiamato sviluppo integrale.

    In modo troppo semplicistico, ma valido, si può affermare che il ridotto teorico
    è pari alle combinazioni integrali fratto le vincite che può rilasciare.
    (se proprio servono le formule le posto, ma dammi fiducia solo per qualche minuto)

    Ora:
    - il ridotto teorico del 45,3,2,3 è pari a 66 colonne ( =66 euro di gioco )
    (V,k,t,m = 45 numeri in gioco sviluppati in colonne da tre numeri in terzine
    con la garanzia del "2" detto "ambo" se ne "indovini" 3 numeri estratti)

    - ma la Lottomatica paga 81,3 euro lordi se vinci un ambo in questa condizione.

    - con il miglior algoritmo matematico, simile al listato postato, ci si è solo avvicinati
    a tale risultato, da una dozzina d'anni siamo bloccati a 166 colonne (166 euro di giocata)

    Quì non parlo di quali numeri estraggono, non mi interessano più, possono anche barare e sceglierli nella estrazione o lasciarli uscire in modo casuale, mi interessa solo la compressione matematica.
    (ogni giocata pago 66 euro ed incasso 81,5 euro lordi)
  • Re: Algoritmi neurali per il lotto

    Una domanda ... tu dici "ogni giocata pago 66 euro ed incasso 81,5 euro lordi" ma chiunque ti contesta il fatto che NON incassi sicuramente ... quindi, a che pro tutto questo spreco di risorse?
  • Re: Algoritmi neurali per il lotto

    Basta usare una "leva" , chiamata fissa , ad esempio.

    Esempio reale avvenuto in passato:
    quando esisteva solo il DOS, la Sisal mise su un concorso chiamato Totogol
    composto da 30 numeri da giocare in ottine (5.852.925 combinazioni/colonne).

    Il premio principale era indovinare l'"8" (una sola possibilita sui 5.852.925 di combinazioni )
    e la seconda categoria era il "7" che pagava mediamente un milione di vecchie lire.
    (176 "7" indovinabili ad ogni estrazione , sino a quì è matematica)

    Ora la Sisal basò il gioco sul fatto che il ridotto matematico record mondiale
    dell'epoca pubblicato nell'anno 1994 era di 2.048.000 colonne per la garanzia del "7".
    Quindi i mezzi dell'epoca arrivavano lì, vuoi per le perfomance dei computer di allora
    vuoi anche per gli algoritmi di riduzione sino ad allora ideati.

    Ma la formuletta semplice dice che il ridotto teorico è pari all'integrale fratto le vincite,
    quindi 5.852.925 di combinazioni fratto (176+1)= 33068 colonne
    ben più piccolo delle 2048000 colonne dell'epoca.

    Ovviamente così come me ne accorsi io , se ne sono accorti molti altri sistemisti.
    Il miglioramento del record permise di scendere ufficialmente a 132000 colonne
    dai 2 milioni di colonne precedenti.

    Sono miglioramenti ottenuti negli anni a "colpi" di software
    basati su algoritmi maggiormente performanti.

    Io ho tutt'ora il mio file da 65535 ottine che fù creato all'epoca dalla unione
    di un buon algoritmo mio ed bravo programmatore impiegato di banca
    e cliente della stessa ricevitoria che frequentavo anche io.
    Il record mondiale ufficiale attuale registrato su sito pubblico, creato nel 2012, è quì:

    ed è di un buon 20% più grande del nostro creato nel 1994,
    nè dubito che ci sia chi ha creato di meglio nel mondo.

    Bastava usare una semplice operazione di "filtro" ponendo una fissa e poco più.
    Veniva un file di colonne pari a 100.000 Lire di giocata dell'epoca, per realizzare un "7"
    che pagava circa una media di un milione.

    Si giocava solo quando , con metodi che non fanno parte di questa discussione ,
    si identificava un numero fisso, quindi nemmeno in modo continuo.
    Ne realizzammo in 2 anni una dozzina, a fissa sbagliata si recuperava circa il 67%
    della spesa perchè comunque pagavano le vincite inferiori.

    Il rilascio ufficiale del record da 132000 colonne fece desistere la Sisal nel giro di un paio di anni,
    che chiuse il gioco e creò quello che oggi chiamiamo superenalotto.

    Sulla fissa non dobbiamo entrare in discussione,
    anche il lancio della moneta per la scelta può andarmi bene.

    Questo stesso meccanismo può essere utilizzato sul ridotto citato per il lotto,
    estraggo pochissime colonne da giocare (e neanche da giocare sempre in modo continuo).

    Ecco perchè ad un primo esame superficiale ti risulta una perdita di tempo.

    Se gradisci avere altre notizie riguardo meccanismi simili dovete solo chiedere.
    Basta non ripetere la storia passata del vedermi chiudere un post solo
    perchè, per la mancata conoscenza di determinate cose, non si è d'accordo.
    (non ho mai mancato nè di correttezza, nè di cortesia)

    Anche l'altra volta accennai che comunque da alcune considerazioni
    si può trarre anche un programma commerciale (và ora di moda chiamarlo App )
    Lasciate almeno la scelta a chi si affaccia al mondo della programmazione
    se mettere alla prova le proprie capacità.

    SEMPRE ho specificato, a chi mi ha contattato, quali sono le esigenze del mercato
    e cosa (come) costruire.
    Oppure fornire link di chi già ha realizzato buoni software di compressione numerica
    che nulla hanno a che fare con la parte previsionale.
    ( che però commercialmente attrae di più, non è colpa mia)

    Grazie per avermi seguito sino a quì e speriamo bene.....

    se ci pensi un attimo: è complesso trovare un programmatore su un sito di...moda
    ecco perchè posto quì le mie domande
  • Re: Algoritmi neurali per il lotto

    Ho creato un nuovissimo sito che tratta ( in modo molto elementare ) quanto in oggetto.

    Il sito è molto semplice, essenziale e spartano, ma dateci un'occhiata.

    E' stata anche postata una previsione ( forecasting test ) valida a partire dal 18-06-2015.

    Vale la pena di spendere la fatica per verificarne i risultati.

    E' solo l'inizio e cerco collaborazioni da chi ne sa più di me perchè le premesse sono molto promettenti.

    Il sito in questione è questo :

    "http://www.vertigonumbers.altervista.or"

    Saluti e a presto ( spero tanto )
  • Re: Algoritmi neurali per il lotto

    Buon giorno Jno,
    Siamo due appassionati del gioco del Lotto, più che altro sull'armonia che si verifica, ogni volta, nel quadro delle estrazioni.
    Ci siamo imbattuti per caso nel tuo studio sugli algoritmi di riduzione utili per il gioco numerico su ogni singola ruota.
    Soprattutto sulla costante di decadimento applicata al Lotto.
    Siamo solidali ed entusiasti della tua ricerca, non condividendo lo scetticismo della maggior parte di colore che reputano il Lotto come una "tassa sugli imperiali".
    Vorremmo essere aggiornati sui risultati della tua ricerca, potendo noi apportare la nostra esperienza nell'aver individuato metodologie che però non garantiscono una costanza di risultato.
    Attendiamo tua risposta.
    Grazie
    Pier

    Jno ha scritto:


    Basta usare una "leva" , chiamata fissa , ad esempio.

    Esempio reale avvenuto in passato:
    quando esisteva solo il DOS, la Sisal mise su un concorso chiamato Totogol
    composto da 30 numeri da giocare in ottine (5.852.925 combinazioni/colonne).

    Il premio principale era indovinare l'"8" (una sola possibilita sui 5.852.925 di combinazioni )
    e la seconda categoria era il "7" che pagava mediamente un milione di vecchie lire.
    (176 "7" indovinabili ad ogni estrazione , sino a quì è matematica)

    Ora la Sisal basò il gioco sul fatto che il ridotto matematico record mondiale
    dell'epoca pubblicato nell'anno 1994 era di 2.048.000 colonne per la garanzia del "7".
    Quindi i mezzi dell'epoca arrivavano lì, vuoi per le perfomance dei computer di allora
    vuoi anche per gli algoritmi di riduzione sino ad allora ideati.

    Ma la formuletta semplice dice che il ridotto teorico è pari all'integrale fratto le vincite,
    quindi 5.852.925 di combinazioni fratto (176+1)= 33068 colonne
    ben più piccolo delle 2048000 colonne dell'epoca.

    Ovviamente così come me ne accorsi io , se ne sono accorti molti altri sistemisti.
    Il miglioramento del record permise di scendere ufficialmente a 132000 colonne
    dai 2 milioni di colonne precedenti.

    Sono miglioramenti ottenuti negli anni a "colpi" di software
    basati su algoritmi maggiormente performanti.

    Io ho tutt'ora il mio file da 65535 ottine che fù creato all'epoca dalla unione
    di un buon algoritmo mio ed bravo programmatore impiegato di banca
    e cliente della stessa ricevitoria che frequentavo anche io.
    Il record mondiale ufficiale attuale registrato su sito pubblico, creato nel 2012, è quì:

    ed è di un buon 20% più grande del nostro creato nel 1994,
    nè dubito che ci sia chi ha creato di meglio nel mondo.

    Bastava usare una semplice operazione di "filtro" ponendo una fissa e poco più.
    Veniva un file di colonne pari a 100.000 Lire di giocata dell'epoca, per realizzare un "7"
    che pagava circa una media di un milione.

    Si giocava solo quando , con metodi che non fanno parte di questa discussione ,
    si identificava un numero fisso, quindi nemmeno in modo continuo.
    Ne realizzammo in 2 anni una dozzina, a fissa sbagliata si recuperava circa il 67%
    della spesa perchè comunque pagavano le vincite inferiori.

    Il rilascio ufficiale del record da 132000 colonne fece desistere la Sisal nel giro di un paio di anni,
    che chiuse il gioco e creò quello che oggi chiamiamo superenalotto.

    Sulla fissa non dobbiamo entrare in discussione,
    anche il lancio della moneta per la scelta può andarmi bene.

    Questo stesso meccanismo può essere utilizzato sul ridotto citato per il lotto,
    estraggo pochissime colonne da giocare (e neanche da giocare sempre in modo continuo).

    Ecco perchè ad un primo esame superficiale ti risulta una perdita di tempo.

    Se gradisci avere altre notizie riguardo meccanismi simili dovete solo chiedere.
    Basta non ripetere la storia passata del vedermi chiudere un post solo
    perchè, per la mancata conoscenza di determinate cose, non si è d'accordo.
    (non ho mai mancato nè di correttezza, nè di cortesia)

    Anche l'altra volta accennai che comunque da alcune considerazioni
    si può trarre anche un programma commerciale (và ora di moda chiamarlo App )
    Lasciate almeno la scelta a chi si affaccia al mondo della programmazione
    se mettere alla prova le proprie capacità.

    SEMPRE ho specificato, a chi mi ha contattato, quali sono le esigenze del mercato
    e cosa (come) costruire.
    Oppure fornire link di chi già ha realizzato buoni software di compressione numerica
    che nulla hanno a che fare con la parte previsionale.
    ( che però commercialmente attrae di più, non è colpa mia)

    Grazie per avermi seguito sino a quì e speriamo bene.....

    se ci pensi un attimo: è complesso trovare un programmatore su un sito di...moda
    ecco perchè posto quì le mie domande
  • Re: Algoritmi neurali per il lotto

    @Gpost:

    1) il thread e' di DUE ANNI fa, praticamente MORTO e SEPOLTO
    2) NON ESISTONO ALGORITMI per la previsione delle uscite.

    Motivo:

    a) se esistessero, esperti con competenze statistiche li avrebbero trovati, e di conseguenza potrebbero VINCERE SEMPRE
    b) chi progetta questi giochi ha come consulenti degli statistici che li aiuterebbero eliminare la possibilita' di trovare tali algoritmi
    c) chi progetta il gioco ha lo scopo FONDAMENTALE di GUADAGNARE SEMPRE ed IL PIU' POSSIBILE, a scapito degli n-mila giocatori
  • Re: Algoritmi neurali per il lotto

    Buon giorno Gpost.

    Scusa la mia intromissione.

    Sto testando una metodica previsionale ( estremamente complessa ) basata su RETI NEURALI in Backpropagation su ruota secca determinata da differenze euclidee.

    Il metodo determina matematicamente un gruppo di numeri ( da 15 a 20) che vede l'uscita di almeno 2 numeri ( se non addirittura 3 ) nell'estrazione successiva.
    Al momento ho testato le estrazioni di Aprile ( 13 concorsi ) di cui validi per la previsione 7, risultati : 9 ambi + 1 terno.

    Resto a disposizione per eventuali contatti.

    Saluti.

    Thunderbolt
  • Re: Algoritmi neurali per il lotto

    Non vi convincete proprio eh ? È proprio un virus quello del lotto ...

    A parte tutto ... QUESTO THREAD È VECCHIO ! Non si posta qui !

    Segnalo ...
Devi accedere o registrarti per scrivere nel forum
90 risposte