Bitcoin Forum
April 23, 2024, 11:44:14 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: O Bitcoin e o Problema da Mochila  (Read 312 times)
wilwxk (OP)
Sr. Member
****
Offline Offline

Activity: 476
Merit: 314


View Profile
April 30, 2018, 11:09:02 PM
Last edit: May 07, 2018, 01:54:01 AM by wilwxk
Merited by alexrossi (2), sabotag3x (2), Paredao (1), jpouza (1), u9y42 (1), alegotardo (1), bitmover (1), Loganota (1), Pumared (1), vit05 (1), trplzr (1), caneca (1), Gustavo Livecoins (1)
 #1




Segundo a Wikipedia:
     "O problema da mochila (em inglês, Knapsack problem) é um problema de otimização combinatória. O nome dá-se devido ao modelo de uma situação em que é necessário preencher uma mochila com objetos de diferentes pesos e valores. O objetivo é que se preencha a mochila com o maior valor possível, não ultrapassando o peso máximo."
     E o legal deste problema é que faz parte de um dos 21 problemas NP-completos que se você conseguir criar um algoritmo que consiga resolve-los rapidamente (os algoritmos atuais são extremamente lentos), você pode clamar por um premio de 1 milhão de dólares proposto por uma universidade, além de criar uma nova era para matemática e da computação, e consequentemente ferrando uma boa parte dos algoritmos criptográficos que temos hoje em dia...



Certo, e o que isso tem a ver com o Bitcoin ?
     Bem, pra fazer essa ligação é preciso antes lembrar de algumas coisas:

     1) Os blocos de mineração só comportam 1MB de informação (ou 4 milhões de weight units, mas isso não tem relevância agora).

     2) Os mineradores podem escolher as transações que irão colocar no bloco, e irão ganhar as taxas de transação delas.

     Ou seja, os mineradores escolhem quais transações colocar no bloco, dependendo de seu tamanho e suas taxas.



Ok, e o que tem de mais nisso ?
     Bom, antes de explicar como é resolvido o problema do knapsak, é preciso entender a verdadeira dificuldade de resolver ela.
     Então já colocando ela no contexto do Bitcoin, olhe este exemplo:

     Digamos que o minerador tenha apenas essas 4 transações na sua mempool:
     1)  300 kbytes com 300 sat de fee (1sat/kbyte)
     2)  500 kbytes com 600 sat de fee (1.2sat/kbyte)
     3)  600 kbytes com 800 sat de fee (1.33sat/kbyte)
     4)  200 kbytes com 400 sat de fee (2sat/kbyte)

     A solução trivial seria simplesmente pegar as transações com o maior sat/byte e escolher elas até que o bloco fique cheio, mas nesse caso vemos que seria as opções 4 e 3 (400+800 =1200 sat), enquanto que a solução ótima seria escolher as opções 1, 2 e 4 (300+600+400 =1300 sat), ou seja, a coisa não é tão simples quanto parece.



Se o problema é tão difícil de resolver, como os mineradores o fazem ?
     A solução atual que temos para este problema faria impossível de o minerador montar o bloco dele e achar o hash do PoW em um tempo bom o suficiente para competir com os outro, então o que o minerador faz é simplesmente ignorar ele e fazer a escolha gulosa: pegar as transações com o maior sat/byte e ignorar uma possível escolha melhor.



Mas por que ? Eles não querem saber de mais dinheiro ?
     Sim, por isso mesmo, tempo=dinheiro, levando em conta que o bloco dá 12.5 BTC de "prêmio" e que as taxas de transação nao passam de uns 5 BTC, e que calcular a escolha ótima simplesmente demora e o ganho extra seria bem pequeno (sei lá, estimo que 1 BTC no máximo ?), simplesmente vale a pena só caçar o hash com os zeros e incluir as transações no bloco só quando conseguem.
     UPD: um ótimo exemplo de que os mineradores não estão muito aí para as taxas são os aceleradores de transação, que colocam a sua transação no bloco mesmo não tendo a melhor taxa (marketing).


Conclusão
     No futuro, quando a geração de bitcoins realmente se tornar escassa, aí sim teríamos que pensar em como resolver melhor este problema, mas por enquanto isso é algo menos preocupante que a computação quântica.
     E mais, não resolver este problema ainda é uma ótima ideia para o bitcoin, já que isso incentiva aos usuários a escolher taxas sempre maiores, estimulando a competitividade e fazendo com que aquelas transações com 0.1sat/byte simplesmente não seja confirmada por "sorte".





parte um pouquinho mais técnica para os curiosos:



     O cálculo do knapsack 0-1 descrito tem uma complexidade de O(nW), onde n é o número de objetos (transações), e W é o tamanho da mochila (1.000.000 bytes), e uma média boa de transações não confirmadas é de 5000. Ou seja, o algoritmo teria que fazer 5000*10^9 operações, e supondo que um computador faça ~10^9 cálculos por segundo, temos 5000 segundos > 1 hora só para calcular a montagem do bloco (o cara ainda tem que calcular os hashs depois).
     Já o cálculo do algoritmo guloso tem uma complexidade de O(nlogn), que dá 5000*10 = 5*10^4 operações, que acarreta em um tempo < 1 segundo de cálculo.
     É claro que existem otimizações nisso, se alguém quiser discutir sobre elas sinta se a vontade.



Fontes:
https://pt.wikipedia.org/wiki/Problema_da_mochila
https://en.wikipedia.org/wiki/Knapsack_problem
https://freedom-to-tinker.com/2014/10/27/bitcoin-mining-is-np-hard/
1713872654
Hero Member
*
Offline Offline

Posts: 1713872654

View Profile Personal Message (Offline)

Ignore
1713872654
Reply with quote  #2

1713872654
Report to moderator
1713872654
Hero Member
*
Offline Offline

Posts: 1713872654

View Profile Personal Message (Offline)

Ignore
1713872654
Reply with quote  #2

1713872654
Report to moderator
1713872654
Hero Member
*
Offline Offline

Posts: 1713872654

View Profile Personal Message (Offline)

Ignore
1713872654
Reply with quote  #2

1713872654
Report to moderator
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1713872654
Hero Member
*
Offline Offline

Posts: 1713872654

View Profile Personal Message (Offline)

Ignore
1713872654
Reply with quote  #2

1713872654
Report to moderator
1713872654
Hero Member
*
Offline Offline

Posts: 1713872654

View Profile Personal Message (Offline)

Ignore
1713872654
Reply with quote  #2

1713872654
Report to moderator
Silvio_Carlos_Junior
Member
**
Offline Offline

Activity: 148
Merit: 31


View Profile WWW
May 01, 2018, 01:50:17 AM
 #2

Olha só que coisa mais interessante.
Será que nos próximos Halvings teremos mineradores interessados na solução desse problema?
Pumared
Sr. Member
****
Offline Offline

Activity: 1260
Merit: 383


BK8 - Most Trusted Gambling Platform


View Profile
May 01, 2018, 02:04:57 AM
 #3

É disso que eu tô falando! Qualidade nos post! Boa garoto!.


Esse problema só se pode usar computação e algoritmos para resolver?

███████████████████████
████████████████████
██████████████████
████████████████████
███▀▀▀█████████████████
███▄▄▄█████████████████
██████████████████████
██████████████████████
███████████████████████
█████████████████████
███████████████████
███████████████
████████████████████████
███████████████████████████
███████████████████████████
███████████████████████████
█████████▀▀██▀██▀▀█████████
█████████████▄█████████████
███████████████████████
████████████████████████
████████████▄█▄█████████
████████▀▀███████████
██████████████████
▀███████████████████▀
▀███████████████▀
█████████████████████████
O F F I C I A L   P A R T N E R S
▬▬▬▬▬▬▬▬▬▬
ASTON VILLA FC
BURNLEY FC
BK8?█▀▀▀











█▄▄▄
.
PLAY NOW
▀▀▀█











▄▄▄█
sabotag3x
Legendary
*
Offline Offline

Activity: 2520
Merit: 2161


Crypto Swap Exchange


View Profile
May 01, 2018, 02:18:03 AM
Last edit: May 01, 2018, 02:32:37 AM by sabotag3x
 #4

Solução do Bitcoin Cash: Compre uma mochila maior.

Solução do XRB: Todo mundo é uma mochila e ninguém recebe por isso.

Solução do Ethereum: Compre uma mochila menor e faça mais viagens, além disso, roube as taxas mesmo sem levar o tijolo caso as mesmas sejam muito baixas.

Vitalik rei. Roll Eyes


Interessante esse problema, nunca havia pensado nisso.. Naqueles tempos que uma transação custa 50 reais, deve dar uma boa diferença..


edit: pensando aqui, a configuração que o minero tem é qual? valores das taxas em BTC? O que ele define é uma taxa mínima e só? Não é só introduzir uma medida de sat/byte e ta resolvido o problema?

