@Jimmy acho que uma adição legal seria uma area só para uso de IAs nas loterias, agora com o gpt e o gemini facilitando muito o estudo e desenvolvimento , com o novo gpt 4 suportanto 25 mil palavras dá até para ter um projeto mais complexo
tipo um exemplo que fiz de teste com o novo gpt no modo gratuito
EU: "voce conseguiria juntar tudo numa coisa só mas trabalhando com matrizes de 15 colunas x 4 mil linhas com dezenas de 1 a 80?"
GPT4:
Claro, vamos criar um projeto VBA que integra uma rede neural, algoritmo genético e regressão linear em uma única planilha, trabalhando com matrizes de 15 colunas x 4000 linhas com dezenas de 1 a 80. Vou dar uma estrutura básica para cada componente e depois juntar tudo.
Passos:
Estrutura do Projeto:
Criar uma planilha chamada "Dados" onde os dados serão armazenados.
Criar uma planilha chamada "Resultados" onde os resultados serão exibidos.
Rede Neural:
Adaptação da rede neural para lidar com 15 entradas e 4000 exemplos de treinamento.
Algoritmo Genético:
Ajustar para 15 genes em cada indivíduo.
Regressão Linear:
Ajustar para prever valores baseados em uma coluna específica.
Código Integrado:
Sub ProjetoIntegrado()
' Inicializar dados e parâmetros
Dim entradas(1 To 4000, 1 To 15) As Double
Dim saidas(1 To 4000) As Double
Dim pesosIH(1 To 15, 1 To 10) As Double ' Pesos entre camada de entrada e oculta
Dim pesosHO(1 To 10, 1 To 1) As Double ' Pesos entre camada oculta e saída
Dim biasH(1 To 10) As Double ' Biases da camada oculta
Dim biasO(1 To 1) As Double ' Bias da camada de saída
Dim taxaAprendizado As Double
taxaAprendizado = 0.1 ' Taxa de aprendizado
' Inicializar pesos e biases com valores aleatórios
Dim i As Integer, j As Integer
For i = 1 To 15
For j = 1 To 10
pesosIH(i, j) = Rnd
Next j
Next i
For i = 1 To 10
For j = 1 To 1
pesosHO(i, j) = Rnd
Next j
Next i
For i = 1 To 10
biasH(i) = Rnd
Next i
For i = 1 To 1
biasO(i) = Rnd
Next i
' Carregar dados da planilha "Dados"
Dim wsDados As Worksheet
Set wsDados = ThisWorkbook.Sheets("Dados")
For i = 1 To 4000
For j = 1 To 15
entradas(i, j) = wsDados.Cells(i + 1, j).Value
Next j
saidas(i) = wsDados.Cells(i + 1, 16).Value
Next i
' Treinamento da rede neural
TreinarRedeNeural entradas, saidas, pesosIH, pesosHO, biasH, biasO, taxaAprendizado
' Algoritmo genético
AlgoritmoGenetico
' Regressão linear
RegressaoLinear
End Sub
Sub TreinarRedeNeural(ByRef entradas As Variant, ByRef saidas As Variant, _
ByRef pesosIH As Variant, ByRef pesosHO As Variant, _
ByRef biasH As Variant, ByRef biasO As Variant, _
ByVal taxaAprendizado As Double)
Dim epocas As Integer
epocas = 1000 ' Número de épocas de treinamento
Dim entrada(1 To 15) As Double
Dim saidaDesejada As Double
Dim saidaObtida As Double
Dim somasOculta(1 To 10) As Double
Dim saidasOculta(1 To 10) As Double
Dim somasSaida(1 To 1) As Double
Dim erroSaida(1 To 1) As Double
Dim erroOculta(1 To 10) As Double
Dim i As Integer, j As Integer, k As Integer, epoca As Integer
For epoca = 1 To epocas
For i = 1 To 4000
' Configurar entrada e saída desejada
For j = 1 To 15
entrada(j) = entradas(i, j)
Next j
saidaDesejada = saidas(i)
' Propagação para frente
For j = 1 To 10
somasOculta(j) = biasH(j)
For k = 1 To 15
somasOculta(j) = somasOculta(j) + entrada(k) * pesosIH(k, j)
Next k
saidasOculta(j) = Sigmoid(somasOculta(j))
Next j
For j = 1 To 1
somasSaida(j) = biasO(j)
For k = 1 To 10
somasSaida(j) = somasSaida(j) + saidasOculta(k) * pesosHO(k, j)
Next k
saidaObtida = Sigmoid(somasSaida(j))
Next j
' Propagação para trás (retropropagação)
For j = 1 To 1
erroSaida(j) = saidaDesejada - saidaObtida
For k = 1 To 10
pesosHO(k, j) = pesosHO(k, j) + taxaAprendizado * erroSaida(j) * saidasOculta(k)
Next k
biasO(j) = biasO(j) + taxaAprendizado * erroSaida(j)
Next j
For j = 1 To 10
erroOculta(j) = 0
For k = 1 To 1
erroOculta(j) = erroOculta(j) + erroSaida(k) * pesosHO(j, k)
Next k
erroOculta(j) = erroOculta(j) * saidasOculta(j) * (1 - saidasOculta(j))
For k = 1 To 15
pesosIH(k, j) = pesosIH(k, j) + taxaAprendizado * erroOculta(j) * entrada(k)
Next k
biasH(j) = biasH(j) + taxaAprendizado * erroOculta(j)
Next j
Next i
Next epoca
End Sub
Function Sigmoid(x As Double) As Double
Sigmoid = 1 / (1 + Exp(-x))
End Function
Sub AlgoritmoGenetico()
Dim populacao(1 To 100, 1 To 15) As Integer
Dim novaPopulacao(1 To 100, 1 To 15) As Integer
Dim fitness(1 To 100) As Double
Dim i As Integer, j As Integer, k As Integer
' Inicializar a população com números aleatórios
For i = 1 To 100
For j = 1 To 15
populacao(i, j) = Int((80 - 1 + 1) * Rnd + 1)
Next j
Next i
' Avaliar a aptidão de cada indivíduo
For i = 1 To 100
fitness(i) = AvaliarAptidao(populacao, i)
Next i
' Evolução por várias gerações
For k = 1 To 100
' Seleção, crossover e mutação
For i = 1 To 100
Dim pai1 As Integer, pai2 As Integer
pai1 = SelecionarPai(fitness)
pai2 = SelecionarPai(fitness)
For j = 1 To 15
If Rnd < 0.5 Then
novaPopulacao(i, j) = populacao(pai1, j)
Else
novaPopulacao(i, j) = populacao(pai2, j)
End If
' Mutação
If Rnd < 0.01 Then
novaPopulacao(i, j) = Int((80 - 1 + 1) * Rnd + 1)
End If
Next j
Next i
' Atualizar população e recalcular aptidão
For i = 1 To 100
For j = 1 To 15
populacao(i, j) = novaPopulacao(i, j)
Next j
fitness(i) = AvaliarAptidao(populacao, i)
Next i
Next k
' Exibir os melhores resultados
Dim melhorAptidao As Double
Dim melhorIndividuo As Integer
melhorAptidao = 0
For i = 1 To 100
If fitness(i) > melhorAptidao Then
melhorAptidao = fitness(i)
melhorIndividuo = i
End If
Next i
MsgBox "Melhor combinação: " & Join(Application.Index(populacao, melhorIndividuo, 0), ", ")
End Sub
Function AvaliarAptidao(populacao As Variant, indice As Integer) As Double
' Função de aptidão simples que soma os números (ajuste conforme necessário)
Dim soma As Double
soma = 0
Dim i As Integer
For i = 1 To 15
soma = soma + populacao(indice, i)
Next i
AvaliarAptidao = soma
End Function
Function SelecionarPai(fitness As Variant) As Integer
' Seleção por roleta viciada (proporcional à aptidão)
Dim somaFitness As Double
somaFitness = Application.Sum(fitness)
Dim roleta As Double
roleta = Rnd * somaFitness
Dim i As Integer
Dim acumulado As Double
acumulado = 0
For i = 1 To UBound(fitness)
acumulado = acumulado + fitness(i)
If acumulado >= roleta Then
SelecionarPai = i
Exit Function
End If
Next i
End Function
Sub RegressaoLinear()
Dim wsResultados As Worksheet
Set wsResultados = ThisWorkbook.Sheets("Resultados")
Dim ultimaLinha As Long
ultimaLinha = wsResultados.Cells(wsResultados.Rows.Count, 1).End(xlUp).Row
Dim x() As Double
Dim y() As Double
ReDim x(1 To ultimaLinha - 1)
ReDim y(1 To ultimaLinha - 1)
Dim i As Long
For i = 2 To ultimaLinha
x(i - 1) = wsResultados.Cells(i, 1).Value ' Ajuste conforme necessário
y(i - 1) = wsResultados.Cells(i, 2).Value ' Ajuste conforme necessário
Next i
Dim sumX As Double, sumY As Double, sumXY As Double, sumX2 As Double
sumX = 0: sumY = 0: sumXY = 0: sumX2 = 0
For i = 1 To UBound(x)
sumX = sumX + x(i)
sumY = sumY + y(i)
sumXY = sumXY + x(i) * y(i)
sumX2 = sumX2 + x(i) ^ 2
Next i
Dim n As Long
n = UBound(x)
Dim a As Double, b As Double
b = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX ^ 2)
a = (sumY - b * sumX) / n
' Exibir os resultados
MsgBox "Equação da Regressão: y = " & a & " + " & b & "x"
' Previsão para um novo valor de x
Dim novoX As Double
novoX = InputBox("Insira o valor de x para previsão:")
Dim previsao As Double
previsao = a + b * novoX
MsgBox "Previsão para x = " & novoX & " é y = " & previsao
End Sub
Explicação:
Função Principal (ProjetoIntegrado):
Inicializa os dados e parâmetros.
Carrega dados da planilha "Dados".
Chama as sub-rotinas para treinar a rede neural, executar o algoritmo genético e a regressão linear.
Sub-rotina de Treinamento da Rede Neural (TreinarRedeNeural):
Treina uma rede neural simples com 15 entradas e 10 neurônios na camada oculta.
Sub-rotina do Algoritmo Genético (AlgoritmoGenetico):
Implementa um algoritmo genético com 15 genes em cada indivíduo.
Sub-rotina de Regressão Linear (RegressaoLinear):
Realiza a regressão linear nos dados da planilha "Resultados".
Esta implementação assume que os dados estão adequadamente organizados nas planilhas "Dados" e "Resultados". Para usar o código, certifique-se de ajustar os dados conforme necessário e executá-lo em um ambiente VBA habilitado.
=====================================================
acho que fica uma area legal para aproveitar o potencial das novas ferramentas