# A Two-Phase Support Method for Solving Linear Programs: Numerical Experiments

Authors: Mohand Bentobache; Mohand Ouamer Bibi
Journal: Mathematical Problems in Engineering
 (2012)

---

## Abstract

We develop a single artificial variable technique to initialize the primal support method for solving linear programs with bounded variables. We first recall the full artificial basis technique, then we will present the proposed algorithm. In order to study the performances of the suggested algorithm, an implementation under the MATLAB programming language has been developed. Finally, we carry out an experimental study about CPU time and iterations number on a large set of the NETLIB test problems. These test problems are practical linear programs modelling various real-life problems arising from several fields such as oil refinery, audit staff scheduling, airline scheduling, industrial production and allocation, image restoration, multisector economic planning, and data fitting. It has been shown that our approach is competitive with our implementation of the primal simplex method and the primal simplex algorithm implemented in the known open-source LP solver LP_SOLVE.


---

## Body

## 1. Introduction

Linear programming is a mathematical discipline which deals with solving the problem of optimizing a linear function over a domain delimited by a set of linear equations or inequations. The first formulation of an economical problem as a linear programming problem is done by Kantorovich (1939, [1]), and the general formulation is given later by Dantzig in his work [2]. LP is considered as the most important technique in operations research. Indeed, it is widely used in practice, and most of optimization techniques are based on LP ones. That is why many researchers have given a great interest on finding efficient methods to solve LP problems. Although some methods exist before 1947 [1], they are restricted to solve some particular forms of the LP problem. Being inspired from the work of Fourier on linear inequalities, Dantzig (1947, [3]) developed the simplex method which is known to be very efficient for solving practical linear programs. However, in 1972, Klee and Minty [4] have found an example where the simplex method takes an exponential time to solve it.In 1977, Gabasov and Kirillova [5] have generalized the simplex method and developed the primal support method which can start by any basis and any feasible solution and can move to the optimal solution by interior points or boundary points. The latter is adapted by Radjef and Bibi to solve LPs which contain two types of variables: bounded and nonnegative variables [6]. Later, Gabasov et al. developed the adaptive method to solve, particularly, linear optimal control problems [7]. This method is extended to solve general linear and convex quadratic problems [8–18]. In 1979, Khachian developed the first polynomial algorithm which is an interior point one to solve LP problems [19], but it’s not efficient in practice. In 1984, Karmarkar presented for the first time an interior point algorithm competitive with the simplex method on large-scale problems [20].The efficiency of the simplex method and its generalizations depends enormously on the first initial point used for their initialization. That is why many researchers have given a new interest for developing new initialization techniques. These techniques aim to find a good initial basis and a good initial point and use a minimum number of artificial variables to reduce memory space and CPU time. The first technique used to find an initial basic feasible solution for the simplex method is the full artificial basis technique [3]. In [21, 22], the authors developed a technique using only one artificial variable to initialize the simplex method. In his experimental study, Millham [23] shows that when the initial basis is available in advance, the single artificial variable technique can be competitive with the full artificial basis one. Wolfe [24] has suggested a technique which consists of solving a new linear programming problem with a piecewise linear objective function (minimization of the sum of infeasibilities). In [25–31], crash procedures are developed to find a good initial basis.In [32], a two-phase support method with one artificial variable for solving linear programming problems was developed. This method consists of two phases and its general principle is the following: in the first phase, we start by searching an initial support with the Gauss-Jordan elimination method, then we proceed to the search of an initial feasible solution by solving an auxiliary problem having one artificial variable and an obvious feasible solution. This obvious feasible solution can be an interior point of the feasible region. After that, in the second phase, we solve the original problem with the primal support method [5].In [33, 34], we have suggested two approaches to initialize the primal support method with nonnegative variables and bounded variables: the first approach consists of applying the Gauss elimination method with partial pivoting to the system of linear equations corresponding to the main constraints and the second consists of transforming the equality constraints to inequality constraints. After finding the initial support, we search a feasible solution by adding only one artificial variable to the original problem, thus we get an auxiliary problem with an evident support feasible solution. An experimental study has been carried out on some NETLIB test problems. The results of the numerical comparison revealed that finding the initial support by the Gauss elimination method consumes much time, and transforming the equality constraints to inequality ones increases the dimension of the problem. Hence, the proposed approaches are competitive with the full artificial basis simplex method for solving small problems, but they are not efficient to solve large problems.In this work, we will first extend the full artificial basis technique presented in [7], to solve problems in general form, then we will combine a crash procedure with a single artificial variable technique in order to find an initial support feasible solution for the initialization of the support method. This technique is efficient for solving practical problems. Indeed, it takes advantage of sparsity and adds a reduced number of artificial variables to the original problem. Finally, we show the efficiency of our approach by carrying out an experimental study on some NETLIB test problems.The paper is organized as follows: in Section2, the primal support method for solving linear programming problems with bounded variables is reviewed. In Section 3, the different techniques to initialize the support method are presented: the full artificial basis technique and the single artificial variable one. Although the support method with full artificial basis is described in [7], it has never been tested on NETLIB test problems. In Section 4, experimental results are presented. Finally, Section 5 is devoted to the conclusion.


## 2. Primal Support Method with Bounded Variables

### 2.1. State of the Problem and Definitions

The linear programming problem with bounded variables is presented in the following standard form:(2.1)max⁡z=cTx,(2.2)s.t.Ax=b,(2.3)l≤x≤u,
where c and x are n-vectors; b an m-vector; A an (m×n)-matrix with rank⁡(A)=m<n; l and u are n-vectors. In the following sections, we will assume that ∥l∥<∞ and ∥u∥<∞. We define the following index sets:(2.4)I={1,2,…,m},J={1,2,…,n},J=JN∪JB,JN∩JB=∅,|JB|=m,|JN|=n-m.
So we can write and partition the vectors and the matrix A as follows:
(2.5)x=x(J)=(xj,j∈J),x=(xNxB),xN=x(JN)=(xj,j∈JN),xB=x(JB)=(xj,j∈JB);c=c(J)=(cj,j∈J),c=(cNcB),cN=c(JN)=(cj,j∈JN),cB=c(JB)=(cj,j∈JB),l=l(J)=(lj,j∈J),u=u(J)=(uj,j∈J),A=A(I,J)=(aij,i∈I,j∈J)=(a1,…,aj,…,an)=(A1T⋮AiT⋮AmT),aj=(a1ja2j⋮amj),j=1,n¯;AiT=(ai1,ai2,…,ain),i=1,m¯,A=(AN∣AB),AN=A(I,JN),AB=A(I,JB).(i)
A vectorx verifying constraints (2.2) and (2.3) is called a feasible solution for the problem (2.1)–(2.3).(ii)
A feasible solutionx0 is called optimal if z(x0)=cTx0=max⁡cTx, where x is taken from the set of all feasible solutions of the problem (2.1)–(2.3).(iii)
A feasible solutionxϵ is said to be ϵ-optimal or suboptimal if
(2.6)z(x0)-z(xϵ)=cTx0-cTxϵ≤ϵ,
where x0 is an optimal solution for the problem (2.1)–(2.3), and ϵ is a positive number chosen beforehand.(iv)
We consider the set of indicesJB⊂J such that |JB|=|I|=m. Then JB is called a support if det⁡(AB)=det⁡(A(I,JB))≠0.(v)
The pair{x,JB} comprising a feasible solution x and a support JB will be called a support feasible solution (SFS).(vi)
An SFS is callednondegenerate if lj<xj<uj,j∈JB.Remark 2.1.
An SFS is a more general concept than the basic feasible solution (BFS). Indeed, the nonsupport components of an SFS are not restricted to their bounds. Therefore, an SFS may be an interior point, a boundary point or an extreme point, but a BFS is always an extreme point. That is why we can classify the primal support method in the class of interior search methods within the simplex framework [35].(i)
We define the Lagrange multipliers vectorπ and the reduced costs vector Δ as follows:(2.7)πT=cBTAB-1,ΔT=ΔT(J)=πTA-cT=(ΔNT,ΔBT),whereΔNT=cBTAB-1AN-cNT,ΔBT=cBTAB-1AB-cBT=0.Theorem 2.2 (the optimality criterion [5]).
Let{x,JB} be an SFS for the problem (2.1)–(2.3). So the relations:
(2.8)Δj≥0forxj=lj,Δj≤0forxj=uj,Δj=0forlj<xj<uj,j∈JN
are sufficient and, in the case of nondegeneracy of the SFS {x,JB}, also necessary for the optimality of the feasible solution x.The quantityβ(x,JB) defined by:(2.9)β(x,JB)=∑Δj>0,j∈JNΔj(xj-lj)+∑Δj<0,j∈JNΔj(xj-uj),
is called the suboptimality estimate. Thus, we have the following theorem [5].Theorem 2.3 (sufficient condition for suboptimality).
Let{x,JB} be an SFS for the problem (2.1)–(2.3) and ϵ an arbitrary positive number. If β(x,JB)≤ϵ, then the feasible solution x is ϵ-optimal.


### 2.2. The Primal Support Method

Let{x,JB} be an initial SFS and ϵ an arbitrary positive number. The scheme of the primal support method is described in the following steps:(1)
ComputeπT=cBTAB-1; Δj=πTaj-cj,j∈JN.(2)
Computeβ(x,JB) with the formula (2.9).(3)
Ifβ(x,JB)=0, then the algorithm stops with {x,JB}, an optimal SFS.(4)
Ifβ(x,JB)≤ϵ, then the algorithm stops with {x,JB}, an ϵ-optimal SFS.(5)
Determine the nonoptimal index set:(2.10)JNNO={j∈JN:[Δj<0,xj<uj]or[Δj>0,xj>lj]}.(6)
Choose an indexj0 from JNNO such that |Δj0|=max⁡j∈JNNO⁡|Δj|.(7)
Compute the search directiond using the relations:
(2.11)dj0=-sign⁡Δj0,dj=0,j≠j0,j∈JN,d(JB)=-AB-1ANd(JN)=-AB-1aj0dj0.(8)
Computeθj1=min⁡j∈JB⁡θj, where θj is determined by the formula:
(2.12)θj={(uj-xj)dj,ifdj>0;(lj-xj)dj,ifdj<0;∞,ifdj=0.(9)
Computeθj0 using the formula
(2.13)θj0={xj0-lj0,ifΔj0>0;uj0-xj0,ifΔj0<0.(10)
Computeθ0=min⁡{θj1,θj0}.(11)
Computex̅=x+θ0d, z̅=z+θ0|Δj0|.(12)
Computeβ(x̅,JB)=β(x,JB)-θ0|Δj0|.(13)
Ifβ(x̅,JB)=0, then the algorithm stops with {x̅,JB}, an optimal SFS.(14)
Ifβ(x̅,JB)≤ϵ, then the algorithm stops with {x̅,JB}, an ϵ-optimal SFS.(15)
Ifθ0=θj0, then we put J̅B=JB.(16)
Ifθ0=θj1, then we put J̅B=(JB∖{j1})∪{j0}.(17)
We putx=x̅ and JB=J̅B. Go to the step (1).


## 2.1. State of the Problem and Definitions

The linear programming problem with bounded variables is presented in the following standard form:(2.1)max⁡z=cTx,(2.2)s.t.Ax=b,(2.3)l≤x≤u,
where c and x are n-vectors; b an m-vector; A an (m×n)-matrix with rank⁡(A)=m<n; l and u are n-vectors. In the following sections, we will assume that ∥l∥<∞ and ∥u∥<∞. We define the following index sets:(2.4)I={1,2,…,m},J={1,2,…,n},J=JN∪JB,JN∩JB=∅,|JB|=m,|JN|=n-m.
So we can write and partition the vectors and the matrix A as follows:
(2.5)x=x(J)=(xj,j∈J),x=(xNxB),xN=x(JN)=(xj,j∈JN),xB=x(JB)=(xj,j∈JB);c=c(J)=(cj,j∈J),c=(cNcB),cN=c(JN)=(cj,j∈JN),cB=c(JB)=(cj,j∈JB),l=l(J)=(lj,j∈J),u=u(J)=(uj,j∈J),A=A(I,J)=(aij,i∈I,j∈J)=(a1,…,aj,…,an)=(A1T⋮AiT⋮AmT),aj=(a1ja2j⋮amj),j=1,n¯;AiT=(ai1,ai2,…,ain),i=1,m¯,A=(AN∣AB),AN=A(I,JN),AB=A(I,JB).(i)
A vectorx verifying constraints (2.2) and (2.3) is called a feasible solution for the problem (2.1)–(2.3).(ii)
A feasible solutionx0 is called optimal if z(x0)=cTx0=max⁡cTx, where x is taken from the set of all feasible solutions of the problem (2.1)–(2.3).(iii)
A feasible solutionxϵ is said to be ϵ-optimal or suboptimal if
(2.6)z(x0)-z(xϵ)=cTx0-cTxϵ≤ϵ,
where x0 is an optimal solution for the problem (2.1)–(2.3), and ϵ is a positive number chosen beforehand.(iv)
We consider the set of indicesJB⊂J such that |JB|=|I|=m. Then JB is called a support if det⁡(AB)=det⁡(A(I,JB))≠0.(v)
The pair{x,JB} comprising a feasible solution x and a support JB will be called a support feasible solution (SFS).(vi)
An SFS is callednondegenerate if lj<xj<uj,j∈JB.Remark 2.1.
An SFS is a more general concept than the basic feasible solution (BFS). Indeed, the nonsupport components of an SFS are not restricted to their bounds. Therefore, an SFS may be an interior point, a boundary point or an extreme point, but a BFS is always an extreme point. That is why we can classify the primal support method in the class of interior search methods within the simplex framework [35].(i)
We define the Lagrange multipliers vectorπ and the reduced costs vector Δ as follows:(2.7)πT=cBTAB-1,ΔT=ΔT(J)=πTA-cT=(ΔNT,ΔBT),whereΔNT=cBTAB-1AN-cNT,ΔBT=cBTAB-1AB-cBT=0.Theorem 2.2 (the optimality criterion [5]).
Let{x,JB} be an SFS for the problem (2.1)–(2.3). So the relations:
(2.8)Δj≥0forxj=lj,Δj≤0forxj=uj,Δj=0forlj<xj<uj,j∈JN
are sufficient and, in the case of nondegeneracy of the SFS {x,JB}, also necessary for the optimality of the feasible solution x.The quantityβ(x,JB) defined by:(2.9)β(x,JB)=∑Δj>0,j∈JNΔj(xj-lj)+∑Δj<0,j∈JNΔj(xj-uj),
is called the suboptimality estimate. Thus, we have the following theorem [5].Theorem 2.3 (sufficient condition for suboptimality).
Let{x,JB} be an SFS for the problem (2.1)–(2.3) and ϵ an arbitrary positive number. If β(x,JB)≤ϵ, then the feasible solution x is ϵ-optimal.


## 2.2. The Primal Support Method

Let{x,JB} be an initial SFS and ϵ an arbitrary positive number. The scheme of the primal support method is described in the following steps:(1)
ComputeπT=cBTAB-1; Δj=πTaj-cj,j∈JN.(2)
Computeβ(x,JB) with the formula (2.9).(3)
Ifβ(x,JB)=0, then the algorithm stops with {x,JB}, an optimal SFS.(4)
Ifβ(x,JB)≤ϵ, then the algorithm stops with {x,JB}, an ϵ-optimal SFS.(5)
Determine the nonoptimal index set:(2.10)JNNO={j∈JN:[Δj<0,xj<uj]or[Δj>0,xj>lj]}.(6)
Choose an indexj0 from JNNO such that |Δj0|=max⁡j∈JNNO⁡|Δj|.(7)
Compute the search directiond using the relations:
(2.11)dj0=-sign⁡Δj0,dj=0,j≠j0,j∈JN,d(JB)=-AB-1ANd(JN)=-AB-1aj0dj0.(8)
Computeθj1=min⁡j∈JB⁡θj, where θj is determined by the formula:
(2.12)θj={(uj-xj)dj,ifdj>0;(lj-xj)dj,ifdj<0;∞,ifdj=0.(9)
Computeθj0 using the formula
(2.13)θj0={xj0-lj0,ifΔj0>0;uj0-xj0,ifΔj0<0.(10)
Computeθ0=min⁡{θj1,θj0}.(11)
Computex̅=x+θ0d, z̅=z+θ0|Δj0|.(12)
Computeβ(x̅,JB)=β(x,JB)-θ0|Δj0|.(13)
Ifβ(x̅,JB)=0, then the algorithm stops with {x̅,JB}, an optimal SFS.(14)
Ifβ(x̅,JB)≤ϵ, then the algorithm stops with {x̅,JB}, an ϵ-optimal SFS.(15)
Ifθ0=θj0, then we put J̅B=JB.(16)
Ifθ0=θj1, then we put J̅B=(JB∖{j1})∪{j0}.(17)
We putx=x̅ and JB=J̅B. Go to the step (1).


## 3. Finding an Initial SFS for the Primal Support Method

Consider the linear programming problem written in the following general form:(3.1)max⁡z=cTx,s.t.A1x≤b1,A2x=b2,l≤x≤u,
where c=(c1,c2,…,cp)T, x=(x1,x2,…,xp)T, l=(l1,l2,…,lp)T, u=(u1,u2,…,up)T are vectors in ℝp; A1 is a matrix of dimension (m1×p), A2 is a matrix of dimension (m2×p), b1∈ℝm1, b2∈ℝm2. We assume that ∥l∥<∞ and ∥u∥<∞.Letm=m1+m2 be the number of constraints of the problem (3.1) and I={1,2,…,m}, J0={1,2,…,p} are, respectively, the constraints indices set and the original variables indices set of the problem (3.1). We partition the set I as follows: I=I1∪I2, where I1 and I2 represent, respectively, the indices set of inequality and equality constraints. We note by e(j) the j-vector of ones, that is, e(j)=(1,1,…,1)∈ℝj and ej the jth vector of the identity matrix Im of order m.After addingm1=|I1| slack variables to the problem (3.1), we get the following problem in standard form:(3.2)max⁡z=cTx,(3.3)s.t.Ax+Hexe=b,(3.4)l≤x≤u,(3.5)0≤xe≤ue,
where A=(aij,i∈I,j∈J0)=(A1A2), b=(bi,i∈I)=(b1b2), He=(Im10(m2×m1))=(ei,i∈I1)=(e1,e2,…,em1),xe=(xp+i,i∈I1)=(xp+1,xp+2,…,xp+m1)T is the vector of the added slack variables and ue=(up+i,i∈I1)=(up+1,up+2,…,up+m1)T its upper bound vector. In order to work with finite bounds, we set up+i=M, i∈I1, that is, ue=Me(m1), where M is a finite, positive and big real number chosen carefully.Remark 3.1.
The upper bounds,up+i, i∈I1, of the added slack variables can also be deduced as follows:up+i=bi-AiThi,i∈I1, where hi is a p-vector computed with the formula
(3.6)hji={lj,ifaij>0;uj,ifaij<0;0,ifaij=0.
Indeed, from the system (3.3), we have xp+i=bi-∑j=1paijxj, i∈I1. By using the bound constraints (3.4), we get xp+i≤bi-∑j=1paijhji=bi-AiThi, i∈I1. However, the experimental study shows that it’s more efficient to set up+i,i∈I1, to a given finite big value, because for the large-scale problems, the deduction formula (3.6) given above takes much CPU time to compute bounds for the slack variables.The initialization of the primal support method consists of finding an initial support feasible solution for the problem (3.2)–(3.5). In this section, being inspired from the technique used to initialize interior point methods [36] and taking into account, the fact that the support method can start with a feasible point and a support which are independent, we suggest a single artificial variable technique to find an initial SFS. Before presenting the suggested technique, we first extend the full artificial basis technique, originally presented in [7] for standard form, to solve linear programs presented in the general form (3.1).


### 3.1. The Full Artificial Basis Technique

Letx+ be a p-vector chosen between l and u and w an m-vector such that w=b-Ax+. We consider the following subsets of I1: I1+={i∈I1:wi≥0},  I1-={i∈I1,wi<0}, and we assume without loss of generality that I1+={1,2,…,k}, with k≤m1 and I1-={k+1,k+2,…,m1}. Remark that I1+ and I1- form a partition of I1; |I1+|=k and |I1-|=m1-k.We make the following partition forxe, ue and He: xe=(xe+xe-), where(3.7)xe+=(xp+i,i∈I1+)=(xp+1,xp+2,…,xp+k)T,xe-=(xp+i,i∈I1-)=(xp+k+1,xp+k+2,…,xp+m1)T;ue=(ue+ue-), where(3.8)ue+=(up+i,i∈I1+)=(up+1,up+2,…,up+k)T,ue-=(up+i,i∈I1-)=(up+k+1,up+k+2,…,up+m1)T,
and He=(He+,He-), where(3.9)He+=(ei,i∈I1+)=Im(I,I1+)=(e1,e2,…,ek),He-=(ei,i∈I1-)=Im(I,I1-)=(ek+1,ek+2,…,em1).
Hence, the problem (3.2)–(3.5) becomes(3.10)max⁡z=cTx,(3.11)s.t.Ax+He-xe-+He+xe+=b,(3.12)l≤x≤u,(3.13)0≤xe+≤ue+,0≤xe-≤ue-.After addings=m-k artificial variables to the equations k+1,k+2,…,m of the system (3.11), where s is the number of elements of the artificial index set Ia=I1-∪I2={k+1,k+2,…,m1,m1+1,…,m}, we get the following auxiliary problem:(3.14)max⁡ψ=-e(s)Txa,s.t.Ax+He-xe-+He+xe++Haxa=b,l≤x≤u,0≤xe+≤ue+,0≤xe-≤ue-,0≤xa≤ua,
where(3.15)xa=(xp+m1+i,i=1,s¯)=(xp+m1+1,…,xp+m1+s)T
represents the artificial variables vector,(3.16)Ha=(sign⁡(wi)ei,i∈Ia)=(sign⁡(wk+1)ek+1,sign⁡(wk+2)ek+2,…,sign⁡(wm)em),ua=|w(Ia)|+δe(s)=(|wi|+δ,i∈Ia),
where δ is a real nonnegative number chosen in advance.If we putxN=(xxe-)∈ℝp+m1-k, xB=(xe+xa)∈ℝm, AN=(A,He-), AB=(He+,Ha), lN=(l0ℝm1-k), uN=(uue-), lB=0ℝk+s=0ℝm, uB=(ue+ua), cB=(0ℝk-e(s)), then we get the following auxiliary problem:(3.17)max⁡ψ=cBTxB,(3.18)s.t.ANxN+ABxB=b,(3.19)lN≤xN≤uN,lB≤xB≤uB.
The variables indices set of the auxiliary problem (3.17)–(3.19) is(3.20)J=J0∪{p+i,i∈I1}∪{p+m1+i,i=1,s¯}={1,…,p,p+1,…,p+m1,p+m1+1,…,p+m1+s}.
Let us partition this set as follows: J=JN∪JB, where(3.21)JN=J0∪{p+i,i∈I1-}={1,…,p,p+k+1,…,p+m1},JB={p+i,i∈I1+}∪{p+m1+i,i=1,s¯}={p+1,…,p+k,p+m1+1,…,p+m1+s}.
Remark that the pair {y,JB}, where(3.22)y=(yNyB)=(xNxB)=(xxe-xe+xa)=(x+0Rm1-kw(I1+)|w(Ia)|),
with w(I1+)=(wi,i∈I1+) and w(Ia)=(wi,i∈Ia), is a support feasible solution (SFS) for the auxiliary problem (3.17)–(3.19). Indeed, y lies between its lower and upper bounds: for δ≥0 we have(3.23)(l0Rm1-k0Rk0Rs)≤y=(x+0Rm1-kw(I1+)|w(Ia)|)≤(uMe(m1-k)Me(k)|w(Ia)|+δe(s)).
Furthermore, the (m×m)-matrix(3.24)AB=(e1,e2,…,ek,sign⁡(wk+1)ek+1,sign⁡(wk+2)ek+2,…,sign⁡(wm)em)
is invertible because(3.25)det⁡(AB)=∏i∈Iasign⁡(wi)=∏i=k+1msign⁡(wi)=±1,
and y verifies the main constraints: by replacing x, xe-, xe+, and xa with their values in the system (3.18), we get(3.26)ANxN+ABxB=(A,He-)(x+0Rm1-k)+(He+,Ha)(w(I1+)|w(Ia)|)=Ax++He+w(I1+)+Ha|w(Ia)|=Ax++∑i=1kwiei+∑i=k+1mwiei=Ax++Imw=Ax++w=Ax++b-Ax+=b.
Therefore, the primal support method can be initialized with the SFS {y,JB} to solve the auxiliary problem. Let {y*,JB*} be the obtained optimal SFS after the application of the primal support method to the auxiliary problem (3.17)–(3.19), where(3.27)y*=(x*xe-*xe+*xa*),ψ*=-e(s)Txa*.
If ψ*<0, then the original problem (3.2)–(3.5) is infeasible.Else, whenJB* does not contain any artificial index, then {(x*xe*),JB*} will be an SFS for the original problem (3.2)–(3.5). Otherwise, we delete artificial indices from the support JB*, and we replace them with original or slack appropriate indices, following the algebraic rule used in the simplex method.In order to initialize the primal support method for solving linear programming problems with bounded variables written in the standard form, in [7], Gabasov et al. add m artificial variables, where m represents the number of constraints. In this work, we are interested in solving the problem written in the general form (3.1), so we have added artificial variables only for equality constraints and inequality constraints with negative components of the vector w.Remark 3.2.
We haveI=I1∪I2=I1+∪I1-∪I2=I1+∪Ia. Since in the relationship (3.22), we have yB=xB=(w(I1+)|w(Ia)|) andw(I1+)≥0, we get yB=|w(I1+∪Ia)|=|w(I)|=|w|.Remark 3.3.
If we choosex+ such that x+=l or x+=u, then the vector y, given by the relationship (3.22), will be a BFS. Hence, the simplex algorithm can be initialized with this point.Remark 3.4.
Ifb1≥0ℝm1, l≤0ℝp and u≥0ℝp, two cases can occur.Case 1.
Ifb2≥0ℝm2, then we put x+=0ℝp.Case 2.
Ifb2<0ℝm2, then we put A2=-A2,  b2=-b2 and x+=0ℝp.
In the two cases, we getb≥0ℝm, w=b-Ax+=b≥0, therefore I1-=∅. Hence Ia=I1-∪I2=I2, so we add only m2 artificial variables for the equality constraints.


### 3.2. The Single Artificial Variable Technique

In order to initialize the primal support method using this technique, we first start by searching an initial support, then we proceed to the search of an initial feasible solution for the original problem.The application of the Gauss elimination method with partial pivoting to the system of equations (3.3) can give us a support JB={j1,j2,…,jr}, where r≤m. However, the experimental study realized in [33, 34] reveals that this approach takes much time in searching the initial support, that is, why it’s important to take into account the sparsity property of practical problems and apply some procedure to find a triangular basis among the columns corresponding to the original variables, that is, the columns of the matrix A. In this work, on the base of the crash procedures presented in [26, 28–30], we present a procedure to find an initial support for the problem (3.2)–(3.5).Procedure 1 (searching an initial support).
(1) We sort the columns of the(m×p-)matrix A according to the increasing order of their number of nonzero elements. Let L be the list of the sorted columns of A.
(2) Letaj0=L(r) (the rth column of L) be the first column of the list L verifying: ∃i0∈I such that
(3.28)|ai0j0|=max⁡i∈I|aij0|,|ai0j0|>pivtol,
where pivtol is a given tolerance. Hence, we put JB={j0}, Ipiv={i0}, k=1.
(3) Letjk be the index corresponding to the column (r+k) of the list L, that is, ajk=L(r+k). If ajk has zero elements in all the rows having indices in Ipiv and if ∃ik∈I such that
(3.29)|aikjk|=max⁡i∈I∖Ipiv|aijk|,|aikjk|>pivtol,
then we put JB=JB∪{jk}, Ipiv=Ipiv∪{ik}.
(4) We putk=k+1. If r+k≤p, then go to step (3), else go to step (5).
(5) We puts=0, Ia=∅, Ja=∅.
(6) For alli∈I∖Ipiv, if the ith constraint is originally an inequality constraint, then we add to JB an index corresponding to the slack variable p+i, that is, JB=JB∪{p+i}. If the ith constraint is originally an equality constraint, then we put s=s+1 and add to this latter an artificial variable xp+m1+s for which we set the lower bound to zero and the upper bound to a big and well-chosen value M. Thus, we put JB=JB∪{p+m1+s}, Ja=Ja∪{p+m1+s}, Ia=Ia∪{i}.Remark 3.5.
The inputs of Procedure1 are:(i)
the(m×p)-matrix of constraints, A;(ii)
a pivoting tolerance fixed beforehand,pivtol;(iii)
a big and well chosen valueM.
The outputs of Procedure1 are:(i)
JB={j0,j1,…,jm-1}: the initial support for the problem (3.2)–(3.5);(ii)
Ia: the indices of the constraints for which we have added artificial variables;(iii)
Ja: the indices of artificial variables added to the problem (3.2)–(3.5);(iv)
s=|Ia|=|Ja|: the number of artificial variables added to the problem (3.2)–(3.5).After the application of the procedure explained above (Procedure1) for the problem (3.2)–(3.5), we get the following linear programming problem:(3.30)max⁡z=cTx,s.t.Ax+Hexe+Haxa=b,l≤x≤u,0≤xe≤Me(m1),0≤xa≤Me(s),
where xa=(xp+m1+1,xp+m1+2,…,xn)T is the s-vector of the artificial variables added during the application of Procedure 1, with n=p+m1+s, Ha=(ei,i∈Ia) is an (m×s)-matrix.Since we have got an initial support, we can start the procedure of finding a feasible solution for the original problem.Procedure 2 (searching an initial feasible solution).
Consider the following auxiliary problem:(3.31)max⁡ψ=-xn+1-∑j∈Jaxj,s.t.Ax+Hexe+Haxa+ρxn+1=b,l≤x≤u,0≤xe≤Me(m1),0≤xa≤Me(s),0≤xn+1≤1,
where xn+1 is an artificial variable, ρ=b-Ax+, and x+ is a p-vector chosen between l and u. We remark that
(3.32)y=(xxexaxn+1)=(x+0Rm10Rs1)
is an obvious feasible solution for the auxiliary problem. Indeed,
(3.33)Ax++He0Rm1+Ha0Rs+b-Ax+=b.
Hence, we can apply the primal support method to solve the auxiliary problem (3.31) by starting with the initial SFS {y,JB}, where JB={j0,j1,…,jm-1} is the support obtained with Procedure 1. Let
(3.34)y*=(x*xe*xa*xn+1*),JB*,ψ*
be, respectively, the optimal solution, the optimal support, and the optimal objective value of the auxiliary problem (3.31).
Ifψ*<0, then the original problem (3.2)–(3.5) is infeasible.
Else, whenJB* does not contain any artificial index, then {(x*xe*),JB*} will be an SFS for the original problem (3.2)–(3.5). Otherwise, we delete the artificial indices from the support JB* and we replace them with original or slack appropriate indices, following the algebraic rule used in the simplex method.Remark 3.6.
The number of artificial variablesna=s+1 of the auxiliary problem (3.31) verifies the inequality: 1≤na≤m2+1.
The auxiliary problem will have only one artificial variable, that is,na=1, when the initial support JB found by Procedure 1 is constituted only by the original and slack variable indices (Ja=∅), and this will hold in two cases.Case 1.
When all the constraints are inequalities, that is,I2=∅.Case 2.
WhenI2≠∅ and step (4) of Procedure 1 ends with Ipiv=I2.
The casena=m2+1 holds when the step (4) of Procedure 1 stops with Ipiv=I1.Remark 3.7.
Let’s choose ap-vector x+ between l and u and two nonnegative vectors ve∈Rm1 and va∈Rs. If we put in the auxiliary problem (3.31), ρ=b-v-Ax+, with v=Heve+Hava, then the vector
(3.35)y=(xxexaxn+1)=(x+veva1)
is a feasible solution for the auxiliary problem. Indeed,
(3.36)Ax+Hexe+Haxa+ρxn+1=Ax++Heve+Hava+b-Heve-Hava-Ax+=b.
We remark that if we put ve=0ℝm1,va=0ℝs, we get v=0ℝm, then ρ=b-Ax+ and we obtain the evident feasible point that we have used in our numerical experiments, that is,
(3.37)y=(xxexaxn+1)=(x+0Rm10Rs1).
It’s important here, to cite two other special cases.
Case 1.
If we choose the nonbasic components ofy equal to their bounds, then we obtain a BFS for the auxiliary problem, therefore we can initialize the simplex algorithm with it.Case 2.
If we putve=e(m1) and va=e(s), then v=Hee(m1)+Hae(s)=∑i∈I1ei+∑i∈Iaei. Hence, the vector
(3.38)y=(xxexaxn+1)=(x+e(m1)e(s)1)=(x+e(m1+s+1))
is a feasible solution for the auxiliary problem (3.31), with ρ=b-v-Ax+.Numerical Example
Consider the following LP problem:(3.39){max⁡cTx,s.t.A1x≤b1,A2x=b2,l≤x≤u},
where
(3.40)A1=(0012200-3),b1=(33),A2=(03021023),b2=(22),c=(2,-3,-1,1)T,l=0R4,u=(10,10,10,10)T,x=(x1,x2,x3,x4)T.
We put M=1010,pivtol=10-6,x+=0ℝ4, and we apply the two-phase primal support method using the single artificial variable technique to solve the problem (3.39).Phase 1.
After adding the slack variablesx5 and x6 to the problem (3.39), we get the following problem in standard form:
(3.41){max⁡z=cTx,s.t.Ax+Hexe=b,l≤x≤u,0R2≤xe≤ue},
where
(3.42)A=(0012200-303021023),He=(10010000),b=(3322),xe=(x5x6),ue=(MM).
The application of Procedure 1 to the problem (3.41) gives us the following initial support: JB={2,1,3,5}. In order to find an initial feasible solution to the original problem, we add an artificial variable x7 to problem (3.41), and we compute the vector ρ: ρ=b-Ax+=b. Thus, we obtain the following auxiliary problem:
(3.43){max⁡ψ=-x7,s.t.Ax+Hexe+ρx7=b,l≤x≤u,0R2≤xe≤ue,0≤x7≤1}.
Remark that the SFS {y,JB}, where y=(x1,x2,x3,x4,x5,x6,x7)T=(0,0,0,0,0,0,1)T, and JB={2,1,3,5} is an obvious support feasible solution for the auxiliary problem. Hence, the primal support method can be applied to solve the problem (3.43) starting with the SFS {y,JB}.Iteration 1.
The initial support isJB={2,1,3,5}, JN={4,6,7}; the initial feasible solution and the corresponding objective function value are: y=(0,0,0,0,0,0,1)T and ψ=-1.
The vector of multipliers isπT=(0,0,0,0), and ΔNT=(0,0,1). Hence, the reduced costs vector is Δ=(0,0,0,0,0,0,1)T.
The suboptimality estimate isβ(x,JB)=Δ7(x7-l7)=1>0. So the current solution is not optimal. The set of nonoptimal indices is JNNO={7}⇒j0=7.
In order to improve the objective function, we compute the search directiond: we have d7=-sign⁡Δ7=-1, so dN=(d4,d6,d7)T=(0,0,-1)T; dB=-AB-1ANdN=(2/3,3/2,1/4,11/4)T. Hence, the search direction is d=(3/2,2/3,1/4,0,11/4,0,-1)T.
Sincedj>0,∀j∈JB, θj=(uj-xj)/dj,∀j∈JB. So θ2=15, θ1=20/3,θ3=40andθ5=4M/11⇒θj1=θ1=20/3, and θj0=θ7=x7-l7=1. Hence, the primal step length is θ0=min⁡{θ1,θ7}=1=θ7. The new solution is  y̅=y+θ0d=(3/2,2/3,1/4,0,11/4,0,0)T, and the new objective value is ψ̅=ψ+θ0|Δ7|=0⇒y is optimal for the auxiliary problem. Therefore, the pair {x,JB}, where x=(3/2,2/3,1/4,0,11/4,0)T and JB={2,1,3,5}, is an SFS for the problem (3.41).Phase 2.
Iteration 1.
The initial support isJB={2,1,3,5}, and JN={4,6}.
The initial feasible solution isx=(3/2,2/3,1/4,0,11/4,0)T, and the objective value is z=3/4.
The multipliers vector and the reduced costs vector are:πT=(0,5/4,-1,-1/2) and Δ=(0,0,0,-33/4,0,5/4)T. The suboptimality estimate is β(x,JB)=Δ4(x4-u4)+Δ6(x6-l6)=165/2>0. So the initial solution is not optimal.
The set of nonoptimal indices isJNNO={4}⇒ the entering index is j0=4.
The search direction isd=(3/2,-2/3,-9/4,1,1/4,0)T.
The primal step length isθ0=min⁡{θ3,θ4}=min⁡{1/9,1}=1/9=θ3. So the leaving index is j1=3. The new solution is x̅=x+θ0d=(5/3,16/27,0,1/9,25/9,0)T, and z̅=z+θ0|Δ4|=5/3.Iteration 2.
The current support isJB={2,1,4,5}, and JN={3,6}.
The current feasible solution isx=(5/3,16/27,0,1/9,25/9,0)T, and the objective value is z=5/3.
The multipliers vector and the reduced costs vector are:πT=(0,1/3,-1,4/3) and Δ=(0,0,11/3,0,0,1/3)T. The suboptimality estimate is β(x,JB)=Δ3(x3-l3)+Δ6(x6-l6)=0.
Therefore, the optimal solution and the optimal objective value of the original problem (3.39) are
(3.44)x*=(53,1627,0,19)T,z*=53.


## 3.1. The Full Artificial Basis Technique

Letx+ be a p-vector chosen between l and u and w an m-vector such that w=b-Ax+. We consider the following subsets of I1: I1+={i∈I1:wi≥0},  I1-={i∈I1,wi<0}, and we assume without loss of generality that I1+={1,2,…,k}, with k≤m1 and I1-={k+1,k+2,…,m1}. Remark that I1+ and I1- form a partition of I1; |I1+|=k and |I1-|=m1-k.We make the following partition forxe, ue and He: xe=(xe+xe-), where(3.7)xe+=(xp+i,i∈I1+)=(xp+1,xp+2,…,xp+k)T,xe-=(xp+i,i∈I1-)=(xp+k+1,xp+k+2,…,xp+m1)T;ue=(ue+ue-), where(3.8)ue+=(up+i,i∈I1+)=(up+1,up+2,…,up+k)T,ue-=(up+i,i∈I1-)=(up+k+1,up+k+2,…,up+m1)T,
and He=(He+,He-), where(3.9)He+=(ei,i∈I1+)=Im(I,I1+)=(e1,e2,…,ek),He-=(ei,i∈I1-)=Im(I,I1-)=(ek+1,ek+2,…,em1).
Hence, the problem (3.2)–(3.5) becomes(3.10)max⁡z=cTx,(3.11)s.t.Ax+He-xe-+He+xe+=b,(3.12)l≤x≤u,(3.13)0≤xe+≤ue+,0≤xe-≤ue-.After addings=m-k artificial variables to the equations k+1,k+2,…,m of the system (3.11), where s is the number of elements of the artificial index set Ia=I1-∪I2={k+1,k+2,…,m1,m1+1,…,m}, we get the following auxiliary problem:(3.14)max⁡ψ=-e(s)Txa,s.t.Ax+He-xe-+He+xe++Haxa=b,l≤x≤u,0≤xe+≤ue+,0≤xe-≤ue-,0≤xa≤ua,
where(3.15)xa=(xp+m1+i,i=1,s¯)=(xp+m1+1,…,xp+m1+s)T
represents the artificial variables vector,(3.16)Ha=(sign⁡(wi)ei,i∈Ia)=(sign⁡(wk+1)ek+1,sign⁡(wk+2)ek+2,…,sign⁡(wm)em),ua=|w(Ia)|+δe(s)=(|wi|+δ,i∈Ia),
where δ is a real nonnegative number chosen in advance.If we putxN=(xxe-)∈ℝp+m1-k, xB=(xe+xa)∈ℝm, AN=(A,He-), AB=(He+,Ha), lN=(l0ℝm1-k), uN=(uue-), lB=0ℝk+s=0ℝm, uB=(ue+ua), cB=(0ℝk-e(s)), then we get the following auxiliary problem:(3.17)max⁡ψ=cBTxB,(3.18)s.t.ANxN+ABxB=b,(3.19)lN≤xN≤uN,lB≤xB≤uB.
The variables indices set of the auxiliary problem (3.17)–(3.19) is(3.20)J=J0∪{p+i,i∈I1}∪{p+m1+i,i=1,s¯}={1,…,p,p+1,…,p+m1,p+m1+1,…,p+m1+s}.
Let us partition this set as follows: J=JN∪JB, where(3.21)JN=J0∪{p+i,i∈I1-}={1,…,p,p+k+1,…,p+m1},JB={p+i,i∈I1+}∪{p+m1+i,i=1,s¯}={p+1,…,p+k,p+m1+1,…,p+m1+s}.
Remark that the pair {y,JB}, where(3.22)y=(yNyB)=(xNxB)=(xxe-xe+xa)=(x+0Rm1-kw(I1+)|w(Ia)|),
with w(I1+)=(wi,i∈I1+) and w(Ia)=(wi,i∈Ia), is a support feasible solution (SFS) for the auxiliary problem (3.17)–(3.19). Indeed, y lies between its lower and upper bounds: for δ≥0 we have(3.23)(l0Rm1-k0Rk0Rs)≤y=(x+0Rm1-kw(I1+)|w(Ia)|)≤(uMe(m1-k)Me(k)|w(Ia)|+δe(s)).
Furthermore, the (m×m)-matrix(3.24)AB=(e1,e2,…,ek,sign⁡(wk+1)ek+1,sign⁡(wk+2)ek+2,…,sign⁡(wm)em)
is invertible because(3.25)det⁡(AB)=∏i∈Iasign⁡(wi)=∏i=k+1msign⁡(wi)=±1,
and y verifies the main constraints: by replacing x, xe-, xe+, and xa with their values in the system (3.18), we get(3.26)ANxN+ABxB=(A,He-)(x+0Rm1-k)+(He+,Ha)(w(I1+)|w(Ia)|)=Ax++He+w(I1+)+Ha|w(Ia)|=Ax++∑i=1kwiei+∑i=k+1mwiei=Ax++Imw=Ax++w=Ax++b-Ax+=b.
Therefore, the primal support method can be initialized with the SFS {y,JB} to solve the auxiliary problem. Let {y*,JB*} be the obtained optimal SFS after the application of the primal support method to the auxiliary problem (3.17)–(3.19), where(3.27)y*=(x*xe-*xe+*xa*),ψ*=-e(s)Txa*.
If ψ*<0, then the original problem (3.2)–(3.5) is infeasible.Else, whenJB* does not contain any artificial index, then {(x*xe*),JB*} will be an SFS for the original problem (3.2)–(3.5). Otherwise, we delete artificial indices from the support JB*, and we replace them with original or slack appropriate indices, following the algebraic rule used in the simplex method.In order to initialize the primal support method for solving linear programming problems with bounded variables written in the standard form, in [7], Gabasov et al. add m artificial variables, where m represents the number of constraints. In this work, we are interested in solving the problem written in the general form (3.1), so we have added artificial variables only for equality constraints and inequality constraints with negative components of the vector w.Remark 3.2.
We haveI=I1∪I2=I1+∪I1-∪I2=I1+∪Ia. Since in the relationship (3.22), we have yB=xB=(w(I1+)|w(Ia)|) andw(I1+)≥0, we get yB=|w(I1+∪Ia)|=|w(I)|=|w|.Remark 3.3.
If we choosex+ such that x+=l or x+=u, then the vector y, given by the relationship (3.22), will be a BFS. Hence, the simplex algorithm can be initialized with this point.Remark 3.4.
Ifb1≥0ℝm1, l≤0ℝp and u≥0ℝp, two cases can occur.Case 1.
Ifb2≥0ℝm2, then we put x+=0ℝp.Case 2.
Ifb2<0ℝm2, then we put A2=-A2,  b2=-b2 and x+=0ℝp.
In the two cases, we getb≥0ℝm, w=b-Ax+=b≥0, therefore I1-=∅. Hence Ia=I1-∪I2=I2, so we add only m2 artificial variables for the equality constraints.


## 3.2. The Single Artificial Variable Technique

In order to initialize the primal support method using this technique, we first start by searching an initial support, then we proceed to the search of an initial feasible solution for the original problem.The application of the Gauss elimination method with partial pivoting to the system of equations (3.3) can give us a support JB={j1,j2,…,jr}, where r≤m. However, the experimental study realized in [33, 34] reveals that this approach takes much time in searching the initial support, that is, why it’s important to take into account the sparsity property of practical problems and apply some procedure to find a triangular basis among the columns corresponding to the original variables, that is, the columns of the matrix A. In this work, on the base of the crash procedures presented in [26, 28–30], we present a procedure to find an initial support for the problem (3.2)–(3.5).Procedure 1 (searching an initial support).
(1) We sort the columns of the(m×p-)matrix A according to the increasing order of their number of nonzero elements. Let L be the list of the sorted columns of A.
(2) Letaj0=L(r) (the rth column of L) be the first column of the list L verifying: ∃i0∈I such that
(3.28)|ai0j0|=max⁡i∈I|aij0|,|ai0j0|>pivtol,
where pivtol is a given tolerance. Hence, we put JB={j0}, Ipiv={i0}, k=1.
(3) Letjk be the index corresponding to the column (r+k) of the list L, that is, ajk=L(r+k). If ajk has zero elements in all the rows having indices in Ipiv and if ∃ik∈I such that
(3.29)|aikjk|=max⁡i∈I∖Ipiv|aijk|,|aikjk|>pivtol,
then we put JB=JB∪{jk}, Ipiv=Ipiv∪{ik}.
(4) We putk=k+1. If r+k≤p, then go to step (3), else go to step (5).
(5) We puts=0, Ia=∅, Ja=∅.
(6) For alli∈I∖Ipiv, if the ith constraint is originally an inequality constraint, then we add to JB an index corresponding to the slack variable p+i, that is, JB=JB∪{p+i}. If the ith constraint is originally an equality constraint, then we put s=s+1 and add to this latter an artificial variable xp+m1+s for which we set the lower bound to zero and the upper bound to a big and well-chosen value M. Thus, we put JB=JB∪{p+m1+s}, Ja=Ja∪{p+m1+s}, Ia=Ia∪{i}.Remark 3.5.
The inputs of Procedure1 are:(i)
the(m×p)-matrix of constraints, A;(ii)
a pivoting tolerance fixed beforehand,pivtol;(iii)
a big and well chosen valueM.
The outputs of Procedure1 are:(i)
JB={j0,j1,…,jm-1}: the initial support for the problem (3.2)–(3.5);(ii)
Ia: the indices of the constraints for which we have added artificial variables;(iii)
Ja: the indices of artificial variables added to the problem (3.2)–(3.5);(iv)
s=|Ia|=|Ja|: the number of artificial variables added to the problem (3.2)–(3.5).After the application of the procedure explained above (Procedure1) for the problem (3.2)–(3.5), we get the following linear programming problem:(3.30)max⁡z=cTx,s.t.Ax+Hexe+Haxa=b,l≤x≤u,0≤xe≤Me(m1),0≤xa≤Me(s),
where xa=(xp+m1+1,xp+m1+2,…,xn)T is the s-vector of the artificial variables added during the application of Procedure 1, with n=p+m1+s, Ha=(ei,i∈Ia) is an (m×s)-matrix.Since we have got an initial support, we can start the procedure of finding a feasible solution for the original problem.Procedure 2 (searching an initial feasible solution).
Consider the following auxiliary problem:(3.31)max⁡ψ=-xn+1-∑j∈Jaxj,s.t.Ax+Hexe+Haxa+ρxn+1=b,l≤x≤u,0≤xe≤Me(m1),0≤xa≤Me(s),0≤xn+1≤1,
where xn+1 is an artificial variable, ρ=b-Ax+, and x+ is a p-vector chosen between l and u. We remark that
(3.32)y=(xxexaxn+1)=(x+0Rm10Rs1)
is an obvious feasible solution for the auxiliary problem. Indeed,
(3.33)Ax++He0Rm1+Ha0Rs+b-Ax+=b.
Hence, we can apply the primal support method to solve the auxiliary problem (3.31) by starting with the initial SFS {y,JB}, where JB={j0,j1,…,jm-1} is the support obtained with Procedure 1. Let
(3.34)y*=(x*xe*xa*xn+1*),JB*,ψ*
be, respectively, the optimal solution, the optimal support, and the optimal objective value of the auxiliary problem (3.31).
Ifψ*<0, then the original problem (3.2)–(3.5) is infeasible.
Else, whenJB* does not contain any artificial index, then {(x*xe*),JB*} will be an SFS for the original problem (3.2)–(3.5). Otherwise, we delete the artificial indices from the support JB* and we replace them with original or slack appropriate indices, following the algebraic rule used in the simplex method.Remark 3.6.
The number of artificial variablesna=s+1 of the auxiliary problem (3.31) verifies the inequality: 1≤na≤m2+1.
The auxiliary problem will have only one artificial variable, that is,na=1, when the initial support JB found by Procedure 1 is constituted only by the original and slack variable indices (Ja=∅), and this will hold in two cases.Case 1.
When all the constraints are inequalities, that is,I2=∅.Case 2.
WhenI2≠∅ and step (4) of Procedure 1 ends with Ipiv=I2.
The casena=m2+1 holds when the step (4) of Procedure 1 stops with Ipiv=I1.Remark 3.7.
Let’s choose ap-vector x+ between l and u and two nonnegative vectors ve∈Rm1 and va∈Rs. If we put in the auxiliary problem (3.31), ρ=b-v-Ax+, with v=Heve+Hava, then the vector
(3.35)y=(xxexaxn+1)=(x+veva1)
is a feasible solution for the auxiliary problem. Indeed,
(3.36)Ax+Hexe+Haxa+ρxn+1=Ax++Heve+Hava+b-Heve-Hava-Ax+=b.
We remark that if we put ve=0ℝm1,va=0ℝs, we get v=0ℝm, then ρ=b-Ax+ and we obtain the evident feasible point that we have used in our numerical experiments, that is,
(3.37)y=(xxexaxn+1)=(x+0Rm10Rs1).
It’s important here, to cite two other special cases.
Case 1.
If we choose the nonbasic components ofy equal to their bounds, then we obtain a BFS for the auxiliary problem, therefore we can initialize the simplex algorithm with it.Case 2.
If we putve=e(m1) and va=e(s), then v=Hee(m1)+Hae(s)=∑i∈I1ei+∑i∈Iaei. Hence, the vector
(3.38)y=(xxexaxn+1)=(x+e(m1)e(s)1)=(x+e(m1+s+1))
is a feasible solution for the auxiliary problem (3.31), with ρ=b-v-Ax+.Numerical Example
Consider the following LP problem:(3.39){max⁡cTx,s.t.A1x≤b1,A2x=b2,l≤x≤u},
where
(3.40)A1=(0012200-3),b1=(33),A2=(03021023),b2=(22),c=(2,-3,-1,1)T,l=0R4,u=(10,10,10,10)T,x=(x1,x2,x3,x4)T.
We put M=1010,pivtol=10-6,x+=0ℝ4, and we apply the two-phase primal support method using the single artificial variable technique to solve the problem (3.39).Phase 1.
After adding the slack variablesx5 and x6 to the problem (3.39), we get the following problem in standard form:
(3.41){max⁡z=cTx,s.t.Ax+Hexe=b,l≤x≤u,0R2≤xe≤ue},
where
(3.42)A=(0012200-303021023),He=(10010000),b=(3322),xe=(x5x6),ue=(MM).
The application of Procedure 1 to the problem (3.41) gives us the following initial support: JB={2,1,3,5}. In order to find an initial feasible solution to the original problem, we add an artificial variable x7 to problem (3.41), and we compute the vector ρ: ρ=b-Ax+=b. Thus, we obtain the following auxiliary problem:
(3.43){max⁡ψ=-x7,s.t.Ax+Hexe+ρx7=b,l≤x≤u,0R2≤xe≤ue,0≤x7≤1}.
Remark that the SFS {y,JB}, where y=(x1,x2,x3,x4,x5,x6,x7)T=(0,0,0,0,0,0,1)T, and JB={2,1,3,5} is an obvious support feasible solution for the auxiliary problem. Hence, the primal support method can be applied to solve the problem (3.43) starting with the SFS {y,JB}.Iteration 1.
The initial support isJB={2,1,3,5}, JN={4,6,7}; the initial feasible solution and the corresponding objective function value are: y=(0,0,0,0,0,0,1)T and ψ=-1.
The vector of multipliers isπT=(0,0,0,0), and ΔNT=(0,0,1). Hence, the reduced costs vector is Δ=(0,0,0,0,0,0,1)T.
The suboptimality estimate isβ(x,JB)=Δ7(x7-l7)=1>0. So the current solution is not optimal. The set of nonoptimal indices is JNNO={7}⇒j0=7.
In order to improve the objective function, we compute the search directiond: we have d7=-sign⁡Δ7=-1, so dN=(d4,d6,d7)T=(0,0,-1)T; dB=-AB-1ANdN=(2/3,3/2,1/4,11/4)T. Hence, the search direction is d=(3/2,2/3,1/4,0,11/4,0,-1)T.
Sincedj>0,∀j∈JB, θj=(uj-xj)/dj,∀j∈JB. So θ2=15, θ1=20/3,θ3=40andθ5=4M/11⇒θj1=θ1=20/3, and θj0=θ7=x7-l7=1. Hence, the primal step length is θ0=min⁡{θ1,θ7}=1=θ7. The new solution is  y̅=y+θ0d=(3/2,2/3,1/4,0,11/4,0,0)T, and the new objective value is ψ̅=ψ+θ0|Δ7|=0⇒y is optimal for the auxiliary problem. Therefore, the pair {x,JB}, where x=(3/2,2/3,1/4,0,11/4,0)T and JB={2,1,3,5}, is an SFS for the problem (3.41).Phase 2.
Iteration 1.
The initial support isJB={2,1,3,5}, and JN={4,6}.
The initial feasible solution isx=(3/2,2/3,1/4,0,11/4,0)T, and the objective value is z=3/4.
The multipliers vector and the reduced costs vector are:πT=(0,5/4,-1,-1/2) and Δ=(0,0,0,-33/4,0,5/4)T. The suboptimality estimate is β(x,JB)=Δ4(x4-u4)+Δ6(x6-l6)=165/2>0. So the initial solution is not optimal.
The set of nonoptimal indices isJNNO={4}⇒ the entering index is j0=4.
The search direction isd=(3/2,-2/3,-9/4,1,1/4,0)T.
The primal step length isθ0=min⁡{θ3,θ4}=min⁡{1/9,1}=1/9=θ3. So the leaving index is j1=3. The new solution is x̅=x+θ0d=(5/3,16/27,0,1/9,25/9,0)T, and z̅=z+θ0|Δ4|=5/3.Iteration 2.
The current support isJB={2,1,4,5}, and JN={3,6}.
The current feasible solution isx=(5/3,16/27,0,1/9,25/9,0)T, and the objective value is z=5/3.
The multipliers vector and the reduced costs vector are:πT=(0,1/3,-1,4/3) and Δ=(0,0,11/3,0,0,1/3)T. The suboptimality estimate is β(x,JB)=Δ3(x3-l3)+Δ6(x6-l6)=0.
Therefore, the optimal solution and the optimal objective value of the original problem (3.39) are
(3.44)x*=(53,1627,0,19)T,z*=53.


## 4. Experimental Results

In order to perform a numerical comparison between the simplex method and the different variants of the support method, we have programmed them under the MATLAB programming language version 7.4.0 (R2007a).Since the test problems available in the NETLIB library present bounds on the variables which can be infinite, we have built a sample of 68 test problems having finite bounds and a same optimal objective value as those of NETLIB. The principle of the building process is as follows: letxl and xu be the obtained bounds after the conversion of a given test problem from the “mps” format to the “mat” format and x* the optimal solution. We put xmin⁡=min⁡{xj*,j=1,p¯} and xmax⁡=max⁡{xj*,j=1,p¯}. Thus, the constraint matrix and the objective coefficients vector of the new problem remains the same as those of NETLIB, but the new lower bounds l̃ and upper bounds ũ will be changed as follows:(4.1)l̃j={xmin⁡,ifxlj=-∞;xlj,ifxlj>-∞,ũj={xmax⁡,ifxuj=+∞;xuj,ifxuj<+∞.
Table 1 represents the listing of the main characteristics of the considered 68 test problems, where NC, NV, NEC, and D represent, respectively, the number of constraints, the number of variables, the number of equality constraints, and the density of the constraints matrix (the ratio between the number of nonzero elements and the number of total elements of the constraints matrix, multiplied by 100).Table 1
Characteristics of the test problems.
LPNCNVNECD(%)LPNCNVNECD(%)(1) afiro273289,61(35) fffff8005248543501,39(2) kb243411616,20(36) grow224409464401,98(3) sc50a5048205,42(37) standata35910751600,79(4) sc50b5048204,92(38) scsd614713501472,17(5) adlittle5697157,05(39) standmps46710752680,73(6) blend7483437,99(40) standgub36111841620,73(7) share2b9679139,15(41) scfxm26609143740,86(8) sc105105103452,59(42) scrs849011693840,56(9) stocfor1117111633,44(43) gfrd-pnc61610925480,35(10) scagr7129140842,33(44) bnl164311752320,68(11) israel17414209,18(45) ship04s40214583540,74(12) share1b117225894,37(46) fit1p62716776270,94(13) vtpbase198203552,26(47) modszk168716206870,29(14) sc205205203911,32(48) shell53617755340,37(15) beaconfd1732621407,45(49) scfxm399013715610,57(16) grow71403011406,20(50) 25fv4782115715160,81(17) lotfi153308952,29(51) ship04l40221183540,74(18) brandy2202491663,92(52) wood1p244259424311,10(19) e226223282334,10(53) sctap2109018804700,33(20) bore3d2333152141,95(54) ganges1309168112840,31(21) capri2713531421,85(55) scsd839727503970,79(22) agg488163363,03(56) ship08s77823876980,38(23) scorpion3883582801,03(57) ship12s1151276310450,26(24) bandm3054723051,73(58) ctap3148024806200,24(25) sctap13004801201,18(59) stocfor22157203111430,19(26) scfxm13304571871,72(60) czprob92935238900,33(27) agg2516302602,75(61) ship08l77842836980,38(28) agg3516302602,76(62) bnl22324348913270,17(29) stair3564672092,32(63) ship12l1151542710450,26(30) scsd177760774,08(64) d2q06c2171516715070,29(31) grow153006453002,90(65) woodw1098840510850,41(32) scagr254715003000,66(66) truss1000880610000,32(33) fit1d241026154,40(67) fit2d2510500149,10(34) finnis497614470,76(68) maros-r73136940831360,49There exist many LP solvers which include a primal simplex algorithm package for solving LP problems, we cite: commercial solvers such as CPLEX [37], MINOS [28] and open-source solvers such as LP_SOLVE [38], GLPK [39], and LPAKO [30]. The LP_SOLVE solver is well documented and widely used in applications and numerical experiments [40, 41]. Moreover, the latter has a mex interface called mxlpsolve which can be easily installed and used with the MATLAB language. That is why we compare our algorithm with the primal simplex algorithm implemented in LP_SOLVE. However, MATLAB is an interpreted language, so it takes much time in solving problems than the native language C++ used for the implementation of LP_SOLVE. For this reason, the numerical comparison carried out between our method and LP_SOLVE concerns only the iterations number. In order to compare our algorithm with the primal simplex algorithm in terms of CPU time, we have developed our own simplex implementation. The latter is based on the one given in [42].In order to compare the different solvers, we have given them the following names.Solver1. SupportSav
The two-phase support method, where we use the suggested single artificial variable technique in the first phase, that is, the initial support is found by applying Procedure1, and the feasible solution is found by applying Procedure 2.Solver2. SupportFab
The two-phase support method, where we use the full artificial basis technique presented above in the first phase.Solver3. SimplexFab
The two-phase primal simplex method, where we use the full artificial basis technique presented above in the first phase (we use the BFS presented in Remark3.3, with x+=l̃).Solver4. LP_Solve_PSA
The primal simplex method implemented in the open-source LP solver LP_SOLVE. The different options are (Primal-Primal, PRICER_DANTZIG, No Scaling, No Presolving). For setting these options, the following MATLAB commands are used.(i)
mxlpsolve(“set_simplextype”, lp, 5);% (Phase 1: Primal, Phase 2: Primal).(ii)
mxlpsolve(“set_pivoting”, lp, 1);% (Dantzig’s rule).(iii)
mxlpsolve(“set_scaling”, lp, 0);% (No scaling).The Lagrange multipliers vector and the basic components of the search direction in the first three solvers are computed by solving the two systems of linear equations:ABTπ=cB and ABdB=-aj0dj0, using the LU factorization of AB [43]. The updating of the L and U factors is done, in each iteration, using the Sherman-Morrison-Woodbury formula [42].In the different implementations, we have used the Dantzig’s rule to choose the entering variable. To prevent cycling, the EXPAND procedure [44] is used.We have solved the 68 NETLIB test problems listed in Table1 with the solvers mentioned above on a personal computer with Intel (R) Core (TM) 2 Quad CPU Q6600 2.4 GHz, 4 GB of RAM, working under the Windows XP SP2 operating system, by setting the different tolerances appropriately. We recall that the initial point x+, needed in the three methods (Solvers 1, 2 and 3), must be located between its lower and upper bounds, so after giving it some values and observing the variation of the CPU time, we have concluded that it’s more efficient to set x+=l̃. The upper bounds for the slack and artificial variables added for the methods SupportSav, SupportFab, and SimplexFab are put to M=1010.Numerical results are reported in Tables2, 3, 4, and 5, where nit1, nit, and cput represent respectively the phase one iterations number, the total iterations number, and the CPU time in seconds of each method necessary to find the optimal objective values presented in [25] or [45]; cput1, shown in columns 2 and 7 of Table 2, represents the CPU time necessary to find the initial support with Procedure 1. The number of artificial variables added to the original problem in our implementations is listed in Table 6.Table 2
CPU time and iterations number for Solver1 (SupportSav).
LPcput1cputnit1nitLPcput1cputnit1nitafiro0,000,021518fffff8000,144,7513391707kb20,000,052995grow220,422,7018917sc50a0,000,022738standata0,112,19635806sc50b0,030,051933scsd60,051,1787425adlittle0,020,0825118standmps0,163,179981064blend0,000,055981standgub0,112,09616741share2b0,000,11134170scfxm20,274,029901344sc1050,020,066184scrs80,442,27173707stocfor10,020,065674gfrd-pnc0,662,92510929scagr70,020,11114138bnl10,3113,7835413902israel0,020,59272589ship04s0,051,44324455share1b0,020,38300450fit1p0,883,364673vtpbase0,031,03942989modszk10,916,833221759sc2050,080,23128169shell0,472,20280525beaconfd0,060,23133161scfxm30,619,2015462137grow70,050,271822925fv470,3362,47537612998lotfi0,030,2779228ship04l0,082,20324521brandy0,030,58419461wood1p0,053,17383450e2260,050,89165690sctap21,486,092201015bore3d0,060,2397140ganges1,838,6613111645capri0,061,05636741scsd80,343,50212643agg0,050,2272127ship08s0,174,42656848scorpion0,090,64288316ship12s0,318,309681309bandm0,131,03360630sctap32,7310,082511237sctap10,130,61129340stocfor24,0817,3113252061scfxm10,091,05455620czprob0,1323,5524773373agg20,090,3840169ship08l0,178,236561026agg30,090,4136178bnl24,1988,1732568840stair0,131,33452701ship12l0,3817,369791679scsd10,020,3148188d2q06c5,14643,03662546311grow150,201,2318573woodw1,3149,5921073003scagr250,190,89309414truss2,25153,024489241fit1d0,033,36141427fit2d0,16290,911113593finnis0,172,41343994maros-r721,30100,3417573480Table 3
CPU time and iterations number for Solver2 (SupportFab).
LPcputnit1nitLPcputnit1nitafiro0,021018fffff8004,4813341659kb20,0684143grow223,594421427sc50a0,022649standata1,22427479sc50b0,022652scsd61,50203554adlittle0,0935127standmps2,00667718blend0,0692118standgub1,28419470share2b0,0896129scfxm25,1613841772sc1050,0656112scrs83,096201112stocfor10,056482gfrd-pnc3,117191095scagr70,19242285bnl111,2327523235israel0,369346ship04s1,67479535share1b0,33241394fit1p12,4716253067vtpbase1,029511001modszk18,5910382325sc2050,22112232shell2,78568757beaconfd0,17138170scfxm310,3918532464grow70,3614233725fv4750,19356210694lotfi0,28150261ship04l3,27706789brandy0,66520566wood1p3,06351426e2260,94160757sctap27,788961452bore3d0,33226282ganges9,5816371979capri0,91527678scsd87,485561432agg0,1977118ship08s5,739131125scorpion0,73378423ship12s9,4813341478bandm2,2210951339sctap313,5011831902sctap10,59292375stocfor211,2311441655scfxm11,17552723czprob17,9116472544agg20,2878169ship08l14,6314041806agg30,3380181bnl2123,72720912614stair2,178601128ship12l28,7724632719scsd10,3881226d2q06c644,20924045670grow151,53301843woodw45,8019162752scagr254,0518342129truss180,47132011069fit1d3,52101469fit2d297,031113574finnis2,413951083maros-r7137,1945195612Table 4
CPU time and iterations number for Solver3 (SimplexFab).
LPcputnit1nitLPcputnit1nitafiro0,021018fffff8005,3815131920kb20,0568125grow223,384411366sc50a0,022651standata5,4526092646sc50b0,032652scsd61,31203524adlittle0,0633123standmps7,1932173232blend0,0691117standgub5,8126102627share2b0,0896131scfxm24,8812451602sc1050,0856112scrs82,69529975stocfor10,056482gfrd-pnc3,056721035scagr70,23276318bnl111,0627183100israel0,349348ship04s1,69479534share1b0,33234383fit1p11,9817163001vtpbase3,0339214145modszk18,4711002275sc2050,22111224shell4,726461507beaconfd0,17138170scfxm310,5519012420grow70,3414131725fv4741,2333508974lotfi0,22155235ship04l3,23709784brandy0,75501569wood1p3,11355426e2260,89156713sctap27,888941494bore3d0,52431486ganges9,9516571991capri4,1937693917scsd86,275361276agg0,2088133ship08s5,779121121scorpion0,73373417ship12s9,6613331477bandm2,1310341251sctap313,2211761879sctap10,63295374stocfor211,5511441635scfxm11,08513656czprob20,0321643027agg20,3076167ship08l14,3614041800agg30,3079179bnl2131,38678212918stair2,7812161475ship12l28,6924622715scsd10,3481236d2q06c539,45870839227grow151,47301816woodw41,1418442550scagr253,0812991563truss150,5313599845fit1d3,06101420fit2d275,031113535finnis2,535201190maros-r7132,1144345477Table 5
Iterations number for Solver4 (LP_SOLVE_PSA).
LPnitLPnitLPnitLPnitafiro17brandy1215fffff8001771wood1p352kb296e226909grow221369sctap21465sc50a50bore3d193standata221ganges1893sc50b51capri835scsd6594scsd86165adlittle172agg583standmps454ship08s702blend129scorpion386standgub210ship12s1249share2b185bandm1040scfxm21272sctap31864sc105105sctap1359scrs81170stocfor23317stocfor1124scfxm1592gfrd-pnc895czprob3422scagr7184agg2597bnl13810ship08l1153israel606agg3634ship04s485bnl29579share1b379stair936fit1p2873ship12l2197vtpbase782scsd1249modszk11736d2q06c39828sc205250grow15987shell754woodw2179beaconfd110scagr25898scfxm31962truss14046grow7328fit1d219625fv4712767fit2d14249lotfi296finnis999ship04l733maros-r74474Table 6
The number of artificial variables added in Phase one of the three Solvers.
LPSolver1Solver2Solver3LPSolver1Solver2Solver3afiro788fffff800304384384kb271616grow2217440440sc50a192020standata121171171sc50b152020scsd620147147adlittle91616standmps229279279blend334343standgub122173173share2b101313scfxm2247374374sc105414545scrs865386386stocfor1506363gfrd-pnc89548548scagr7479191bnl1171239239israel188ship04s355354354share1b628989fit1p1627627vtpbase408181modszk1112687687sc205829191shell151534534beaconfd100140140scfxm3370561561grow71714014025fv47417520520lotfi349595ship04l355354354brandy127166166wood1p234244244e226284646sctap21521521bore3d103214214ganges67812841284capri125170170scsd845397397agg16363ship08s699698698scorpion245333333ship12s104610451045bandm138305305sctap31682682sctap11154154stocfor288911431143scfxm1124187187czprob870890890agg216060ship08l699698698agg336060bnl286413351335stair86301301ship12l104610451045scsd1137777d2q06c55815331533grow1517300300woodw60810891089scagr25173325325truss6210001000fit1d211fit2d211finnis24129129maros-r7131363136Sum132342738927389In order to compare the different solvers, we have ordered the problems according to the increasing order of the sum of the constraints and variables numbers (NC+NV), as they are presented in the different tables and we have computed the CPU time ratio (Table7) and the iteration ratio (Table 8) of the different solvers over the solver SupportSav (Solver1), where for each test problem, we have(4.2)cputr1j=cput(Solverj)cput(Solver1),j=2,3¯,nitr1j=nit(Solverj)nit(Solver1),j=2,4¯.
The above ratios (see [46]) indicate how many times SupportSav is better than the other solvers. Ratios greater than one mean that our method is more efficient for the considered problem: let S be one of the solvers 2, 3, and 4. If cputr1S≥1, (resp., nitr1S≥1), then our solver (Solver1) is competitive with SolverS in terms of CPU time, (resp., in terms of iterations number). Ratios greater or equal to one are mentioned with the bold character in Tables 7 and 8.Table 7
CPU time ratio of the different solvers over SupportSav.
LP∖Ratiocputr12cputr13LP∖Ratiocputr12cputr13afiro1,0001,000fffff8000,9431,133kb21,2001,000grow221,3301,252sc50a1,0001,000standata0,5572,489sc50b0,4000.600scsd61,2821,120adlittle1,1250,750standmps0,6312,268blend1,2001,200standgub0,6122,780share2b0,7270,727scfxm21,2841,214sc1051,0001,333scrs81,3611,185stocfor10,8330,833gfrd-pnc1,0651,045scagr71,7272,091bnl10,8150,803israel0,6100,576ship04s1,1601,174share1b0,8680,868fit1p3,7113,565vtpbase0,9902,942modszk11,2581,240sc2050,9570,957shell1,2642,145beaconfd0,7390,739scfxm31,1291,147grow71,3331,25925fv470,8030,660lotfi1,0370,815ship04l1,4861,468brandy1,1381,293wood1p0,9650,981e2261,0561,000sctap21,2781,294bore3d1,4352,261ganges1,1061,149capri0,8673,990scsd82,1371,791agg0,8640,909ship08s1,2961,305scorpion1,1411,141ship12s1,1421,164bandm2,1552,068sctap31,3391,312sctap10,9671,033stocfor20,6490,667scfxm11,1141,029czprob0,7610,851agg20,7370,789ship08l1,7781,745agg30,8050,732bnl21,4031,490stair1,6322,090ship12l1,6571,653scsd11,2261,097d2q06c1,0020,839grow151,2441,195woodw0,9240,830scagr254,5513,461truss1,1790,984fit1d1,0480,911fit2d1,0210,945finnis1,0001,050maros-r71,3671,317Mean1,201,35Table 8
Iteration ratio of the different solvers over SupportSav.
LP∖Rationitr12nitr13nitr14LP∖Rationitr12nitr13nitr14afiro1,0001,0000,944fffff8000,9721,1251,037kb21,5051,3161,011grow221,5561,4901,493sc50a1,2891,3421,316standata0,5943,2830,274sc50b1,5761,5761,545scsd61,3041,2331,398adlittle1,0761,0421,458standmps0,6753,0380,427blend1,4571,4441,593standgub0,6343,5450,283share2b0,7590,7711,088scfxm21,3181,1920,946sc1051,3331,3331,250scrs81,5731,3791,655stocfor11,1081,1081,676gfrd-pnc1,1791,1140,963scagr72,0652,3041,333bnl10,8290,7940,976israel0,5870,5911,029ship04s1,1761,1741,066share1b0,8760,8510,842fit1p4,5574,4594,269vtpbase1,0124,1910,791modszk11,3221,2930,987sc2051,3731,3251,479shell1,4422,8701,436beaconfd1,0561,0560,683scfxm31,1531,1320,918grow71,4721,3841,43225fv470,8230,6900,982lotfi1,1451,0311,298ship04l1,5141,5051,407brandy1,2281,2342,636wood1p0,9470,9470,782e2261,0971,0331,317sctap21,4311,4721,443bore3d2,0143,4711,379ganges1,2031,2101,151capri0,9155,2861,127scsd82,2271,9849,588agg0,9291,0474,591ship08s1,3271,3220,828scorpion1,3391,3201,222ship12s1,1291,1280,954bandm2,1251,9861,651sctap31,5381,5191,507sctap11,1031,1001,056stocfor20,8030,7931,609scfxm11,1661,0580,955czprob0,7540,8971,015agg21,0000,9883,533ship08l1,7601,7541,124agg31,0171,0063,562bnl21,4271,4611,084stair1,6092,1041,335ship12l1,6191,6171,309scsd11,2021,2551,324d2q06c0,9860,8470,860grow151,4711,4241,723woodw0,9160,8490,726scagr255,1433,7752,169truss1,1981,0651,520fit1d1,0290,9951,539fit2d0,9990,9961,048finnis1,0901,1971,005maros-r71,6131,5741,286Mean1,331,571,49We plot the CPU time ratios of the solvers SupportFab and SimplexFab over SupportSav (Figures1(a) and 1(c)), and the iteration ratios of each solver over SupportSav (Figures 1(b), 1(d), and 1(e)). Ratios greater than one correspond to the points which are above the line y=1 in the graphs of Figure 1.Ratios of the different solvers over SupportSav.
(a)
Ratio of the CPU time of SupportFab over the CPU time of SupportSav (cputr12)(b)
Ratio of the iterations number of SupportFab over the iterations number of SupportSav (nitr12)(c)
Ratio of the CPU time of SimplexFab over the CPU time of SupportSav (cputr13)(d)
Ratio of the iterations number of SimplexFab over the iterations number of SupportSav (nitr13)(e)
Ratio of the iterations number of LP_SOLVE_PSA over the iterations number of SupportSav (nitr14)The analysis of the different tables and graphs leads us to make the following observations.(i)
In terms of iterations number, SupportSav is competitive with SupportFab in solving 74% of the test problems with an average iteration ratio of 1.33. In terms of CPU time, SupportSav is competitive with SupportFab in solving 66% of the test problems with an average CPU time ratio of 1.20. Particularly, for the LP “scagr25” (Problem number 32), SupportSav is 5.14 times faster than SupportFab in terms of iterations number and solves the problem 4.55 times faster than SupportFab in terms of CPU time.(ii)
In terms of iterations number, SupportSav is competitive with SimplexFab in solving 79% of the test problems with an average iteration ratio of 1.57. In terms of CPU time, SupportSav is competitive with SimplexFab in solving 68% of the test problems with an average CPU time ratio of 1.35. The peaks of the graph ratios correspond to the problems where our approach is 2 up to 5 times faster than SimplexFab. Particularly, for the LP “capri” (Problem number 21), SupportSav is 5.29 times faster than SimplexFab in terms of iterations number and solves the problem 3.99 times faster than SimplexFab in terms of CPU time.(iii)
In terms of iterations number, SupportSav is competitive with LP_SOLVE_PSA in solving 72% of the test problems with an average iteration ratio of 1.49 (the majority of iteration ratios are above the liney=1 in Figure 1(e)). Particularly, for the LP “scsd8” (Problem number 55), our method is 9.58 times faster than the primal simplex implementation of the open-source solver LP_SOLVE.(iv)
We remark from the last row of Table6 that the total number of artificial variables added in order to find the initial support for SupportSav (13234) is considerably less than the total number of artificial variables added for SimplexFab (27389) and SupportFab (27389).(v)
If we compute the total number of iterations necessary to solve the 68 LPs for each solver, we find (143737) for SupportSav, (159306) for SupportFab, (163428) for SimplexFab, and (158682) for LP_SOLVE_PSA. Therefore, the total number of iterations is the smallest for our solver.


## 5. Conclusion

In this work, we have proposed a single artificial variable technique to initialize the primal support method with bounded variables. An implementation under the MATLAB environnement has been developed. In the implementation, we have used theLU factorization of the basic matrix to solve the linear systems and the Sherman-Morrison-Woodbury formula to update the LU factors. After that, we have compared our approach (SupportSav) to the full artificial basis support method (SupportFab), the full artificial basis simplex method (SimplexFab), and the primal simplex implementation of the open-source solver LP_SOLVE (LP_SOLVE_PSA). The obtained numerical results are encouraging. Indeed, the suggested method (SupportSav) is competitive with SupportFab, SimplexFab, and LP_SOLVE_PSA.Note that during our experiments, we have remarked that the variation of the initial support and the initial pointx+ affects the performances (CPU time and iterations number) of the single artificial variant of the support method. Thus, how to choose judiciously the initial point and the initial support in order to improve the efficiency of the support method? In future works, we will try to apply some crash procedure like those proposed in [25, 27] in order to initialize the support method with a good initial support. Furthermore, we will try to implement some modern sparse algebra techniques to update the LU factors [47].



---

*Source: 482193-2012-04-26.xml*