with Dictionaries; package body Linear_Programming is procedure Primal_Simplex ( dic : in out Matrix; eps : in double_float; in_bas,out_bas : in out Standard_Integer_Vectors.Vector; nit : in out natural; unbounded : out boolean ) is unbound : boolean; begin while not Dictionaries.Primal_Optimal(dic,eps) loop Dictionaries.Primal_Update(dic,in_bas,out_bas,eps,unbound); nit := nit + 1; exit when unbound; end loop; unbounded := unbound; end Primal_Simplex; procedure Generic_Primal_Simplex ( dic : in out Matrix; eps : in double_float; in_bas,out_bas : in out Standard_Integer_Vectors.Vector; nit : in out natural; unbounded : out boolean ) is unbound : boolean; begin while not Dictionaries.Primal_Optimal(dic,eps) loop Report(dic,in_bas,out_bas); Dictionaries.Primal_Update(dic,in_bas,out_bas,eps,unbound); nit := nit + 1; exit when unbound; end loop; Report(dic,in_bas,out_bas); unbounded := unbound; end Generic_Primal_Simplex; procedure Dual_Simplex ( dic : in out Matrix; eps : in double_float; in_bas,out_bas : in out Standard_Integer_Vectors.Vector; nit : in out natural; feasible : out boolean ) is feasi : boolean; begin while not Dictionaries.Dual_Optimal(dic,eps) loop Dictionaries.Dual_Update(dic,in_bas,out_bas,eps,feasi); nit := nit + 1; exit when not feasi; end loop; feasible := feasi; end Dual_Simplex; procedure Generic_Dual_Simplex ( dic : in out Matrix; eps : in double_float; in_bas,out_bas : in out Standard_Integer_Vectors.Vector; nit : in out natural; feasible : out boolean ) is feasi : boolean; begin while not Dictionaries.Dual_Optimal(dic,eps) loop Report(dic,in_bas,out_bas); Dictionaries.Dual_Update(dic,in_bas,out_bas,eps,feasi); nit := nit + 1; exit when not feasi; end loop; Report(dic,in_bas,out_bas); feasible := feasi; end Generic_Dual_Simplex; end Linear_Programming;