You are on page 1of 29

UNIVERSIDAD TCNICA DE MACHALA

UNIDAD ACADMICA DE INGENIERA CIVIL


CARRERA DE INGENIERIA DE SISTEMAS

TEMA:

DESARROLLAR UN PROGRAMA QUE PERMITA
RESOLVER EL MTODO DE TRANSPORTE:
MXIMO Y MNIMO

Autor:
CARLOS HERRERA DIAZ

Profesor:
Ing. Gustavo Hilzinger

2014

CARLOS HERRERA Pgina 2


INDICE

INTRODUCCIN ............................................................................................................................... 3
MARCO TERICO ............................................................................................................................ 4
CODIFICACIN ................................................................................................................................. 6
MANUAL DE USUARIO ................................................................................................................. 26
BIBLIOGRAFA ................................................................................................................................ 29





















CARLOS HERRERA Pgina 3







INTRODUCCIN



Este trabajo de programacin tiene como propsito desarrollar un software que
permita optimizar los costos en cuanto al mtodo de transporte, ya sea la
optimizacin mxima o la optimizacin mnima.

La Investigacin de operaciones utiliza la programacin lineal para hacer frente
a los problemas de transporte. La programacin lineal es un proceso de
planificacin matemtica que consiste en la asignacin de recursos de la
manera ms eficiente. Esto incluye el capital fsico y humano.

Los problemas de transporte con respecto a la investigacin de operaciones
trabajan con la distribucin fsica de productos de un lugar a otro. Debido a los
costos involucrados en el transporte de mercancas, es de gran inters para las
empresas del rubro optimizar su eficiencia
CARLOS HERRERA Pgina 4

MARCO TERICO

Es un mtodo de programacin lineal para la asignacin de artculos de un
conjunto de origines a un conjunto de destinos de tal manera que se optimice la
funcin objetivo.

Esta tcnica es particularmente usada en organizaciones que producen el
mismo producto en numerosas plantas y que enva sus productos a diferentes
destinos (Centros de distribucin, almacenes). Tambin se aplica en
distribucin, anlisis de localizacin de plantas y programacin de la
produccin.

Se han desarrollado diferentes enfoques para resolver este problema de
distribucin, tales como: El mtodo de la esquina noroeste, el mtodo
modificado de la esquina noroeste (celda mnima), mtodo del trampoln (Cruce
de arroyo, stepping stone), mtodo de la distribucin modificada (MODI),
mtodo de aproximacin de Vogel y el mtodo simplex.

Se cubrirn nicamente en estas notas los siguientes mtodos:
a) Esquina Noroeste
b) Modificado de la esquina Noroeste.
c) Aproximacin de Vogel.
d) Del trampoln (Stepping stone)

El transporte desempea un papel importante en la economa y en las
decisiones administrativas. Con frecuencia la disponibilidad de transporte
econmico es crtica para la sobre-vivencia de una empresa.

El modelo de transporte busca determinar un plan de transporte de una
mercanca de varias fuentes a varios destinos. Los datos del modelo son:
1. Nivel de oferta en cada fuente y la cantidad de demanda en cada
destino.
2. El costo de transporte unitario de la mercanca a cada destino.
CARLOS HERRERA Pgina 5

Como solo hay una mercanca un destino puede recibir su demanda de una o
ms 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 suposicin bsica del modelo es que el costo del transporte en una ruta es
directamente proporcional al nmero de unidades transportadas. La definicin
de unidad de transporte variar dependiendo de la mercanca que se
transporte.

Ejemplo Problema de transporte
Supngase 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 vara con las diferentes combinaciones. El problema es determinar la
cantidad que cada planta debe mandar a cada almacn con el fin de minimizar
el costo total de transporte.
La manera ms fcil 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 intuicin dice que debe haber una manera de
obtener una solucin.
Se conocen las fuentes y los destinos, las capacidades y demandas y los
costos de cada trayectoria. Debe haber una combinacin ptima que minimice
el costo (o maximice la ganancia). La dificultad estriba en el gran nmero de
combinaciones posibles.







CARLOS HERRERA Pgina 6

CODIFICACIN

Detallaremos los algoritmos y las lneas de cdigo 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?", "Mtodo 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 Pgina 7

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

