Matlab - Simulador de cubicaje de contenedores- Matlab

 
Vista:
sin imagen de perfil

Simulador de cubicaje de contenedores- Matlab

Publicado por Miguel (8 intervenciones) el 22/01/2018 20:03:53
Buenas compañeros.

No tengo mucha experiencia en matlab, sin embargo tengo que realizar un simulador de cubicaje de contenedores en matlab, y estoy teniendo unos cuantos problemas.

Un simulador de cubicaje es un simulador donde tu ingresas informacion sobre un contenedor de camion/trailer e informacion de lo que vas a llevar en el, para asi acomodarlo de la manera mas conveniente. En matlab ya llevo la mayor parte de la simulacion hecha, sin embargo, tengo un problema al momento de simular el contenido porque se empalman/sobreescriben las cajas entre si. A continuacion anexo mis archivos e imagenes del programa de matlab esperando que alguno de ustedes pueda ayudarme.

codigo1
codigo2
guideSimulador
errorSimulacion
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
sin imagen de perfil

Simulador de cubicaje de contenedores- Matlab

Publicado por Miguel (8 intervenciones) el 29/01/2018 18:59:29
Ya logre un avance con la simulación, sin embargo sigo teniendo un problema, se siguen empalmando pero solo cuando ya no caben en la misma fila como se muestra a continuacion.

Captura

