29.2 Solving LP Problems (.NET, C#, CSharp, VB, Visual Basic, F#)
Class PrimalSimplexSolverORTools solves linear programming problems using the primal simplex method. DualSimplexSolverORTools uses the dual simplex method. The simplex method solves LP problems by constructing an initial solution at a vertex of a simplex, then walking along edges of the simplex to vertices with successively higher values of the objective function until the optimum is reached.
The Solve() method takes a LinearProgrammingProblem or MixedIntegerLinearProgrammingProblem and, optionally, a boolean variable to indicate if the objective is to be minimized (true) or maximized.
Code Example – C# linear programming
var solver = new PrimalSimplexSolverORTools();
solver.Solve( problem, true );
This code demonstrates using a solver parameter object.
Code Example – C# linear programming
var solver = new DualSimplexSolverORTools();
solver.Solve( problem, true );
It is important to check whether a finite solution was found, since your problem may be unbounded or infeasible. If a finite solution was found, you can access the solution using the OptimalX property. The OptimalObjectiveFunctionValue property gets the value of the objective function evaluated at the solution.
Code Example – C# linear programming
if ( solver.Result == PrimalSimplexSolverORTools.SolveResult.Optimal )
{
Console.WriteLine( solver.OptimalX );
Console.WriteLine( solver.OptimalObjectiveFunctionValue );
}
If the solver result is SolverResult.Optimal, then the solver.OptimalX will contain the optimal solution with all constraints satisfied. Otherwise the SolverResult object may indicate one of the following results: Feasible, Infeasible, Unbounded, Abnormal, or NotSolved. The specified optimal X vector is not valid if the solver indicates either an unbounded, abnormal or not solved flag.