Interfaz de Clculo del mximo







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 Pgina 8

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 calcularn el resultado:
public void ValorInicial() {
salir = vi = 1;
do {
vp = costo[nc][0] - vi;//160 - 1 = 159
if (vp <= costo[nc][0] && vp <= costo[1][3])//(159 <= 160) and (159 <= 90) {
tabla[0][0] = vi;//=70
tabla[1][0] = vp;//=90
salir = 0;
} else {
vi++;
}
} while (salir != 0);
LlenarTablaInicial(0);
}
void LlenarTablaInicial(int ff)//FF = 0
{
c = dos = 0;
do {
//c =0, c = 1, 2, 3 , 4
//dos =0, dos =1, 0, 1
// FF = 1
for (f = 0; f <= ff; f++) //0 <= 0 , [0 <= 1, 1 <= 1], [0 <= 1, 1 <= 1] {
CARLOS HERRERA Pgina 9

sc = sc + tabla[c][f];//=70 despues de dar una vuelta se hace 0 para coger otro valor, =90,
=140, 0,
}
if (sc <= costo[c][3])// 70 < = 80 -> SI, 90 <= 90, 140 <= 270, 0 <= 60 {
vpc = costo[c][3] - sc;//80 - 70 VPC = 10, 90-90 VPC = 0, 270-140 VPC = 130, 60-0 VPC = 60
if (vpc <= costo[nc][ff + 1] && ff < 3)//cambiar sigual // 10 <= 150 AND 0 < 3, 0 <= 150
AND 0 < 3 , 130 <= 190 AND 1 < 3 , 60 <= 190 AND 1 < 3)
{
tabla[c][ff + 1] = vpc;//[0,1] = 10, [1,1] = 0, [2,2] = 130, [3,2] = 60
c++;//C = 1 , 2 , 3 , 4
dos++;// DOS = 1 , 2 , 1 , 2
}
}
if (dos == 2)// SI {
for (i = 0; i < c; i++) {
sf = sf + tabla[i][ff + 1];//0,1 SF = 10 , SF = 190
}
if (sf <= costo[nc][ff + 1])//10<=150, 190<= 190 {
vpf = costo[nc][ff + 1] - sf;// VPF = 150 - 10 = 140, 190-190 = 0,
if (vpf < costo[c][3] && c < nc) {
tabla[c][ff + 1] = vpf;//2,1 = 140
ff++;// FF = 1
dos = 0;
} } }
sc = sf = 0;
} while (c != nc);// 1 , 2 , 3, 4 diferente de 4
}
void Inicializar() {
ind[nc][0] = ind[nc][1] = ind[nc][2] = 1000;
ind[0][3] = ind[1][3] = ind[2][3] = 1000;
ind[3][3] = 1000;
}
void IndicadorFilaColumna() {
mc = mf = 1;
CARLOS HERRERA Pgina 10

for (h = 0; h < nc; h++){
for (i = 0; i < 3; i++)// I= 0 < 3 {
if (tabla[h][i] > 0)// [3,0] = 0 > 0 , [3,1] = 0 > 0 , [3,2] = 60 > 0
cc++;// 0
}
if (cc > mc) // {
ic = h;// IC = H = 0
mc = cc;// MC = 2
}
cc = 0;// CC = 0
}
cci = 2;
for (h = 0; h < 3; h++)// H = 0, 1, 2, {
for (i = 0; i < nc; i++)// I = 0,1,2,3 {
cf++;// CF =
} }
if (cf > mf)// MF = 1 : 4 > 2 {
iff = h;// IFF 2
mf = cf;// MF = 4
}
cf = 0;// CF = 0
}

if (mc >= mf) // 2 > 4 {
reg = ind[ic][3] = 0;
for (i = 0; i < 3; i++) {
if (tabla[ic][i] > 0) {
ind[nc][i] = costo[ic][i] - ind[ic][3];
}
}
for (h = 0; h < nc; h++) {
reg = 0;
for (i = 0; i < 3; i++) {
if (tabla[h][i] > 0) {
CARLOS HERRERA Pgina 11

if (ind[h][3] != 1000) {
ind[nc][i] = costo[h][i] - ind[h][3];
} else {
if (ind[nc][i] != 1000) {
ind[h][3] = costo[h][i] - ind[nc][i];
} else {
reg = 1;
} } }
if (reg == 1) {
h--;
}
}
} else {
reg = ind[nc][iff] = 0;
for (i = 0; i < nc; i++) // i < 4
{
if (tabla[i][iff] > 0) {
ind[i][3] = costo[i][iff] - ind[nc][iff];
}
}
for (h = 0; h < 3; h++) {
reg = 0;
for (i = 0; i < nc; i++) {
if (tabla[i][h] > 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--;
CARLOS HERRERA Pgina 12

} } } }
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];
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) {
CARLOS HERRERA Pgina 13

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];
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<Object> array = new ArrayList<Object>();
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);

CARLOS HERRERA Pgina 14

