PIPS
plvar-ecart.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 "ray_dte.h"
#include "polyedre.h"
#include "matrix.h"
#include "plint.h"
+ Include dependency graph for plvar-ecart.c:

Go to the source code of this file.

Macros

#define TRACE
 package plint More...
 
#define MALLOC(s, t, f)   malloc(s)
 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 More...
 

Functions

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 systeme en inegalites. More...
 
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 variables d'ecart necessaires a la transformation du systeme A . More...
 
Psommet add_var_sup (Psommet sys, int nb_som, Pvecteur *lvbase, Pvecteur *lvsup, int *nbvars, Pbase *b, Psommet fonct)
 

Macro Definition Documentation

◆ MALLOC

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

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

Definition at line 52 of file plvar-ecart.c.

◆ TRACE

#define TRACE

package plint

Definition at line 41 of file plvar-ecart.c.

Function Documentation

◆ add_var_sup()

Psommet add_var_sup ( Psommet  sys,
int  nb_som,
Pvecteur lvbase,
Pvecteur lvsup,
int nbvars,
Pbase b,
Psommet  fonct 
)

??? 999 ???

Definition at line 210 of file plvar-ecart.c.

218 {
219  Psysteme ps1=NULL;
220  Psommet ineg;
221  Psommet sys2 = sys;
222  Variable nv;
223 
224 #ifdef TRACE
225  Pvecteur pvec;
226 
227  printf(" ** ajout des variables suupplementaire \n");
228 #endif
229  if (sys) {
230  ps1 = som_sys_conv(sys);
231  if (ps1 != NULL) {
232  ps1->dimension = *nbvars;
233  ps1->base = base_dup(*b);
234 
235  for (ineg = sys2;ineg!= NULL;ineg=ineg->succ) {
236  if (*(ineg->eq_sat) == -1) {
237  nv = creat_new_var(ps1);
238  vect_add_elem(&(ineg->vecteur),nv,VALUE_ONE);
239  *b = vect_add_variable(*b,nv);
240  (*nbvars) ++;
241  if (value_pos_p(vect_coeff(TCST,ineg->vecteur))) {
242  nv = creat_new_var(ps1);
243  vect_add_elem(&(ineg->vecteur),nv,VALUE_MONE);
244  vect_add_elem(&(fonct->vecteur),nv,
245  int_to_value(999)); /* ??? 999 ??? */
246  lvbase_add(nv,nb_som,lvsup);
247  }
248  lvbase_add(nv,nb_som,lvbase);
249 
250  *(ineg->eq_sat) = 1;
251  *b = vect_add_variable(*b,nv);
252  (*nbvars) ++;
253  }
254  nb_som --;
255  }
256 
257 #ifdef TRACE
258  printf (" -- variables de base :");
259  for (pvec = *lvbase;pvec!= NULL;pvec=pvec->succ)
260  {
261  printf(" (0x%x,",(unsigned int)pvec->var);
262  print_Value(pvec->val);
263  printf("), ");
264  }
265  printf("\n");
266  ps1 = som_sys_conv(sys2);
267  sc_fprint(stdout,ps1,*variable_default_name);
268 #endif
269 
270  sc_rm(ps1);
271  }
272  }
273  return(sys2);
274 }
#define value_pos_p(val)
#define int_to_value(i)
end LINEAR_VALUE_IS_INT
#define VALUE_MONE
#define VALUE_ONE
void print_Value(Value)
io.c
Definition: io.c:37
Pbase vect_add_variable(Pbase b, Variable v)
package vecteur - routines sur les bases
Definition: base.c:61
char * variable_default_name(Variable v)
char * variable_default_name(Variable v): returns the name of variable v
Definition: variable.c:81
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,...
Definition: plvbase.c:116
void sc_rm(Psysteme ps)
void sc_rm(Psysteme ps): liberation de l'espace memoire occupe par le systeme de contraintes ps;
Definition: sc_alloc.c:277
void sc_fprint(FILE *fp, Psysteme ps, get_variable_name_t nom_var)
void sc_fprint(FILE * f, Psysteme ps, char * (*nom_var)()): cette fonction imprime dans le fichier po...
Definition: sc_io.c:220
int printf()
Variable creat_new_var(Psysteme ps)
char * noms_var(int i): cette fonction convertit un numero de variable en chaine de caracteres
Definition: sc_var.c:102
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
Value val
Definition: vecteur-local.h:91
Variable var
Definition: vecteur-local.h:90
struct Svecteur * succ
Definition: vecteur-local.h:92
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
int * eq_sat
Definition: sommet-local.h:65
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
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
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_add_elem(Pvecteur *pvect, Variable var, Value val)
void vect_add_elem(Pvecteur * pvect, Variable var, Value val): addition d'un vecteur colineaire au ve...
Definition: unaires.c:72
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

References Ssysteme::base, base_dup(), creat_new_var(), Ssysteme::dimension, typ_som::eq_sat, int_to_value, lvbase_add(), print_Value(), printf(), sc_fprint(), sc_rm(), typ_som::succ, Svecteur::succ, TCST, Svecteur::val, VALUE_MONE, VALUE_ONE, value_pos_p, Svecteur::var, variable_default_name(), vect_add_elem(), vect_add_variable(), vect_coeff(), and typ_som::vecteur.

Referenced by primal(), and primal_positive().

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

◆ eq_in_ineq()

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 systeme en inegalites.

N egalites du systeme seront transformees en N+1 inegalites.

resultat retourne par la fonction :

Psommet : systeme lineaire initial modifie.

Les parametres de la fonction :

Psommet sys : systeme lineaire Pvecteur lvbase: liste des variables de base du systeme int nb_som : nombre de contraintes du systeme

Definition at line 68 of file plvar-ecart.c.

72 {
73  Psommet eq=NULL;
74  Psommet sys2;
75  Psommet som2;
76  Pvecteur pv3=NULL;
77  Pvecteur pvsom=NULL;
78  Pvecteur pvsom2 = NULL;
79  bool egalite = false;
80  Value den = VALUE_ONE;
81 
82 #ifdef TRACE
83 
84  Psysteme ps1=NULL;
85  Pvecteur pvec;
86 
87  printf(" ** transformation des equations en inequations \n");
88 #endif
89 
90 
91  sys2 = *sys;
92 
93  for (eq = sys2;eq!= NULL;eq=eq->succ) {
94  if (*(eq->eq_sat) == 1) {
95  egalite = true;
96  *(eq->eq_sat) = -1;
97  pv3 = vect_dup(eq->vecteur);
98  vect_chg_sgn(pv3);
99  (void) vect_multiply(pv3,den);
100  value_product(den,eq->denominateur);
101  (void) vect_multiply(pvsom,eq->denominateur);
102  pvsom2 = vect_add(pvsom,pv3);
103  vect_rm(pv3);
104  vect_rm(pvsom);
105  pvsom = pvsom2;
106  }
107  }
108  if (egalite) {
109  som2 = (Psommet)MALLOC(sizeof(Ssommet),SOMMET,"eq_in_ineq");
110  som2->eq_sat =(int *)MALLOC(sizeof(int),INTEGER,"eq_in_ineq");
111  *(som2->eq_sat) = -1;
112  som2->denominateur =den ;
113  som2->vecteur = pvsom;
114  som2->succ = NULL;
115  sommet_add(&sys2,som2,nb_som);
116  }
117 
118 #ifdef TRACE
119  ps1 = som_sys_conv(sys2);
120 
121  sc_fprint(stdout,ps1,*variable_default_name);
122  printf (" -- variables de base :");
123  for (pvec = *lvbase;pvec!= NULL;pvec=pvec->succ)
124  {
125  printf(" (0x%x,", (unsigned int) pvec->var);
126  print_Value(pvec->val);
127  printf("), ");
128  }
129  printf("\n");
130  sc_rm(ps1);
131 
132 #endif
133 
134  sommets_normalize(sys2);
135  return(sys2);
136 
137 }
int Value
#define value_product(v, w)
#define MALLOC(s, t, f)
pour recuperer les declarations des fonctions de conversion de sc en liste de sommets et reciproqueme...
Definition: plvar-ecart.c:52
Pcontrainte eq
element du vecteur colonne du systeme donne par l'analyse
Definition: sc_gram.c:108
void vect_chg_sgn(Pvecteur v)
void vect_chg_sgn(Pvecteur v): multiplie v par -1
Definition: scalaires.c:151
Pvecteur vect_multiply(Pvecteur v, Value x)
Pvecteur vect_multiply(Pvecteur v, Value x): multiplication du vecteur v par le scalaire x,...
Definition: scalaires.c:123
struct typ_som * Psommet
structure de donnees Sommet
#define SOMMET
package sommet: structure de donnees representant les sommets d'un systeme generateur; elle contient:
Definition: sommet-local.h:48
void sommet_add(Psommet *ps, Psommet som, int *nb_som)
void sommet_add(Psommet *ps, Psommet som, int *nb_soms): Ajout d'un sommet a une liste de sommets Le ...
Definition: sommet.c:342
void sommets_normalize(Psommet)
void sommets_normalize(som) Normalisation des elements d'une liste de sommets i.e.
Definition: sommets.c:108
Pvecteur vecteur
struct Scontrainte * succ
Value denominateur
Definition: sommet-local.h:67
Pvecteur vect_dup(Pvecteur v_in)
Pvecteur vect_dup(Pvecteur v_in): duplication du vecteur v_in; allocation de et copie dans v_out;.
Definition: alloc.c:51
void vect_rm(Pvecteur v)
void vect_rm(Pvecteur v): desallocation des couples de v;
Definition: alloc.c:78
Pvecteur vect_add(Pvecteur v1, Pvecteur v2)
package vecteur - operations binaires
Definition: binaires.c:53

