Jump to content

bitwizardry

Membro Inativo
  • Posts

    105
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by bitwizardry

  1. 37 minutos atrás, Sphgf disse:

    O exemplo dele "mistura" o observado (empírico=sorteios realizados) com o teórico...

     

    Muito interessante, era algo nesse sentido que eu estava procurando...

     

    Vasculhei novamente o paper e encontrei as respostas das minhas próprias perguntas... rsss

     

    "... em sua forma mais geral, (a / b) x = c / d, tem para termos:

    a - número de casos favoráveis à não ocorrência de certa combinação de jogo;

    b - número de todos os casos possíveis relacionados à mesma combinação;

    c - igual a 1 para encontrar o atraso normal e o atraso máximo; igual a 1,50 e 0,50 para a pesquisa do limites de variabilidade do atraso normal;

    d - número de combinações que podem ser compostas com os 90 números relativos ao jogo sendo considerado para a busca do atraso normal, e igual ao número de todos os casos ocorridos desde 1871, relativamente para o jogo em questão, para encontrar o atraso máximo."

     

    Eventualmente, esqueço de uma sigla que já salvou minha vida muitas vezes, "R.T.F.M" = "Read The Fucking Manual"

    Ler direito o manual, sempre ajuda..

     

    Abraço Paulo.

    • Thanks 1
  2. 12 minutos atrás, suelsilva disse:

    As vezes eu não consigo entender muitas coisas do vocês postam. Leio os tópicos aqui do fórum e sofro pra entender rsrs

     

    Amigo @suelsilva

     

    Te recomendo estudar e entender de cór a natureza das distribuições HiperGeométrica e Binomial, são elas que regem o universo das loterias.

     

    https://en.wikipedia.org/wiki/Hypergeometric_distribution

    https://en.wikipedia.org/wiki/Binomial_distribution

  3. @Sphgf e @DixieJoe

     

    O procedimento que eu descrevi já é utilizado dentro das ciências estatísticas há  uns 100 anos, nenhuma novidade.

     

    A única observação que faço, é que como o "range total" da distribuição hipergeométrica quase sempre é um range de valores muito curto, é praticamente impossível "setar" o intervalo de confiança exato desejado, mas algo aproximado dele. O que mais se aproxima de uma "distribuição normal" em se tratando de filtros de loteria, é os Filtro das Somas, pois a curva é perfeitamente simétrica.

     

    Sobre o paper dos italianos, eu já tinha visto e tentei traduzi-lo por inteiro para entender o raciocínio e a proposta dos autores, mas o google translator traduziu apenas as primeiras páginas..

     

    Fui direto à formula e não entendi o significado das variáveis, que são a,b,c,d,x.

     

    (a/b) ^ x = c / d

     

    onde...

     

    x = (log(d) - log(c)) / (log(b) - log(a))

     

    Se alguém entendeu o que significa os valores de a,b,c,d, poderia ajudar no debate.

     

    Minha fórmula alternativa é uma variação da fórmula da distribuição geométrica:

     

    Probabilidade de saída = 1. - Math.Pow(1 - p, x + 1)

     

    Onde:

     

    p = probabilidade do evento

    x = numero de tentativas

     

    Na prática: Se você estiver lançando um dado, estando interessado na ocorrencia de um determinado lado, qual é o nível de certeza do sucesso após de 5 falhas consecutivas?

     

    p = 0.16666

    x = 5

     

    Probabilidade de saída  = 1 -  (0.8333 ^ 6)  = 0,665100415806113

    Se fossem 20 tentativas, probabilidade de saída seria 0,978262923733175

     

    Se alguém conseguiu desenvolver um cálculo alternativo levando em consideração outro fator, estarei interessado em conhecer.

     

    @Sphgf

     

    Sobre a sua sugestão de filtro baseado nos ultimos 10 concursos, achei interessante. Vou implementar aqui e depois te informo os resultados.

     

     

    • Thanks 1
  4. Amigos,

     

    Li os posts por cima, creio que uma das dificuldades discutidas seria determinar os valores de min e max de cada setup de filtro.

    Isso é feito com muita facilidade, se utilizarmos o conceito de intervalos de confiança.

    Intervalos de confiança nada mais são do que um range de valores, calculado em nº de desvios padrões, para baixo e para cima, a partir da média.

     

    Vejamos na prática: Suponha que você queira determinar o range de dezenas pares do seu filtro, com 0.95% de confiança, as contas ficariam assim:

     

    v = 25

    k = 12

    t = (min, max) ?

    m = 15

     

    Média = m * (k / v) = 7,2

    Variância = m * (k / v) * ((v - k) / v) * ((v - m) / (v - 1)) = 1,56

    Desvio Padrão = 1,248 (raiz quadrada da Variância)

     

    Min = Média - (Desvio Padrão * 1.96) = 7,2 - (1,248 * 1.96) = 4,75

    Max = Média + (Desvio Padrão * 1.96) = 7,2 + (1,248 * 1.96) = 9,64

     

    Portanto...

     

    v = 25

    k = 12

    t = (min = 4,75, max = 9,64)

    m = 15

     

    Agora arredondamos os valores utilizando a função Math.Round:

     

    t = (min = 5 max = 10)

     

    Ou, utilizamos as funções Math.Floor e Math.Ceiling, a gosto do cliente.

     

    O valor 1.96 é o multiplicador de numeros de desvios padrão, que pela tabela normalizada, equivale a 0.95% dos valores.

    Se quisermos apertar os filtros, basta manipularmos esse valor. Basta observar a tabelinha abaixo:

     

     

     

     

     

     

    z_distribution.png

    • Like 1
    • Thanks 1
  5. 1 hora atrás, suelsilva disse:

    Os filtros devem garantir um acerto de 0,95% independente de qualquer circunstâncias, é isso?

     

    Exatamente, mas não estou me baseando em 0.95% dos resultados anteriores da loteria, estou me embasando no universo total das combinações, são coisas completamente diferentes.

     

     

    • Like 1
  6. 25 minutos atrás, DixieJoe disse:

    0,88 * 0,88 * 0,88 * 0,88 .... por 20 filtros = 0,078  (ou seja menos de 8%, quando esperávamos 88%).

     

    Um logarítmo pode facilitar essas contas, desde que mudemos a pergunta.

     

    A pergunta deveria ser: "Se pretendo apostar na Lotofácil com x bilhetes, quantos filtros de y% cobertura eu deveria aplicar em todas as combinações possíveis?"

     

    Observe que são 3 variáveis envolvidas:

    c = Universo total de combinações

    m = Qtd de bilhetes apostados

    p = Cobertura por filtragem

     

    O logarítmo seria: Math.Log(m / c,  p)

     

    Na prática: se você quisesse apostar em 20 bilhetes e fosse aplicar uma bateria de filtros de 0.95% de cobertura, quantos filtros seriam necessários?

     

    Math.Log(20/ 3.2MI,  0.95) =  234 filtros aproximadamente...

    • Like 1
    • Thanks 1
  7. 57 minutos atrás, loteria2022 disse:

    Bom pra sua primeira pergunta. Não infelizmente 0 significa que o jogo simples Gerado teve 0 acertos e para sua segunda pergunta eu usei uma biblioteca mais construí o código todo principalmente a parte de testes tive que fazer do 0 

     

    Amigo, você poderia explicar por gentileza como você treinou a rede? Qual função de ativação foi utilizada? Qual linguagem você programou?

    A única coisa que entendi pelo print são os acertos de 0 a 6 dezenas e suas respectivas ocorrências.

  8. 52 minutos atrás, filipe200821 disse:

    No entanto isso exigiria um grande poder computacional para esse tipo de análise.  

     

    Nem tanto, se você souber processar da forma correta, em "baixo nível" e em paralelo.

     

    Essa é a combinação que mais acertou 11 pontos:

    01,03,04,05,06,09,11,13,17,18,20,22,23,24,25 - 222 vezes

     

    E essa é a que mais acertou 11 ou mais pontos:

    01,02,03,04,05,07,10,11,13,17,18,20,23,24,25 - 258 vezes

     

    A combinação campeã dos 11 pontos em ocorrencias representa 0,1243% do histórico, pouco acima do valor esperado

     

    Se você quiser as 10 mais ou 20 mais, eu posto aqui.

     

     

    • Like 1
  9. Bom dia amigos,

     

    Desenvolvi uma simples função em .NET que retorna a matriz do repositório La Jolla apenas inserindo os parâmetros.

    Se alguém estiver interessado, esse é o código:

     

    vb.NET

     

        Public Shared Function LaJollaCovering(v As Integer, k As Integer, t As Integer) As String

            ' - http://www.dmgordon.org/cover/

            Dim c() As String = {"v=" & v.ToString, "k=" & k.ToString, "t=" & t.ToString}
            Dim url As String = "http://ljcr.dmgordon.org/show_cover.php?" & String.Join("&", c)
            Dim web = New HtmlAgilityPack.HtmlWeb()
            Dim doc = web.Load(url)
            Dim htmlNodes = doc.DocumentNode.SelectNodes("//body/pre")

            Return htmlNodes.Nodes.First.InnerText

        End Function

     

    C#

     

        public static string LaJollaCovering(int v, int k, int t)    {

            // - http://www.dmgordon.org/cover/

            string[] c = {"v=" + v.ToString(), "k=" + k.ToString(), "t=" + t.ToString()};
            string url = "http://ljcr.dmgordon.org/show_cover.php?" + string.Join("&", c);
            var web = new HtmlAgilityPack.HtmlWeb();
            var doc = web.Load(url);
            var htmlNodes = doc.DocumentNode.SelectNodes("//body/pre");

            return htmlNodes.Nodes.First.InnerText;

        }

     

    É necessário instalar o Html Agility Pack: https://www.nuget.org/packages/HtmlAgilityPack/

    A função retorna a matriz em texto simples, para manipulá-la é preciso fazer o split entre as linhas e depois entre os elementos.

     

     

    • Like 3
  10. 5 horas atrás, Dr. Loteria disse:

    acertado com ele varios premios de 15 e incontaveis de 14 pontos

     

    Pergunte a você mesmo: imagine se você tivesse desenvolvido um esquema que acertasse 15 pontos várias vezes e incontáveis vezes de 14 pontos, mas que o esquema gerasse uma grande quantidade de bilhetes demandando um alto investimento, o que você optaria?

     

    1 - Vender o esquema pela net, por R$ 19,90.

    2 - Reunir uma quantidade de apostadores, conhecidos ou não, com o mesmo interesse, depois de provada a eficiência do método, para levantar os fundos necessários e apostar.

     

    Qualquer pessoa, intelectualmente honesta, escolheria a segunda opção, caso a premissa inicial fosse verdadeira.

    Como não é, e não precisa ser muito inteligente para se chegar a essa conclusão, trata-se de apenas mais um "João de Deus" das loterias vendendo gato por lebre.

    • Like 3
  11. 4 horas atrás, Zangado disse:

    pode ser interessante uma dll para trabalhar com excel 

     

    Poderia funcionar, mas perderia performance de qualquer maneira.

    Essas são as 4 funcões principais que necessariamente deveriam estar na dll:

     

    calculateOneCovering()

    randomNeighbor()

    computeNeighbor()

    acceptNeighbor()

     

    Todas elas usam os valores das variáveis globais que fazem parte do programa, e que não acessíveis de fora do programa, a não ser que as passemos a partir do programa cliente, vba ou vb.net/c#. Fora isso, o programa usa ponteiros (pointers) para praticamente tudo, nesse caso vc teria que passar o array como referencia ByRef juntamente com o lenght, tudo pre-calculado. Resumindo, um baita trabalho. Muito mais fácil trabalhar direto de dentro do programa.

  12. A mensagem diz que 2,5 não é um valor floating point. Em programação, floating point nada mais é do que um número decimal.

    Nesse caso, desconfio que a conversão da string "2,5" para o valor 2,5 é que está retornando esse erro.

    Por acaso vc alterou algum valor na aba "simulação e conferencia" ou em "configurações"?

    Se sim, tente como "2.5" ao invés de "2,5". Deve resolver.

     

    • Like 1
  13. c(15,9,8,9) = 68 (74,72%)

    No limite da cobertura.

     

    01 02 03 04 05 06 08 12 13
    01 02 03 04 05 07 08 09 14
    01 02 03 04 05 10 11 12 14
    01 02 03 04 06 07 09 11 12
    01 02 03 04 06 07 10 13 14
    01 02 03 04 08 09 10 11 13
    01 02 03 05 06 07 08 10 11
    01 02 03 05 06 07 09 13 15
    01 02 03 05 08 09 10 12 15
    01 02 03 05 08 11 13 14 15
    01 02 03 06 07 08 12 14 15
    01 02 03 06 09 10 11 14 15
    01 02 03 07 10 11 12 13 15
    01 02 04 05 06 09 12 14 15
    01 02 04 05 06 10 11 13 15
    01 02 04 05 07 08 11 12 15
    01 02 04 05 07 09 10 12 13
    01 02 04 06 07 08 09 10 15
    01 02 04 07 09 11 13 14 15
    01 02 04 08 10 12 13 14 15
    01 02 05 06 07 11 12 13 14
    01 02 05 06 08 09 10 13 14
    01 03 04 05 06 08 10 14 15
    01 03 04 05 06 09 11 13 14
    01 03 04 05 07 09 10 11 15
    01 03 04 05 07 12 13 14 15
    01 03 04 06 07 08 11 13 15
    01 03 04 06 09 10 12 13 15
    01 03 04 08 09 11 12 14 15
    01 03 05 06 07 09 10 12 14
    01 03 05 07 08 09 11 12 13
    01 03 06 08 10 11 12 13 14
    01 03 07 08 09 10 13 14 15
    01 04 05 06 08 09 10 11 12
    01 04 05 07 08 10 11 13 14
    01 04 06 07 08 09 12 13 14
    01 04 06 07 10 11 12 14 15
    01 05 06 07 08 09 11 14 15
    01 05 06 07 08 10 12 13 15
    01 05 09 10 11 12 13 14 15
    02 03 04 05 06 07 11 14 15
    02 03 04 05 07 08 10 13 15
    02 03 04 05 09 11 12 13 15
    02 03 04 06 08 09 13 14 15
    02 03 04 06 08 10 11 12 15
    02 03 04 07 08 11 12 13 14
    02 03 04 07 09 10 12 14 15
    02 03 05 06 08 09 11 12 14
    02 03 05 06 10 12 13 14 15
    02 03 05 07 09 10 11 13 14
    02 03 06 07 08 09 10 12 13
    02 04 05 06 07 08 09 11 13
    02 04 05 06 07 08 10 12 14
    02 04 05 08 09 10 11 14 15
    02 04 06 09 10 11 12 13 14
    02 05 06 07 09 10 11 12 15
    02 05 07 08 09 12 13 14 15
    02 06 07 08 10 11 13 14 15
    03 04 05 06 07 08 09 12 15
    03 04 05 06 07 10 11 12 13
    03 04 05 08 09 10 12 13 14
    03 04 06 07 08 09 10 11 14
    03 05 06 08 09 10 11 13 15
    03 05 07 08 10 11 12 14 15
    03 06 07 09 11 12 13 14 15
    04 05 06 07 09 10 13 14 15
    04 05 06 08 11 12 13 14 15
    04 07 08 09 10 11 12 13 15

     

  14. 5 minutos atrás, BigMax disse:

    Nino Aspesi tem uma ótima redução da matriz 60,6,5,6=437437 linhas (100%)

    Max, o Aspesi reduziu 53.000 linhas em 1 dia?

    Os italianos devem ter desenvolvido um software diferente. O cover32 não realiza essa proeza tão rapidamente assim.

  15. 23 minutos atrás, DixieJoe disse:

    Pergunta para o bitwizardry: isso tem ajudado?

    Não Dixie, não ajuda em nada. Eu só quis mostrar como é o funcionamento do seed de qualquer código pseudorandom.

    Aliás, definir a "qualidade" da aleatóriedade, tbm é algo subjetivo. Alguns podem afirmar que quanto mais dispersos os números uns dos outros, por um determinado período, maior qualidade, outros, afirmam justamente o contrário.

     

    Ex.: Imagine um código que tenha gerar 5 numeros aleatórios entre 1 e 100 (repetidos ou não)

     

    No primeiro output, vc tem: 4 ,23, 50, 65, 69

    No segundo vc tem: 11,11,29,31 92

     

    Qual sequencia seria a "melhor"? de mais aleatóriedade? Impossível dizer.

     

    Houve uma discussão sobre isso nessa conferencia c++. O fato é:  seja lá qual for o método, não ajuda em nada em loteria.

     

  16. 56 minutos atrás, IGFX disse:

    Oi cara, pode me ensinar a baixar o XORShift ?

    Não há executável, apenas código fonte. (em c#)

     

    Você precisa "clonar" o projeto para a sua máquina, compilar, criando um .exe e uma dll, fazer a referencia da dll no seu .exe e rodar os exemplos que o cara escreveu. Se você não é programador, fica difícil entender. Mas posso te mostrar algo parecido sem que vc tenha que compilar, siga esses passos:

     

    1 - Acesse esse site: https://en.cppreference.com/w/cpp/algorithm/sample

    2 - No campo onde está o código, ao lado esquerdo, em cima, há um botão escrito "Run this code", clique nele.

    3 - Cole esse código por cima do anterior:

     

    #include <iostream>
    #include <random>
    #include <string>
    #include <iterator>
    #include <algorithm>
    #include <chrono>
     
    int main() {
        auto seed = 0;
        std::mt19937 generator(seed);
        std::vector<int> in = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
        std::vector<int> out;
        std::sample(in.begin(), in.end(), std::back_inserter(out), 15, generator);

        for (auto x : out) {
            std::cout << x << " ";
        }
    }

     

    4 - Agora clique em em "Run", e pronto. Veja a saída embaixo dessa telinha:  1 3 6 8 9 10 13 14 16 17 19 20 22 23 24

    Agora altere o valor do seed e veja a diferença, nessa linha: auto seed = 1;
    

    Coloque 1, 2 3... etc... qualquer numero de 0 até 9223372036854775807 e observe os diferentes outputs.

    Se der alguma zebra, pressione F5 e siga os passos novamente.

×
×
  • Create New...