home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l455 / 2.ddi / MUTOOLS2.DI$ / FMLP.M < prev    next >
Encoding:
Text File  |  1993-03-11  |  1.5 KB  |  55 lines

  1. % [basic,sol,cost,lambda,tnpiv] = fmlp(a,b,c,startbasic,tnpivmax)
  2. %
  3. %  *****  UNTESTED SUBROUTINE  *****
  4.  
  5. function [basic,sol,cost,lambda,tnpiv] = fmlp(a,b,c,startbasic,tnpivmax)
  6.  
  7. tnpiv = 0;
  8. [ncon,nvar] = size(a);
  9. if nargin<5, tnpivmax=500;end
  10. basic = startbasic;
  11. nonbasic = comple(basic,nvar);
  12. go = 1;
  13. tnpiv = 0;
  14. while go == 1
  15.   lambda = c(basic)/a(:,basic);
  16.   sol = a(:,basic) \ b;
  17.   cc = c(nonbasic) - lambda*a(:,nonbasic);
  18.   desdir = find(cc<-0.00000000001);
  19.   if length(desdir) == 0
  20.     go = 0;
  21.     opt = basic;
  22.     optsol = sol;
  23.   else
  24.    [tmp,indx]=sort(cc(desdir));desdir=desdir(indx);
  25.    if rand<.9 | length(desdir)==1, desdirn=desdir(1);
  26.       else desdirn=desdir(2);end
  27.    to_enter = nonbasic(desdirn);
  28.    a_to_enter = a(:,nonbasic(desdirn));
  29.    alinvar = a(:,basic) \ a_to_enter;
  30.    avail_piv = find(alinvar>0.0000001);
  31.    if length(avail_piv) == 0, avail_piv = find(alinvar>0.0); end
  32.    if length(avail_piv) == 0,
  33.      disp('unbounded')
  34.      opt = basic;
  35.      optsol = -inf;
  36.      go = 0;
  37.    else
  38.      rat = sol(avail_piv)./alinvar(avail_piv);
  39.      pivots = find(rat==min(rat));
  40.      to_leave = basic(avail_piv(pivots(1)));
  41.      basic(avail_piv(pivots(1))) = to_enter;
  42.      nonbasic(desdirn) = to_leave; 
  43.      tnpiv = tnpiv + 1;
  44.    end
  45.   end
  46.   if tnpiv>=tnpivmax-1, opt = basic;
  47.      optsol = -1;  %this denotes no feasible solution to the
  48.                    %primal problem fitmaglp.
  49.      go = 0;end
  50.  
  51. end
  52. cost = c(basic)*sol;
  53. %
  54. % Copyright MUSYN INC 1991,  All Rights Reserved
  55.