Framework para Constraint Programming
A Microsoft disponibilizou um framework chamado Solver Foundation que facilita a resolução de problemas lógicos e/ou matemáticos complexos.
Este Solver utiliza a técnica de Constraint Programming que é um tipo de programação baseada em declarações e visa resolver com poucas linhas problemas que vão desde logística (caminho de menor custo, etc.) até jogos simples como o Sudoku.
Neste tipo de programação começamos por algo que chamamos de Modelo, que define o espaço de soluções possíveis para o problema e um conjunto de restrições (constraints) que farão com que apenas umas poucas, senão uma única, solução exista (obs.: podendo também não haver soluções para a restrição dadas).
Um bom exemplo é o clássico problema da equação de adição
S E N D +
M O R E
--------------
M O N E Y
onde cada letra corresponde a um dígito e nosso problema é encontrar esta correspondência para que a adição dê certo (não vou dar a resposta para que você sinta como é difícil. Mesmo assim, aqui fica a minha proposta: tente resolver por programação! Com isto, você dará mais valor ao Solver)
Para resolver este problema com o Solver Foundation podemos simplesmente descrever o modelo abaixo:
Model[
Decisions[Integers[0,9],s,e,n,d,m,o,r,y],
Constraints[
1000*s + 100*e + 10*n + d +
1000*m + 100*o + 10*r + e
== 10000*m + 1000*o + 100*n + 10*e + y,
Unequal[s,e,n,d,m,o,r,y],
s>=1,
m>=1
]
]
Neste modelo (que usa a linguagem OML) podemos perceber que:
- Decisions declara os valores possíveis para cada letra (o que chamei de espaço do problema);
- Constraints declara as restrições ao espaço.
O Solution Foundation permite que você use um AddIn do Excel para resolver problemas deste tipo ou, que você programe em .Net utilizando a API do Solution Foundation para obter a(s) solução(ões). Nesta segunda opção, você poderá fazer binding com seu banco de dados para trazer dados reais para o modelo antes de mandar resolver o problema. Não é poderoso?
Imagine agora como será simples inserir na sua aplicação a facilidade de resolver problemas como os de MinMax, logística, ou outros.
Aqui vão alguns links interessantes para o Solution Foundation:
-
- Site https://solverfoundation.com/
- Tutorial do OML pelo Erwin Kalvalagen (excelente texto!) [link]
- Solver Foundation team site [link]
- Solver Foundation team blog [link]
- Nathan Brixious blog [link] https://blogs.msdn.com/b/natbr/
- Solver Foundation MSDN forum [link]
- Download and use Solver Foundation Samples [link]
Vale uma olhada!