Matlab - Ayuda con un programa!!! (Algoritmo Genetico MultiObjetivo)

 
Vista:
Imágen de perfil de Louis

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

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda con un programa!!! (Algoritmo Genetico MultiObjetivo)

Publicado por Royeth (1818 intervenciones) el 04/11/2016 18:34:07
la variable x que es la población es de una fila con 24 columnas , esta según tu definición del algoritmo no tiene ninguna restrinción ni nada por el estilo así que en el código que tienes tu población adquiere valor decimales como 7.8339 4.8647 3.1654 -4.2843 0.9611 2.4038 7.0321 8.0750 9.4321 -2.9913 mientras que cuando tratas de encontrar cada uno de estos valores en las combinaciones de bombas que tienes que prácticamente son números binarios por lo que ya desde el comienzo tu valor F va a ser vacío porque no va a poder encontrar nada, es decir hay problemas en las limitaciones de la población , te recomiendo que plantes bien cómo van a ser los cromosomas de los individuos , qué valores pueden tener y qué valores no pueden tener , es decir que los limites y normalmente estos problemas de industria no son multiobjetivos ya que la potencia requerida , el mantenimiento , superficies y demás se tienen en cuenta en un solo objetivo que es minimizar el costo de operación, te recomiendo que plantees tu propio algoritmo genético creo que te sería de màs utilidad porque sería específico para tu problema

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar