I want to optimize a reservoir system with NSGA II (gamultiobj). I just aimed to build an imaginary reservoir system that works with random values in order to understand the system. But I have not been able to proceed for a while. I share the code below. I have 4 reservoirs for 3 time steps. I would like to maximize the total water release for energy and irrigation withdrawal (2 objective). Do I need to write symbolic math? I examined the examples, but I could not solve it. I would be glad if you can help.
%%%%% 4 RESERVOIR EXAMPLE %%%%
%
% |
% |% v
% ÆÆÆ
% | ÆÆÆÆÆ
% | [2]
% | |
% v v
% ÆÆÆ ÆÆÆ
% ÆÆÆÆÆ ÆÆÆÆÆ
% [1] [3]
% |__ __ __ __|
% |
% |
% v
% ÆÆÆ
% ÆÆÆÆÆ
% [4]
%
% X (i,t)
% i = RESERVOIR INDEX
% t = TIMESTEP
% EN: RELEASE FOR GENERATING ENERGY, IR: ABSTRACT FOR IRRIGATION DEMAND
% 4 RESERVOIR FOR 3 TIMESTEP:
% X =[EN(1,1) EN(1,2) EN(1,3)
% EN(2,1) EN(2,2) EN(2,3)
% EN(3,1) EN(3,2) EN(3,3)
% EN(4,1) EN(4,2) EN(4,3)
% IR(1,1) IR(1,2) IR(1,3)
% IR(2,1) IR(2,2) IR(2,3)
% IR(3,1) IR(3,2) IR(3,3)
% IR(4,1) IR(4,2) IR(4,3)]
% INFLOW FROM EACH SUBBASIN INTO RESERVOIR
INF =[40 40 40 ; ... 20 20 20 ; ... 20 20 20 ; ... 10 10 10 ] % M(J,K): RESERVOIR SYSTEM CONNECTIVITY MATRIX
% (-1) FOR ABSTRACTION, (+1) RECEIVES WATER FROM UPSTREAM RESERVOIR
% RESERVOIR(J) RECEIVES WATER FOM RESERVOIR(K)
M = [-1 0 0 0 ; ... 0 -1 0 0 ; ... 0 1 -1 0 ; ... 1 0 1 -1 ] % N(J,K): IRRIGATION SYSTEM CONNECTIVITY MATRIX
% (-1) FOR ABSTRACTION, (+1) RECEIVES RETURN WATER FROM UPSTREAM IRRIGATION
% RESERVOIR(J) RECEIVES WATER FOM IRRIGATION(K)
N = [-1 0 0 0 ; ... 0 -1 0 0 ; ... 0 1 -1 0 ; ... 1 0 1 -1 ]% MERGE CONNECTIVITY MATRCIES
CON_MAX = [M N] % MERGE RELEASES FOR ENERGY AND ABSTRACTIONS
% EN = ones(4,3)
% IR = ones(4,3)
X = [EN; IR]% RELEASE FOR ENERGY AND IRRIGATION TOTAL MUST BE > 10 CMS
% A*x <= b
% -EN-IR <= -10
A = [-1 0 0 0 -1 0 0 0; ... 0 -1 0 0 0 -1 0 0; ... 0 0 -1 0 0 0 -1 0; ... 0 0 0 -1 0 0 0 -1] b = [-10 -10 -10 ; ... -10 -10 -10 ; ... -10 -10 -10 ; ... -10 -10 -10 ] % lb < x < ub
% 0 (FOR BOTH SECTOR) < x < 100 FOR ENERGY AND 95 FOR IRRIGATION
lb = [0 0 0 ; ... 0 0 0 ; ... 0 0 0 ; ... 0 0 0 ; ... 0 0 0 ; ... 0 0 0 ; ... 0 0 0 ; ... 0 0 0 ] ub = [100 100 100 ; ... 100 100 100 ; ... 100 100 100 ; ... 100 100 100 ; ... 95 95 95 ; ... 95 95 95 ; ... 95 95 95 ; ... 95 95 95 ] t = 1 % START FROM TIMESTEP 1
T = 3 % TIME HORIZON (t_END)
RES_COUNT = 4 % RESERVOIR COUNT
EN_COUNT = 4 % ENERGY RELEASE COUNT
IR_COUNT = 4 % IRRIGATION ABSTRACT COUNT
NVAR = (EN_COUNT+IR_COUNT)*T %TOTAL NUMBER OF DECISION VARIABLE
% INITIAL STORAGE VOLUMES
S_0 = [10 ; ... 10 ; ... 10 ; ... 10 ] %% CONTINUITY CONSTRAINTS
% STORAGE(t+1) = STORAGE(t) + INFLOW(t) + M*ENERGY(t) + N*IRRIGATION(t)
% STO = S0 + INF + M*EN + N*IR
% STO = S0 + INF + CON_MAX * X
STO = zeros(RES_COUNT,T); t = 1 % ONLY FOR TIMESTEP = 1
for i = 1:4 % EACH RESERVOIR
STO(i,t) = S_0(i,t) + INF(i,t) + CON_MAX(i,t) * X(i,t) ; end% LOOP
for t = 2:3 % EACH TIMESTEP
for i = 1:4 % EACH RESERVOIR
STO(i,t) = STO(i,(t-1)) + INF(i,t) + CON_MAX(i,t) * X(i,t) ; % PENALTY FUNCTIONS:
% TO OVERCOME THE GA LIMITATIONS ON HANDLING THE HIGHLY CONSTRAINED SYSTEM, THE NONLINEAR CONSTRAINTS
% ARE SATISFIED IN DIFFERENT WAYS TO TRANSFORM THE CONSTRAINED OPTIMIZATION INTO THE UNCONSTRAINED ONE.
% THE COMPUTATION OF RESERVOIR STORAGE IS BASED ON THE CONTINUITY EQUATION SO IT IS SATISFIED.
% STORAGE AND END-STORAGE CONSTRAINTS ARE INCLUDED INTO THE OBJECTIVE FUNCTION IN FORM OF PENALTY FUNCTIONS.
% THE DEVIATION FROM THE MIN AND MAX STORAGE AND END-STORAGE ARE PENALIZED BY SQUARE DIFFERENCES FROM CONSTRAINTS.
% PENALTY 1, 3 AND 3
P_1 = zeros(4,3) P_2 = zeros(4,3) P_3 = zeros(4,3) % MIN AND MAX STORAGE FOR EACH RESERVOIR EACH TIMESTEP
S_MIN=[ 1 1 1 ; ... 1 1 1 ; ... 1 1 1 ; ... 1 1 1 ] S_MAX=[ 50 50 50 ; ... 50 50 50 ; ... 50 50 50 ; ... 50 50 50 ] % PENALTY WEIGHTED FACTOR ASSUMPTION
K_1=60 K_2=40 K_3=40 P_1 (i,t)= K_1*(S_MIN(i,t)-STO(i,t)).^2 P_2 (i,t)= K_2*(STO(i,t)-S_MAX(i,t)).^2 P_3 (i,t)= K_3*(STO(i,T)-STO(i,1)).^2 % P_1, P_2 AND P_3 WILL INSERT TO OBJECTIVE FUNCTIONS
endend%% SYMBOLIC MATH ??
XX = sym('x',[RES_COUNT*2,T]); % WATER RELEASE AND IRRIGATION
FF = sym('F',[RES_COUNT,T]); % FLOW INTO RESERVOIR
SS00 = sym('S0',[RES_COUNT,T]); % INITIAL STORAGE
CC = sym({'c1','c2','c3','c4'}.','real'); % CONSTANT
for t = 1:T TOTFLOW(1:RES_COUNT,t) = M*XX(1:RES_COUNT,t) + N*XX(RES_COUNT+1:end,t);endt = 1SS = cell(RES_COUNT,T);for i = 1:RES_COUNT SS{i,t} = SS00(i,t) + CC(1)*(FF(i,t)-TOTFLOW(i,t));endfor t = 2:T for ii = 1:RES_COUNT SS{ii,t} = SS{ii,t-1} + CC(1)*(FF(ii,t)-TOTFLOW(ii,t)); endend%celldisp(SS)
% TOTAL EN AND IR (MINUS FOR MAX TO MIN)
for t = 1:T for i = 1:RES_COUNT OBJ1T(i,t) = XX(i,t); OBJ1 = -sum(OBJ1T); OBJ2T(i,t) = XX(RES_COUNT+i,t); OBJ2 = -sum(OBJ2T); endend% GENERATE A MATLAB FILE
matlabFunction(OBJ1,'vars',{XX},'file','OBJI1');matlabFunction(OBJ2,'vars',{XX},'file','OBJI2');%%
% HOW CAN I SETUP THIS FUNCTION?
% TWO OBJECTIVE FUNCTION, FOR EACH TIMESTEP:
% 1) MAXIMIZE TOTAL RELEASE FOR ENERGY
% 2) MAXIMIZE TOTAL ABSTRACTION FOR IRRIGATION
% % fitnessfcn = @(EN,IR)[OBJ_1, OBJ_2]
% % OBJ_1 =sum(NN*EN - (P_1 + P_2 + P_3) )
% OBJ_2 =sum(N*IR - (P_1 + P_2 + P_3) )
% % [x,fval] = gamultiobj(@OBJ1,1,[],[],[],[],lb,ub,options)?
Best Answer