PIPS
ps_max_to_min.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <setjmp.h>
#include <string.h>
#include <errno.h>
#include "genC.h"
#include "boolean.h"
#include "arithmetique.h"
#include "vecteur.h"
#include "contrainte.h"
#include "ray_dte.h"
#include "sommet.h"
#include "sg.h"
#include "sc.h"
#include "polyedre.h"
#include "matrix.h"
#include "misc.h"
#include "text.h"
#include "text-util.h"
#include "ri.h"
#include "ri-util.h"
#include "graph.h"
#include "dg.h"
#include "paf_ri.h"
#include "paf-util.h"
#include "pip.h"
+ Include dependency graph for ps_max_to_min.c:

Go to the source code of this file.

Macros

#define VARSUPP   "Variable_pour_max_en_min_q"
 Name : ps_max_to_min.c Package : pip Author : F. More...
 

Functions

Value add_coeff_vect (Pvecteur p_vect, Pbase p_base, int nb_var)
 Name : add_coeff_vect
More...
 
entity creer_nom_var (char *name, char *module_name)
 BIDOUILLE
More...
 
void add_fin_mat (Pcontrainte p_cont, Pbase p_base, int nb_var, Variable var_q)
 Name: add_fin_mat
More...
 
void opp_var_in_mat (Pcontrainte p_cont, Pbase p_base, int nb_var)
 Name: opp_var_in_mat. More...
 
Psysteme converti_psysmin_psysmax (Psysteme p_systmin, int nb_var)
 Name: converti_psysmin_psysmax
More...
 

Macro Definition Documentation

◆ VARSUPP

#define VARSUPP   "Variable_pour_max_en_min_q"

Name : ps_max_to_min.c Package : pip Author : F.

Dumontet Date : july 93 Historic : Documents:

Comments : C3 includes

Definition at line 71 of file ps_max_to_min.c.

Function Documentation

◆ add_coeff_vect()

Value add_coeff_vect ( Pvecteur  p_vect,
Pbase  p_base,
int  nb_var 
)

Name : add_coeff_vect


Parameters: p_vect: le vecteur a sommer.
p_base: la base associee au vecteur.
nb_var: le nombre de variables dans la base.
Result: un nombre sous la forme d'une value.
Aims: sommer des coefficients des nb_var premieres variables du vecteur
p_vect.
Author: F Dumontet
Date of last change:


Definition at line 94 of file ps_max_to_min.c.

101 {
102 
103  Pvecteur p_vect_baux = (Pvecteur) p_base;
104  Value aux = VALUE_ZERO;
105  int aux1;
106 
107  for(aux1=0 ;((aux1 < nb_var) && (p_vect != NULL));\
108  p_vect_baux = p_vect_baux->succ )
109  {
110 
111  if (p_vect->var != NULL)
112  if (p_vect_baux->var == p_vect->var)
113  {
114  value_addto(aux,p_vect->val);
115  p_vect = p_vect->succ;
116  }
117  aux1++;
118  }
119  return aux;
120 }
#define VALUE_ZERO
int Value
#define value_addto(ref, val)
int aux
Definition: solpip.c:104
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
struct Svecteur * Pvecteur

References aux, Svecteur::succ, Svecteur::val, value_addto, VALUE_ZERO, and Svecteur::var.

Referenced by add_fin_mat().

+ Here is the caller graph for this function:

◆ add_fin_mat()

void add_fin_mat ( Pcontrainte  p_cont,
Pbase  p_base,
int  nb_var,
Variable  var_q 
)

Name: add_fin_mat


Parameters: p_cont: pointeur sur la premiere contrainte de la liste
d'egalites ou d'inegalites.
p_base: base du Psysteme.
nb_var: le nombre de variables dans la base.
Result:
Aims: ajouter A.1 dans la colonne correspondant au nouveau parametre var_q. Author: F Dumontet
Date of last change:


Old version of FD vect_add_elem(&p_vect_aux->succ, var_q,\ add_coeff_vect(p_cont->vecteur,\ p_base,nb_var));