References typ_som::denominateur, eq, Scontrainte::eq_sat, typ_som::eq_sat, MALLOC, print_Value(), printf(), sc_fprint(), sc_rm(), SOMMET, sommet_add(), sommets_normalize(), Scontrainte::succ, typ_som::succ, Svecteur::succ, Svecteur::val, VALUE_ONE, value_product, Svecteur::var, variable_default_name(), vect_add(), vect_chg_sgn(), vect_dup(), vect_multiply(), vect_rm(), Scontrainte::vecteur, and typ_som::vecteur.

Referenced by dual_pivot(), plint(), plreal(), primal(), primal_positive(), and sc_supress_same_constraints().

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

◆ var_ecart_sup()

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 variables d'ecart necessaires a la transformation du systeme A .

X <= B en A'. X' = B .

resultat retourne par la fonction :

Psommet : systeme lineaire initial modifie

Les parametres de la fonction :

Psommet sys : systeme lineaire Pvecteur lvbase: liste des variables de base du systeme int nb_som : nombre de contraintes du systeme int nbvars : nombre de variables du systeme Pbase b : liste des variables du systeme

Definition at line 156 of file plvar-ecart.c.

162 {
163  Psysteme ps1=NULL;
164  Psommet ineg;
165  Psommet sys2 = sys;
166  Variable nv;
167 
168 #ifdef TRACE
169  Pvecteur pvec;
170 
171  printf(" ** ajout des variables d'ecart \n");
172 #endif
173  if (sys) {
174  ps1 = som_sys_conv(sys);
175  if (ps1 != NULL) {
176  ps1->dimension = *nbvars;
177  ps1->base = base_dup(*b);
178 
179  for (ineg = sys2;ineg!= NULL;ineg=ineg->succ) {
180  if (*(ineg->eq_sat) == -1) {
181  nv = creat_new_var(ps1);
182  vect_add_elem(&(ineg->vecteur),nv,VALUE_ONE);
183  lvbase_add(nv,nb_som,lvbase);
184  *(ineg->eq_sat) = 1;
185  *b = vect_add_variable(*b,nv);
186  (*nbvars)++;
187  }
188  nb_som --;
189  }
190 
191 #ifdef TRACE
192  printf (" -- variables de base :");
193  for (pvec = *lvbase;pvec!= NULL;pvec=pvec->succ)
194  {
195  printf(" (0x%x,",(unsigned int)pvec->var);
196  print_Value(pvec->val);
197  printf("), ");
198  }
199  printf("\n");
200  ps1 = som_sys_conv(sys2);
201  sc_fprint(stdout,ps1,*variable_default_name);
202 #endif
203  sc_rm(ps1);
204  }
205  }
206  return(sys2);
207 }

References Ssysteme::base, base_dup(), creat_new_var(), Ssysteme::dimension, typ_som::eq_sat, lvbase_add(), print_Value(), printf(), sc_fprint(), sc_rm(), typ_som::succ, Svecteur::succ, Svecteur::val, VALUE_ONE, Svecteur::var, variable_default_name(), vect_add_elem(), vect_add_variable(), and typ_som::vecteur.

Referenced by dual_pivot(), dual_pivot_pas(), plint(), plint_degen(), plint_pas(), plreal(), and syst_smith().

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