73 lines
2.2 KiB
Matlab
Executable File
73 lines
2.2 KiB
Matlab
Executable File
function x = uncertain(x,varargin)
|
|
%UNCERTAIN Declares a variable as uncertain
|
|
%
|
|
% F = UNCERTAIN(W) is used to describe the set of uncertain variables
|
|
% in an uncertain program
|
|
%
|
|
% INPUT
|
|
% W : SDPVAR object or list of constraints
|
|
% S : Optional distribution information for random uncertainty
|
|
%
|
|
% OUTPUT
|
|
% F : Constraint object
|
|
%
|
|
% Uncertain is used to declare uncertain variables in robust
|
|
% deterministic worst-case optimization. It can also be used to specify
|
|
% uncertain random variables, and their associated distribution, to be
|
|
% used in OPTIMIZER objects with the SAMPLE command.
|
|
%
|
|
% EXAMPLE
|
|
%
|
|
% Robust worst-case optimization
|
|
%
|
|
% sdpvar x w
|
|
% F = [x + w <= 1], W = [-0.5 <= w <= 0.5];
|
|
% optimize([F,W,uncertain(w)],-x)
|
|
%
|
|
% sdpvar x w
|
|
% F = [x + w <= 1], W = [-0.5 <= w <= 0.5];
|
|
% optimize([F,uncertain(W)],-x)
|
|
%
|
|
% To specify random uncertainties, you specify the distribution, and all
|
|
% distribution parameters following the syntax n the RANDOM command in
|
|
% the Statistics Toolbox
|
|
%
|
|
% sdpvar x w
|
|
% F = [x + w <= 1, uncertain(w, 'uniform',0,1)];
|
|
% P = optimizer([F,W,uncertain(w)],-x,[],w,x)
|
|
% S = sample(P,10); % Sample ten instances and concatenate models
|
|
% S([]) % Solve and return optimal x
|
|
%
|
|
% Alternatively, you can specify a function handle which generates
|
|
% samples. YALMIP will always send a trailing argument with dimensions
|
|
%
|
|
% F = [x + w <= 1, uncertain(w,@mysampler,myarguments1,...)];
|
|
%
|
|
% The standard random case above would thus be recovered with
|
|
%
|
|
% F = [x + w <= 1, uncertain(w,@random,0,1)];
|
|
%
|
|
%
|
|
% See also OPTIMIZE, ROBUSTMODEL, OPTIMIZER, SAMPLE
|
|
|
|
if nargin == 1 || ((nargin == 2) && strcmpi(varargin{1},'deterministic'))
|
|
x.typeflag = 15;
|
|
x.extra.distribution.name = 'deterministic';
|
|
x = lmi(x);
|
|
else
|
|
x.typeflag = 16;
|
|
if isa(varargin{1},'function_handle')
|
|
temp = {varargin{:},x.dim};
|
|
else
|
|
temp = {@random,varargin{:},x.dim};
|
|
end
|
|
x.extra.distribution.name = temp{1};
|
|
x.extra.distribution.parameters = {temp{2:end-1}};
|
|
try
|
|
temp = feval(temp{:});
|
|
catch
|
|
disp(lasterr);
|
|
error('Trial evaluation of attached sample generator failed.')
|
|
end
|
|
x = lmi(x);
|
|
end |