% generate data for energy portfolio problem% returns quantities N, Nval, n, b, cmax, cmin, A, Aval, d, dvalrand('state',0);N=1000;  % number of samples used to optimize portfolioNval=10000; % number of samples used to validate portfolion_wind=4; % number of wind farms% plant costs including subsidies, etc.b_coal=140; % coal plant costb_wind=60; % wind farm costb_solar=55; % solar farm costb=[b_coal;b_wind*ones(n_wind,1);b_solar];n=length(b); % we'll have n_wind wind farms + 1 coal plant + 1 solar farm% energy production capacity limits for each type of plantcmax_coal=35;cmax_wind=10;cmax_solar=20;% stack into one vector cmaxcmax=[cmax_coal;cmax_wind*ones(n_wind,1);cmax_solar];cmin=zeros(n,1); % cmin is zero for all plantsp=1100; % price to produce energy by the peakers% generate random coal plant availabilitypoff = 0; % coal plant down some of the timepunif = 0.1; % prob mass uniformly distributed on [0,1]% otherwise, coal plant fully functionalf = 1/punif; g = -poff/punif;acoal=f*rand(1,N+Nval)+g;acoal = max(acoal,0);  % clip a to be >= 0acoal = min(acoal,1); % clip a to be <= 1% generate random wind availabilitypoff = 0.3; % no wind some of the timepunif = 0.6; % prob mass uniformly distributed on [0,1]% otherwise, wind on fullf = 1/punif; g = -poff/punif;awind=f*rand(n_wind,N+Nval)+g;awind = max(awind,0);  % clip a to be >= 0awind = min(awind,1); % clip a to be <= 1% generate correlated demand and solar availabilityrandvar=rand(1,N+Nval); %generate a rand var to be used in solar and demandd=20+25*(randvar+rand(1,N+Nval)); % this is the demand vector% generate random solar availabilitypoff = 0.5; % no solar some of the timepunif = 0.3; % prob mass uniformly distributed on [0,1]% otherwise, solar on fullf = 1/punif; g = -poff/punif;asolar=f*randvar+g;asolar = max(asolar,0);  % clip a to be >= 0asolar = min(asolar,1); % clip a to be <= 1% stack availabilities into one matrixA=[acoal;awind;asolar];% separate training and validation setsdval=d(:,N+1:N+Nval);d(:,N+1:N+Nval)=[];Aval=A(:,N+1:N+Nval);A(:,N+1:N+Nval)=[];% clear place holder variablesclear f g poff punif randvar cmax_coal cmax_wind cmax_solar ...    b_coal b_wind b_solar n_wind asolar awind acoal