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

Go to the source code of this file.

Macros

#define MALLOC(s, t, f)   malloc((unsigned)(s))
 package plint More...
 
#define FREE(s, t, f)   free((char *)(s))
 

Functions

void oter_lvbase (Psommet sys, Pvecteur lvbase)
 void oter_lvbase(Psommet sys, Pvecteur lvbase): Elimination d'une liste de variables contenues dans un vecteur dans Gomory : elimination des variables de base du systeme
More...
 
bool is_var_in_lvbase (Variable var, Pvecteur lvbase)
 bool is_var_in_lvbase(Variable var, Pvecteur lvbase): test de non appartenance d'une variable a un vecteur More...
 
void lvbase_add (Variable var, int no_ligne, Pvecteur *lvbase)
 void lvbase_add(Variable var, int no_ligne, Pvecteur * lvbase): ajout d'un couple (variable de base, no ligne correspondante) dans la liste des variables de base du systeme More...
 
void lvbase_ote_no_ligne (int no_ligne, Pvecteur *lvbase)
 void lvbase_ote_no_ligne(int no_ligne, Pvecteur * lvbase): Elimination de la variable de base correspondant au numero de ligne NO_LIGNE de la liste des variables de base du systeme. More...
 
Variable find_vbase (Psommet eq, Pvecteur lvbase)
 Variable find_vbase(Psommet eq, Pvecteur lvbase): Recherche de la variable de base d'une contrainte. More...
 
Variable coeff_no_ligne (Pvecteur lvbase, int no_ligne)
 Variable coeff_no_ligne(lvbase, int no_ligne): Recherche de la variable de base d'une contrainte. More...
 

Macro Definition Documentation

◆ FREE

#define FREE (   s,
  t,
  f 
)    free((char *)(s))

Definition at line 46 of file plvbase.c.

◆ MALLOC

#define MALLOC (   s,
  t,
  f 
)    malloc((unsigned)(s))

package plint

Definition at line 45 of file plvbase.c.

Function Documentation

◆ coeff_no_ligne()

Variable coeff_no_ligne ( Pvecteur  lvbase,
int  no_ligne 
)

Variable coeff_no_ligne(lvbase, int no_ligne): Recherche de la variable de base d'une contrainte.

La contrainte est caracterisee par son numero de ligne

resultat retourne par la fonction :

Variable : numero de la variable

Les parametres de la fonction :

Pvecteur lvbase: liste des variables de base du systeme int no_ligne: numero de la ligne

Definition at line 228 of file plvbase.c.

231 {
232  Pvecteur pv;
233  Value vno_ligne = int_to_value(no_ligne);
234 
235  for (pv = lvbase;
236  (pv!= NULL) && value_ne(pv->val,vno_ligne);
237  pv= pv->succ);
238  if (pv != NULL)
239  return (pv->var);
240  else
241  return((Variable) NULL);
242 }
#define int_to_value(i)
end LINEAR_VALUE_IS_INT
#define value_ne(v1, v2)
int Value
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
Value val
Definition: vecteur-local.h:91
Variable var
Definition: vecteur-local.h:90
struct Svecteur * succ
Definition: vecteur-local.h:92
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur-local.h:60

References int_to_value, Svecteur::succ, Svecteur::val, value_ne, and Svecteur::var.

Referenced by sol_entiere(), sol_finale(), sol_positive(), and sol_positive_simpl().

+ Here is the caller graph for this function:

◆ find_vbase()

Variable find_vbase ( Psommet  eq,
Pvecteur  lvbase 
)

Variable find_vbase(Psommet eq, Pvecteur lvbase): Recherche de la variable de base d'une contrainte.

resultat retourne par la fonction :

int : no de la variable de base

Les parametres de la fonction :

Psommet eq : contrainte du systeme Pvecteur lvbase: liste des variables de base du systeme

Definition at line 188 of file plvbase.c.

191 {
192  Pvecteur pv=NULL;
193  Variable var = NULL;
194 #ifdef TRACE
195  printf(" *** recherche d'une variable de base \n");
196 #endif
197  if (eq != NULL) {
198  Value cst = vect_coeff(TCST,eq->vecteur);
199  Pvecteur pv3;
200  vect_chg_coeff(&(eq->vecteur),TCST,0);
202  for(pv3 =pv; pv3->succ!=NULL;pv3=pv3->succ);
203  pv3->succ = vect_new(TCST,cst);
204  for (;pv!= NULL
205  && ((pv->val ==0) || is_var_in_lvbase(pv->var,lvbase));
206  pv=pv->succ) ;
207 
208  if (pv != NULL)
209  var = pv->var;
210  vect_rm(pv);
211  }
212  return (var);
213 }
bool is_var_in_lvbase(Variable var, Pvecteur lvbase)
bool is_var_in_lvbase(Variable var, Pvecteur lvbase): test de non appartenance d'une variable a un ve...
Definition: plvbase.c:92
Pcontrainte eq
element du vecteur colonne du systeme donne par l'analyse
Definition: sc_gram.c:108
int printf()
Pvecteur vecteur
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
Pvecteur vect_new(Variable var, Value coeff)
Pvecteur vect_new(Variable var,Value coeff): allocation d'un vecteur colineaire au vecteur de base va...
Definition: alloc.c:110
void vect_rm(Pvecteur v)
void vect_rm(Pvecteur v): desallocation des couples de v;
Definition: alloc.c:78
int vect_compare(Pvecteur *pv1, Pvecteur *pv2)
for qsort, returns:
Definition: unaires.c:352
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228
void vect_chg_coeff(Pvecteur *ppv, Variable var, Value val)
void vect_chg_coeff(Pvecteur *ppv, Variable var, Value val): mise de la coordonnee var du vecteur *pp...
Definition: unaires.c:143
Pvecteur vect_sort(Pvecteur v, int *compare)
Pvecteur vect_sort(v, compare) Pvecteur v; int (*compare)();.
Definition: unaires.c:335

References eq, is_var_in_lvbase(), printf(), Svecteur::succ, TCST, Svecteur::val, Svecteur::var, vect_chg_coeff(), vect_coeff(), vect_compare(), vect_new(), vect_rm(), vect_sort(), and Scontrainte::vecteur.

Referenced by gomory_eq().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ is_var_in_lvbase()

bool is_var_in_lvbase ( Variable  var,
Pvecteur  lvbase 
)

bool is_var_in_lvbase(Variable var, Pvecteur lvbase): test de non appartenance d'une variable a un vecteur

Ne pourais-tu pas obtenir le meme resultat avec un vect_coeff()?

resultat retourne par la fonction :

boolean : true si la variable n'appartient pas au vecteur false sinon

Les parametres de la fonction :

Pvecteur lvbase: liste des variables de base du systeme int var : variable du systeme

Definition at line 92 of file plvbase.c.

95 {
96  Pvecteur pv;
97  for (pv = lvbase;
98  pv!= NULL && ((pv->var!=var) || (pv->val == 0));
99  pv = pv->succ) ;
100  if(pv == NULL)
101  return (true);
102  else
103  return (false);
104 }

References Svecteur::succ, Svecteur::val, and Svecteur::var.

Referenced by find_vbase().

+ Here is the caller graph for this function:

◆ lvbase_add()

void lvbase_add ( Variable  var,
int  no_ligne,
Pvecteur lvbase 
)

void lvbase_add(Variable var, int no_ligne, Pvecteur * lvbase): ajout d'un couple (variable de base, no ligne correspondante) dans la liste des variables de base du systeme

Les parametres de la fonction :

Pvecteur lvbase: liste des variables de base du systeme Variable var : variable du systeme
int no_ligne: numero de la ligne

Definition at line 116 of file plvbase.c.

120 {
121  Pvecteur pv = NULL;
122  Value vno_ligne = int_to_value(no_ligne);
123  Pvecteur pl = vect_new(var,vno_ligne);
124  bool trouve = false;
125 
126  for (pv = *lvbase; pv != NULL && (pv->val != vno_ligne);pv=pv->succ);
127  if (pv !=NULL) trouve = true;
128  for (pv = *lvbase;( pv != NULL) &&(trouve) ;pv=pv->succ) {
129  if (value_ge(pv->val,vno_ligne))
130  value_increment(pv->val);
131  }
132  pl->succ = *lvbase;
133  *lvbase = pl;
134 }
#define value_increment(ref)
#define value_ge(v1, v2)
static hash_table pl
properties are stored in this hash table (string -> property) for fast accesses.
Definition: properties.c:783

References int_to_value, pl, Svecteur::succ, Svecteur::val, value_ge, value_increment, and vect_new().

Referenced by add_var_sup(), dual_pivot_pas(), plint_degen(), primal_pivot(), and var_ecart_sup().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ lvbase_ote_no_ligne()

void lvbase_ote_no_ligne ( int  no_ligne,
Pvecteur lvbase 
)

void lvbase_ote_no_ligne(int no_ligne, Pvecteur * lvbase): Elimination de la variable de base correspondant au numero de ligne NO_LIGNE de la liste des variables de base du systeme.

Les parametres de la fonction :

Pvecteur lvbase: liste des variables de base du systeme int no_ligne: numero de la ligne

Definition at line 145 of file plvbase.c.

148 {
149  Pvecteur pv;
150  Pvecteur pred = *lvbase;
151  Value vno_ligne = int_to_value(no_ligne);
152 
153 #ifdef TRACE
154  printf(" **** oter la variable d'indice %d \n",no_ligne);
155 #endif
156  if (pred != NULL)
157  if (value_eq(pred->val,vno_ligne))
158  {
159  pv = (*lvbase)->succ;
160  (*lvbase)->succ = NULL;
161  vect_rm(*lvbase);
162  *lvbase = pv;
163  }
164  else {
165  for (pv = (*lvbase)->succ;
166  pv!= NULL && value_ne(pv->val,vno_ligne);
167  pv = pv->succ, pred = pred->succ);
168 
169  if (value_eq(pv->val,vno_ligne)) {
170  pred->succ = pv->succ;
171  FREE(pv,VECTEUR,"ote_var_Liste");
172  }
173  }
174 }
#define value_eq(v1, v2)
bool operators on values
#define FREE(s, t, f)
Definition: plvbase.c:46
#define VECTEUR
package sur les vecteurs creux et les bases
Definition: vecteur-local.h:51

References FREE, int_to_value, printf(), Svecteur::succ, Svecteur::val, value_eq, value_ne, vect_rm(), and VECTEUR.

Referenced by dual_pivot_pas(), plint_degen(), and primal_pivot().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ oter_lvbase()

void oter_lvbase ( Psommet  sys,
Pvecteur  lvbase 
)

void oter_lvbase(Psommet sys, Pvecteur lvbase): Elimination d'une liste de variables contenues dans un vecteur dans Gomory : elimination des variables de base du systeme

resultat retourne par la fonction :

Le systeme initial est modifie.

Les parametres de la fonction :

Psommet sys : systeme lineaire Pvecteur lvbase: liste des variables de base du systeme

Definition at line 61 of file plvbase.c.

64 {
65  Psommet ps1=NULL;
66  Pvecteur pv;
67 
68 #ifdef TRACE
69  printf (" **** elimination d'une liste de variables \n");
70 #endif
71 
72  for (pv = lvbase; pv!=NULL; pv = pv->succ)
73  for (ps1 = sys; ps1 != NULL; ps1 = ps1->succ)
74  vect_chg_coeff(&(ps1->vecteur),pv->var,0);
75 }
structure de donnees Sommet
Definition: sommet-local.h:64
struct typ_som * succ
Definition: sommet-local.h:68
Pvecteur vecteur
Definition: sommet-local.h:66

References printf(), typ_som::succ, Svecteur::succ, Svecteur::var, vect_chg_coeff(), and typ_som::vecteur.

Referenced by plint_degen().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: