1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Algoritmo de trasporte con matrices y vectores en C método esquina noreste.
« en: 20 de Marzo 2015, 04:45 »
Hola.
Bueno un amigo que estudia en una universidad diferente a la mía, me paso este programa para resolverlo en Legunaje C, me llamo la atención y de verdad quisiera hacerlo, pero necesitaría alguna orientación para ver si me pueden ayudar en algo.
ALGORITMO DE TRANSPORTE
Los pasos básicos del algoritmo de transporte son exactamente iguales a los del método simplex Sin embargo, en lugar de utilizar la tabla simplex regular, aprovechamos la estructura especial del modelo de transporte para organizar los cálculos en una forma más conveniente.
Paso 1. Determine una solución factible básica inicial y vaya al paso 2.
Paso 2. Use la condición de optimalidad del método simplex para determinar la variable de entrada de entre todas las variables no básicas. Si se satisfacen las
condiciones de optimalidad, deténgase. De lo contrario, avance al paso 3.
Paso 3. Use la condición de factibilidad del método simplex para determinar la variable de entrada de entre todas las variables básicas actuales, y halle la nueva solución básica. Regrese al paso 2.
Ejemplo:
El resultado es que la oferta suma 1500 y la demanda 3000 por lo que será necesario crear una columna de oferta ficticia para balancear el problema
Solo me gustaría recibir una pequeña orientación con respecto a esto, ya que no tengo a quien preguntarle y me frustra no poder hacerlo!. Agradecería de verdad su ayuda.
Bueno un amigo que estudia en una universidad diferente a la mía, me paso este programa para resolverlo en Legunaje C, me llamo la atención y de verdad quisiera hacerlo, pero necesitaría alguna orientación para ver si me pueden ayudar en algo.
ALGORITMO DE TRANSPORTE
Los pasos básicos del algoritmo de transporte son exactamente iguales a los del método simplex Sin embargo, en lugar de utilizar la tabla simplex regular, aprovechamos la estructura especial del modelo de transporte para organizar los cálculos en una forma más conveniente.
Paso 1. Determine una solución factible básica inicial y vaya al paso 2.
Paso 2. Use la condición de optimalidad del método simplex para determinar la variable de entrada de entre todas las variables no básicas. Si se satisfacen las
condiciones de optimalidad, deténgase. De lo contrario, avance al paso 3.
Paso 3. Use la condición de factibilidad del método simplex para determinar la variable de entrada de entre todas las variables básicas actuales, y halle la nueva solución básica. Regrese al paso 2.
Ejemplo:
Solución inicial:
En caso de no ser igual la oferta y la demanda se crea una fila o una columna con la diferencia.
Ejemplo si tenemos 3 orígenes y 3 destinos de la siguiente forma:
Ejemplo si tenemos 3 orígenes y 3 destinos de la siguiente forma:
El resultado es que la oferta suma 1500 y la demanda 3000 por lo que será necesario crear una columna de oferta ficticia para balancear el problema
Y ahora se resuelve como exactamente igual que la forma anterior.
En base a la información anterior, desarrolle un programa en Lenguaje C que permita lo siguiente:
a) Cargar la matriz de costos.
b) Cargar el vector de ofertas y demandas.
c) Obtener una solución Inicial por el método de ruta noroeste mostrar la matriz resultante.
d) Obtener el valor de la solución que es la sumatoria de cada costo* cantidad enviada
e) La matriz debe soportar un máximo de 5 orígenes y 5 destinos.
En base a la información anterior, desarrolle un programa en Lenguaje C que permita lo siguiente:
a) Cargar la matriz de costos.
b) Cargar el vector de ofertas y demandas.
c) Obtener una solución Inicial por el método de ruta noroeste mostrar la matriz resultante.
d) Obtener el valor de la solución que es la sumatoria de cada costo* cantidad enviada
e) La matriz debe soportar un máximo de 5 orígenes y 5 destinos.
Mi opinión:
la forma de que pensé para hacerlo fue la siguiente:
Crear una matriz que se llene de los costos ingresados por el usuario, con respecto a esta matriz no le veo mucho sentido... porque en si lo que necesito hacer es el camino que se muestra en el ejemplo.
Crear un vector de demandas y otro de ofertas ubicandolos con gotoxy que utiliza la librería #include "myconio.h".
Crear otra matriz donde voy a hacer la operación, y crear el camino que se muestra en el ejemplo, aplique la siguiente lógica:
la forma de que pensé para hacerlo fue la siguiente:
Crear una matriz que se llene de los costos ingresados por el usuario, con respecto a esta matriz no le veo mucho sentido... porque en si lo que necesito hacer es el camino que se muestra en el ejemplo.
Crear un vector de demandas y otro de ofertas ubicandolos con gotoxy que utiliza la librería #include "myconio.h".
Crear otra matriz donde voy a hacer la operación, y crear el camino que se muestra en el ejemplo, aplique la siguiente lógica:
Código: [Seleccionar]
for(x=0;x<f;x++){
printf("\n");
for(y=0; y<c; y++){
m[x][y]=0;
if(ofertas[x]>demandas[x]){
m[x][x]=demandas[x];//ubicarlo en la cosilla ("noroeste")
m[x][x+1]=ofertas[x]-demandas[x]; // la diferencia de ambos para cuando se sumen de bien
}else
if(ofertas[y]<demandas[y]){
m[y][y]=ofertas[y];
m[y+1][y]=demandas[y]-ofertas[y];
}
printf(" %d ",m[x][y]);
}
}
el problema es: que no esta dando correcto con las columnas, la suma siempre se pasa y no da el numero que deberia dar en la misma posicion de demandas, otra cosa es que nose porque si yo en demandas meto los numero 5, 15, 15, 15 me sale a la ora de imprimirse 5, 15, 5, 15
dejo todo el código hecho hasta ahora:
dejo todo el código hecho hasta ahora:
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include "myconio.h"
#define f 3
#define c 4
void costos_matriz(int costos[][c]);
void funcionof(int ofertas[f], int demandas[c], int m[][c]);
int main(){
int costos[f][c], ofertas[f], demandas[c],m[f][c];
funcionof(ofertas,demandas,m);
system("PAUSE>NULL");
return 0;
}
void costos_matriz(int costos[][c]){
int x, y;
for(x=0;x<f;x++){
for(y=0; y<c; y++){
printf("Ingrese costos: ");
scanf("%d",&costos[x][y]);
}
}
}//costos
void funcionof(int ofertas[f], int demandas[c], int m[f][c]){
int i,x,y,k;
for(i=0; i<f; i++){
printf("ingrese la oferta: ");
fflush(stdin);
scanf("%d",&ofertas[i]);
}
for(i=0; i<c; i++){
printf("ingrese la demandas: ");
fflush(stdin);
scanf("%d",&demandas[i]);
}
system("cls");
for(x=0;x<f;x++){
printf("\n");
for(y=0; y<c; y++){
m[x][y]=0;
if(ofertas[x]>demandas[x]){
m[x][x]=demandas[x];
m[x][x+1]=ofertas[x]-demandas[x];
}else
if(ofertas[y]<demandas[y]){
m[y][y]=ofertas[y];
m[y+1][y]=demandas[y]-ofertas[y];
}
printf(" %d ",m[x][y]);
}
}
printf("\n");
for(x=0; x<f; x++){
gotoxy(16,x+1);
printf(" %d ", ofertas[x]);
}
for(x=0; x<c; x++){
gotoxy(x*3+1,7);
printf( "%d ", demandas[x]);
}
}//ofertas_demandas
Solo me gustaría recibir una pequeña orientación con respecto a esto, ya que no tengo a quien preguntarle y me frustra no poder hacerlo!. Agradecería de verdad su ayuda.