Home > matpower7.0 > lib > @opt_model > add_nln_constraint.m

add_nln_constraint

PURPOSE ^

ADD_NLN_CONSTRAINT Adds a set of nonlinear constraints to the model.

SYNOPSIS ^

function om = add_nln_constraint(om, name, idx, N, iseq, fcn, hess, varsets)

DESCRIPTION ^

ADD_NLN_CONSTRAINT  Adds a set of nonlinear constraints to the model.

   OM.ADD_NLN_CONSTRAINT(NAME, N, ISEQ, FCN, HESS);
   OM.ADD_NLN_CONSTRAINT(NAME, N, ISEQ, FCN, HESS, VARSETS);

   OM.ADD_NLN_CONSTRAINT(NAME, IDX_LIST, N, ISEQ, FCN, HESS);
   OM.ADD_NLN_CONSTRAINT(NAME, IDX_LIST, N, ISEQ, FCN, HESS, VARSETS);

   N specifies the number of constraints in the set, ISEQ is a one
   character string specifying whether it is an equality or inequality
   constraint set ('=' or '<' respectively), FCN is the handle of a
   function that evaluates the constraint and its gradients, and HESS is
   the handle of a function that evaluates the Hessian of the constraints.

   For a constraint G(x) = 0, FCN should point to a function with the
   following interface:
       G = FCN(X)
       [G, DG] = FCN(X)
   where G is an N x 1 vector and DG is the N x NX gradient, where
       DG(i, j) = dG(i)/dX(j)
   and NX is the number of elements in X.

   HESS should point to a function that returns an NX x NX matrix of
   derivatives of DG * LAMBDA, with the following interface:
       D2G = HESS(X, LAMBDA)

   For both functions, the first input argument X can take two forms. If
   the constraint set is added with VARSETS empty or missing, then X will
   be the full optimization vector. Otherwise it will be a cell array of
   vectors corresponding to the variable sets specified in VARSETS.

   For simple (not indexed) named sets, NAME can be a cell array of
   constraint set names, in which case N is a vector, specifying the number
   of constraints in each corresponding set. FCN and HESS are still single
   function handles for functions that compute the values for the entire
   collection of constraint sets together.

   Likewise, if FCN or HESS are empty, it also indicates a placeholder in
   the indexing for a constraint set whose implmentation is included in
   another constraint set. This functionality is only intended to be used
   internally to handle constraint/gradient and Hessian functions that
   compute the values for more than one constraint set simultaneously.

   Indexed Named Sets
       A constraint set can be identified by a single NAME, as described
       above, such as 'Pmismatch', or by a name that is indexed by one
       or more indices, such as 'Pmismatch(3,4)'. For an indexed named
       set, before adding the constraint sets themselves, the dimensions
       of the indexed set must be set by calling INIT_INDEXED_NAME.

       The constraints are then added using the following, where
       all arguments are as described above, except IDX_LIST is a cell
       array of the indices for the particular constraint set being added.

       OM.ADD_NLN_CONSTRAINT(NAME, IDX_LIST, N, ISEQ, FCN, HESS);
       OM.ADD_NLN_CONSTRAINT(NAME, IDX_LIST, N, ISEQ, FCN, HESS, VARSETS);

   Examples:
       %% nonlinear equality constraint with constraint/gradient and Hessian
       %% evaluation functions provided
       om.add_nln_constraint('Qmis', nb, 1, fcn, hess);

       %% nonlinear inequality constraints with indexed named set 'S(i,j)'
       om.init_indexed_name('nli', 'S', {2, 3});
       for i = 1:2
         for j = 1:3
           om.add_nln_constraint('S', {i, j}, N{i,j}, ...);
         end
       end

   See also OPT_MODEL, EVAL_NLN_CONSTRAINT.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function om = add_nln_constraint(om, name, idx, N, iseq, fcn, hess, varsets)
0002 %ADD_NLN_CONSTRAINT  Adds a set of nonlinear constraints to the model.
0003 %
0004 %   OM.ADD_NLN_CONSTRAINT(NAME, N, ISEQ, FCN, HESS);
0005 %   OM.ADD_NLN_CONSTRAINT(NAME, N, ISEQ, FCN, HESS, VARSETS);
0006 %
0007 %   OM.ADD_NLN_CONSTRAINT(NAME, IDX_LIST, N, ISEQ, FCN, HESS);
0008 %   OM.ADD_NLN_CONSTRAINT(NAME, IDX_LIST, N, ISEQ, FCN, HESS, VARSETS);
0009 %
0010 %   N specifies the number of constraints in the set, ISEQ is a one
0011 %   character string specifying whether it is an equality or inequality
0012 %   constraint set ('=' or '<' respectively), FCN is the handle of a
0013 %   function that evaluates the constraint and its gradients, and HESS is
0014 %   the handle of a function that evaluates the Hessian of the constraints.
0015 %
0016 %   For a constraint G(x) = 0, FCN should point to a function with the
0017 %   following interface:
0018 %       G = FCN(X)
0019 %       [G, DG] = FCN(X)
0020 %   where G is an N x 1 vector and DG is the N x NX gradient, where
0021 %       DG(i, j) = dG(i)/dX(j)
0022 %   and NX is the number of elements in X.
0023 %
0024 %   HESS should point to a function that returns an NX x NX matrix of
0025 %   derivatives of DG * LAMBDA, with the following interface:
0026 %       D2G = HESS(X, LAMBDA)
0027 %
0028 %   For both functions, the first input argument X can take two forms. If
0029 %   the constraint set is added with VARSETS empty or missing, then X will
0030 %   be the full optimization vector. Otherwise it will be a cell array of
0031 %   vectors corresponding to the variable sets specified in VARSETS.
0032 %
0033 %   For simple (not indexed) named sets, NAME can be a cell array of
0034 %   constraint set names, in which case N is a vector, specifying the number
0035 %   of constraints in each corresponding set. FCN and HESS are still single
0036 %   function handles for functions that compute the values for the entire
0037 %   collection of constraint sets together.
0038 %
0039 %   Likewise, if FCN or HESS are empty, it also indicates a placeholder in
0040 %   the indexing for a constraint set whose implmentation is included in
0041 %   another constraint set. This functionality is only intended to be used
0042 %   internally to handle constraint/gradient and Hessian functions that
0043 %   compute the values for more than one constraint set simultaneously.
0044 %
0045 %   Indexed Named Sets
0046 %       A constraint set can be identified by a single NAME, as described
0047 %       above, such as 'Pmismatch', or by a name that is indexed by one
0048 %       or more indices, such as 'Pmismatch(3,4)'. For an indexed named
0049 %       set, before adding the constraint sets themselves, the dimensions
0050 %       of the indexed set must be set by calling INIT_INDEXED_NAME.
0051 %
0052 %       The constraints are then added using the following, where
0053 %       all arguments are as described above, except IDX_LIST is a cell
0054 %       array of the indices for the particular constraint set being added.
0055 %
0056 %       OM.ADD_NLN_CONSTRAINT(NAME, IDX_LIST, N, ISEQ, FCN, HESS);
0057 %       OM.ADD_NLN_CONSTRAINT(NAME, IDX_LIST, N, ISEQ, FCN, HESS, VARSETS);
0058 %
0059 %   Examples:
0060 %       %% nonlinear equality constraint with constraint/gradient and Hessian
0061 %       %% evaluation functions provided
0062 %       om.add_nln_constraint('Qmis', nb, 1, fcn, hess);
0063 %
0064 %       %% nonlinear inequality constraints with indexed named set 'S(i,j)'
0065 %       om.init_indexed_name('nli', 'S', {2, 3});
0066 %       for i = 1:2
0067 %         for j = 1:3
0068 %           om.add_nln_constraint('S', {i, j}, N{i,j}, ...);
0069 %         end
0070 %       end
0071 %
0072 %   See also OPT_MODEL, EVAL_NLN_CONSTRAINT.
0073 
0074 %   MATPOWER
0075 %   Copyright (c) 2008-2017, Power Systems Engineering Research Center (PSERC)
0076 %   by Ray Zimmerman, PSERC Cornell
0077 %
0078 %   This file is part of MATPOWER.
0079 %   Covered by the 3-clause BSD License (see LICENSE file for details).
0080 %   See https://matpower.org for more info.
0081 
0082 %% initialize input arguments
0083 if iscell(idx)          %% indexed named set
0084     if nargin < 8
0085         varsets = {};
0086     end
0087 else                    %% simple named set
0088     if nargin < 7
0089         varsets = {};
0090     else
0091         varsets = hess;
0092     end
0093     if nargin > 4
0094         hess = fcn;
0095         fcn = iseq;
0096     end
0097     iseq = N;
0098     N = idx;
0099     idx = {};
0100 end
0101 if iseq
0102     ff = 'nle';     %% nonlinear equality
0103 else
0104     ff = 'nli';     %% nonlinear inequality
0105 end
0106 
0107 %% convert varsets from cell to struct array if necessary
0108 varsets = om.varsets_cell2struct(varsets);
0109 
0110 %% add the named nonlinear constraint set
0111 if iscell(name)
0112     if length(name) ~= length(N)
0113         error('@opt_model/add_nln_constraint: dimensions of NAME and N must match');
0114     end
0115     om.add_named_set(ff, name{1}, idx, N(1), fcn, hess, '', varsets);
0116     for k = 2:length(name)
0117         om.add_named_set(ff, name{k}, idx, N(k), [], [], name{1}, varsets);
0118     end
0119 else
0120     om.add_named_set(ff, name, idx, N, fcn, hess, '', varsets);
0121 end

Generated on Mon 24-Jun-2019 15:58:45 by m2html © 2005