Jump to content

O segredo de criação de desdobramentos dos programas


Pedepano

Recommended Posts

Estou criando esse tópico depois de fazer diversos testes, com a tentativa de criar uma planilha para encontrar as menores matrizes possíveis entre um determinado desdobramento. Essa necessidade veio devido a alguns programas gerar uma quantidade maior de jogos para garantir uma determinada pontuação, em quanto outros geravam uma quantidade menor de linhas.

 

Então estou buscando entender o conceito usado por esses programas para conseguir executa essas reduções mantendo a garantia.

Porém ai esta o x de toda questão,  já fiz diversos testes, formas diferentes para tentar gerar uma matriz com a menor quantidade possível de linhas.

 

Usei como base a quantidade de linhas geradas pelo ininuga.

Em alguns casos conseguir gerar uma quantidade igual ao ininuga, já em outras a quantidade acaba sendo maior para fechar os 100%

 

A questão é, não estamos falando de matemática ?

Onde a mesma deveria atuar da mesma forma em qualquer questão, exemplo.

Se quero combinar 5 dezenas 3 a 3, matematicamente existe 10 opções :

01 02 03

01 02 04 

01 02 05

01 03 04

01 03 05

01 04 05

02 03 04

02 03 05

02 04 05 

03 04 05 

 

Agora se quero criar uma matriz que garante 2 acertos se acertar 3 dezenas entre as 5,  sendo 3 dezenas por jogo, bastaria 2 linhas.

01 02 04

01 03 05 

 

Então na hora de criar uma matriz ou até mesmo reduzir, estamos falando de matemática.

 

Na minha mente estou usando o conceito matemático certo para aplicar essa redução , então como e possível um programa conseguir quebrar a matemática existente em uma matriz e conseguir reduzir ou gerar uma quantidade menor de linhas do que falando matematicamente seria necessário ?

 

Peguei como base  a matriz gerada pelo ininuga ( 10-6-5-6 = 14 ) nesse caso ele gera 14 linhas

agora usando o meu conceito de criação de matriz, que para mim seria o correto falando dentro da matemática,  foi preciso de 15 linhas para fechar os 100%

me diz como um programa consegue quebrar a matemática e conseguir fechar  2 linhas a mais com 14 jogos ?

 

Para vc entender, do lado direito da imagem contém a quantidade de jogos cobertos por cada linha gerada, e a porcentagem de garantia.

observe que com 14 linhas, tinha 208 linhas cobertas de 210,  ou seja, existia 2 linhas que não tinha cobertura, necessitando de mais uma linha para fechar essas duas linhas.

 

Alguém teria a capacidade de explicar ?

Ou será que eu não sei nada de matemática, e  estou aplicando um conceito inválido para encontrar essas matrizes..

 

capture-20220326-155643.png

  • Like 7
  • Thanks 2
Link to comment
Share on other sites

  • Pedepano changed the title to O segredo de criação de desdobramentos dos programas
3 horas atrás, Pedepano disse:

Estou criando esse tópico depois de fazer diversos testes, com a tentativa de criar uma planilha para encontrar as menores matrizes possíveis entre um determinado desdobramento. Essa necessidade veio devido a alguns programas gerar uma quantidade maior de jogos para garantir uma determinada pontuação, em quanto outros geravam uma quantidade menor de linhas.

 

Então estou buscando entender o conceito usado por esses programas para conseguir executa essas reduções mantendo a garantia.

Porém ai esta o x de toda questão,  já fiz diversos testes, formas diferentes para tentar gerar uma matriz com a menor quantidade possível de linhas.

 

Usei como base a quantidade de linhas geradas pelo ininuga.

Em alguns casos conseguir gerar uma quantidade igual ao ininuga, já em outras a quantidade acaba sendo maior para fechar os 100%

 

A questão é, não estamos falando de matemática ?

Onde a mesma deveria atuar da mesma forma em qualquer questão, exemplo.

Se quero combinar 5 dezenas 3 a 3, matematicamente existe 10 opções :

01 02 03

01 02 04 

01 02 05

01 03 04

01 03 05

01 04 05

02 03 04

02 03 05

02 04 05 

03 04 05 

 

Agora se quero criar uma matriz que garante 2 acertos se acertar 3 dezenas entre as 5,  sendo 3 dezenas por jogo, bastaria 2 linhas.

01 02 04

01 03 05 

 

Então na hora de criar uma matriz ou até mesmo reduzir, estamos falando de matemática.

 

Na minha mente estou usando o conceito matemático certo para aplicar essa redução , então como e possível um programa conseguir quebrar a matemática existente em uma matriz e conseguir reduzir ou gerar uma quantidade menor de linhas do que falando matematicamente seria necessário ?

 

Peguei como base  a matriz gerada pelo ininuga ( 10-6-5-6 = 14 ) nesse caso ele gera 14 linhas

agora usando o meu conceito de criação de matriz, que para mim seria o correto falando dentro da matemática,  foi preciso de 15 linhas para fechar os 100%

me diz como um programa consegue quebrar a matemática e conseguir fechar  2 linhas a mais com 14 jogos ?

 

Para vc entender, do lado direito da imagem contém a quantidade de jogos cobertos por cada linha gerada, e a porcentagem de garantia.

observe que com 14 linhas, tinha 208 linhas cobertas de 210,  ou seja, existia 2 linhas que não tinha cobertura, necessitando de mais uma linha para fechar essas duas linhas.

 

Alguém teria a capacidade de explicar ?

Ou será que eu não sei nada de matemática, e  estou aplicando um conceito inválido para encontrar essas matrizes..

 

capture-20220326-155643.png

PédePano,

 

A questão das matrizes é muito discutida há décadas.

Seja para Loterias (onde se busca o mínimo possível de linhas, tentando minimizar o investimento nos jogos) ou para aplicações das mais diversas.

 

Uma das aplicações importantes é em planejamento de "deployment" em guerras.

Qual o mínimo necessário de qualquer coisa, dadas as restrições existentes, etc. etc.

A esse respeito, o LaJolla Covering Repository deve ser o centro das pesquisas em melhores coberturas, dado o vasto recurso computacional e as mentes brilhantes lá existentes.

Diga-se de passagem, mais uma vez, o LaJolla é praticamente um órgão e Centro de Pesquisas do Departamento de Defesa dos EUA que disponibiliza os maiores computadores e milhões de dólares anualmente para custear o projeto.

 

O La Jolla coloca à nossa disposição algumas centenas de matrizes que podemos usar para aplicações em loterias. Só ir lá e baixar. Para loterias, esses desdobramentos gratuitos do LaJolla são os melhores existentes em termos de MINIMO DESEJADO.

 

