Home > matpower4.0 > LPsetup.m

LPsetup

PURPOSE ^

------------------------------ deprecated ------------------------------

SYNOPSIS ^

function [x, duals, idx_workc, idx_bindc] = LPsetup(a, f, b, nequs, vlb, vub, idx_workc, mpopt)

DESCRIPTION ^

------------------------------  deprecated  ------------------------------
   OPF solvers based on LPCONSTR to be removed in a future version.
--------------------------------------------------------------------------
LPSETUP  Solves a LP problem using a callable LP routine.
   [X, DUALS, IDX_WORKC, IDX_BINDC] = ...
       LPSETUP(A, F, B, NEQUS, VLB, VUB, IDX_WORKC, MPOPT)

   The LP problem is defined as follows:

   min     f' * x
   S.T.    a * x =< b
           vlb =< x =< vub

   All of the equality constraints must appear before inequality constraints.
   NEQUS specifies how many of the constraints are equality constraints.

   The algorithm (set in MPOPT) can be set to the following options:

   320 - solve LP using ICS (equality constraints are eliminated)
   340 - solve LP using Iterative Constraint Search (ICS)
         (equality constraints are preserved, typically superior to 320 & 360)
   360 - solve LP with full set of constraints

   See also LPOPF_SOLVER.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [x, duals, idx_workc, idx_bindc] = LPsetup(a, f, b, nequs, vlb, vub, idx_workc, mpopt)
0002 %------------------------------  deprecated  ------------------------------
0003 %   OPF solvers based on LPCONSTR to be removed in a future version.
0004 %--------------------------------------------------------------------------
0005 %LPSETUP  Solves a LP problem using a callable LP routine.
0006 %   [X, DUALS, IDX_WORKC, IDX_BINDC] = ...
0007 %       LPSETUP(A, F, B, NEQUS, VLB, VUB, IDX_WORKC, MPOPT)
0008 %
0009 %   The LP problem is defined as follows:
0010 %
0011 %   min     f' * x
0012 %   S.T.    a * x =< b
0013 %           vlb =< x =< vub
0014 %
0015 %   All of the equality constraints must appear before inequality constraints.
0016 %   NEQUS specifies how many of the constraints are equality constraints.
0017 %
0018 %   The algorithm (set in MPOPT) can be set to the following options:
0019 %
0020 %   320 - solve LP using ICS (equality constraints are eliminated)
0021 %   340 - solve LP using Iterative Constraint Search (ICS)
0022 %         (equality constraints are preserved, typically superior to 320 & 360)
0023 %   360 - solve LP with full set of constraints
0024 %
0025 %   See also LPOPF_SOLVER.
0026 
0027 %   MATPOWER
0028 %   $Id: LPsetup.m,v 1.15 2010/04/26 19:45:26 ray Exp $
0029 %   by Deqiang (David) Gan, PSERC Cornell & Zhejiang University
0030 %   Copyright (c) 1996-2010 by Power System Engineering Research Center (PSERC)
0031 %
0032 %   This file is part of MATPOWER.
0033 %   See http://www.pserc.cornell.edu/matpower/ for more info.
0034 %
0035 %   MATPOWER is free software: you can redistribute it and/or modify
0036 %   it under the terms of the GNU General Public License as published
0037 %   by the Free Software Foundation, either version 3 of the License,
0038 %   or (at your option) any later version.
0039 %
0040 %   MATPOWER is distributed in the hope that it will be useful,
0041 %   but WITHOUT ANY WARRANTY; without even the implied warranty of
0042 %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0043 %   GNU General Public License for more details.
0044 %
0045 %   You should have received a copy of the GNU General Public License
0046 %   along with MATPOWER. If not, see <http://www.gnu.org/licenses/>.
0047 %
0048 %   Additional permission under GNU GPL version 3 section 7
0049 %
0050 %   If you modify MATPOWER, or any covered work, to interface with
0051 %   other modules (such as MATLAB code and MEX-files) available in a
0052 %   MATLAB(R) or comparable environment containing parts covered
0053 %   under other licensing terms, the licensors of MATPOWER grant
0054 %   you additional permission to convey the resulting work.
0055 
0056 %% options
0057 alg = mpopt(11);
0058 
0059 % ----- solve LP directly -----
0060 
0061 if alg == 360                   %% sparse LP with full constraints
0062     [x, duals] = mp_lp(f, a, b, vlb, vub, [], nequs, -1);
0063     duals = duals(1:length(b));                   % MATLAB built-in LP solver has more elements in duals than we want
0064     idx_workc = []; idx_bindc = [];
0065     return;
0066 end
0067 
0068 % ----- solve LP using constraint relaxation (equality constraints are preserved) ------
0069 
0070 if alg == 340                   %% sparse LP with relaxed constraints
0071     if isempty(idx_workc) == 1
0072         idx_workc = find(b < 1.0e-5);
0073     end
0074     [x, duals, idx_workc, idx_bindc] = LPrelax(a, f, b, nequs, vlb, vub, idx_workc, mpopt);
0075     return;
0076 end
0077 
0078 % ----- solve LP using constraint relaxation (equality constraints are eliminated) ------
0079 
0080 % so alg == 320                 %% dense LP
0081 
0082 % set up the indicies of variables and constraints
0083 
0084 idx_x1 = 2:nequs; idx_x2 = [1 nequs:length(f)];
0085 idx_c1 = 1:nequs-1; idx_c2 = nequs:length(b);
0086 
0087 % eliminate equality constraints
0088 
0089 b1 = b(idx_c1);
0090 b2 = b(idx_c2);
0091 
0092 a11 = a(idx_c1, idx_x1); a12 = a(idx_c1, idx_x2);
0093 a21 = a(idx_c2, idx_x1); a22 = a(idx_c2, idx_x2);
0094 
0095 a11b1 = a11 \ b1;
0096 a11a12 = a11 \ a12;
0097 
0098 % set up the reduced LP
0099 
0100 fred = -((f(idx_x1))' * a11a12)' + f(idx_x2);
0101 ared =  [-a21 * a11a12 + a22
0102      -a11a12
0103       a11a12];
0104 bred =  [ b2 - a21 * a11b1
0105      vub(idx_x1) - a11b1
0106      a11b1 - vlb(idx_x1)];
0107 vubred = vub(idx_x2);
0108 vlbred = vlb(idx_x2);
0109 nequsred = nequs - length(idx_x1);
0110 
0111 % solve the reduced LP problem using constraint relaxation
0112 
0113 if isempty(idx_workc) == 1
0114     idx_workc = find(b2< 1.0e-5);
0115 end
0116 [x2, dualsred, idx_workc, idx_bindc] = LPrelax(ared, fred, bred, nequsred, vlbred, vubred, idx_workc, mpopt);
0117 
0118 % parse the solution of the reduced LP to get the solution of the original LP
0119 
0120 x(idx_x1) = a11b1 - a11a12 * x2;  x(idx_x2) = x2; x = x';
0121 
0122 dualsc2 = dualsred(1:length(idx_c2));
0123 
0124 temp = find(dualsc2);
0125 dualsc1 =  a11' \ ( -f(idx_x1) - (a21(temp, :))' * dualsc2(temp) );
0126 
0127 duals(idx_c1) = dualsc1;
0128 duals(idx_c2) = dualsc2;
0129 duals = duals';

Generated on Mon 26-Jan-2015 14:56:45 by m2html © 2005