PIPS
plfonct-eco.c
Go to the documentation of this file.
1 /*
2 
3  $Id: plfonct-eco.c 1641 2016-03-02 08:20:19Z coelho $
4 
5  Copyright 1989-2016 MINES ParisTech
6 
7  This file is part of Linear/C3 Library.
8 
9  Linear/C3 Library is free software: you can redistribute it and/or modify it
10  under the terms of the GNU Lesser General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  any later version.
13 
14  Linear/C3 Library is distributed in the hope that it will be useful, but WITHOUT ANY
15  WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  FITNESS FOR A PARTICULAR PURPOSE.
17 
18  See the GNU Lesser General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public License
21  along with Linear/C3 Library. If not, see <http://www.gnu.org/licenses/>.
22 
23 */
24 
25  /* package plint */
26 
27 #ifdef HAVE_CONFIG_H
28  #include "config.h"
29 #endif
30 
31 #include <stdio.h>
32 #include <stdlib.h>
33 
34 #include "boolean.h"
35 #include "arithmetique.h"
36 #include "vecteur.h"
37 #include "contrainte.h"
38 #include "sc.h"
39 
40 #include "sommet.h"
41 #include "matrix.h"
42 
43 #include "plint.h"
44 
45 #define MALLOC(s,t,f) malloc((unsigned)(s))
46 
47 /*
48  * Creation d'une fonction economique de base.
49  *
50  * L'utilisateur devra creer la fonction de minimisation (Pvecteur) qu'il
51  * desire et initialiser le champ VECTEUR de la fonction economique de base.
52  */
54 {
55  Psommet fonct_eco;
56 
57 #ifdef TRACE
58  printf(" ** creation fonction economique de base \n");
59 #endif
60  fonct_eco = sommet_new();
61  fonct_eco->denominateur =VALUE_ONE;
62  fonct_eco->eq_sat = (int *)MALLOC(sizeof(int),INTEGER,"fonct_init");
63  *(fonct_eco->eq_sat) = 0;
64  return (fonct_eco);
65 }
66 
67 
68 /*
69  * Creation d'une fonction economique permettant de calculer la valeur minimum
70  * du premier element de la liste des variables du systeme
71  *
72  * Les parametres de la fonction :
73  *
74  * int nbvars : nombre de variables du systeme (unused)
75  * Pbase b : liste des variables du systeme
76  */
77 /*ARGSUSED*/
78 Psommet fonct_min(nbvars,b)
79 int nbvars;
80 Pbase b;
81 {
82  Psommet fonct_eco;
83 
84  fonct_eco = sommet_new();
85  fonct_eco->denominateur = VALUE_ONE;
86  fonct_eco->vecteur = vect_new(vecteur_var(b),VALUE_ONE);
87  fonct_eco->eq_sat = (int *)MALLOC(sizeof(int),INTEGER,"fonct_min");
88  *(fonct_eco->eq_sat) = 0;
89  return (fonct_eco);
90 }
91 
92 
93 Psommet fonct_max(nbvars,b)
94 int nbvars;
95 Pbase b;
96 {
97  Psommet fonct_eco;
98 
99  fonct_eco = sommet_new();
100  fonct_eco->denominateur = VALUE_ONE;
101  fonct_eco->vecteur = vect_new(vecteur_var(b),VALUE_MONE);
102  fonct_eco->eq_sat = (int *)MALLOC(sizeof(int),INTEGER,"fonct_max");
103  *(fonct_eco->eq_sat) = 0;
104  return (fonct_eco);
105 }
106 
107 
108 
109 
110 /*
111  * creation d'une fonction economique permettant de calculer le minimum de la
112  * somme de toutes les variables du systeme
113  *
114  * Les parametres de la fonction :
115  *
116  * int nbvars : nombre de variables du systeme
117  * Pbase b : liste des variables du systeme
118  */
119 
121 int nbvars;
122 Pbase b;
123 {
124  Psommet fonct_eco;
125  register int i=0;
126  Pvecteur pv;
127 
128 #ifdef TRACE
129  printf(" ** creation fonction economique \n");
130 #endif
131  fonct_eco =sommet_new();
132  fonct_eco->denominateur = VALUE_ONE;
133  fonct_eco->vecteur = vect_new(vecteur_var(b),VALUE_ONE);
134  for (i = 1, pv= b->succ;i< nbvars && !VECTEUR_NUL_P(pv); i++, pv=pv->succ)
135  vect_add_elem (&(fonct_eco->vecteur),vecteur_var(pv),VALUE_ONE);
136 
137  fonct_eco->eq_sat = (int *)MALLOC(sizeof(int),
138  INTEGER,"fonct_min_all");
139  *(fonct_eco->eq_sat) = 0;
140  return (fonct_eco);
141 }
142 
143 /*
144  * creation d'une fonction economique permettant de calculer le maximum de la
145  * somme de toutes les variables du systeme
146  *
147  * Les parametres de la fonction :
148  *
149  * int nbvars : nombre de variables du systeme
150  * Pbase b : liste des variables du systeme
151  */
152 
153 
154 
156 int nbvars;
157 Pbase b;
158 {
159  Psommet fonct_eco;
160  Pvecteur pv = VECTEUR_NUL;
161 #ifdef TRACE
162  printf(" ** creation fonction economique \n");
163 #endif
164  fonct_eco =sommet_new();
165  fonct_eco->denominateur = VALUE_ONE;
166  fonct_eco->vecteur = vect_new(vecteur_var(b),VALUE_MONE);
167  for (pv= b->succ;!VECTEUR_NUL_P(pv);pv=pv->succ)
168  vect_add_elem (&(fonct_eco->vecteur),vecteur_var(pv),VALUE_MONE);
169  fonct_eco->eq_sat = (int *)MALLOC(sizeof(int),
170  INTEGER,"fonct_max_all");
171  *(fonct_eco->eq_sat) = 0;
172  return (fonct_eco);
173 }
174 
175 
176 
177 /*
178  * Creation d'une fonction economique permettant de calculer le minimum de la
179  * difference des deux premieres variables du systeme
180  *
181  * Les parametres de la fonction :
182  *
183  * int nbvars : nombre de variables du systeme ( unused)
184  * Pbase b : liste des variables du systeme
185  */
186 /*ARGSUSED*/
188 int nbvars;
189 Pbase b;
190 {
191  Psommet fonct_eco;
192 
193  fonct_eco =sommet_new();
194  fonct_eco->denominateur = VALUE_ONE;
195  fonct_eco->vecteur = vect_new(vecteur_var(b),VALUE_ONE);
196  vect_add_elem(&(fonct_eco->vecteur),vecteur_var(b->succ),VALUE_MONE);
197  fonct_eco->eq_sat = (int *)MALLOC(sizeof(int),INTEGER,"fonct_min_d");
198  *(fonct_eco->eq_sat) = 0;
199  return (fonct_eco);
200 }
201 
202 /*
203  * Creation d'une fonction economique permettant de calculer le maximum de la
204  * difference des deux premieres variables du systeme
205  *
206  * Les parametres de la fonction :
207  *
208  * int nbvars : nombre de variables du systeme
209  * Pbase b : liste des variables du systeme
210  */
211 /*ARGSUSED*/
213 int nbvars;
214 Pbase b;
215 {
216  Psommet fonct_eco;
217 
218  fonct_eco =sommet_new();
219  fonct_eco->denominateur = VALUE_ONE;
220  fonct_eco->vecteur = vect_new(vecteur_var(b),VALUE_MONE);
221  vect_add_elem(&(fonct_eco->vecteur),vecteur_var(b->succ),VALUE_ONE);
222  fonct_eco->eq_sat = (int *)MALLOC(sizeof(int),INTEGER,"fonct_max_d");
223  *(fonct_eco->eq_sat) = 0;
224  return (fonct_eco);
225 }
226 
227 /*
228  * Lecture au clavier de la fonction economique que l'on veut creer
229  *
230  * Les parametres de la fonction :
231  *
232  * int nbvars : nombre de variables du systeme
233  * Pbase b : liste des variables du systeme
234  */
235 
237 int nbvars;
238 Pbase b;
239 {
240  Psommet fonct_eco;
241  register int i=0;
242  Value d;
243 Pvecteur pv;
244 
245  fonct_eco =sommet_new();
246  fonct_eco->denominateur = VALUE_ONE;
247  printf (" *** creation d'une fonction economique \n");
248  printf (" pour la premiere variable : 1 ou -1 ");
249  scan_Value(&d);
250  fonct_eco->vecteur = vect_new(vecteur_var(b),d);
251  for (i = 1 ,pv= b->succ;i< nbvars && !VECTEUR_NUL_P(pv);
252  i++,pv=pv->succ)
253  {
254  printf (" pour l'indice %d : 1 ou -1 ",i+1);
255  scan_Value(&d);
256  vect_add_elem (&(fonct_eco->vecteur),vecteur_var(pv),d);
257  }
258  printf ("\n");
259 
260  fonct_eco->eq_sat = (int *)MALLOC(sizeof(int),INTEGER,"fonct_read");
261  *(fonct_eco->eq_sat) = 0;
262  return (fonct_eco);
263 }
#define VALUE_MONE
int Value
#define VALUE_ONE
int scan_Value(Value *)
Definition: io.c:63
#define MALLOC(s, t, f)
package plint
Definition: plfonct-eco.c:45
Psommet fonct_min(int nbvars, Pbase b)
RGSUSED.
Definition: plfonct-eco.c:78
Psommet fonct_init()
Definition: plfonct-eco.c:53
Psommet fonct_min_d(int nbvars, Pbase b)
RGSUSED.
Definition: plfonct-eco.c:187
Psommet fonct_min_all(int nbvars, Pbase b)
Definition: plfonct-eco.c:120
Psommet fonct_max_d(int nbvars, Pbase b)
RGSUSED.
Definition: plfonct-eco.c:212
Psommet fonct_max_all(int nbvars, Pbase b)
Definition: plfonct-eco.c:155
Psommet fonct_read(int nbvars, Pbase b)
Definition: plfonct-eco.c:236
Psommet fonct_max(int nbvars, Pbase b)
Definition: plfonct-eco.c:93
int printf()
Psommet sommet_new()
Creation d'un sommet
Definition: sommet.c:51
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
struct Svecteur * succ
Definition: vecteur-local.h:92
structure de donnees Sommet
Definition: sommet-local.h:64
Pvecteur vecteur
Definition: sommet-local.h:66
int * eq_sat
Definition: sommet-local.h:65
Value denominateur
Definition: sommet-local.h:67
#define vecteur_var(v)
#define VECTEUR_NUL
DEFINITION DU VECTEUR NUL.
#define VECTEUR_NUL_P(v)
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_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