Aqui esta le codigo del boton de simular para solo cambiarse

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
% --- Executes on button press in btnSimular.
function btnSimular_Callback(hObject, eventdata, handles)
% hObject    handle to btnSimular (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
datos = get(handles.tabla,'data');
c=1;
h=sum(datos(:,5))-1;
px1=0;py1=0;pz1=0;
for g=2:datos(:,:)
    ColList='mcrgb';
    col=randi([1 5]);
    if(c<=h)
        l=1;
        n=(datos(1,3)/datos(g,3));
        n=floor(n);
        m=(datos(1,4)/datos(g,4));
        m=floor(m);
        o=(datos(1,2)/datos(g,2));
        o=floor(o);
    for r=1:o
        if(c<=h && l<= datos(g,5))
        for q=1:m
            if(c<=h && l<= datos(g,5))
            for p=1:n
                if(datos(g,6)==0 && datos(g,7)==0)
                    x=[(r-1)*(datos(g,2)) r*(datos(g,2))]; y=[(p-1)*datos(g,3) (p)*datos(g,3)]; z=[(q-1)*(datos(g,4)) (q)*(datos(g,4))];
                elseif(datos(g,6)==1 && datos(g,7)==0)
                    x=[(q-1)*(datos(g,2)) q*(datos(g,2))]; y=[(p-1)*datos(g,3) (p)*datos(g,3)]; z=[0 (datos(g,4))];
                elseif(datos(g,6)==0 && datos(g,7)==1)
                    x=[(r-1)*(datos(g,2)) r*(datos(g,2))]; y=[(p-1)*datos(g,3) (p)*datos(g,3)]; z=[(q-1)*(datos(g,4)) (q)*(datos(g,4))];
                elseif(datos(g,6)==1 && datos(g,7)==1)
                    x=[(q-1)*(datos(g,2)) q*(datos(g,2))]; y=[(p-1)*datos(g,3) (p)*datos(g,3)]; z=[0 (datos(g,4))];
                end
                if(c<=h && l<= datos(g,5))
                    l=l+1;
                    c=c+1;
                    X=[x(1) x(2) x(2) x(1) x(1) x(1) x(1) x(2) x(2) x(1)];
                    Y=[y(1) y(1) y(2) y(2) y(1) y(1) y(2) y(2) y(1) y(1)];
                    Z=[z(1) z(1) z(1) z(1) z(1) z(2) z(2) z(2) z(2) z(2)];
                    figure(gcf);
                    plot3((px1+X),(py1+Y),(pz1+Z),ColList(col),'linewidth',1);
                    hold on;
                    pause(0.2);
                    X1=[x(1) x(1) x(2) x(2) x(1) x(1) x(1) x(2) x(2) x(1)];
                    Y1=[y(1) y(1) y(1) y(1) y(1) y(2) y(2) y(2) y(2) y(2)];
                    Z1=[z(1) z(2) z(2) z(1) z(1) z(1) z(2) z(2) z(1) z(1)];
                    plot3((px1+X1),(py1+Y1),(pz1+Z1),ColList(col),'linewidth',1);
                    txt=num2str(g-1);
                    pause(0.2);
                elseif(c*datos(g,3)<datos(1,3))
                    text(px1+(x(2)/2),py1+(y(2)/2),pz1+(z(2)/2),txt,'fontsize',15)
                    py1=((p-1)*datos(g,3))+py1;
                    break;
                elseif (c*datos(g,3)>datos(1,3))
                    text(px1+(x(2)/2),py1+(y(2)/2),pz1+(z(2)/2),txt,'fontsize',15)
                    py1=0;
                    break;
                end
            end
            elseif((c<=n+m && datos(g,6) ==0))
                pz1=((q-2)*(datos(g,4)))+pz1;
                break;
            elseif(c<=n+m && datos(g,6) ==1)
                px1=((q-2)*(datos(g,2)))+px1;
                break;
            elseif(c*datos(g,4)>datos(1,4))
                pz1=0;
                break;
            end
        end
        elseif(datos(g,6)==0)
            px1=0;
            break;
        elseif(datos(g,6)==1)
            pz1=0;
            break;
        else
            px1=px1+((r-1)*(datos(g,2)));
            break;
        end
    end
    else
        break;
    end
end
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
sin imagen de perfil

Simulador de cubicaje de contenedores- Matlab

Publicado por Álvaro (32 intervenciones) el 02/02/2018 09:00:12
Buenas!

Disculpa por no aportar código, pero me pillas liado trabajando.

Por mi experiencia con GUIDE, al pasar de una función a otra las variables se borran del workspace y eso puede ser lo que te pase.

No sé cómo vas introduciendo los datos, ¿cada valor que introduces te lo dibuja inmediatamente o vas agregando los paquetes y luego le das a simular?

Para asegurar que no te sobreescriba, yo crearía un handle donde vayas almacenando las coordenadas prohibidas, donde los siguientes paquetes no podrán ser colocados.
Un handle es un tipo de variable que es visible para el resto de funciones de la GUI; para ello tienes que invocarlo al principio del código, donde pone 'openingFCN' o algo así; ahí creas el handle como: handle.coord_prohibidas=[]; (por ejemplo) y es muy importante que lo guardes usando guidata(hObject, handles) justo después y cada vez que lo invoques o modifiques, ya que si no no te actualiza los datos.

A ver si consigues avanzar con eso, un saludo!
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

Simulador de cubicaje de contenedores- Matlab

Publicado por Miguel (8 intervenciones) el 02/02/2018 15:35:12
Gracias por la respuesta, la probaré, Lo que hacia era introducir valores en una tabla y a partir de ciclos formativos dibujarlos, primero introducía todos los paquetes o grupos de paquetes a simular y después le daba al botón simular.
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

Simulador de cubicaje de contenedores- Matlab

Publicado por Miguel (8 intervenciones) el 03/03/2018 17:43:10
Lo he estado intentando pero no he tenido exito, no se si podrias explicarme un poquito mejor lo de las coordenadas prohibidas, o mas bien como declararlas o utilizarlas, nuevamente gracias por su respuesta
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
sin imagen de perfil

Simulador de cubicaje de contenedores- Matlab

Publicado por Álvaro (32 intervenciones) el 06/03/2018 10:49:34
Buenas!

Si puedes, para ayudarte mejor, me gustaría que me mandaras por correo el código, con comentarios con % en cada variable donde me expliques qué hace qué y así poder mandarte el código según mi punto de vista, ya que cada uno programa de distinta forma. Además así puedo trastearlo y ayudarte mejor o, si no te importa, compártelo por aquí adjuntándolo.

Piénsatelo y me mandas un correo a [email protected] con lo que sea.

Un saludo.
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

Simulador de cubicaje de contenedores- Matlab

Publicado por Miguel (8 intervenciones) el 06/03/2018 17:47:56
De acuerdo, muchas gracias le mando el correo con el archivo en matlab ya con comentarios
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
sin imagen de perfil

Simulador de cubicaje de contenedores- Matlab

Publicado por Álvaro (32 intervenciones) el 12/03/2018 08:27:36
He estado revisando el código y por la sensación que me da, cuando se introducen paquetes y se da al botón simular, estos se colocan en las mismas posiciones en las que fueron guardados, es decir, si guardo 60 paquetes estos se colocan en orden 1º, 2º, 3º... 60º.
Para mí el principal problema está ahí, porque es mucho más complejo que eso. A mi modo de ver las cosas habría que calcular todas las combinaciones posibles en las que los paquetes que guardo pueden ser colocados sin sobrepasar las dimensiones del contenedor, teniendo en cuenta que los paquetes pueden ser orientados de varias formas si no son cubos.

Voy a seguir dándole una pensada
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

Simulador de cubicaje de contenedores- Matlab

Publicado por Miguel (8 intervenciones) el 12/03/2018 16:04:13
En ese caso, en un principio trate de guiarme con este sitio, no sé si le sea de ayuda

http://www.publicaciones.gomsa.com/wordpress/2014/08/acondicionamiento-y-cubicaje-de-carga-herramientas-sencillas-para-la-competitividad-de-las-empresas/

Creo que está bien explicado para obtener la más conveniente al momento de simular las cajas
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
sin imagen de perfil

Simulador de cubicaje de contenedores- Matlab

Publicado por Álvaro (32 intervenciones) el 13/03/2018 08:26:19
El problema sigue estando ahí, porque tenemos dos problemas completamente distintos si intentamos colocar bultos con las mismas dimensiones (como el problema de los televisores) o bultos de distintas dimensiones.
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

Simulador de cubicaje de contenedores- Matlab

Publicado por Miguel (8 intervenciones) el 13/03/2018 19:30:46
Y si buscamos reestructurar todo el programa, no se, quizás se puedan emplear clases para una programación orientada a objetos, e incluso quizás nos pueda facilitar todo, o en el peor de los casos el uso de otro software, solo que la pregunta seria ¿Cuál?

De momento seguiré trabajando con este mismo que ya tengo, y cualquier avance lo pondré aqui
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
sin imagen de perfil

Simulador de cubicaje de contenedores- Matlab

Publicado por Álvaro (32 intervenciones) el 15/03/2018 08:10:18
Reestructurar todo no es necesario, sólo hace falta implementar un par de funciones; únicamente intentaba darte mi punto de vista a tu problema, ya que supongo que lo interesante de un simulador que te cubique es que también lo haga de la forma más óptima para minimizar el volumen muerto del contenedor (el volumen en el que no cabe ningún paquete)
Pensaba que era algo que me llevaría menos tiempo, pero eso es bastante complejo.

Esta tarde tengo un hueco así que intentaré mandarte esta noche al correo mi solución para lo de las coordenadas prohibidas.

Un saludo
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

Simulador de cubicaje de contenedores- Matlab

Publicado por Miguel (8 intervenciones) el 16/03/2018 07:18:18
Perfecto, actualmente sigo trabajando en el simulador, si encuentro algo que pueda ser de ayuda lo comentaré aquí
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