optimization toolbox

源代码在线查看: and.m

软件大小: 935 K
上传用户: jhjfjh22544
关键词: optimization toolbox
下载地址: 免注册下载 普通下载 VIP

相关代码

  1. function varargout = and(varargin)  
  2. %ANd (overloaded)  
  3. %     
  4. %    z = and(x,y)  
  5. %    z = x & y  
  6. %  
  7. % The AND operator is implemented using the concept of nonlinear operators  
  8. % in YALMIP. X|Y defines a new so called derived variable that can be  
  9. % treated as any other variable in YALMIP. When SOLVESDP is issued,  
  10. % constraints are added to the problem to model the AND operator. The new  
  11. % constraints add constraints to ensure that z, x and y satisfy the  
  12. % truth-table for AND.  
  13. %  
  14. % The model for ARE is set(z                %  
  15. % It is assumed that x and y are binary variables (either explicitely  
  16. % declared using BINVAR, or constrained using BINARY.)  
  17. %  
  18. %   See also SDPVAR/AND, BINVAR, BINARY  
  19.   
  20. % Author Johan L鰂berg   
  21. % $Id: and.m,v 1.12 2006/04/28 14:47:32 joloef Exp $     
  22.   
  23. switch class(varargin{1})  
  24.     case 'char'  
  25.         z = varargin{2};  
  26.         x = varargin{3};  
  27.         y = varargin{4};  
  28.       
  29.         % *******************************************************  
  30.         % For *some* efficiency,we merge expressions like A&B&C&D  
  31.         xvars = getvariables(x);  
  32.         yvars = getvariables(y);  
  33.         allextvars = yalmip('extvariables');  
  34.           
  35.         if (length(xvars)==1) & ismembc(xvars,allextvars)  
  36.             x = expandand(x,allextvars);  
  37.         end  
  38.           
  39.         if (length(yvars)==1) & ismembc(yvars,allextvars)  
  40.             y = expandand(y,allextvars);  
  41.         end  
  42.         % *******************************************************  
  43.                   
  44.         varargout{1} = set(x >= z) + set(y >= z) + set(length(x)+length(y)-1+z >= sum(x)+sum(y)) + set(binary(z));  
  45.         varargout{2} = struct('convexity','milp','monotoncity','milp','definiteness','milp');  
  46.         varargout{3} = [];  
  47.   
  48.     case 'sdpvar'  
  49.         x = varargin{1};  
  50.         y = varargin{2};  
  51.   
  52.         varargout{1} = yalmip('addextendedvariable','and',varargin{:});  
  53.   
  54.     otherwise  
  55. end  
  56.   
  57. function x = expandand(x,allextvars)  
  58.   
  59. xmodel = yalmip('extstruct',getvariables(x));  
  60.   
  61. if isequal(xmodel.fcn,'and')  
  62.     x1 = xmodel.arg{1};  
  63.     x2 = xmodel.arg{2};  
  64.     if  ismembc(getvariables(xmodel.arg{1}),allextvars)  
  65.         x1 = expandand(xmodel.arg{1},allextvars);       
  66.     end  
  67.     if  ismembc(getvariables(xmodel.arg{2}),allextvars)  
  68.         x2 = expandand(xmodel.arg{2},allextvars);       
  69.     end  
  70.     x = [x1 x2];  
  71. end           

相关资源