steps

Input: A, b and c ˜ ; and 𝒟 is non-empty and P0 is inside 𝒟

Output: OptPt & OptVal

0

Construct the Facet Tableau [ τ ] from A, b and c ˜

P = P 0 ; g 0 = b

1

d j = P T τ j c j for j = 1 , , m + n }

2

σ = { j | | d j | < δ } ; % δ is a small constant

σ * = σ ; % σ * is set of blocking facet

3

while (true)

4

if σ ϕ % compute g , g σ j c and update σ *

[ g , g σ j c , σ * ] = Gradient Select( g 0 , σ , [ τ ] , P , c )

else g = g 0

5

if | σ * | = = m

O p t P t = P ; O p t V a l = P T b ; return (OptPt, OptVal)

else σ = σ *

6

t j = c j P T τ j g T τ j ; for j { 1 , 2 , , m + n } \ σ

j * = arg min j { t j | t j > 0 } ;

Q = P + t j * g ; P = Q

7

σ = σ * { i | | t i t j * | < ϵ } % update blocking facets

8

end