-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathpne_definition_arguments.h
More file actions
157 lines (136 loc) · 8.6 KB
/
pne_definition_arguments.h
File metadata and controls
157 lines (136 loc) · 8.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*
** Copyright 2007-2018 RTE
** Author: Robert Gonzalez
**
** This file is part of Sirius_Solver.
** This program and the accompanying materials are made available under the
** terms of the Eclipse Public License 2.0 which is available at
** http://www.eclipse.org/legal/epl-2.0.
**
** This Source Code may also be made available under the following Secondary
** Licenses when the conditions for such availability set forth in the Eclipse
** Public License, v. 2.0 are satisfied: GNU General Public License, version 3
** or later, which is available at <http://www.gnu.org/licenses/>.
**
** SPDX-License-Identifier: EPL-2.0 OR GPL-3.0
*/
# ifdef __cplusplus
extern "C"
{
# endif
# ifndef PROBLEME_DEJA_DEFINI
/*******************************************************************************************/
/*
Le passage des informations a la routine de resolution du probleme se fait par un pointeur
a la structure C definie ci-apres.
Le fichier pne_definition_arguments.h doit etre inclus dans le code de l'appelant,
il contient la definition de la structure C exploitee par la fonction.
Apres avoir renseigne les champs, le module utilisateur appelle la fonction
PNE_Solveur avec, pour argument d'appel, un pointeur a la structure ci-dessous.
Exemple d'utilisation :
PROBLEME_A_RESOUDRE Mon_Probleme; <- definition d'une structure "Mon_Probleme" de type PROBLEME_A_RESOUDRE
.......
.......
Remplissage des champs de la structure
.......
.......
.......
Appel de la fonction:
PNE_Solveur( &Mon_Probleme );
*/
typedef struct {
int NombreDeVariables; /* Nombre de variables */
int * TypeDeVariable ; /* ENTIER ou REEL attention dans le cas des variables entieres, le seul cas traite
est celui des variables {0,1} */
char** NomsDesVariables; /* Contient les noms des variables, nommage automatique total si NULL,
partiel si certains NomsDesVariables[i] sont NULL */
int * TypeDeBorneDeLaVariable; /* Indicateur du type de variable, il ne doit prendre que les suivantes
(voir le fichier pne_constantes_externes.h mais ne jamais utiliser les
valeurs explicites des constantes):
VARIABLE_FIXE ,
VARIABLE_BORNEE_DES_DEUX_COTES ,
VARIABLE_BORNEE_INFERIEUREMENT ,
VARIABLE_BORNEE_SUPERIEUREMENT ,
VARIABLE_NON_BORNEE
*/
double * X ; /* Vecteur des inconnues: en sortie, il contient la solution s'il y en a une */
double * Xmax ; /* Borne sup de chaque inconnue */
double * Xmin ; /* Borne inf de chaque inconnue */
double * CoutLineaire ; /* Vecteur des couts lineaires */
/* Description des contraintes */
int NombreDeContraintes; /* Nombre de contraintes */
char** NomsDesContraintes; /* Contient les noms des contraintes, nommage automatique total si NULL,
partiel si certains NomsDesVariables[i] sont NULL */
double * SecondMembre ; /* Vecteur des second membres */
char * Sens ; /* Sens de chaque contrainte :
pour une contraintes de type inferieur ou egal mettre le caractere '<'
pour une contraintes de type superieur ou egal mettre le caractere '>'
pour une contrainte d'egalite mettre le caractere "=" */
/*
La matrice des contrainte est decrite par les 4 vecteurs qui suivent. Elle doit etre decrite par ligne.
-> Les coefficients de la matrice des contraintes doivent etre donnes dans un vecteur double precision.
-> En parallele du vecteur des coefficient, il faut donner l'indice colonne du coefficient.
-> Pour chaque ligne (ou premier membre de la contrainte) il faut donner sont indice d�but dans le vecteur
double precision qui contient les coefficients de la contraintes, et le nombre de coefficients non nuls.
*/
int * IndicesDebutDeLigne ; /* Pour chaque ligne, indice debut de la ligne dans le
vecteur des coefficients */
int * NombreDeTermesDesLignes ; /* Nombre de termes non nuls de la ligne */
double * CoefficientsDeLaMatriceDesContraintes ; /* Coefficients de la matrice des contraintes */
int * IndicesColonnes ; /* Vecteur parallele au precedent. Il contient l'indice
colonne de chaque coefficient */
/* En retour */
double * VariablesDualesDesContraintes; /* Pointeur sur un vecteur dans lequel le solveur va mettre
les variables duales des contraintes. Attention, ce tableau
doit etre alloue par l'appelant */
int ExistenceDUneSolution; /* Indicateur d'existence de solution. Valeurs possible:
-> PAS_DE_SOLUTION_TROUVEE
-> SOLUTION_OPTIMALE_TROUVEE
-> SOLUTION_OPTIMALE_TROUVEE_MAIS_QUELQUES_CONTRAINTES_SONT_VIOLEES
-> PROBLEME_INFAISABLE
-> PROBLEME_NON_BORNE
-> ARRET_PAR_LIMITE_DE_TEMPS_AVEC_SOLUTION_ADMISSIBLE_DISPONIBLE
-> ARRET_CAR_ERREUR_INTERNE (saturation memoire par exemple)
*/
/* Options */
char AlgorithmeDeResolution; /* Doit valoir SIMPLEXE ou POINT_INTERIEUR */
/* Attention, le choix POINT_INTERIEUR ne peut �tre utilise que dans le cas
d'un probleme ne comportant pas de varaibles entieres */
char AffichageDesTraces; /* Peut valoir OUI_PNE ou NON_PNE */
char SortirLesDonneesDuProbleme; /* Peut valoir OUI_PNE ou NON_PNE.
Mettre OUI_PNE pour sortir les donnees du probleme dans un fichier au format mps */
char FaireDuPresolve; /* Peut valoir OUI_PNE ou NON_PNE */
/* La valeur hautement conseillee est OUI_PNE */
int TempsDExecutionMaximum; /* Temps (en secondes) au bout duquel la resolution du probleme est arretee meme si la
solution optimale n'a pas ete trouvee. Attention, cette grandeur n'est prise en compte
que si le probleme contient des variables entieres */
/* Mettre 0 si le temps est illimite */
int NombreMaxDeSolutionsEntieres; /* Lorsque le nombre de solutions entieres est egal � la valeur de ce
parametre, le solveur s'arrete et donne la meilleure solution rencontree.
Remarque: mettre une valeur strictement negative pour que ce parametre n'ai pas
de r�le.
*/
double ToleranceDOptimalite; /* Si l'�cart relatif entre le cout de la solution entiere trouvee et le plus petit minorant
est inf�rieur � ToleranceDOptimalite, le solveur s'arrete et consid�re que la solution
entiere trouvee est la solution optimale.
Convention: ToleranceDOptimalite doit etre exprim� en %.
Conseil : mettre 0 %.
*/
char CoupesLiftAndProject; /* Utile que s'il y a des variables entieres dans le probleme.
Peut valoir OUI_PNE ou NON_PNE. Lorsque cette option vaut OUI_PNE
le calcul des coupes de type lift and project est activ�.
- Choix conseill�: NON_PNE car le calcul de ce type de coupe peut �tre
couteux.
- Mettre OUI_PNE si le probleme est difficile a resoudre.
*/
double objective_offset;
void *callback;
} PROBLEME_A_RESOUDRE;
/* Prototype du la fonction d'entree */
void PNE_Solveur( PROBLEME_A_RESOUDRE * );
/*******************************************************************************************/
# define PROBLEME_DEJA_DEFINI
# endif
# ifdef __cplusplus
}
# endif