A vantagem é que todos os desdobramentos do LaJolla estão continuamente recebendo melhorias nas quantidades (por causa do poder de fogo dos computadores e dos programas que eles utilizam).

 

Existem centenas de pesquisadores ao redor do mundo trabalhando nessa idéia de buscar as melhores matrizes possíveis, tentando trazer as quantidades para o MINIMO MATEMÁTICO do cálculo da fórmula do Schonheim. 

No Brasil o Cologa mostra as quantidades minimas de acordo com essa fórmula (imagino que você deve conhecer. Se não conhecer, posso te passar numa planilha. Até acredito que já tenha colocado essa planilha por aqui faz muitos anos).

As críticas que a gente faz ao Cologa é que ele costuma gerar mais do que o Ininuga ou do que o Wheel Generator, por exemplo.

 

MAS...

 

Existe no Cologa a opção de utilizar a QUANTIDADE DE PRÊMIOS DESEJADA. Essa opção é fantástica (pensando em loterias, claro ---NÃO PENSANDO EM OTIMIZAÇÃO DE QUANTIDADES DE JOGOS).

Pode parecer estranho eu dizer que é melhor você gerar uma matriz para PEGAR 5 OU 10 PRÊMIOS do que pedir para gerar uma quantidade minima.

Explicando: 

 

No seu exemplo de 10,6,5,6=14, o Cologa diz que o minimo matematico é de 9 jogos (corretamente calculado pela fórmula de Schonheim que diz que deveria ser 8,4 - arredondados para 9 jogos), mas ele gera um MINIMO de 20 linhas. Só que essas 20 linhas (parece muitas linhas, concordo) vão lhe dar 2,6 prêmios de 5, na média, por sorteio. Isso significa, na prática, que você ultrapassou o MINIMO MATEMATICO de 9 (20 dividido por 2,6 = 7,7 linhas "teóricas" - nessas 20). Isso mesmo! E usando uma matriz que o Cologa gerou e que nós dizemos que não é boa porque gera muitos jogos acima do Minimo Matematico.

 

E fica muito melhor ainda se você pedir para ele gerar 10,6,5,6 para 10 prêmios, por exemplo. Ele vai dizer que o minimo matematico é de 84 linhas (correto, fórmula) mas gera 101 linhas com 6 dezenas.

A GRANDE VANTAGEM é que essas 101 linhas vão premiar 13,9 linhas com 5 por sorteio, em média. 

Você praticamente dobra a vantagem de premiação. E ganha da matemática.

 

Esse conceito de Múltiplos prêmios foi criado por 2 pesquisadores de Israel há mais de 15-20 anos. Gueron-Braverman é o nome deles. Inicialmente, sugerido para eu ler pelo nosso colega sphgf.

Eles publicaram um paper super interessante a respeito e que vale muito a pena você e os interessados pegarem para ler.

 

Nome do paper: A Monte Carlo Algorithm for a Lottery Problem

 

Nele você tem as explicações e a lógica do algoritmo sugerido para gerar o código necessário lá no paper.

 

Até tentei fazer um programa  para criar matrizes (com Multiplos prêmios, claro porque acredito que ai, sim, você está "batendo" na matemática) mas desisti. É bom para poucas dezenas.

Mas quando se fala em  mais de 25 dezenas, o tempo de processamento é absurdo.

 

-----

 

Eu concordo com você que deveria ser relativamente fácil aplicar os conceitos matemáticos e chegar rapidamente nas melhores e mais otimizadas matrizes, de acordo com a fórmula de Schonheim.

Infelizmente, isso não é tão simples assim por causa da monstruosidade de cálculos necessários para se testar todas as possibilidades de cobertura de todas as linhas a cada nova linha encontrada.

Quando falamos de poucas dezenas, como no seu exemplo de 5,3,2,3=2, isso é relativamente fácil e rápido. Basta testar todas as possibilidades (no caso, apenas 2 linhas já fornecem a cobertura matemática).

 

Mas quando falamos de mais de 25, 30, 40, 50 dezenas (e dependendo da cobertura e garantia desejadas) esse esforço computacional vai muito além dos nossos meros notebooks ou PCs convencionais.

 

Outro ponto importante é o próprio programa utilizado para analisar cada linha. O Ininuga deve ser o mais rápido ainda hoje porque trabalha em baixo nível de programação (utiliza Assembly) o que lhe dá uma velocidade impar.

Igualmente famosos são os programas do Anastasios Tampakis (Wheel Generator- deve ter uma versão Free na Internet) e o Cover do Nurmela (disponível no site do LaJolla) que também utiliza o Assembly.

 

Eu desisti de querer gerar matrizes buscando minimos matemáticos. Não encontrei aplicação pratica. E, principalmente, porque o poder de computação necessário é fantástico. São todas rotinas de FORÇA-BRUTA (tratam 100% de todas as linhas e de todas as possibilidades a cada momento de análise e verificação).

 

Outro motivo de eu desistir foi que não consegui ver como uma matriz pode nos ajudar a ganhar em qualquer loteria. Principalmente quando se fala em matriz com garantia menor do que o tamanho das linhas geradas e, principalmente, quando se fala em condições MAIORES do que a garantia (o que é algo que sempre se tenta fazer para reduzir a quantidade de jogos finais).

 

----

Cálculo da Probabilidade e do Mínimo (Matemático) de Jogos Necessários
     
Quantidade de Números ( N=n=v ) 5 Números
Em Conjuntos de ( t=c=k ) 3 Números
Garantindo Mínimo de ( m=g=t ) 2 Números
Condição de Acerto ( s=m ) 3 Números
     
Qte Mínima de Conjuntos com Acerto ( x ) 1 Conjuntos, no mínimo
     
% Probabilidade Teórica ( p )                       60,0000000 %
Qte Mínima Teórica de Conjuntos ( T )                                        2 Conjuntos/Linhas
     
  (Cálculo Bastante Aproximado!!!)  
     
     
Fórmula Utilizada (Equação Hipergeométrica): =(COMBIN(C4;C5)*COMBIN((C3-C4);(C6-C5))/COMBIN(C3;C6)*100)/C8
Schonheim    

 

Na fórmula, você lê células C4, C5, C3, etc.... Elas estão na coluna 2 acima e começam com Quantidade de Números na célula C3, e assim sucessivamente. Para colocar numa planilha Excel, claro.

 

 

----

Para quem quiser ver o paper do Braverman-Gueron, podem ir direto no site do sphgf para acessar por um link que ele disponibilizou lá:

https://sites.google.com/site/sphgf3/home/loterias

 

Espero não ter jogado "água-fria" nas suas pesquisas sobre desdobramentos otimizados (reduzidos na quantidade de jogos) para se chegar a poucos jogos.

Pode acreditar que, para loterias, é melhor você utilizar o conceito de Prêmios Múltiplos, gerar os seus jogos e DEPOIS aplicar alguns filtros de sua preferência.

 

Vai perceber que pode chegar a 10% da quantidade sugerida pelo Minimo Matematico e ainda ter ótimas premiações, na maioria dos sorteios (quando seus filtros acertarem, claro).

  • Like 14
  • Thanks 3
Link to comment
Share on other sites

@DixieJoe busco encontrar uma forma de fazer essa redução ou gerar essas matrizes apenas por curiosidade mesmo.

queria entender o conceito envolvido por trás dessas reduções que alguns programas fazem, uma vez que vão contra minha linha de raciocínio sobre a questão de redução. Uma vez que estamos falando de matemática.

 

Sinceramente creio que nem deveria responder, pois creio que meu nível de sabedoria sobre essa questão está muito abaixo do seu,  rsrs

Sei que conseguir reduzir uma matriz ou gerar uma matriz com a menor quantidade de jogos possível, precisa de um grande poder de processamento, principalmente quando usamos muitas dezenas.

Porém não creio que seja algo tão complexo assim, estamos falando de matemática, pelo menos penso assim.

o mesmo conceito usando para gerar ou reduzir uma pequena matriz será usado para uma grande, a diferença será o tempo de processo.

 

já vi alguns programas gerar exatamente a quantidade de jogos gerados pelas minas análises.

Inclusive já vi um suposto matemático no youtube citar por exemplo que para garantir 14 acertos jogando com 18 dezenas seria preciso de 38 apostas.

Quantidade exata de jogos gerados, se vc aplicar o conceito que uso.

 

analisando a logica, realmente essa deveria ser a quantidade de jogos para um desdobramento 18-15-14-15 = 38

Porém quando vc adiciona digamos uma nova variável junto a esse processo, percebe que essa quantidade de 38 linhas será reduzida mantendo a garantia de 14 acertos.

 

Hoje posso te dizer que com o conceito que uso para gerar uma matriz seria possível criar um programa simples capaz de gerar matrizes menores que o cologa gera por exemplo.  Porém acredito que limitado para a lotofácil, ou no máximo 25 números.

Infelizmente fazer essa análise no Excel e praticamente impossível. Me limito a pequenas matrizes.

 

Um exemplo, o cologa, não estou falando mau, apenas usando ele como exemplo.

se pedi para gerar 12-6-5-6  ele vai gerar entre 66  linhas. Se ativar a opção de usar matriz, onde ele vai usar como base uma matriz menor caso exista.

Nesse caso a menor matriz que ele encontrou  e gerou aqui para mim foi 12-6-5-6 = 56

 

usei meu conceito para gerar 12-6-5-6  gerando 59 linhas, então creio que estou em meio termo, existe algum detalhe que ainda não descobrir que esta fazendo gerar algumas linhas a mais..

 

apliquei um segundo conceito de redução e conseguir reduzir para 47 linhas

12-6-5-6 = 47 ,  lembrando que no cologa se colocar para baixar uma matriz, a menor encontrada foi 56 linhas.

Spoiler

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

 

  • Like 1
Link to comment
Share on other sites

8 minutos atrás, Pedepano disse:

@DixieJoe busco encontrar uma forma de fazer essa redução ou gerar essas matrizes apenas por curiosidade mesmo.

queria entender o conceito envolvido por trás dessas reduções que alguns programas fazem, uma vez que vão contra minha linha de raciocínio sobre a questão de redução. Uma vez que estamos falando de matemática.

 

Sinceramente creio que nem deveria responder, pois creio que meu nível de sabedoria sobre essa questão está muito abaixo do seu,  rsrs

Sei que conseguir reduzir uma matriz ou gerar uma matriz com a menor quantidade de jogos possível, precisa de um grande poder de processamento, principalmente quando usamos muitas dezenas.

Porém não creio que seja algo tão complexo assim, estamos falando de matemática, pelo menos penso assim.

o mesmo conceito usando para gerar ou reduzir uma pequena matriz será usado para uma grande, a diferença será o tempo de processo.

 

já vi alguns programas gerar exatamente a quantidade de jogos gerados pelas minas análises.

Inclusive já vi um suposto matemático no youtube citar por exemplo que para garantir 14 acertos jogando com 18 dezenas seria preciso de 38 apostas.

Quantidade exata de jogos gerados, se vc aplicar o conceito que uso.

 

analisando a logica, realmente essa deveria ser a quantidade de jogos para um desdobramento 18-15-14-15 = 38

Porém quando vc adiciona digamos uma nova variável junto a esse processo, percebe que essa quantidade de 38 linhas será reduzida mantendo a garantia de 14 acertos.

 

Hoje posso te dizer que com o conceito que uso para gerar uma matriz seria possível criar um programa simples capaz de gerar matrizes menores que o cologa gera por exemplo.  Porém acredito que limitado para a lotofácil, ou no máximo 25 números.

Infelizmente fazer essa análise no Excel e praticamente impossível. Me limito a pequenas matrizes.

 

Um exemplo, o cologa, não estou falando mau, apenas usando ele como exemplo.

se pedi para gerar 12-6-5-6  ele vai gerar entre 66  linhas. Se ativar a opção de usar matriz, onde ele vai usar como base uma matriz menor caso exista.

Nesse caso a menor matriz que ele encontrou  e gerou aqui para mim foi 12-6-5-6 = 56

 

usei meu conceito para gerar 12-6-5-6  gerando 59 linhas, então creio que estou em meio termo, existe algum detalhe que ainda não descobrir que esta fazendo gerar algumas linhas a mais..

 

 

qual linguagem vc conhece,vc ja deve ter usado programa cover de nurmela,eu tenho ele convertido para vb6 em funcionameto que gera reduzido mais tem que ser colocado a quantia de bilhetes,não como o cologa gera e depois reduz,em c tenho o que faz o mesmo que o cologa de gerar e depos ir  reduzindo,inclusive eu passei para c++ builder com interface grafica.

Link to comment
Share on other sites

55 minutos atrás, Bruno Cintra disse:

qual linguagem vc conhece,vc ja deve ter usado programa cover de nurmela,eu tenho ele convertido para vb6 em funcionameto que gera reduzido mais tem que ser colocado a quantia de bilhetes,não como o cologa gera e depois reduz,em c tenho o que faz o mesmo que o cologa de gerar e depos ir  reduzindo,inclusive eu passei para c++ builder com interface grafica.

 

@Bruno Cintraeu não sei nada de programação, rsrs, apenas o básico de vba para criar minhas análises..

Minhas análises são feitas em Excel, oque me limita muito.

Só tenho o cologa e ininuga

 

 

Link to comment
Share on other sites

3 horas atrás, Pedepano disse:

apliquei um segundo conceito de redução e conseguir reduzir para 47 linhas

12-6-5-6 = 47 ,  lembrando que no cologa se colocar para baixar uma matriz, a menor encontrada foi 56 linhas.

Essa matriz jé está em 38 linhas 100%...sendo que matematicamente o minimo dela para 100% é 28 linhas, porém como o @DixieJoecomentou...muitas dessas reduções para se chegar no minimo 100% depende de computadores bastantes avançados.

Agora pelo que eu entendi tu tá querendo descobrir uma formula que aplicada no Excel chegue-se a esse minimo matemático. Além das sugestões de leituras que te foram sugeridos, você poderia se cadastrar no fórum dos italianos(wheels) que atualmente reúnem uma grande números de engenheiros (e apaixonados!) por desenvolvimento em matriz. 

\[..]/

  • Like 1
Link to comment
Share on other sites

14 horas atrás, Bruno Cintra disse:

qual linguagem vc conhece,vc ja deve ter usado programa cover de nurmela,eu tenho ele convertido para vb6 em funcionameto que gera reduzido mais tem que ser colocado a quantia de bilhetes,não como o cologa gera e depois reduz,em c tenho o que faz o mesmo que o cologa de gerar e depos ir  reduzindo,inclusive eu passei para c++ builder com interface grafica.

Boa tarde.

Você pode disponibilizar, por favor, este programa convertido na área de downloads, ou é secretum secretorum?

Muito obrigado.

Link to comment
Share on other sites

10 horas atrás, Varelo disse:

Essa matriz jé está em 38 linhas 100%...sendo que matematicamente o minimo dela para 100% é 28 linhas, porém como o @DixieJoecomentou...muitas dessas reduções para se chegar no minimo 100% depende de computadores bastantes avançados.

Agora pelo que eu entendi tu tá querendo descobrir uma formula que aplicada no Excel chegue-se a esse minimo matemático. Além das sugestões de leituras que te foram sugeridos, você poderia se cadastrar no fórum dos italianos(wheels) que atualmente reúnem uma grande números de engenheiros (e apaixonados!) por desenvolvimento em matriz. 

\[..]/

 Até então nunca vi tal matriz com 38 linhas. O ininuga gera 40, o cologa 56.

 

O conceito mais básico para criação de uma matriz , e a forma mais simples de explicar e apenas uma.

Testar todas as combinações possível em conjuntos até conseguir encontrar um conjunto que tenha uma coberta de 100%

 

Não existe nada além disso, estamos falando de matemática, se alguém dizer que o conceito para redução de uma matriz não seria essa, sinto dizer que então não conheço matemática. 

Pois uma vez que tenho um arquivo com todas as possibilidades possível onde vou testar todas possibilidades. Se não for o conceito certo, então não existe matemática.

Qualquer outro conceito vai dentro disso, testar todas as possibilidades.

 

Porém infelizmente isso e algo que requer um grande poder de processamento.

 

Hoje estou verificando se existe a necessidade de fazer essa análise em todas as possibilidades possível, pois em testes que já fiz uma vez que uma linha já foi analisada com outra, ao adicionar uma terceira linha, não há necessidade de refazer o processo com a mudança da primeira  linha.

Exemplo, tenho 10 linhas...

Analiso linha 1

Analiso linha 2

Quando analisar a linha 2, eu teria que testar todas as variáveis da linha 1 contra a linha 2, ou seja eu teria que fazer 100 comparações.

 

Porém em testes que já fiz constatei que não há essa necessidade, pois uma vez que o processo já encontrou a melhor linha da etapa 1, quando executar o processo da linha 2, não tem a necessidade de confrontar todas as possibilidades da linha 1 com a 2, e sim somente da linha 2.

Então ao invés de fazer 100 comparações, faço apenas 10 em cada nova linha.

Já fiz o testes em pequenas matrizes e o resultado de confrontar todas as variáveis ou somente a da linha ativa, no final resultará no mesmo resultado.

 

Talvez isso só acontece em matrizes pequena, então hoje vou testar uma matriz maior , testando todas as variáveis para verificar se isso consegue reduzir mais a quantidade de linhas, já que testar apenas as variáveis de cada linha, está retornando uma quantidade um pouco maior de linhas com base em matrizes geradas por alguns programas como o ininuga.

 

Link to comment
Share on other sites

3 horas atrás, Pedepano disse:

 Até então nunca vi tal matriz com 38 linhas. O ininuga gera 40, o cologa 56.

 

Aqui está :

12-6-5-6 = 38

Spoiler

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

\[..]/

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

5 horas atrás, Varelo disse:

 

Aqui está :

12-6-5-6 = 38

  Mostrar conteúdo oculto

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

\[..]/

Interessante, 🤔

Com base nessas suas 38 linhas já pude observar alguns detalhes.

 

As linhas mostram que as analises não busca encontrar as linhas com maior cobertura a cada verificação,  e sim com foco na redução final

As suas 20 primeiras linhas, cobrem apenas 60,06% de garantia dos 5 acertos. não fechando 369 linhas

 

Já minhas análises busca encontrar sempre a maior cobertura desde a primeira linha analisada.

Em quanto minha análise com 20 linhas já tinha uma cobertura de  78,79% de garantia dos 5 acertos, não fechando  196 linhas

 

Isso mostra que minhas análise perder desempenho na reta final, onde acaba gerando mais linhas para fechar pouca %

Voltemos aos testes. Mais já estou satisfeito, hoje já consigo encontra boas matrizes que tenha uma boa % de garantia, não me importo que não seja 100%

 

 

  • Like 2
Link to comment
Share on other sites

12,6,5,6 = 22

88%

 

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

  • Thanks 2
Link to comment
Share on other sites

Existem vários algoritmos para criação de matrizes. Por isso um programa gera a matriz 12,6,5,6=B com B=X outro com B=Y e assim vai. Só eu conheço pelo menos uns 3 algoritmos, e uma par de variações do algoritmo mais básico que pude desenvolver sozinho...

 

Usando o exemplo do 12,6,5,6, meu programa que usa um algoritmo que eu desenvolvi funciona assim:

gencover 12 6 5 6
Gerando matriz V,K,T,M: 12,6,5,6
Mínimo teórico: 25
Total Combinações V M: 924

Tamanho do Melhor Sistema: 47
Tempo Gasto: 0.0

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
10

Tamanho do Melhor Sistema: 44
Tempo Gasto: 0.03120994567871094

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
100

Tamanho do Melhor Sistema: 43
Tempo Gasto: 0.2655684947967529

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
1000

Tamanho do Melhor Sistema: 40
Tempo Gasto: 2.697330474853516

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
10000

Tamanho do Melhor Sistema: 40
Tempo Gasto: 26.89186000823975

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
23000

Tamanho do Melhor Sistema: 38
Tempo Gasto: 61.87396788597107

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.

Sistema salvo em: 12,6,5,6=38.txt

Desenvolvido por rockcavera

E aqui está a matriz gerada por ele de tamanho 38:

Spoiler

1 2 3 4 5 6
1 2 3 5 6 12
1 2 3 9 10 11
1 2 4 6 11 12
1 2 4 7 8 11
1 2 4 8 10 12
1 2 5 7 11 12
1 2 6 7 8 9
1 2 6 7 9 10
1 3 4 6 7 11
1 3 4 7 9 12
1 3 5 7 8 10
1 3 5 8 10 11
1 3 8 9 11 12
1 4 5 7 9 12
1 4 5 9 10 11
1 4 6 8 10 12
1 5 6 8 9 11
1 6 7 10 11 12
2 3 4 5 8 9
2 3 4 7 10 12
2 3 5 7 9 11
2 3 6 7 8 12
2 3 6 8 10 11
2 4 5 6 7 10
2 4 6 7 9 12
2 4 6 9 11 12
2 5 6 8 10 11
2 5 8 9 10 12
3 4 5 8 11 12
3 4 5 10 11 12
3 4 6 8 9 10
3 5 6 7 9 11
3 5 6 9 10 12
3 5 7 8 9 10
4 5 6 7 8 12
4 7 8 9 10 11
7 8 9 10 11 12

Ai você me pergunta como ele funciona? É simples. Para cobrir uma matriz V,K,T,M você deve:

1) Gerar todas as combinações de V,K e vamos por em uma lista

2) Selecione aleatoriamente uma combinação de V,K, adicione-a a sua lista Matriz e delete ela da lista do passo 1)

3) Gerar todas as combinações de V,M, coloque em uma lista e delete aquelas que fazem T ou mais pontos com a combinação selecionada no passo 2)

4) Agora você sabe a quantidade de combinações que uma única combinação de V,K consegue eliminar de V,M. Esse número vamos chamar de "Comb_VK_reduz_VM" e você obtém ele assim: Combinações de V,M - Tamanho da Lista de V,M Após a Exclusão) [1]. Temos por enquanto 3 listas: combinações de V,K; combinações de V,M; e Matriz. Cada uma com respectivamente N itens: C(V,K) - 1; C(V,M) - Comb_VK_reduz_VM; e 1 [2].

5) Vamos obter o mínimo teórico, mas que nem sempre é alcançável. Fórmula: Ceil(C(V,M) / Comb_VK_reduz_VM) [3].

6) Agora, enquanto a lista de V,M possuir combinações (itens), você vai fazer:

6.1) Cruzar a lista de V,K contra a lista de V,M. Ou seja, pegar uma por uma das combinação da lista de V,K e contar quantas combinações de V,M fazem T ou mais pontos com cada uma.

6.2) Depois de passar a lista toda de V,K, você vai pegar aquela combinação de V,K que mais fez T ou mais pontos com a atual lista de V,M, adicionar ela na lista Matriz, deletar da lista V,K e deletar as combinações de V,M que fazem T ou mais pontos com ela [4].

6.3) Volte para 6)

7) Se a lista V,M não possui mais combinações, ou seja, não tem mais itens, a sua lista Matriz possui uma matriz de V,K,T,M 100% coberta.

 

Notas:

[1] É possível obter esse número de outra forma, usando calculo matemático, mas não vou ensinar aqui, sendo que é possível se obter ele no meio do caminho do algoritmo por uma simples subtração.

[2] A notação "C(n, k)" é para aplicar a formula da combinação de n,k.

[3] Ceil(n) é usado para especificar que um número deve ser arredondado para cima caso não seja um inteiro. Ou seja, 1,1 vai ser arredondado para 2. 1,9 vai ser arredondado para 2.

[4] Caso mais de uma combinação de V,K fizer os mesmos T ou mais pontos com a atual lista de V,M, você pode escolher aleatoriamente qualquer uma.

 

Como pode ver, o fato de o mesmo algoritmo criar matrizes com B de tamanhos distintos está relacionado ao fato da escolha aleatória nos passos 2) e passo 6.2) quando cai no caso da nota [4]. Também, você pode observar que algumas coisas foram postas para você aprender a como calcular o mínimo teórico, que as vezes pode ser a menor matriz possível. A menor matriz possível vai ser sempre maior ou igual ao mínimo teórico.

 

Outra coisa que posso passar aqui é o cálculo do mínimo teórico de matrizes V,K,T, onde T=M. Aqui é a fórmula de Schonheim.

 

A fórmula de Schonheim é diferente do mínimo teórico apresentado no meu algoritmo. A fórmula de Schonheim pode ser maior ou igual ao mínimo teórico.

 

Ainda existem dois outros algoritmos que conheço para redução, que são: recozimento simulado e o PDO (Problem Dependent Optimization). Aqui neste tópico você vai encontrar maiores informações.

 

Abraço.

  • Like 6
  • Thanks 2
Link to comment
Share on other sites

19 horas atrás, rockcavera disse:

Existem vários algoritmos para criação de matrizes. Por isso um programa gera a matriz 12,6,5,6=B com B=X outro com B=Y e assim vai. Só eu conheço pelo menos uns 3 algoritmos, e uma par de variações do algoritmo mais básico que pude desenvolver sozinho...

 

Usando o exemplo do 12,6,5,6, meu programa que usa um algoritmo que eu desenvolvi funciona assim:

gencover 12 6 5 6
Gerando matriz V,K,T,M: 12,6,5,6
Mínimo teórico: 25
Total Combinações V M: 924

Tamanho do Melhor Sistema: 47
Tempo Gasto: 0.0

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
10

Tamanho do Melhor Sistema: 44
Tempo Gasto: 0.03120994567871094

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
100

Tamanho do Melhor Sistema: 43
Tempo Gasto: 0.2655684947967529

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
1000

Tamanho do Melhor Sistema: 40
Tempo Gasto: 2.697330474853516

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
10000

Tamanho do Melhor Sistema: 40
Tempo Gasto: 26.89186000823975

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.
23000

Tamanho do Melhor Sistema: 38
Tempo Gasto: 61.87396788597107

Você deseja tentar diminuir mais?
Caso não, dê enter ou digite 0. Se sim, digite a quantidade de tentativas e dê enter.

Sistema salvo em: 12,6,5,6=38.txt

Desenvolvido por rockcavera

E aqui está a matriz gerada por ele de tamanho 38:

  Mostrar conteúdo oculto

1 2 3 4 5 6
1 2 3 5 6 12
1 2 3 9 10 11
1 2 4 6 11 12
1 2 4 7 8 11
1 2 4 8 10 12
1 2 5 7 11 12
1 2 6 7 8 9
1 2 6 7 9 10
1 3 4 6 7 11
1 3 4 7 9 12
1 3 5 7 8 10
1 3 5 8 10 11
1 3 8 9 11 12
1 4 5 7 9 12
1 4 5 9 10 11
1 4 6 8 10 12
1 5 6 8 9 11
1 6 7 10 11 12
2 3 4 5 8 9
2 3 4 7 10 12
2 3 5 7 9 11
2 3 6 7 8 12
2 3 6 8 10 11
2 4 5 6 7 10
2 4 6 7 9 12
2 4 6 9 11 12
2 5 6 8 10 11
2 5 8 9 10 12
3 4 5 8 11 12
3 4 5 10 11 12
3 4 6 8 9 10
3 5 6 7 9 11
3 5 6 9 10 12
3 5 7 8 9 10
4 5 6 7 8 12
4 7 8 9 10 11
7 8 9 10 11 12

Ai você me pergunta como ele funciona? É simples. Para cobrir uma matriz V,K,T,M você deve:

1) Gerar todas as combinações de V,K e vamos por em uma lista

2) Selecione aleatoriamente uma combinação de V,K, adicione-a a sua lista Matriz e delete ela da lista do passo 1)

3) Gerar todas as combinações de V,M, coloque em uma lista e delete aquelas que fazem T ou mais pontos com a combinação selecionada no passo 2)

4) Agora você sabe a quantidade de combinações que uma única combinação de V,K consegue eliminar de V,M. Esse número vamos chamar de "Comb_VK_reduz_VM" e você obtém ele assim: Combinações de V,M - Tamanho da Lista de V,M Após a Exclusão) [1]. Temos por enquanto 3 listas: combinações de V,K; combinações de V,M; e Matriz. Cada uma com respectivamente N itens: C(V,K) - 1; C(V,M) - Comb_VK_reduz_VM; e 1 [2].

5) Vamos obter o mínimo teórico, mas que nem sempre é alcançável. Fórmula: Ceil(C(V,M) / Comb_VK_reduz_VM) [3].

6) Agora, enquanto a lista de V,M possuir combinações (itens), você vai fazer:

6.1) Cruzar a lista de V,K contra a lista de V,M. Ou seja, pegar uma por uma das combinação da lista de V,K e contar quantas combinações de V,M fazem T ou mais pontos com cada uma.

6.2) Depois de passar a lista toda de V,K, você vai pegar aquela combinação de V,K que mais fez T ou mais pontos com a atual lista de V,M, adicionar ela na lista Matriz, deletar da lista V,K e deletar as combinações de V,M que fazem T ou mais pontos com ela [4].

6.3) Volte para 6)

7) Se a lista V,M não possui mais combinações, ou seja, não tem mais itens, a sua lista Matriz possui uma matriz de V,K,T,M 100% coberta.

 

Notas:

[1] É possível obter esse número de outra forma, usando calculo matemático, mas não vou ensinar aqui, sendo que é possível se obter ele no meio do caminho do algoritmo por uma simples subtração.

[2] A notação "C(n, k)" é para aplicar a formula da combinação de n,k.

[3] Ceil(n) é usado para especificar que um número deve ser arredondado para cima caso não seja um inteiro. Ou seja, 1,1 vai ser arredondado para 2. 1,9 vai ser arredondado para 2.

[4] Caso mais de uma combinação de V,K fizer os mesmos T ou mais pontos com a atual lista de V,M, você pode escolher aleatoriamente qualquer uma.

 

Como pode ver, o fato de o mesmo algoritmo criar matrizes com B de tamanhos distintos está relacionado ao fato da escolha aleatória nos passos 2) e passo 6.2) quando cai no caso da nota [4]. Também, você pode observar que algumas coisas foram postas para você aprender a como calcular o mínimo teórico, que as vezes pode ser a menor matriz possível. A menor matriz possível vai ser sempre maior ou igual ao mínimo teórico.

 

Outra coisa que posso passar aqui é o cálculo do mínimo teórico de matrizes V,K,T, onde T=M. Aqui é a fórmula de Schonheim.

 

A fórmula de Schonheim é diferente do mínimo teórico apresentado no meu algoritmo. A fórmula de Schonheim pode ser maior ou igual ao mínimo teórico.

 

Ainda existem dois outros algoritmos que conheço para redução, que são: recozimento simulado e o PDO (Problem Dependent Optimization). Aqui neste tópico você vai encontrar maiores informações.

 

Abraço.

 

Uso praticamente os mesmos conceitos citados acima por você, porém alguns um pouco diferente

 

Gero o arquivo com todas as combinações usando V,K 

Aqui a planilha usa sempre a primeira linha para inicio de análise, apenas guarda a linha na memoria, é não deleta do arquivo pois não teria a necessidade.

 

Não gero uma nova matriz usando V,M pois não teria a necessidade, pois a matriz de V,K será a mesma de V,M . 

A não ser que K seja maior que M, nesse caso seria preciso gerar uma nova matriz usando V,M pois as duas matrizes seriam diferentes.

Como uso apenas para testa K é M com valores iguais, então gero apenas uma única matriz, V,K

 

Teste 01 

Gerei todas as combinações de V,K

A planilha pega a primeira linha para usar como base, verifica entre todas as combinações quais linhas fazem T ou mais pontos com a combinação selecionada.

Na verdade seria preciso verificar apenas T pois só vai existir uma única combinação com acerto maior que T, e como essa combinação que tem acerto maior que T só será digamos encontrada quando ela mesmo estiver sendo usada como linha base, então pode deixar que o sistema mantenha ela, ao invés de separar em outro arquivo, assim já mantenho a lista de linhas base dentro do próprio arquivo , no final só vai resta essa lista de linhas base.

Voltando, então cada linha que tenha acerto de T com a linha base 1, é eliminada.

Assim repetindo o processo até não existir mais linhas no arquivo que tenha acertos de T com cada linha.

Esse foi meu primeiro teste que fiz usando 18 dezenas buscando encontrar uma matriz para garantia de 18-15-14-15

Porém nesse teste 1, foi gerado uma matriz com 38 linhas ( 18-15-14-15 = 38 )

 

Como eu já sabia que a menor matriz seria 18-15-14-15 = 24 linhas, então foi gerado uma matriz com 14 linhas a mais.

Foi onde busquei novos testes.

 

Teste 02

Gerei todas as combinações de V,K

A = A planilha pega a primeira linha para usar como base, verifica entre todas as combinações quais linhas fazem T ou mais pontos com a combinação selecionada.

cada linha que tenha acerto de T com a linha base 1, é eliminada.

No segundo ciclo, antes de repetir o processo A,  a planilha confere cada linha entre a matriz V,K buscando a linha que tenha maior acerto de T

agora ao invés de usar uma linha qualquer, a planilha vai sempre analisar a linha que mais teria acertos de T e usar como base,  assim repetindo o processo até não existir mais linhas no arquivo que tenha acertos de T com cada linha.

no final gerou 24 linhas, sendo então 18-15-14-15 = 24

Assim conseguido gerar a menor matriz que até então conheço.

 

Fiquei feliz pois até então achei que tinha conseguido o que estava buscando. O problema que fui fazer um teste buscando 12-6-5-6

Repetindo o mesmo processo do teste 02, porém o resultado não foi como o esperado, gerou mais linhas que a matriz gerada pelo ininuga.

 

Foi onde surgiu a questão, porque funcionou com a matriz de 18 dezenas conseguindo gerar apenas 24 linhas. Porém não conseguiu gerar a mesma quantidade de linhas da  matriz 12-6-5-6 que eu tinha como base de meta ?

 

Segunda questão que surgiu após sua postagem, se vc usa praticamente a mesma logica que estou usando, porque conseguiu gerar 12-6-5-6 com 38 linhas, e aqui não conseguir chegar em 38 linhas, ficando acima disso. 🤔

Link to comment
Share on other sites

1 hora atrás, Pedepano disse:

Aqui a planilha usa sempre a primeira linha para inicio de análise, apenas guarda a linha na memoria, é não deleta do arquivo pois não teria a necessidade.

Aqui temos duas diferença, pois:

1) eu seleciono aleatoriamente qualquer combinação do universo de V,K.

2) eu deleto a combinação selecionado da lista de V,K para que não seja testada novamente.

 

1 hora atrás, Pedepano disse:

Não gero uma nova matriz usando V,M pois não teria a necessidade, pois a matriz de V,K será a mesma de V,M . 

Quando falo que gero as combinações de V,K e V,M, é para descrever o algoritmo mais genérico e abrangente possível.

 

No entanto, aqui fiquei com uma dúvida sobre seu algoritmo. Você pelo menos cópia a lista de V,K para outra lista que seria V,M? Pergunto isso, pois para o funcionamento do algoritmo meu é necessário ter as duas lista, pois de uma você seleciona as combinações de V,K que serão adicionadas na lista Matriz e na lista combinações de V,M você faz a comparação para saber se cobre todas as possibilidades.

 

1 hora atrás, Pedepano disse:

Na verdade seria preciso verificar apenas T pois só vai existir uma única combinação com acerto maior que T, e como essa combinação que tem acerto maior que T só será digamos encontrada quando ela mesmo estiver sendo usada como linha base, então pode deixar que o sistema mantenha ela, ao invés de separar em outro arquivo, assim já mantenho a lista de linhas base dentro do próprio arquivo , no final só vai resta essa lista de linhas base.

Voltando, então cada linha que tenha acerto de T com a linha base 1, é eliminada.

Aqui entra a pergunta anterior também. Se você não mantem uma lista de V,M, você não consegue controlar 100% da cobertura.

 

Porém, surge outra pergunta: você não deleta da lista de controle V,M as linhas que fazem mais que T pontos? Se você não faz isso, você aumenta o tempo de processamento ao verificar ela novamente e existem outras C(V - K, M - T) combinações de V,K que fazem T pontos com essa linha, que podem selecionar uma próxima combinação de V,K que você acha que elimina X, mas na verdade está eliminando só X - N.

 

Essas perguntas valem tanto para o Teste 01 quanto para 02.

 

Verifiquei que seu algoritmo Teste 02 parece mais com o meu algoritmo.

 

1 hora atrás, Pedepano disse:

Foi onde surgiu a questão, porque funcionou com a matriz de 18 dezenas conseguindo gerar apenas 24 linhas. Porém não conseguiu gerar a mesma quantidade de linhas da  matriz 12-6-5-6 que eu tinha como base de meta ?

Alguns sistemas são mais "QUADRADOS". O que quero dizer com isso? São mais fáceis de achar a melhor solução, pois são geométricos, não tão irregulares. Mas não tenho uma explicação técnica para lhe dar. Veja isso como sendo: "qualquer linha selecionado que elimina o máximo de V,M na rodada é a linha perfeita".

 

1 hora atrás, Pedepano disse:

Segunda questão que surgiu após sua postagem, se vc usa praticamente a mesma logica que estou usando, porque conseguiu gerar 12-6-5-6 com 38 linhas, e aqui não conseguir chegar em 38 linhas, ficando acima disso. 🤔

Não sei se você notou, mas meu programa realizou 34.111 tentativas até conseguir o melhor resultado 38, ou seja, gerou 34.111 matrizes 100% de 12,6,5,6. Como ele faz isso? Ele seleciona de forma aleatória a linha inicial (aqui nem muda tanto) e também seleciona de forma aleatória as linhas que eliminam o mesmo tanto de linhas de V,M no passo atual. O que é eliminar? São as linhas que fazem T ou mais pontos com a linha de V,K testada. Ou seja, meu programa executou 34.111 vezes e você deve ter executado o seu processo uma única vez. Claro que pode dar certo de primeira como não.

Link to comment
Share on other sites

13 horas atrás, rockcavera disse:

No entanto, aqui fiquei com uma dúvida sobre seu algoritmo. Você pelo menos cópia a lista de V,K para outra lista que seria V,M? Pergunto isso, pois para o funcionamento do algoritmo meu é necessário ter as duas lista, pois de uma você seleciona as combinações de V,K que serão adicionadas na lista Matriz e na lista combinações de V,M você faz a comparação para saber se cobre todas as possibilidades

Uso apenas uma lista de V,K 

Gero todas as combinações possível de V,K , depois pego a primeira linha e executo o processo de eliminar todas as linhas que tenha acertos de T comparado com a linha base.

 

Essa linha usada como base não e excluída do arquivo e nem criado outro arquivo.

Todo o processo e feito em cima de uma única lista de V,K 

 

Ao terminar a primeira verificação.

Aí sim começa o processo de conferir cada linha da matriz V,K com elas mesmo.

Assim classificando as linhas de acordo com a quantidade de linhas com acerto de T. As melhores linhas vão para o topo da lista.

Assim inicia outro processo de exclusão agora usando a primeira linha do arquivo novamente, porém agora a primeira linha do arquivo e a linha com mais acerto de T.

 

Ai tu me pergunta, vc não exclui as linhas base do arquivo ?

Não, pois uma vez que uma linha já foi usada como base, ela já terá eliminado todas as linhas com acerto de T.

Ela poderá continuar no arquivo pois não vai influenciar na análise, e como se ela passasse a ter um valor de 0.

A cada processo de classificação das linhas, as linhas já usadas como base vai sendo jogada para o fim da lista.

 

Assim o processo continua até só existir na lista as linhas usada como base. Pois as outras linhas já foram excluídas.

Assim no fim do processo a minha lista inicial de V,K só terá as linhas que formam a matriz 

 

Realmente no meu caso o processo e feito uma única vez,  no meu ponto de vista a escolha de cada linha em cada etapa não fazeria diferença no resultado final.

Porém pelo visto me enganei sobre isso.

 

 

 

 

  • Like 3
Link to comment
Share on other sites

Em 28/03/2022 em 23:40, walt disse:

12,6,5,6 = 22

88%

 

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

Analisando o posicional para  estas citadas de

01 a 12  X  

25 24 23 22 21 20 14 15 16 17 18 19

Observei no SRT2483  12  x 9 ausentes

E assim faciluta 14 Ac mas sobe muito o custo

The @walt podemos

Testar 12 - 5 - 4 - 5  para estas

25 24 23 22 21 20 14 15 16 17 18 19

Link to comment
Share on other sites

Em 28/03/2022 em 23:40, walt disse:

12,6,5,6 = 22

88%

 

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

Olhando um velho pendrive aqui achei uma planilha para fazer redução que eu nem lembrava mais.

A mesma gerou aqui também 22 linhas com 88,09% de cobertura.

 

Mais se já tenho a planilha porque estou aqui debatendo esse assunto ?

Simples, o objetivo e entender o melhor processo para redução de uma matriz.

Onde eu mesmo posso criar ou adaptada esse processo de acordo com minha necessidade.

 

Tentei entender o código usado na planilha, mais confesso que meu conhecimento em vba não chega ao ponto de entende o código usado na criação dessa planilha.

Fiquei bem curioso pois pelo visto todo o processo de otimização e feito via código sem qualquer tipo de fórmula para auxiliar em algum processo. 

Já perdi muito tempo tentando entender o conceito dessa planilha, porém pra mim foi tempo perdido.

 

 

Link to comment
Share on other sites

4 horas atrás, Pedepano disse:

Olhando um velho pendrive aqui achei uma planilha para fazer redução que eu nem lembrava mais.

A mesma gerou aqui também 22 linhas com 88,09% de cobertura.

 

Mais se já tenho a planilha porque estou aqui debatendo esse assunto ?

Simples, o objetivo e entender o melhor processo para redução de uma matriz.

Onde eu mesmo posso criar ou adaptada esse processo de acordo com minha necessidade.

 

Tentei entender o código usado na planilha, mais confesso que meu conhecimento em vba não chega ao ponto de entende o código usado na criação dessa planilha.

Fiquei bem curioso pois pelo visto todo o processo de otimização e feito via código sem qualquer tipo de fórmula para auxiliar em algum processo. 

Já perdi muito tempo tentando entender o conceito dessa planilha, porém pra mim foi tempo perdido.

 

 

Poderia me enviar

Link to comment
Share on other sites

  • 2 weeks later...
Em 28/03/2022 em 23:40, walt disse:

12,6,5,6 = 22

88%

 

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

Muito obrigado, Walt, estas com a porcentagem reduzidas são sempre minhas preferidas e, nas simulações, dão show de melhor custo/benefício nas completas.

Boa sorte nos jogos e na vida.

Link to comment
Share on other sites

  • 7 months later...

Olá, tópico interessante.

Gostaria de acrescentar que uma forma de tentar escolher as combinações é exatamente pela qtd de acertos que cada linha acrescenta, quando confrontado contra o universo em análise.

 

Exemplo 12-6-5-6, é sabidamente 38 (100% atual), teoricamente via distribuição hipergeométrica = 25,67 combinações.

 

Uma forma de tentar responder qtas linhas uma combinação deveria acertar é justamente ver qtas acerta no conjunto universo e a partir desse valor construir as demais combinações.

 

Assim C(12;6) = 924 combinações, quando conferido contra 1 única combinação vai acertar:

 

Acertos   -   Universo C(12;6) = 924 
 
      00     -->     1
      01     -->     36
      02     -->     225
      03     -->     400
      04     -->     225
      05     -->     36
      06     -->     1
 

Então a cada "passo" devemos tentar recolher 1 combinação que acerte (1+36) quinas ou senas nas 924 linhas, então na primeira passagem temos 924-37 = 887 linhas, onde a próxima combinação a ser aceita deve acertar novamente 37 linhas, etc etc.

 

Claro que com o escolher das linhas, em dado momento não haverá combinações que acertem 37, mas 36, 35, 34 linhas no arquivo restante.

 

Então temos que buscar o fechamento mais eficiente.

 

Ou seja aquele que fecha com n* linhas x 37 , assim se construir digamos um fechamento com 15 combinações estas deveriam fechar 37 * 15 = 555 linhas das 924.

 

Abaixo o record que encontrei na web com 15 linhas fechando 527 combinações (5 se 6) ou 527/555 = 94,95% de eficiência.

 

Spoiler

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

 

A questão será sempre: Existe algoritmo capaz de escolher as combinações construindo sempre o fechamento com as melhores linhas e alcançando a eficiência máxima ?

 

R.: Não havia ainda analisado o fechamento apresentado pelo Walt, e de fato o dele com 22 linhas está na eficiência máxima possível cada linha acerta 37 combinações no arquivo total de 924.

 

Em outras palavras, se escolher 15 linhas quaisquer elas fecham 555 combinações no arquivo de 924

 

Sds

Sphgf 

 

Edited by Sphgf
acrescentar informação pertinente.
Link to comment
Share on other sites

  • 4 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...