Multi Objective Multi Reservoir Optimization (NSGA II) Formulation

9 次查看(过去 30 天)
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
end
end
%% 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);
end
t = 1
SS = cell(RES_COUNT,T);
for i = 1:RES_COUNT
SS{i,t} = SS00(i,t) + CC(1)*(FF(i,t)-TOTFLOW(i,t));
end
for t = 2:T
for ii = 1:RES_COUNT
SS{ii,t} = SS{ii,t-1} + CC(1)*(FF(ii,t)-TOTFLOW(ii,t));
end
end
%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);
end
end
% 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)?

采纳的回答

Alan Weiss
Alan Weiss 2020-6-1
I think that you are confusing yourself by using symbolic math.
What might be worthwhile is to write this using the problem-based approach, which is somewhat symbolic-like. Use optimization variables instead of true symbolic variables. See Create Multiperiod Inventory Model in Problem-Based Framework for an example.
After formulating as much of your problem as you can this way, export the problem using prob2struct. Then you can edit the result to have two objective functions. Remember, to maximize objectives you must minimize the negative of the objectives.
Good luck,
Alan Weiss
MATLAB mathematical toolbox documentation

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Genetic Algorithm 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by