Informe Metodo Transporte

UNIVERSIDAD TÉCNICA DE MACHALA UNIDAD ACADÉMICA DE INGENIERÍA CIVIL CARRERA DE INGENIERIA DE SISTEMAS TEMA: DESARROLLA

Views 75 Downloads 0 File size 757KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

UNIVERSIDAD TÉCNICA DE MACHALA UNIDAD ACADÉMICA DE INGENIERÍA CIVIL CARRERA DE INGENIERIA DE SISTEMAS

TEMA:

DESARROLLAR UN PROGRAMA QUE PERMITA RESOLVER EL MÉTODO DE TRANSPORTE: MÁXIMO Y MÍNIMO

Autor: CARLOS HERRERA DIAZ

Profesor: Ing. Gustavo Hilzinger

2014

INDICE INTRODUCCIÓN ............................................................................................................................... 3 MARCO TEÓRICO ............................................................................................................................ 4 CODIFICACIÓN ................................................................................................................................. 6 MANUAL DE USUARIO .................................................................................................................26 BIBLIOGRAFÍA................................................................................................................................29

CARLOS HERRERA

Página 2

INTRODUCCIÓN

Este trabajo de programación tiene como propósito desarrollar un software que permita optimizar los costos en cuanto al método de transporte, ya sea la optimización máxima o la optimización mínima.

La Investigación de operaciones utiliza la programación lineal para hacer frente a los problemas de transporte. La programación lineal es un proceso de planificación matemática que consiste en la asignación de recursos de la manera más eficiente. Esto incluye el capital físico y humano.

Los problemas de transporte con respecto a la investigación de operaciones trabajan con la distribución física de productos de un lugar a otro. Debido a los costos involucrados en el transporte de mercancías, es de gran interés para las empresas del rubro optimizar su eficiencia

CARLOS HERRERA

Página 3

MARCO TEÓRICO Es un método de programación lineal para la asignación de artículos de un conjunto de origines a un conjunto de destinos de tal manera que se optimice la función objetivo. Esta técnica es particularmente usada en organizaciones que producen el mismo producto en numerosas plantas y que envía sus productos a diferentes destinos (Centros de distribución, almacenes). También se aplica en distribución, análisis de localización de plantas y programación de la producción. Se han desarrollado diferentes enfoques para resolver este problema de distribución, tales como: El método de la esquina noroeste, el método modificado de la esquina noroeste (celda mínima), método del trampolín (Cruce de arroyo, stepping stone), método de la distribución modificada (MODI), método de aproximación de Vogel y el método simplex. Se cubrirán únicamente en estas notas los siguientes métodos: a) Esquina Noroeste b) Modificado de la esquina Noroeste. c) Aproximación de Vogel. d) Del trampolín (Stepping stone) El transporte desempeña un papel importante en la economía y en las decisiones administrativas. Con frecuencia la disponibilidad de transporte económico es crítica para la sobre-vivencia de una empresa.

El modelo de transporte busca determinar un plan de transporte de una mercancía de varias fuentes a varios destinos. Los datos del modelo son: 1. 2.

Nivel de oferta en cada fuente y la cantidad de demanda en cada destino. El costo de transporte unitario de la mercancía a cada destino.

CARLOS HERRERA

Página 4

Como solo hay una mercancía un destino puede recibir su demanda de una o más fuentes. El objetivo del modelo es el de determinar la cantidad que se enviará de cada fuente a cada destino, tal que se minimice el costo del transporte total. La suposición básica del modelo es que el costo del transporte en una ruta es directamente proporcional al número de unidades transportadas. La definición de “unidad de transporte” variará dependiendo de la “mercancía” que se transporte.

Ejemplo Problema de transporte Supóngase que un fabricante tiene tres plantas que producen el mismo producto. Estas plantas a su vez mandan el producto a cuatro almacenes. Cada planta puede mandar productos a todos los almacenes, pero el costo de transporte varía con las diferentes combinaciones. El problema es determinar la cantidad que cada planta debe mandar a cada almacén con el fin de minimizar el costo total de transporte. La manera más fácil de reconocer un problema de transporte es por su naturaleza o estructura “de-hacia”: de un origen hacia un destino, de una fuente hacia un usuario, del presente hacia el futuro, de aquí hacia allá. Al enfrentar este tipo de problemas, la intuición dice que debe haber una manera de obtener una solución. Se conocen las fuentes y los destinos, las capacidades y demandas y los costos de cada trayectoria. Debe haber una combinación óptima que minimice el costo (o maximice la ganancia). La dificultad estriba en el gran número de combinaciones posibles.

CARLOS HERRERA

Página 5

CODIFICACIÓN Detallaremos los algoritmos y las líneas de código que he utilizado para desarrollar el proyecto. 

Interfaz de Bienvenida:

public Principal() { initComponents(); Image icono = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("imagenes/icono.png")); setIconImage(icono); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); } private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: int op = JOptionPane.showConfirmDialog(null, "¿Desea salir del programa?", "Método de Transporte", JOptionPane.YES_NO_OPTION); if (op == 0) { System.exit(0); }} private void btnMaximoActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: Maximo maximo = new Maximo(); maximo.setVisible(true); dispose(); }

CARLOS HERRERA

Página 6

private void btnMinimoActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: Minimo minimo = new Minimo(); minimo.setVisible(true); dispose(); }

Interfaz de Cálculo del máximo

public Maximo() { initComponents(); Image icono = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("imagenes/icono.png")); setIconImage(icono); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(490, 385); setLocationRelativeTo(null); } private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: Principal principal = new Principal(); principal.setVisible(true); dispose(); } private void btnMostrarActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: //Llamar ventana de resultados

CARLOS HERRERA

Página 7

present.txtQ1.setText(txtQ1); present.txtQ2.setText(txtQ2); //

prese.setModal(true); present.setVisible(true); } private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: iniciarMetodoTransporte(); btnCalcular.setEnabled(false); btnMostrar.setEnabled(true); } //Metodos que calcularán el resultado: public void ValorInicial() { salir = vi = 1; do { vp = costo[nc][0] - vi;//160 - 1 = 159 if (vp 0) { hh = 0; do { if (hh != pc && tabla[hh][ii] > 0) { if (tabla[hh][pf] > 0) { if (tabla[hh][pf] - tabla[pc][ii] > 0) {

CARLOS HERRERA

Página 14

tabla[pc][pf] = tabla[pc][ii]; tabla[pc][ii] = 0; tabla[hh][ii] = tabla[hh][ii] + tabla[pc][pf]; tabla[hh][pf] = tabla[hh][pf] - tabla[pc][pf]; } else { tabla[pc][pf] = tabla[hh][pf]; tabla[pc][ii] = tabla[pc][ii] - tabla[hh][pf]; tabla[hh][ii] = tabla[hh][ii] + tabla[pc][pf]; tabla[hh][pf] = 0; } hh = nc - 1; ii = 2; } } hh++; } while (hh != nc); } ii++; } while (ii != 3); } public void iniciarMetodoTransporte(){ construirMatrizCostos(); ValorInicial(); do { Inicializar(); IndicadorFilaColumna(); sp = IndicadorCasillero();

if (sp == 0) { //Esta es la matriz de la 1era respuesta: tabla Respuesta(1); present.presentarEnTabla(tabla, nc, indicadorPresentarTabla, costo); //presentarEnTabla(tabla); }

CARLOS HERRERA

Página 15

if (sp != 0) { SeleccionRuta(); } } while (sp != 0); spp = OtraRespuesta(); for (i = 0; i < spp; i++) { NuevaRespuesta(); Respuesta(2); indicadorPresentarTabla++; present.presentarEnTabla(tabla, nc, indicadorPresentarTabla, costo); //presentarEnTabla(tabla); } }



Interfaz de Cálculo del mínimo

int salir, c, dos, f, sc, vpc, i, sf, vpf, mf, mc, h, cc, ic, reg, sumao, ir, qmx, indicadorPresentarTabla = 0; int iff, cci, cf, vi, vp, nc = 4; int[][] costo = new int[6][6]; int[][] tabla = new int[5][5]; int[][] ind = new int[6][6]; int cm, fm, mi, mult, sp, cresp, pc, pf, ii, hh, spp, gf, gc, sumad; int[] x = new int[15]; char[] texto = new char[4]; public static String txtQ1 = "", txtQ2 = "";

PresentarResultados1 present = new PresentarResultados1(this, true);

CARLOS HERRERA

Página 16

public Minimo() { initComponents(); Image icono = Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource("imagenes/icono.png")); setIconImage(icono); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(490, 385); setLocationRelativeTo(null); } public void ValorInicial() { salir = vi = 1; do { vp = costo[nc][0] - vi;//160 - 1 = 159 if (vp 0) { if (ind[nc][h] != 1000) { ind[i][3] = costo[i][h] - ind[nc][h]; } else { if (ind[i][3] != 1000) { ind[nc][h] = costo[i][h] - ind[i][3]; } else { reg = 1; } } } } if (reg == 1) { h--; } } } } int IndicadorCasillero() { for (h = 0; h < nc; h++) { for (i = 0; i < 3; i++) { ind[h][i] = costo[h][i] - ind[h][3] - ind[nc][i];

CARLOS HERRERA

Página 20

if (ind[h][i] < 0) { cm = h; fm = i; mi = costo[h][i] * ind[h][i]; }

}

}

//Indicador para Maximo sp = 0; for (h = 0; h < nc; h++) { for (i = 0; i < 3; i++) { if (ind[h][i] < 0) { mult = costo[h][i] * ind[h][i]; if (mult > mi) { cm = h; fm = i; mi = mult; } sp++; } } } return (sp); } void SeleccionRuta() { i = 0; do { if (i != fm && tabla[cm][i] > 0) { h = 0; do { if (h != cm && tabla[h][i] > 0) { if (tabla[h][fm] > 0) { if (tabla[h][fm] - tabla[cm][i] > 0) { tabla[cm][fm] = tabla[cm][i]; tabla[cm][i] = 0; tabla[h][i] = tabla[h][i] + tabla[cm][fm]; tabla[h][fm] = tabla[h][fm] - tabla[cm][fm]; } else { tabla[cm][fm] = tabla[h][fm];

CARLOS HERRERA

Página 21

tabla[cm][i] = tabla[cm][i] - tabla[h][fm]; tabla[h][i] = tabla[h][i] + tabla[cm][fm]; tabla[h][fm] = 0; } h = nc - 1; i = 2; } } h++; } while (h != nc); } i++; } while (i != 3); } void Respuesta(int indicador) { qmx = ir = 0; ArrayList array = new ArrayList(); for (h = 0; h < 3; h++) { for (i = 0; i < nc; i++) { qmx = (costo[i][h] * tabla[i][h]) + qmx; x[ir] = tabla[i][h]; ir++; } } for (i = 0; i < (nc * 3); i++) { array.add("X" + (i + 1) + " = " + x[i]); } array.add("" + qmx); if (indicador == 1) { txtQ1 = "Q = " + array.get(array.size() - 1); } if (indicador == 2) { txtQ2 = "Q = " + array.get(array.size() - 1); } }

CARLOS HERRERA

Página 22

public int OtraRespuesta() { cresp = 0; for (h = 0; h < nc; h++) { for (i = 0; i < 3; i++) { if (ind[h][i] == 0 && tabla[h][i] == 0) { cresp++; }

}

}

return (cresp); } public void NuevaRespuesta() { for (h = 0; h < nc; h++) { for (i = 0; i < 3; i++) { if (ind[h][i] == 0 && tabla[h][i] == 0) { pc = h; pf = i; i = 3; h = nc; } } } ii = 0; do { if (ii != pf && tabla[pc][ii] > 0) { hh = 0; do { if (hh != pc && tabla[hh][ii] > 0) { if (tabla[hh][pf] > 0) { if (tabla[hh][pf] - tabla[pc][ii] > 0) { tabla[pc][pf] = tabla[pc][ii]; tabla[pc][ii] = 0; tabla[hh][ii] = tabla[hh][ii] + tabla[pc][pf]; tabla[hh][pf] = tabla[hh][pf] - tabla[pc][pf]; } else { tabla[pc][pf] = tabla[hh][pf]; tabla[pc][ii] = tabla[pc][ii] - tabla[hh][pf]; tabla[hh][ii] = tabla[hh][ii] + tabla[pc][pf]; tabla[hh][pf] = 0;

CARLOS HERRERA

Página 23

} hh = nc - 1; ii = 2; } } hh++; } while (hh != nc); } ii++; } while (ii != 3); } public void iniciarMetodoTransporte(){ construirMatrizCostos(); ValorInicial(); do { Inicializar(); IndicadorFilaColumna(); sp = IndicadorCasillero if (sp == 0) { Respuesta(1); present.presentarEnTabla(tabla, nc, indicadorPresentarTabla, costo); } if (sp != 0) { SeleccionRuta(); } } while (sp != 0); spp = OtraRespuesta(); for (i = 0; i < spp; i++) { NuevaRespuesta(); Respuesta(2); indicadorPresentarTabla++; present.presentarEnTabla(tabla, nc, indicadorPresentarTabla, costo); } } public void construirMatrizCostos() { try { costo[0][0] = Integer.parseInt(txt00.getText().trim());

CARLOS HERRERA

Página 24

costo[0][1] = Integer.parseInt(txt10.getText().trim()); costo[0][2] = Integer.parseInt(txt20.getText().trim()); costo[0][3] = Integer.parseInt(d1.getText().trim()); costo[1][0] = Integer.parseInt(txt01.getText().trim()); costo[1][1] = Integer.parseInt(txt11.getText().trim()); costo[1][2] = Integer.parseInt(txt21.getText().trim()); costo[1][3] = Integer.parseInt(d2.getText().trim()); costo[2][0] = Integer.parseInt(txt02.getText().trim()); costo[2][1] = Integer.parseInt(txt12.getText().trim()); costo[2][2] = Integer.parseInt(txt22.getText().trim()); costo[2][3] = Integer.parseInt(d3.getText().trim()); costo[4][0] = Integer.parseInt(o1.getText()); costo[3][0] = costo[4][0]; costo[4][1] = Integer.parseInt(o2.getText()); costo[3][1] = costo[4][1]; costo[4][2] = Integer.parseInt(o3.getText()); costo[3][2] = costo[4][2]; sumao = costo[nc][0]+costo[nc][2]+costo[nc][1]; sumad = costo[0][3]+costo[1][3]+costo[2][3]; if (sumad > sumao) { JOptionPane.showMessageDialog(this, "Las demandas no deben ser mayores que las ofertas", "Método Transporte", 0); } else if (sumad != sumao) { costo[3][0] = costo[3][1] = costo[3][2] = 0; costo[3][3] = sumao - sumad; costo[4][3] = sumao; nc = 4; } else { nc = 3; } } catch (Exception error) { JOptionPane.showMessageDialog(null, "¡Ha ocurrido un error, revise los datos!\n" + error.getMessage(), "Método Transporte", 0); } }

CARLOS HERRERA

Página 25

MANUAL DE USUARIO La interfaz de inicio es la siguiente:

Podemos elegir entre calcular mínimo o máximo. También encontramos la opción de salir. Si elegimos el máximo:

Llenamos los datos que nos solicite y luego le damos clic en calcular. Una vez hecho esto, se habilitará el botón de ver resultados, podemos darle clic y ver la respuesta máxima. Nos aparecerá la siguiente ventana:

CARLOS HERRERA

Página 26

Si damos clic en observaciones, nos saldrá este mensaje:

Si elegimos el mínimo:

CARLOS HERRERA

Página 27

Llenamos los datos que nos solicite y luego le damos clic en calcular. Una vez hecho esto, se habilitará el botón de ver resultados, podemos darle clic y ver la respuesta máxima. Nos aparecerá la siguiente ventana:

Si damos clic en observaciones, nos saldrá este mensaje:

CARLOS HERRERA

Página 28

BIBLIOGRAFÍA 

http://www.monografias.com/trabajos-pdf4/metodo-transporte/metodotransporte.pdf



http://hemaruce.angelfire.com/intro_transporte.htm



http://www.ehowenespanol.com/problemas-investigacion-operaciones-transportehechos_80650/

CARLOS HERRERA

Página 29