Por fim, o Google Forms, que já existe há muito tempo e é bastante conhecido. Serve para pessoas com acesso ao formulário preencherem, e a ferramenta consolida os resultados.
É possível configurar resposta única ou múltipla, respostas obrigatórias e várias outras opções.
——————–
Quem tiver outras boas sugestões, e de preferência free, fique à vontade para responder.
É semelhante ao anterior, mas agora as variáveis são matrizes.
‘Inicializando coeficientes FO
coefFO(1) = 10
coefFO(2) = 5
‘Inicializando coeficientes Matriz
coefMatriz(1, 1) = 2
coefMatriz(1, 2) = 4
coefMatriz(2, 1) = 1
coefMatriz(2, 2) = -6
‘Inicializando rhs
RHS(1) = 50
RHS(2) = 15
Um parâmetro adicional, restringindo as variáveis a assumir valor máximo 50 e mínimo 0.
For i = 1 To nvar
varmin(i) = 0 ‘Range Mínimo
varmax(i) = 50 ‘Range Máximo
Next i
Em linhas gerais:
– Escolhe valores aleatórios no range das variáveis
– Pondera o valor aleatório com a melhor solução até agora
– Lambda controla o mix valor aleatório x melhor solução até agora. No início lambda é pequeno, depois vai aumentando
– Verifica se cumpre todas as restrições
– função objetivo que avalia a solução
– salva o histórico
‘Algoritmo evolutivo
For iter = 1 To Niteracoes ‘Numero de iteracoes
lambda = iter / Niteracoes
‘Sorteia um valor
sorteia var, varmin, varmax, varbest, lambda
‘Verifica restricoes
isOk = verificaRestricoes(var, coefMatriz, RHS)
If isOk Then
‘Avalia a função atual
FOatual = FO(var, coefFO)
‘Salva a melhor (maximizando)
If FOatual > FOBest Then
FOBest = FOatual
copiaUni var, varbest
End If
End If
FOhist(iter, 1) = FOBest
Next iter
Usando o solver, as variáveis ótimas são 22,5 e 1,25.
A metaheurística chega a valores próximos ao ótimo, o que mostra que funciona para uma solução suficientemente boa.
Provavelmente, com muitas variáveis e muitas restrições, vai ficar bem mais difícil convergir para uma solução boa.
Uma coisa ruim é todas as equações serem hard coded, mas quem domina código consegue fazer isso fácil.
É possível “tunar” esse algoritmo básico com pré processamento, ou algum chute guiado ao invés de ser basicamente aleatório, mas aí vai depender do problema.
Implementação em VBA de metaheurística para resolução do problema do caixeiro-viajante.
A metaheurística não vai dar o valor ótimo, porém na prática, pode entregar um valor bom o suficiente.
Algumas vantagens: é mais flexível em termos de modelar restrições, é grátis (um solver tem licença que pode custar algumas dezenas de milhares de dólares, no mínimo).
Algumas desvantagens: ter alguém que manje muito de otimização combinatória para adaptar o código corretamente, não garantir a solução ótima.
De qualquer forma, é uma alternativa viável, competitiva e possível de ser utilizada, para problemas de otimização combinatória.
Imagine a seguinte situação. Quero alugar um apartamento num bairro muito concorrido de São Paulo. Vou visitar 20 imóveis, e assim que o fizer, ou eu faço a proposta para alugar na hora, ou decido ver o imóvel seguinte e perco o visitado para sempre (afinal, é um bairro concorrido).
O ordem de visitas é aleatória.
Qual a estratégia que maximiza a escolha?
É um claro tradeoff. Para conseguir informação, devo prospectar, porém, por ser uma prospecção destrutiva, vou descartar bons imóveis e acabar ficando sem opções.
Este problema é conhecido como o “Ponto de parada ótimo”, e a resposta ótima é 37%.
Primeiro, tenho que coletar informações, e a única forma de fazer é visitando os imóveis. Visito 37% dos imóveis, e avalio qual o melhor destes.
A seguir, pego o primeiro imóvel igual ou superior ao score avaliado anteriormente.
Exemplo:
Tenho uma lista de 20 imóveis, com notas aleatórias (quanto maior, melhor).
37% de 20 dá 7, arredondando. Visito os 7 primeiros imóveis, sem escolher nenhum deles, mas anotando qual o melhor.
No caso, o melhor imóvel visitado teve nota 65.
A seguir, continuo fazendo as visitas até encontrar algum igual ou superior a 65. No caso, faço a proposta na hora e fico com o imóvel de nota 77.
Na lista, há dois imóveis com score maior (de 91 e 97), de forma que a estratégia citada escolheu o terceiro melhor da lista (lembrando que, no problema, não teríamos essa informação da nota sem visitar – e descartar – o imóvel)
Desafio em Excel.
Dada uma lista com números aleatórios como o do anexo, escrever fórmulas (ou rotinas ou qualquer outro truque) para implementar o algoritmo de parada ótima descrito. Comparar com a melhor solução.
(Clicar em F9 ou mudar qualquer célula vai alterar os valores).
Segue a minha versão da solução, disponível para download no OneDrive.
A ideia é sempre a mesma. Pegar o maior valor dos 37% primeiros, e depois o primeiro maior valor encontrado.
Da literatura, este problema tem vários nomes (como o problema da escolha da secretária).
Em geral, experimentos práticos x teoria mostram que tendemos a ser impacientes, e fechar um negócio mais cedo, sem explorar tanto – e optar por uma solução menos ótima do que poderia ser.
Fica a dica: explorar um pouco mais o mercado, antes de fechar algum negócio.