with Standard_Floating_Numbers; use Standard_Floating_Numbers;
with Standard_Floating_Vectors; use Standard_Floating_Vectors;
with Standard_Floating_Matrices;
with Floating_Linear_Inequalities; use Floating_Linear_Inequalities;
package body Integer_Linear_Inequalities is
procedure Integer_Complementary_Slackness
( tableau : in out Matrix; feasible : out boolean ) is
begin
Integer_Complementary_Slackness(tableau,tableau'last(2)-1,feasible);
end Integer_Complementary_Slackness;
procedure Integer_Complementary_Slackness
( tableau : in out Matrix; lastcol : in integer;
feasible : out boolean ) is
tab : Standard_Floating_Matrices.Matrix
(tableau'range(1),tableau'first(2)..lastcol);
rhs,sol : Standard_Floating_Vectors.Vector(tab'range(1));
tol : constant double_float := 10.0**(-12); -- double precision
columns : Standard_Integer_Vectors.Vector(sol'range);
begin
for i in tab'range(1) loop
for j in tab'range(2) loop
tab(i,j) := double_float(tableau(i,j));
end loop;
end loop;
for i in rhs'range loop
rhs(i) := double_float(tableau(i,tableau'last(2)));
end loop;
Complementary_Slackness(tab,lastcol,rhs,tol,sol,columns,feasible);
end Integer_Complementary_Slackness;
end Integer_Linear_Inequalities;