
Ayuda con un programa!!! (Algoritmo Genetico MultiObjetivo)
Publicado por Louis (2 intervenciones) el 04/11/2016 13:20:39
Que tal programadores!! Estoy intentando optimizar un sistema de bombas mediante un algoritmo genetico multiobjetivo en matlab pero me encontre con un cuello de botella que no puedo arreglar D:!!
La idea es que el programa me devuelva 24 valores (Cada uno representaria una combinacion de bombas por hora en el día) pero solo errores y errores.
Les paso el codigo a ver si me ayudan a identificar el problema
La idea es que el programa me devuelva 24 valores (Cada uno representaria una combinacion de bombas por hora en el día) pero solo errores y errores.
Les paso el codigo a ver si me ayudan a identificar el problema
1
2
3
4
5
6
7
8
%MAIN
numberOfVariables = 24;
A=[]; b=[];
Aeq=[]; beq=[];
lb=[];
ub=[];
options = gaoptimset('PlotFcn',{@gaplotpareto});
[x,fval] = gamultiobj(@bombas,numberOfVariables,A,b,Aeq,beq,lb,ub,options);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%Funcion fitness objetivo
function y = bombas(x)
[q,p,d] = valores(x);
CL=1; %Costo bajo
CH=2; %Costo alto
S=2600;%m^2 %Superficie del reservorio
h(x(24))=3;%m %A las 24 horas la altura en el reservorio debe ser de 3 metros
%Costo de energia electrica
y(1)=CL.*sum(p.*(x(1:17)))+CH.*sum(p.*(x(18:22)))+CL.*sum(p.*(x(23:24)));
%Costo de mantenimiento
y(2)=sum(abs(max(x(1:24)-x(0:23))))+(abs(max(x(1)-x(1:24)))/2);
%Dif. de nivel del reservorio
y(3)=h(x(0:23))+(q(x(1:24))-d(x(1:24)))/S;
%Potencia máxima
y(4)=max(p(x(1:24)));
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function [Q,Pot,D] = valores(x)
%Combinaciones de bombas
Bombas=[00000 00001 00010 00011 00100 00101 00110 00111;
01000 01001 01010 01011 01100 01101 01110 01111;
10000 10001 10010 10011 10100 10101 10110 10111;
11000 11001 11010 11011 11100 11101 11110 11111];
%Caudal por combinacion
Caudal=[0 1800 828 2600 828 2600 1650 3450;
1440 3235 2260 4060 2260 4060 3090 4890;
1800 3600 2620 4420 2620 4420 3450 5250;
3235 5035 4060 5860 4060 5860 4890 6690];
%Potencia por combinacion
Potencia=[0 595 260 855 260 855 520 1115;
445 1040 705 1300 705 1300 965 1560;
595 1190 855 1450 855 1450 1115 1710;
1040 1635 1300 1895 1300 1895 1560 2155];
%Demanda por hora
Demanda=[1.92 1.55 1.55 1.55 1.92 2.73 3.91 5.03;
5.84 6.22 6.22 6.22 5.47 5.47 5.84 5.84;
5.84 5.47 5.03 4.28 3.91 3.10 2.73 2.36];
for i=1:size(x,2)
F=find(x(:,i)==Bombas);
Q(i)=Caudal(F);
Pot(i)=Potencia(F);
D(i)=Demanda(i);
end
Valora esta pregunta


0