Autor Tema: Algoritmo de trasporte con matrices y vectores en C método esquina noreste.  (Leído 9521 veces)

Hyde

  • Sin experiencia
  • *
  • Mensajes: 16
    • Ver Perfil
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:

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:


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.
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:

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:

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.
« Última modificación: 20 de Marzo 2015, 08:59 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Algoritmo de trasporte con matrices y vectores en C.
« Respuesta #1 en: 20 de Marzo 2015, 08:58 »
Hola, he leído lo que planteas y me parece algo relativamente complejo y que posiblemente excede las posibilidades de un foro por su complejidad (aunque siempre es posible que algún experto pueda ayudar parece que es un problema que requiere tiempo). Antes de nada he tenido que leer una explicación más detallada del problema porque con lo que dices en el mensaje no me quedaba claro. Me parece que aquí hay una explicación bastante buena: http://cvb.ehu.es/open_course_ware/castellano/tecnicas/investigacion_operativa/materiales/6._transporte_asignacion.pdf

Citar
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.

Lo primero que habría que hacer es entender bien la metodología que hay que aplicar y el significado de cada uno de los valores numéricos y matrices que intervienen en el problema, para después programarlo. Si tienes dudas respecto al significado de las matrices o al método a aplicar no vas a poder programarlo.

A primera vista pienso que esto puede suponer quizás dos, tres o más días de trabajo, depende del nivel en programación que tenga la persona. No sé si habrá alguien que pueda aportar otro puento de vista  ::) ::) ::)

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".