Complexidade Computacional e Economia

Escrito por Aranea

O avanço da capacidade computacional é importante, mas o aumento do conhecimento, infinitamente mais

Utopia Tecnocrata

É uma grande falácia pensar que o aumento da capacidade computacional de uma sociedade pode gerar aumentos econômicos ad infinitum, digo, pensar que apenas isso gera um aumento de eficiência em serviços e produtos que dependem desses aumentos (como a área industrial, química computacional, áreas que dependem de grande quantidade de processamento e etc).

O objetivo deste artigo é demonstrar como vários elementos dentro da área da tecnologia permitem um aumento de eficiência em n setores da economia, mas muitos deles não dependem apenas da existência da Lei de Moore.

A Lei de Moore não resolve todos os problemas

O ponto central, é que a Lei de Moore não resolve problemas computacionais, ela permite que eles sejam tratáveis até certo ponto, mas o que resolve as coisas são os algoritmos. A Lei de Moore diz que o número de transistores em chips dobra a cada dois anos ou algo aproximado, outra aplicação é o fato que isso significa que o custo de chips agora defasados diminui de preço, logo temos também em quanto o número deles aumenta, o custo abaixa.

Não só para processamento mas também armazenamento de dados. Eu me lembro da felicidade de ter um memory card de 8 megabytes, achando ser muito, hoje, um HD de 1 Tera (mesmo SSD) não me basta para minhas necessidades, e a tendência que isso continue conforme os métodos de armazenamento fiquem maiores, mas também a necessidade de maior alocação para jogos, programas mais pesados ou mesmo comercialmente para estúdios de design necessitando de um backup offline.

