File: [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Supports / linear_programming.adb (download)
Revision 1.1.1.1 (vendor branch), Sun Oct 29 17:45:28 2000 UTC (23 years, 10 months ago) by maekawa
Branch: PHC, MAIN
CVS Tags: v2, maekawa-ipv6, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, HEAD Changes since 1.1: +0 -0
lines
Import the second public release of PHCpack.
OKed by Jan Verschelde.
|
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;