Definition at line 193 of file ps_max_to_min.c.

200 {
201 
202  Pvecteur p_vect_aux;
203  Pvecteur v2;
204 
205  for( ; p_cont != NULL;p_cont = p_cont->succ)
206  {
207 
208 
209 
210  for(p_vect_aux=p_cont->vecteur; p_vect_aux->succ != NULL;\
211  p_vect_aux = p_vect_aux->succ)
212  {}
213 /* Old version of FD
214  vect_add_elem(&p_vect_aux->succ, var_q,\
215  add_coeff_vect(p_cont->vecteur,\
216  p_base,nb_var));
217 */
218  v2 = (Pvecteur) malloc(sizeof(Svecteur));
219  vect_add_elem(&v2, var_q,\
220  add_coeff_vect(p_cont->vecteur,\
221  p_base,nb_var));
222  p_vect_aux->succ = v2;
223  }
224 }
void * malloc(YYSIZE_T)
Value add_coeff_vect(Pvecteur p_vect, Pbase p_base, int nb_var)
Name : add_coeff_vect
Definition: ps_max_to_min.c:94
Pvecteur vecteur
struct Scontrainte * succ
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

References add_coeff_vect(), malloc(), Scontrainte::succ, Svecteur::succ, vect_add_elem(), and Scontrainte::vecteur.

+ Here is the call graph for this function:

◆ converti_psysmin_psysmax()

Psysteme converti_psysmin_psysmax ( Psysteme  p_systmin,
int  nb_var 
)

Name: converti_psysmin_psysmax


Parameters: p_systmin: le Psysteme (ordonne) a transformer.
nb_var: le nombre de variables dans le Psysteme (ce sont les
premieres de la base).
Result: Psysteme ordonne.
Aims: convertir un probleme de maximum en son dual de minimum, le probleme et le resultat sont sous formes de Psystemes.
Author: F Dumontet.
Date of last change:


le Psysteme produi

permet la double copie sinon rien

double dup pour obtenir une copie qui respecte l'odre des variables sc_dup rend une image inversee

ajout d'une variable dans la base essayer de trouver une fonction C3

ajout de A.1 en fin de matrice , le parametre var_q puis -A

These four function calls are replaced by the following loops

ajout de -I , 1 en bas de la matrice

Definition at line 304 of file ps_max_to_min.c.

307 {
308  Psysteme p_syst; /* le Psysteme produi */
309  Psysteme p_syst1; /* permet la double copie sinon rien */
310  Pcontrainte p_cont_aux, pc;
311  Pvecteur p_vect_aux, p_vect_baux, p_base;
312  int aux1;
315 
316  /* double dup pour obtenir une copie qui respecte l'odre des variables
317  * sc_dup rend une image inversee */
318  p_syst1=sc_dup(p_systmin);
319  p_syst = sc_dup(p_syst1);
320 
321  /* ajout d'une variable dans la base essayer de trouver une fonction
322  * C3 */
323  p_syst->dimension++;
324 
325  for(p_vect_aux=(Pvecteur) p_syst->base; p_vect_aux->succ != NULL;
326  p_vect_aux = p_vect_aux->succ) {}
327  vect_add_elem(&p_vect_aux->succ, var_q, (Value) 1);
328 
329  /* ajout de A.1 en fin de matrice , le parametre var_q puis -A */
330 
331  /* These four function calls are replaced by the following loops */
332  /*
333  add_fin_mat((Pcontrainte) p_syst->egalites, p_syst->base, nb_var, var_q);
334 
335  opp_var_in_mat((Pcontrainte) p_syst->egalites,
336  p_syst->base , nb_var);
337  add_fin_mat((Pcontrainte) p_syst->inegalites,
338  p_syst->base, nb_var, var_q);
339 
340  opp_var_in_mat((Pcontrainte) p_syst->inegalites,
341  p_syst->base , nb_var);
342  */
343 
344  for(aux1=0, p_base = p_syst->base ;((aux1 < nb_var) && (p_base != NULL));
345  p_base = p_base->succ, aux1++) {
346  for(pc = p_syst->egalites; pc != NULL; pc = pc->succ) {
347  pc->vecteur = vect_var_subst(pc->vecteur, p_base->var,
349  (vect_new(var_q, VALUE_ONE),
350  VALUE_MONE,
351  vect_new(p_base->var, VALUE_ONE),
352  NO_OFL_CTRL));
353  }
354  for(pc = p_syst->inegalites; pc != NULL; pc = pc->succ) {
355  pc->vecteur = vect_var_subst(pc->vecteur, p_base->var,
357  (vect_new(var_q, VALUE_ONE), VALUE_MONE,
358  vect_new(p_base->var, VALUE_ONE),
359  NO_OFL_CTRL));
360  }
361  }
362 
363  /* ajout de -I , 1 en bas de la matrice */
364  p_vect_baux = (Pvecteur) p_syst->base;
365  for(aux1 = 0; aux1 < nb_var ; aux1++) {
366  p_vect_aux = vect_new(p_vect_baux->var, VALUE_ONE);
367  vect_add_elem(&p_vect_aux, var_q, (Value) VALUE_MONE);
368  p_cont_aux = contrainte_make(p_vect_aux);
369  insert_ineq_end_sc(p_syst,p_cont_aux);
370  p_vect_baux = p_vect_baux->succ;
371  }
372 
373  return p_syst;
374 }
#define VALUE_MONE
#define VALUE_ONE
Pcontrainte contrainte_make(Pvecteur pv)
Pcontrainte contrainte_make(Pvecteur pv): allocation et initialisation d'une contrainte avec un vecte...
Definition: alloc.c:73
#define TOP_LEVEL_MODULE_NAME
Module containing the global variables in Fortran and C.
Definition: naming-local.h:101
Pvecteur vect_var_subst(Pvecteur, Variable, Pvecteur)
=================================================================
Definition: utils.c:1948
entity creer_nom_var(char *name, char *module_name)
BIDOUILLE
#define VARSUPP
Name : ps_max_to_min.c Package : pip Author : F.
Definition: ps_max_to_min.c:71
Psysteme sc_dup(Psysteme ps)
Psysteme sc_dup(Psysteme ps): should becomes a link.
Definition: sc_alloc.c:176
void insert_ineq_end_sc(Psysteme sc, Pcontrainte ineq)
This function inserts one constraint ineq at the end of the system of inequalities of sc.
Definition: sc_insert_eq.c:81
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
#define NO_OFL_CTRL
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
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
Pvecteur vect_cl_ofl_ctrl(Pvecteur v, Value lambda, Pvecteur u, int ofl_ctrl)
Pvecteur vect_cl_ofl_ctrl(Pvecteur v, Value lambda, Pvecteur u, int ofl_ctrl): etape d'acculumulation...
Definition: binaires.c:128

References Ssysteme::base, contrainte_make(), creer_nom_var(), Ssysteme::dimension, Ssysteme::egalites, Ssysteme::inegalites, insert_ineq_end_sc(), NO_OFL_CTRL, sc_dup(), Scontrainte::succ, Svecteur::succ, TOP_LEVEL_MODULE_NAME, VALUE_MONE, VALUE_ONE, Svecteur::var, VARSUPP, vect_add_elem(), vect_cl_ofl_ctrl(), vect_new(), vect_var_subst(), and Scontrainte::vecteur.

Referenced by pip_solve().

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

◆ creer_nom_var()

entity creer_nom_var ( char *  name,
char *  module_name 
)

BIDOUILLE


Name:
Parameters: name: nom local attribue a l'"entite" cree.
module_name: TOP_LEVEL_MODULE ????
Side effect:
Result:
Aims:
Author: F Dumontet.
Date of last change:


Definition at line 142 of file ps_max_to_min.c.

145 {
146  string full_name;
147  entity e ;
148  basic b ;
149 
150  debug(8,"make_scalar_integer_entity", "begin name=%s, module_name=%s\n",
151  name, module_name);
152 
153  full_name = strdup(concatenate(module_name, MODULE_SEP_STRING, name, (char *) NULL));
154 
156 
157  if(e == entity_undefined) {
162 
163  b = make_basic(is_basic_int, 4);
164 
166  }
167 
168 
169  return (e);
170 }
basic make_basic(enum basic_utype tag, void *val)
Definition: ri.c:155
struct _newgen_struct_type_ * type
const char * module_name(const char *s)
Return the module part of an entity name.
Definition: entity_names.c:296
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
#define full_name(dir, name)
Definition: compile.c:414
void debug(const int the_expected_debug_level, const char *calling_function_name, const char *a_message_format,...)
ARARGS0.
Definition: debug.c:189
#define MODULE_SEP_STRING
Definition: naming-local.h:30
string concatenate(const char *,...)
Return the concatenation of the given strings.
Definition: string.c:183
void * gen_find_tabulated(const char *, int)
Definition: tabulated.c:218
#define make_entity(n, t, s, i)
type MakeTypeVariable(basic, cons *)
BEGIN_EOLE.
Definition: type.c:116
#define value_undefined
Definition: ri.h:3016
@ is_basic_int
Definition: ri.h:571
#define entity_undefined
Definition: ri.h:2761
#define type_undefined
Definition: ri.h:2883
#define entity_type(x)
Definition: ri.h:2792
#define entity_domain
newgen_syntax_domain_defined
Definition: ri.h:410
#define storage_undefined
Definition: ri.h:2476
char * strdup()

References concatenate(), debug(), entity_domain, entity_type, entity_undefined, full_name, gen_find_tabulated(), is_basic_int, make_basic(), make_entity, MakeTypeVariable(), module_name(), MODULE_SEP_STRING, NIL, storage_undefined, strdup(), type_undefined, and value_undefined.

Referenced by converti_psysmin_psysmax().

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

◆ opp_var_in_mat()

void opp_var_in_mat ( Pcontrainte  p_cont,
Pbase  p_base,
int  nb_var 
)

Name: opp_var_in_mat.



Parameters: p_cont: pointeur sur la premiere contrainte de la liste
d'egalites ou d'inegalites.
p_base: base du Psysteme.
nb_var: le nombre de variables dans la base.
Result:
Aims: transformer les coefficients des vecteurs qui portent sur des
en leur oppose.
Author: F Dumontet.
Date of last change:


vecteur d'une contrainte.

vecteur d'une base.

compteur de variables deja

traitee.

on traite les nb_var 1eres variables de la base

Definition at line 247 of file ps_max_to_min.c.

253 {
254 
255  Pvecteur p_vect_aux; /* vecteur d'une contrainte. */
256  Pvecteur p_vect_baux; /* vecteur d'une base. */
257  int aux1; /* compteur de variables deja */
258  /* traitee. */
259 
260 
261  for( ; p_cont != NULL; p_cont = p_cont->succ)
262  {
263  p_vect_baux = p_base;
264  p_vect_aux = p_cont->vecteur;
265  /* on traite les nb_var 1eres variables de la base */
266  for(aux1 = 0 ; ((p_vect_aux != NULL) && (aux1<nb_var));\
267  p_vect_baux = p_vect_baux->succ)
268  {
269  if ((p_vect_baux->var != NULL) &&\
270  (p_vect_aux->var !=NULL))
271  {
272  if (p_vect_baux->var == p_vect_aux->var)
273  {
274  value_oppose(p_vect_aux->val);
275  p_vect_aux = p_vect_aux->succ;
276  }
277 
278  }
279  if (p_vect_baux->var != NULL)
280  aux1++;
281  }
282  }
283 }
#define value_oppose(ref)

References Scontrainte::succ, Svecteur::succ, Svecteur::val, value_oppose, Svecteur::var, and Scontrainte::vecteur.