//Llenar el textfield con el resultado Q
if (indicador == 1) {
txtQ1 = "Q = " + array.get(array.size() - 1);
}
if (indicador == 2) {
txtQ2 = "Q = " + array.get(array.size() - 1);
}
}
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) {
CARLOS HERRERA Pgina 15

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 Pgina 16

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 Clculo del mnimo








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 Pgina 17


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 <= costo[nc][0] && vp <= costo[1][3]) {
tabla[0][0] = vi;//=70
tabla[1][0] = vp;//=90
salir = 0;
} else {
vi++;
}
} while (salir != 0);
LlenarTablaInicial(0);
}
void LlenarTablaInicial(int ff)//FF = 0 {
c = dos = 0;
do {
//c =0, c = 1, 2, 3 , 4
//dos =0, dos =1, 0, 1
// FF = 1
for (f = 0; f <= ff; f++) //0 <= 0 , [0 <= 1, 1 <= 1], [0 <= 1, 1 <= 1] {
sc = sc + tabla[c][f
}
CARLOS HERRERA Pgina 18

if (sc <= costo[c][3])// 70 < = 80 -> SI, 90 <= 90, 140 <= 270, 0 <= 60 {
vpc = costo[c][3] - sc;//80 - 70 VPC = 10, 90-90 VPC = 0, 270-140 VPC = 130, 60-0 VPC = 60
if (vpc <= costo[nc][ff + 1] && ff < 3 {
tabla[c][ff + 1] = vpc;//[0,1] = 10, [1,1] = 0, [2,2] = 130, [3,2] = 60
c++;//C = 1 , 2 , 3 , 4
dos++;// DOS = 1 , 2 , 1 , 2
}
}
if (dos == 2) {
for (i = 0; i < c; i++) {
sf = sf + tabla[i][ff + 1];//0,1 SF = 10 , SF = 190
}
if (sf <= costo[nc][ff + 1])//10<=150, 190<= 190 {
vpf = costo[nc][ff + 1] - sf;// VPF = 150 - 10 = 140, 190-190 = 0,
if (vpf < costo[c][3] && c < nc) {
tabla[c][ff + 1] = vpf;//2,1 = 140
ff++;// FF = 1
dos = 0;
} } }
sc = sf = 0;
} while (c != nc);// 1 , 2 , 3, 4 diferente de 4
}
void Inicializar() {
ind[nc][0] = ind[nc][1] = ind[nc][2] = 1000;
ind[0][3] = ind[1][3] = ind[2][3] = 1000;
ind[3][3] = 1000;
}
void IndicadorFilaColumna() {
//NC = 4
mc = mf = 1;
for (h = 0; h < nc; h++)//H = 0, 1, 2 , 3 < 4, {
for (i = 0; i < 3; i++)// I= 0 < 3 {
if (tabla[h][i] > 0)// [3,0] = 0 > 0 , [3,1] = 0 > 0 , [3,2] = 60 > 0 {
cc++;// 0
}
CARLOS HERRERA Pgina 19

}
if (cc > mc) {
ic = h;// IC = H = 0
mc = cc;// MC = 2
}
cc = 0;// CC = 0
}
cci = 2;
for (h = 0; h < 3; h++)// H = 0, 1, 2, {
for (i = 0; i < nc; i++)// I = 0,1,2,3 {
if (tabla[i][h] > 0) //60>0 {
cf++;// CF =
}
}
if (cf > mf)// MF = 1 : 4 > 2 {
iff = h;// IFF 2
mf = cf;// MF = 4
}
cf = 0;// CF = 0
}
if (mc >= mf) // 2 > 4 {
reg = ind[ic][3] = 0;
for (i = 0; i < 3; i++) {
if (tabla[ic][i] > 0) {
ind[nc][i] = costo[ic][i] - ind[ic][3];
}
}
for (h = 0; h < nc; h++) {
reg = 0;
for (i = 0; i < 3; i++) {
if (tabla[h][i] > 0) {
if (ind[h][3] != 1000) {
ind[nc][i] = costo[h][i] - ind[h][3];
} else {
if (ind[nc][i] != 1000) {
CARLOS HERRERA Pgina 20

ind[h][3] = costo[h][i] - ind[nc][i];
} else {
reg = 1;
} } } }
if (reg == 1) {
h--;
}
}
} else {
reg = ind[nc][iff] = 0;
for (i = 0; i < nc; i++) // i < 4 {
if (tabla[i][iff] > 0) {
ind[i][3] = costo[i][iff] - ind[nc][iff];
}
}
for (h = 0; h < 3; h++) {
reg = 0;
for (i = 0; i < nc; i++) {
if (tabla[i][h] > 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 Pgina 21

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 Pgina 22

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<Object> array = new ArrayList<Object>();
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 Pgina 23

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 Pgina 24

}
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 Pgina 25

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", "Mtodo 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(), "Mtodo Transporte", 0);
}
}
CARLOS HERRERA Pgina 26


MANUAL DE USUARIO
La interfaz de inicio es la siguiente:

Podemos elegir entre calcular mnimo o mximo. Tambin encontramos la
opcin de salir.
Si elegimos el mximo:

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


CARLOS HERRERA Pgina 27











Si damos clic en observaciones, nos saldr este mensaje:

Si elegimos el mnimo:



CARLOS HERRERA Pgina 28

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

Si damos clic en observaciones, nos saldr este mensaje:












CARLOS HERRERA Pgina 29

BIBLIOGRAFA

http://www.monografias.com/trabajos-pdf4/metodo-transporte/metodo-
transporte.pdf
http://hemaruce.angelfire.com/intro_transporte.htm
http://www.ehowenespanol.com/problemas-investigacion-operaciones-transporte-
hechos_80650/

You might also like