Quote
    1)  300 kbytes com 300 sat de fee (1sat/kbyte)
     2)  500 kbytes com 600 sat de fee (1.2sat/kbyte)
     3)  600 kbytes com 800 sat de fee (1.33sat/kbyte)
     4)  200 kbytes com 400 sat de fee (2sat/kbyte)

Ao invés de decidir qual transação pegar por "X sat de fee", escolher as transações por "xsat/kbyte".. não deve ser difícil fazer essa mudança..


edit2:

4$ - 12kg = 0,33$ por kg
2$ - 2kg = 1$ por kg
2$ - 1kg = 2$ por kg
10$ - 4kg = 2,5$ por kg
1$ - 1kg = 1$ por kg

Usar essa terceira medida, $ por kg.. não é a ideal, porém já melhora.. (embora nesse caso da elas por elas)

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
Gustavo Livecoins
Member
**
Offline Offline

Activity: 229
Merit: 27

Criptorevolution


View Profile
May 01, 2018, 02:31:15 AM
 #5

valeu pelo texto, com certeza lerei os anexos, nunca tinha ouvido falar e gostei de pensar nesse dilema
wilwxk (OP)
Sr. Member
****
Offline Offline

Activity: 476
Merit: 314


View Profile
May 01, 2018, 02:37:52 AM
 #6

Solução do Bitcoin Cash: Compre uma mochila maior.

Solução do XRB: Todo mundo é uma mochila e ninguém recebe por isso.

Solução do Ethereum: Compre uma mochila menor e faça mais viagens, além disso, roube as taxas mesmo sem levar o tijolo caso as mesmas sejam muito baixas.

Vitalik rei. Roll Eyes


Interessante esse problema, nunca havia pensado nisso.. Naqueles tempos que uma transação custa 50 reais, deve dar uma boa diferença..


edit: pensando aqui, a configuração que o minero tem é qual? valores das taxas em BTC? O que ele define é uma taxa mínima e só? Não é só introduzir uma medida de sat/byte e ta resolvido o problema?

Quote
    1)  300 kbytes com 300 sat de fee (1sat/kbyte)
     2)  500 kbytes com 600 sat de fee (1.2sat/kbyte)
     3)  600 kbytes com 800 sat de fee (1.33sat/kbyte)
     4)  200 kbytes com 400 sat de fee (2sat/kbyte)

Ao invés de decidir qual transação pegar por "X sat de fee", escolher as transações por "xsat/kbyte".. não deve ser difícil fazer essa mudança..

Quote
fazer a escolha gulosa: pegar as transações com o maior sat/byte e ignorar uma possível escolha melhor.
Sim, eles sempre escolhem os com maior sat/byte, coloquei no exemplo pra ficar mais fácil de visualizar Smiley

UPD: acrescentei acima sobre os serviços de aceleração de transação e a comparação do O(nW) com o O(nlogn) do algoritmo guloso atual.

Existe um dilema parecido quando se trata de blocos e transações chamado maximum independent set problem, está no link acima, mas eu acho que escreverei mais tarde sobre.
sabotag3x
Legendary
*
Offline Offline

Activity: 2520
Merit: 2161


Crypto Swap Exchange


View Profile
May 01, 2018, 02:53:09 AM
 #7

Sim, eles sempre escolhem os com maior sat/byte, coloquei no exemplo pra ficar mais fácil de visualizar Smiley

UPD: acrescentei acima sobre os serviços de aceleração de transação e a comparação do O(nW) com o O(nlogn) do algoritmo guloso atual.

Existe um dilema parecido quando se trata de blocos e transações chamado maximum independent set problem, está no link acima, mas eu acho que escreverei mais tarde sobre.


Cara, será que dá tanta diferença assim se eles já pegam as transações por sat/byte? Difícil ter uma transação muito gigante (que ocupe 1/1000 do bloco) que talvez faça valer a pena o esforço.. Também tem a questão de que o minerador pode achar um bloco muito cedo, não enchendo a mochila..

E pro futuro, há as soluções de side-chain, LN, etc.. então esse problema seria esquecido..

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
wilwxk (OP)
Sr. Member
****
Offline Offline

Activity: 476
Merit: 314


View Profile
May 01, 2018, 03:12:39 AM
Last edit: May 01, 2018, 03:24:05 AM by wilwxk
 #8

Cara, será que dá tanta diferença assim se eles já pegam as transações por sat/byte? Difícil ter uma transação muito gigante (que ocupe 1/1000 do bloco) que talvez faça valer a pena o esforço.. Também tem a questão de que o minerador pode achar um bloco muito cedo, não enchendo a mochila..

E pro futuro, há as soluções de side-chain, LN, etc.. então esse problema seria esquecido..

Então, por isso que essa escolha em si não importa muito, porque o principal são os 12.5 BTC e as vezes até vemos blocos que os caras "encheram mal" ou simplesmente montar o bloco à maneira deles por causa da competividade entre os mineradores (~10 min pra achar).

Agora no futuro, teríamos que ver o quão usado vai ser essas soluções e principalmente o valor de mercado do bitcoin. Pensa que se todo mundo usar a LN, as transações na mainchain serão baratíssimos, equilibrando a balança sempre (na verdade a mainchain ia manter o mesmo numero de transações e a LN só aumentar), e sempre tendo um monte de transações como temos agora só que composta apenas dinheiro de pessoas que aceitaram a possível demora na confirmação e sem o desespero atual, mas resumindo, se o preço do bitcoin aumentar o suficiente, os mineradores com certeza buscarão formas de otimizar o modo como selecionam as transações para "encher a mochila direito".
lhvleao
Full Member
***
Offline Offline

Activity: 476
Merit: 128


View Profile
May 01, 2018, 09:25:03 PM
 #9

Post bem completo. Não conhecia esse problema da mochila e gosto muito dessa forma de explanação que compara os objetos do mundo virtual com itens do mundo real. Facilita bastante o aprendizado de quem é leigo e quer se iniciar conhecendo um pouco mais. Parabéns!
Paredao
Legendary
*
Offline Offline

Activity: 3304
Merit: 1615


★Bitvest.io★ Play Plinko or Invest!


View Profile
May 02, 2018, 03:34:38 AM
 #10

Gostei da explicação e gostei da maneira simples de explicar. Vai ganhar uma "meritada" por isso. Grin



.
.BIG WINNER!.
[15.00000000 BTC]


▄████████████████████▄
██████████████████████
██████████▀▀██████████
█████████░░░░█████████
██████████▄▄██████████
███████▀▀████▀▀███████
██████░░░░██░░░░██████
███████▄▄████▄▄███████
████▀▀████▀▀████▀▀████
███░░░░██░░░░██░░░░███
████▄▄████▄▄████▄▄████
██████████████████████

▀████████████████████▀
▄████████████████████▄
██████████████████████
█████▀▀█▀▀▀▀▀▀██▀▀████
█████░░░░░░░░░░░░░████
█████░░░░░░░░░░░░▄████
█████░░▄███▄░░░░██████
█████▄▄███▀░░░░▄██████
█████████░░░░░░███████
████████░░░░░░░███████
███████░░░░░░░░███████
███████▄▄▄▄▄▄▄▄███████

██████████████████████
▀████████████████████▀
▄████████████████████▄
███████████████▀▀▀▀▀▀▀
███████████▀▀▄▄█░░░░░█
█████████▀░░█████░░░░█
███████▀░░░░░████▀░░░▀
██████░░░░░░░░▀▄▄█████
█████░▄░░░░░▄██████▀▀█
████░████▄░███████░░░░
███░█████░█████████░░█
███░░░▀█░██████████░░█
███░░░░░░████▀▀██▀░░░░
███░░░░░░███░░░░░░░░░░

██░▄▄▄▄░████▄▄██▄░░░░
████████████▀▀▀▀▀▀▀██
█████████████░█▀▀▀█░███
██████████▀▀░█▀░░░▀█░▀▀
███████▀░▄▄█░█░░░░░█░█▄
████▀░▄▄████░▀█░░░█▀░██
███░▄████▀▀░▄░▀█░█▀░▄░▀
█▀░███▀▀▀░░███░▀█▀░███░
▀░███▀░░░░░████▄░▄████░
░███▀░░░░░░░█████████░░
░███░░░░░░░░░███████░░░
███▀░██░░░░░░▀░▄▄▄░▀░░░
███░██████▄▄░▄█████▄░▄▄

██░████████░███████░█
▄████████████████████▄
████████▀▀░░░▀▀███████
███▀▀░░░░░▄▄▄░░░░▀▀▀██
██░▀▀▄▄░░░▀▀▀░░░▄▄▀▀██
██░▄▄░░▀▀▄▄░▄▄▀▀░░░░██
██░▀▀░░░░░░█░░░░░██░██
██░░░▄▄░░░░█░██░░░░░██
██░░░▀▀░░░░█░░░░░░░░██
██░░░░░▄▄░░█░░░░░██░██
██▄░░░░▀▀░░█░██░░░░░██
█████▄▄░░░░█░░░░▄▄████
█████████▄▄█▄▄████████

▀████████████████████▀




Rainbot
Daily Quests
Faucet
alegotardo
Legendary
*
Offline Offline

Activity: 2394
Merit: 1137


☢️ alegotardo™️


View Profile
May 02, 2018, 11:10:52 AM
 #11

Que texto bacana....

Eu também nunca havia pensado nesse problema (e olha que sou programador), sempre achei que a melhor escolha era pegar os "objetos" com a melhor relação Peso/R$.

Post muito didático, completo e simples.
Merece mais um Merit

███████████████████████████
███████▄████████████▄██████
████████▄████████▄████████
███▀█████▀▄███▄▀█████▀███
█████▀█▀▄██▀▀▀██▄▀█▀█████
███████▄███████████▄███████
███████████████████████████
███████▀███████████▀███████
████▄██▄▀██▄▄▄██▀▄██▄████
████▄████▄▀███▀▄████▄████
██▄███▀▀█▀██████▀█▀███▄███
██▀█▀████████████████▀█▀███
███████████████████████████
.
.Duelbits.
▄▄█▄▄░░▄▄█▄▄░░▄▄█▄▄
███░░░░███░░░░███
░░░░░░░░░░░░░
░░░░░░░░░░░░
▀██████████
░░░░░███░░░░
░░░░░███▄█░░░
░░██▌░░███░▀░░██▌
█░██░░███░░░██
█▀▀▀█▌░███░░█▀▀▀█▌
▄█▄░░░██▄███▄█▄░░▄██▄
▄███▄
░░░░▀██▄▀
.
REGIONAL
SPONSOR
███▀██▀███▀█▀▀▀▀██▀▀▀██
██░▀░██░█░███░▀██░███▄█
█▄███▄██▄████▄████▄▄▄██
██▀ ▀███▀▀░▀██▀▀▀██████
███▄███░▄▀██████▀█▀█▀▀█
████▀▀██▄▀█████▄█▀███▄█
███▄▄▄████████▄█▄▀█████
███▀▀▀████████████▄▀███
███▄░▄█▀▀▀██████▀▀▀▄███
███████▄██▄▌████▀▀█████
▀██▄█████▄█▄▄▄██▄████▀
▀▀██████████▄▄███▀▀
▀▀▀▀█▀▀▀▀
.
EUROPEAN
BETTING
PARTNER
Loganota
Hero Member
*****
Offline Offline

Activity: 1764
Merit: 881


View Profile
May 02, 2018, 03:51:22 PM
 #12

Tópico muito bom, parabéns por trazer isso pra comunidade.

Já havia pesquisado sobre isso antes, mas sempre fiquei naquele exemplo do caixeiro-viajante e nunca me toquei sobre a assoaciação com a parte de mineração.
micloop
Full Member
***
Offline Offline

Activity: 448
Merit: 114


View Profile WWW
May 04, 2018, 08:17:14 PM
 #13

Enquanto a galera está discutindo o real problema, eu estou tentando encaixar os blocos da imagem na mochila. lol Parabéns pelo post, bem interessante.

PS: Gostei da solução do ETH. kkkkkkk
DeltaX_Slayer
Full Member
***
Offline Offline

Activity: 532
Merit: 152


View Profile
May 05, 2018, 05:21:34 AM
 #14

Só agora parei para ler o texto. Achei sensacional o assunto abordado. Nunca havia ouvido falar desse problema.

DeltaX_Slayer
Full Member
***
Offline Offline

Activity: 532
Merit: 152


View Profile
May 05, 2018, 05:36:59 AM
 #15

Acrescentando um pouco de informçao, pode ser que seja útil.
Fiz uma disciplina no curso de ADM chamada "métodos quantitativos para tomada de decisão" que consistia, basicamente, em criar modelos matemáticos para encontrar soluções ótimas para funções baseadas em casos concretos.
Acho que se encaixa no assunto das mochilas. Os exemplos eram basicamente "eu só posso levar 10 caixas de laranja e 5 de maçã, porém a maçã custa X e a laranja custa Y, e eu só posso levar no máximo X caixas de  laranjas e Y caixas de maçã. Qual seria a solução ótima para tornar o frete mais lucrativo?" (mais ou menos isso. Tentei pegar na net um exercicio mas o passei direto agora exige baixar app ¬¬)
jpouza
Legendary
*
Offline Offline

Activity: 2674
Merit: 1108


View Profile
May 05, 2018, 10:06:27 PM
 #16

Devidamente meritado  Wink

Já tinha lido superficialmente sobre isto, mas a preguiça mental está em estado agudo aqui ultimamente.

Bom texto.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!