Porém, na ciência da computação, temos um tema chamado teoria da complexidade, que diz que existem certas classes de problemas, alguns que são tratáveis, outros nem tanto. Ray Tracing por exemplo é tido como um problema NP-Hard em muitos dos casos, o que significa que não importa quanto você aumente a capacidade computacional, quanto mais o input aumenta (número de polígonos na tela) mais difícil fica computar os polígonos em tempo real (reduzindo o FPS (frames per second).

Tem artigos que até dizem que algumas versões de Ray Tracing (e isso é ruim para jogos por sinal), são simplesmente incomputáveis teoricamente:

“O sistema, portanto, não resolve o problema indecidível do traçado de raios em sua totalidade, mas sim um subproblema próprio, que admite apenas instâncias de entrada limitadas e diz respeito apenas a configurações ópticas fisicamente realizáveis, em vez daquelas com coordenadas extraídas arbitrariamente do contínuo dos números reais ou mesmo da infinidade enumerável dos números racionais” (Blakey, Ed. "Ray tracing--computing the incomputable?." arXiv preprint arXiv:1404.0075 (2014)).

Isso em metamatemática, significa que nenhuma Máquina de Turing Universal seria capaz de resolver alguns tipos de ray tracing, como casos de “finite-precision ray-tracing problem”, sobre essa questão:

“A representação de ponto fixo pressupõe que o ponto decimal esteja sempre fixo em uma posição da palavra de memória. Se imaginarmos o ponto fixo na extrema esquerda, então todos os números são frações positivas ou negativas. Por outro lado, se considerarmos o ponto binário fixo na extrema direita da palavra, então todos os números são inteiros positivos ou negativos. Essas representações numéricas são representações de ponto fixo” (V. Lakshmikantham, S.K. Sen,Chapter 4 - Errors and Approximations in Digital Computers,Editor(s): V. Lakshmikantham, S.K. Sen,Mathematics in Science and Engineering,Elsevier,Volume 201,2005,Pages 95-145).

Existe também a representação em pontos flutuantes (em programação é descrito como “fixed” e “floating”, sendo duas formas de representar números reais), essa que dá muitos problemas em escala, especialmente se falarmos de Ray Tracing, que nesse exemplo pode ser aplicável na geometria de polígonos em jogos e a simulação e predição da propagação da luz dentro do ambiente do game. Porque você acha que você tem que ter uma NVIDIA RTX monstruosa para rodar Cyberpunk no PC com Ray Tracing e gráficos com mod? Porque a quantidade de informação por segundo é absurda, você precisa de uma capacidade computacional alta para rodar isso.

Porém, em questão de algoritmos, existem sempre formas de otimizar a computação de um jogo,mas não ad infinitum, como veremos.

O Limite de Landauer

O Limite de Landauer diz que é necessária uma dissipação de energia mínima para gerar operações computacionais em joules, sendo esse limite dado por kTln2, em que k é a constante de Boltzmann para gases, T é a temperatura e ln é o logaritmo. O ponto é que esse limite teoricamente faria existir uma lower bound para qualquer algoritmo, ou seja, para qualquer problema computacional, a eficiência em cada operação não passa desse limite teórico.

Porém, existem formas de driblar esse limite de Landauer, através de computação reversível (Charles Bennett avançou muito nesse tema inicialmente), o que poderia ter um limite abaixo do de Landauer teoricamente, a Computação Quântica por exemplo, é uma forma de computação reversível, você pode realizar operações de “trás para frente” numa Máquina de Turing Quântica, tendo assim mais eficiência energética e computacional por operação.

O Teorema de Margolus–Letivin também estabeleceu uma threshold máximo por segundo dentro de um volume de espaço–tempo e a Bekenstein bound, o limite de informação a ser armazenada num sistema físico em bits, além do Limite de Bremermann que diz teoricamente o limite de operações por segundo e a Holevo bound, que estabelece uma quantidade máxima de informação em trânsito de bits clássicos num canal quântico.

Em tudo isso vemos um problema de hardware, mesmo na computação clássica, quântica ou neuromórfica (que é superior energeticamente à clássica), que existem limites de eficiência de hardware. Me lembro vagamente de um professor de física no meu ensino médio dizendo que seria impossível construir uma máquina que não dissipa energia inútil em qualquer operação física (não só em computação, em engenharia no geral), então é uma relação termodinâmica intratável que aumenta a lower bound de diversos problemas computacionais (em termos simples, o quanto de hardware você precisa para rodar o GTA VI no mínimo).

O problema que programadores de games tem de resolver de otimização, muitas vezes pode ser intratável, com a demanda por técnicas de Ray Tracing com cada vez mais definição e taxa de FPS sem decaimento, temos um aumento no número de polígonos por segundo na tela que requerem operações para otimizar eles (como foi feito no jogo Heart of Darkness do Amazing Studio por exemplo), por ser um problema NP–Hard, reclamar de otimização em jogos com uma qualidade gráfica absurda, é idiotice, pois nem sempre isso vai ser possível, pois no momento esse problema que está na classe de Mesh Theory (de grupos de polígonos ligados entre si formando uma imagem 3D), que nada mais é do que arestas e vértices em Graph Theory,sendo um problema clássico dentro da classe NP.

Complexidade de Kolmogorov

A Complexidade de Kolmogorov simplesmente pergunta: “qual é o menor algoritmo para resolver um dado problema?”, ou “qual é a menor quantidade de operações algorítmicas dado uma linguagem (seja de baixo nível como Assembly ou de mais alto como C e etc) para resolver um dado problema?”. Ou ainda melhor: “existe um algoritmo mais eficiente em maximizar a eficiência de n problemas de uma mesma classe?”.

A pergunta é se tal algoritmo existe, pode não ter resposta, ou pode. Muitos pensavam que o “envelopamento de proteínas” seria NP–Hard para sempre ou por muito tempo (mesmo o filme Traveling Salesman diz isso), mas foi resolvido usando aprendizado supervisado pela Deep Mind num paper chamado “Highly accurate protein structure prediction with AlphaFold”. Mas não era NP–Hard? Sim, essa era a visão até então, não existia prova que existia um algoritmo polinomial para resolver o problema ou mesmo o tal que o fizesse, e a IA mudou esse fato.

A verdade é que o problema sempre foi tratável, não saber disso só mostra a nossa ignorância (que por muitas vezes não é considerada por muitos no tema). E se todos os problemas computacionais resolvíveis por uma máquina de Turing forem tratáveis, tendo um algoritmo que roda o mesmo em velocidade polinomial? Então P seria igual a NP, porém, eu creio que mesmo se P=NP fosse uma verdade, a nossa ignorância para solução de n problemas nos faria sempre pensar que P≠NP, pode ter certeza (citando Scott Aaronson), que nem todos os problemas são melhor resolvidos por IA, computação quântica ou neuromórfica, pelo contrário, existem classes de problemas que a computação clássica já resolve melhor que as mesmas, colocar uma superioridade a novas tecnologias em todas as classes de problemas computacionais é um absurdo.

No problema do começo de computar números reais em Ray Tracing por exemplo, existe um paper do Susumu Katayama chamado “Computable Variants of AIXI which are More Powerful than AIXItl”, que ele descreve uma forma de lidar na Inteligência Artificial, com a computação de números reais dentro de um espaço probabilístico markoviano, porém, no mesmo jornal acadêmico do JAGI (Journal of Artificial General Intelligence), outro artigo chamado: “The Archimedean trap: Why traditional reinforcement learning will probably not yield AGI”, disse anteriormente que tal coisa seria impossível.

Porém, não sabemos o que acontecerá daqui a alguns anos, talvez pesquisadores dêem risadas no futuro desse tema, talvez até de como a decoerência não tem solução atualmente, mas o ponto central é o aumento da capacidade computacional (embora importante) não significa eficiência em n aplicações da tecnologia no mercado, pois algoritmos mais eficientes muitas das vezes são mais importantes que o avanço em hardware, o fato que Doom pode rodar numa calculadora, em uma questão de otimização, a razão pela qual a mesma otimização não pode ser feita num espaço de input em polígonos maior em escala, pode ser uma questão solucionável computacionalmente ao ponto que mesmo um computador fraco poderia rodar Ray Tracing com um alto FPS, não estou dizendo que a solução existe, e isso é aplicável para n áreas da ciência, biomedicina, química, física e etc, o ponto é se existe um método, uma fórmula para resolver problemas intratáveis de classes parecidas, lembro de um professor que já disse que quem resolver o SAT e 3SAT terá o norte para resolver todos os problemas NP–complete praticamente, porém, isso é mais fácil falar do que fazer.

O tendão de Aquiles dessa falácia

Por fim, o avanço da tecnologia computacionalmente não significa uma maior taxa de retorno de investimentos. Investimentos e prosperidade econômica advém de n fatores, de decisões de agentes de mercado e consumidores em relação a calendários de produção e consumo temporais. O avanço da tecnologia não necessariamente irá criar um ambiente econômico superior (embora ajude), e sim o aumento do conhecimento e n áreas e setores que dependem não só do avanço computacional, mas em biologia, química, física, matemática pura, aplicada e etc.

É claro que o uso de computadores cada vez mais eficientes ajuda em pesquisa, que dera um pesquisador tivesse um supercomputador em casa ao invés de ter que usar os de um laboratório onde você tem um limite de uso em tempo e várias pessoas querendo usar não só localmente mas do mundo todo (embora serviços como Computação Quântica na nuvem e etc ajudam).

Uma tecnocracia é uma utopia muito interessante para a ficção–científica, mas a política é feita com virtude e moralidade (no sentido Socrático), a economia com a lógica e razão (na praxeologia), então aqueles que se atém a uma ideia lúdica de viverem uma Utopia Tecnocrática, estão voando em nuvens de suas próprias ilusões.