Matlab - Optimizacion

 
Vista:
sin imagen de perfil

Optimizacion

Publicado por Julian (2 intervenciones) el 24/11/2015 17:20:38
Saludos,
Tengo que programar lo siguiente en matlab y la verdad es que no se me ocurre como:
Tengo 3 aislantes y cada uno tiene su respectivo espesor y precio:
capa-----Espesor[mm]--------Precio[$/capa]
#1 -------- 130 -------- -------- 0.9
#2 -------- 250 ------------------- 1.2
#3 -------- 300 ------------------- 1.8
La idea es que al dar un espesor total, el programa escoja la combinación de capas que igualen o superen el espesor total y sea la mas económica.
Por ejemplo, si doy un espesor total de 800 mm, la cominación ideal sería utilizar 1 capa del aislante #3 y 2 capas del aislante #2 que daría un total 800 mm y tendría un costo de 4.2$.
Otro ejemplo, si doy un espesor de 560 mm, la combinacion mas optima sería 2 capas del #2 y 1 capa del #1 que sumaría un espesor de 630 mm (630>560) y tendrían un costo total de 3.3$.
Por favor si alguien tiene los conocimientos para realizar esta labor le agradecería mucho su ayuda.
Julian, estudiante universitario.
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 Daniel
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Optimizacion

Publicado por Daniel (264 intervenciones) el 24/11/2015 20:46:33
Acá te paso una función que hace eso que planteas
copiala y escribe en el command window precios y te pedirá el espesor total o precios(espesortotal) directamente

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
28
29
function precios(dt)
if nargin==0
dt=input('ingrese el espesor total: ');
end
clc
e=[130 250 300]; % espesores de cada placa
pu=[.9 1.2 1.8]; % precios de cada placa
%dt=8000; % espesor total
p=inf;
for n1=0:ceil(dt/e(1))
    for n2=0:ceil((dt-n1*e(1))/e(2))
        n3=ceil((dt-n1*e(1)-n2*e(2))/e(3));
 
        if [n1 n2 n3]*pu'<p
            p=[n1 n2 n3]*pu';
            nt=[n1 n2 n3];
        end
 
    end
end
formatSpec = '%5.2g\t';
disp(['Para cumbrir en espesor de '  num2str(dt)])
disp(' ')
disp(['Materiales        '  num2str([1  2  3],formatSpec)])
disp('----------------------------------')
disp(['Cantidades        ' num2str(nt,formatSpec)])
disp(' ')
disp(['Precio Total  : ' num2str(p)])
disp(['Espesor Total : ' num2str(sum(nt.*e))])

Comentanos como te fue

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Optimizacion

Publicado por Julian (2 intervenciones) el 24/11/2015 21:08:43
Señor Daniel,
Es justo lo que necesitaba. Se lo agradezco muchísimo.
Este foro es genial.
Saludos desde Colombia!
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