PIPS
plreal.c File Reference
#include <stdio.h>
#include "boolean.h"
#include "arithmetique.h"
#include "vecteur.h"
#include "contrainte.h"
#include "sc.h"
#include "sommet.h"
#include "ray_dte.h"
#include "polyedre.h"
#include "matrix.h"
#include "plint.h"
+ Include dependency graph for plreal.c:

Go to the source code of this file.

Functions

Psysteme plreal (Psysteme first_sys, Psommet fonct)
 package plint More...
 

Function Documentation

◆ plreal()

Psysteme plreal ( Psysteme  first_sys,
Psommet  fonct 
)

package plint

pour recuperer les declarations des fonctions de conversion de sc en liste de sommets et reciproquement, bien que ca casse le DAG des types de donnees Psysteme plreal(Psysteme first_sys, Psommet fonct): Resolution d'un systeme lineaire en nombres reels positifs

resultat retourne par la fonction :

Psysteme : systeme lineaire

Les parametres de la fonction :

Psysteme first_syst : systeme lineaire initial Psommet fonct : fonction economique du programme lineaire

conversion du systeme lineaire en sommet

ajout des variables d'ecart

calcul de la solution reelle positive

si le systeme est non faisable, liberation de l'espace memoire ocupe par la fonction economique

conversion du sommet en systeme lineaire

si le systeme est non faisable, liberation de l'espace memoire occupe par les variables

Definition at line 63 of file plreal.c.

66 {
67  Psommet sys1 = NULL;
68  Psysteme syst_res = NULL;
69  Pvecteur lvbase = NULL;
70  int nb_som = 0;
71  int nbvars;
72  Pbase b =BASE_NULLE;
73 
74  if (first_sys) {
75  nbvars = first_sys->dimension;
76  b = base_dup(first_sys->base);
77 
78  if ((first_sys->egalites != NULL)
79  || (first_sys->inegalites != NULL)) {
80  /* conversion du systeme lineaire en sommet */
81  sys1 = sys_som_conv(first_sys,&nb_som);
82  /* ajout des variables d'ecart */
83  if ((sys1 = eq_in_ineq(&sys1,&nb_som,&lvbase)) != NULL) {
84  sys1 = var_ecart_sup(sys1,nb_som,&lvbase,&nbvars,&b);
85  sys1 = primal_pivot(sys1,&lvbase,nb_som,fonct);
86  }
87 
88  /* calcul de la solution reelle positive */
89  while ((sys1 != NULL) &&
90  (dual_pivot_pas(&sys1,&lvbase,nb_som,fonct,&nbvars,&b) == true));
91 
92  /* si le systeme est non faisable,
93  liberation de l'espace memoire ocupe par la fonction
94  economique */
95  if (sys1 == NULL && fonct != NULL) {
96  vect_rm(fonct->vecteur);
97  fonct->vecteur = NULL;
98  }
99  /* conversion du sommet en systeme lineaire */
100  syst_res = som_sys_conv(sys1);
101  /* si le systeme est non faisable,
102  liberation de l'espace memoire occupe par les variables */
103  if (syst_res != NULL) {
104  syst_res->base = b;
105  syst_res->dimension = nbvars;
106  }
107  }
108  }
109  sommets_rm(sys1);
110  vect_rm(lvbase);
111 
112  return(syst_res);
113 }
bool dual_pivot_pas(Psommet *sys, Pvecteur *lvbase, int nb_som, Psommet fonct, int *nbvars, Pbase *b)
bool dual_pivot_pas(Psommet * sys, Pvecteur * lvbase, int nb_som, Psommet fonct, int * nbvars,...
Definition: pldual.c:213
Psommet primal_pivot(Psommet sys, Pvecteur *lvbase, int nb_som, Psommet fonct)
Psommet primal_pivot(Psommet sys, Pvecteur * lvbase, int nb_som, Psommet fonct): algorithme primal du...
Definition: plsimplexe.c:209
Psommet eq_in_ineq(Psommet *sys, int *nb_som, Pvecteur *lvbase)
Psommet eq_in_ineq(Psommet * sys, int * nb_som, Pvecteur * lvbase): Transformation des egalites du sy...
Definition: plvar-ecart.c:68
Psommet var_ecart_sup(Psommet sys, int nb_som, Pvecteur *lvbase, int *nbvars, Pbase *b)
Psommet var_ecart_sup(Psommet sys, int nb_som, Pvecteur * lvbase, int * nbvars, Pbase *b): ajout des ...
Definition: plvar-ecart.c:156
void sommets_rm(Psommet)
void sommets_rm(Psommet ps): liberation de l'espace memoire alloue a une liste de sommets
Definition: sommets.c:83
Pcontrainte inegalites
Definition: sc-local.h:71
Pcontrainte egalites
Definition: sc-local.h:70
Pbase base
Definition: sc-local.h:75
int dimension
Definition: sc-local.h:74
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
structure de donnees Sommet
Definition: sommet-local.h:64
Pvecteur vecteur
Definition: sommet-local.h:66
#define BASE_NULLE
MACROS SUR LES BASES.
Pbase base_dup(Pbase b)
Pbase base_dup(Pbase b) Note: this function changes the value of the pointer.
Definition: alloc.c:268
void vect_rm(Pvecteur v)
void vect_rm(Pvecteur v): desallocation des couples de v;
Definition: alloc.c:78

References Ssysteme::base, base_dup(), BASE_NULLE, Ssysteme::dimension, dual_pivot_pas(), eq_in_ineq(), primal_pivot(), sommets_rm(), var_ecart_sup(), vect_rm(), and typ_som::vecteur.

+ Here is the call graph for this function: