Skip to content

gmessias/SimplexSharp

Repository files navigation

SimplexSharp

Criei esse projeto para fornecer uma implementação em C# do algoritmo Simplex, amplamente utilizado em programação linear para resolver problemas de otimização.

Observações:

Detalhes

Referência principal foi do livro: Pesquisa Operacional para os cursos de Economia, Administração e Ciência Contábeis por Ermes Medeiros da Silva.

Explicação resumida de como funciona:

  • Formula o problema.
  • Define um modelo matemático.
    • Variáveis de decisão.
    • Função objetivo.
    • Restrições.

O algoritmo Simplex:

  • Transforma as inequações em equações, adicionando variáveis de folga ou excesso.
  • Constrói a tabela Simplex inicial.
  • Faz Teste de Otimalidade.
  • Repetindo alguns passos até ter uma solução ótima.
    • Identifica a variável que entrará na base (variável de entrada).
    • Identifica a variável que sairá da base (variável de saída).
    • Atualiza a tabela Simplex.

Código

Crie o modelo:

var model = new Model("nome_modelo");

// Adiciona variáveis de decisão
model.AddVariable("x1");

Depois atribua numa variável os coeficientes de cada variável de decisão.

var objectiveCoefficients = new Dictionary<string, double>
{
	{ "x1", 3 },
	{ "x2", 2 }
};

// Adicione a função objetivo junto com os coeficientes das variáveis de decisão
model.SetObjective(objectiveCoefficients, ObjectiveType.Maximize);

Adicione as restrições:

var restrictionsCoefficients = new Dictionary<string, double>
{
	{ "x1", 1.0 },
	{ "x2", 1.0 }
};

// Adicione a restrição no modelo
model.AddRestriction("nome_restricao", restrictionsCoefficients, RestrictionType.LessThanOrEqual, 100.0);

Depois de criar o modelo, você pode usar o solver para encontrar a solução ótima:

model.Solve();

Esse é o básico, cada objeto possui mais métodos e propriedades para manipular o modelo conforme necessário.

Futuramente

  • Quero criar um arquivo de configuração, ou algo do tipo que seja mais friendly para inserir o modelo matemático.
  • Estou pensando se vale a pena criar uma interface gráfica simples para facilitar o uso do solver.
  • Talvez criar outros solvers, mas não acho que farei isso.

About

Algoritmo Simplex em C#

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages