Programme C pour un problème d'optimisation

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
sahli
Messages: 3
Enregistré le: 03 Avr 2018, 13:16

Programme C pour un problème d'optimisation

par sahli » 03 Avr 2018, 13:21

Bonjour tous le monde
est ce que je peux trouver des gens qui m'aidera dans ce probleme

Réaliser le programme qui permet d'optimisée les résultat pour résoudre un problème dans le cas de Maximisation et le cas de Minimisation
Pour une fonction objectif à trois variable aX1+bX2+cX3
Et avec trois contrainte
A11x1+b12x2+c13x3<y1
A21x2+B21x2+C23x3<y2
A13x3+B32x3+C33x3<y3
Même chose pour le cas de minimisation

Remarque

*Le programme doit être pour un cas general.
*L'introduction des valeur réal permet de testé le programme



pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 13:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Programme C pour un problème d'optimisation

par pascal16 » 03 Avr 2018, 15:23

version brutale
-> tu fais une triple boucle sur x1, x2 et x3 en gardant la valeur du max

initialisation :
sol1 : il te faut une valeur max et min, que tu initialises à la main, car avec le contrainte, il faudrait une boucle pour trouver une valeur de départ à cause des contraintes.
sol2 : utiliser l'équivalent de "not a number" ou un booléen initialisé à "false" jusqu'à ce que tu rencontres la première valeur valide vis à vis des contraintes

exemple : for (double x1=-2 , x1 <=2 , x1+=0.1)
tu vérifies le contraintes
si les contraintes sont vérifiée, tu les compares à min et max

à la fin, tu vérifie si au moins une fois les contraintes ont été satisfaites par (sol2)

tu affiches le résultat

sahli
Messages: 3
Enregistré le: 03 Avr 2018, 13:16

Re: Programme C pour un problème d'optimisation

par sahli » 03 Avr 2018, 15:30

Merci beaucoup . Je vais l'essayer

sahli
Messages: 3
Enregistré le: 03 Avr 2018, 13:16

Re: Programme C pour un problème d'optimisation

par sahli » 03 Avr 2018, 16:14

Hey guys ,
j'ai trouvé la solution et ça fonctionne , donc je vais là poster ici

#include <stdio.h>
#include <math.h>
#define CMAX 10
#define VMAX 10

int NC, NV, NOPTIMAL,P1,P2,XERR;
double TS[CMAX][VMAX];

void Data() {
double R1,R2;
char R;
int I,J;
printf("\n SIMPLEX METHOD\n\n");
printf(" MAXIMIZE (Y/N) ? "); scanf("%c", &R);
printf("\n NUMBER OF VARIABLES OF THE FUNCTION ? ");
scanf("%d", &NV);
printf("\n NUMBER OF CONSTRAINTS ? "); scanf("%d", &NC);

if (R == 'Y' || R=='y')
R1 = 1.0;
else
R1 = -1.0;
printf("\n INPUT COEFFICIENTS OF THE FUNCTION:\n");

for (J = 1; J<=NV; J++) {
printf(" #%d ? ", J); scanf("%lf", &R2);
TS[1][J+1] = R2 * R1;
}

printf(" Right hand side ? "); scanf("%lf", &R2);
TS[1][1] = R2 * R1;

for (I = 1; I<=NC; I++) {
printf("\n CONSTRAINT #%d:\n", I);
for (J = 1; J<=NV; J++) {
printf(" #%d ? ", J); scanf("%lf", &R2);
TS[I + 1][J + 1] = -R2;
}
printf(" Right hand side ? "); scanf("%lf", &TS[I+1][1]);
}

printf("\n\n RESULTS:\n\n");
for(J=1; J<=NV; J++) TS[0][J+1] = J;
for(I=NV+1; I<=NV+NC; I++) TS[I-NV+1][0] = I;
}

void Pivot();
void Formula();
void Optimize();
void Simplex() {
e10: Pivot();
Formula();
Optimize();
if (NOPTIMAL == 1) goto e10;
}

void Pivot() {
double RAP,V,XMAX;
int I,J;
XMAX = 0.0;
for(J=2; J<=NV+1; J++) {
if (TS[1][J] > 0.0 && TS[1][J] > XMAX) {
XMAX = TS[1][J];
P2 = J;
}
}
RAP = 999999.0;
for (I=2; I<=NC+1; I++) {
if (TS[I][P2] >= 0.0) goto e10;
V = fabs(TS[I][1] / TS[I][P2]);
if (V < RAP) {
RAP = V;
P1 = I;
}
e10:;}
V = TS[0][P2]; TS[0][P2] = TS[P1][0]; TS[P1][0] = V;
}
void Formula() {;
int I,J;
for (I=1; I<=NC+1; I++) {
if (I == P1) goto e70;
for (J=1; J<=NV+1; J++) {
if (J == P2) goto e60;
TS[I][J] -= TS[P1][J] * TS[I][P2] / TS[P1][P2];
e60:;}
e70:;}
TS[P1][P2] = 1.0 / TS[P1][P2];
for (J=1; J<=NV+1; J++) {
if (J == P2) goto e100;
TS[P1][J] *= fabs(TS[P1][P2]);
e100:;}
for (I=1; I<=NC+1; I++) {
if (I == P1) goto e110;
TS[I][P2] *= TS[P1][P2];
e110:;}
}
void Optimize() {
int I,J;
for (I=2; I<=NC+1; I++)
if (TS[I][1] < 0.0) XERR = 1;
NOPTIMAL = 0;
if (XERR == 1) return;
for (J=2; J<=NV+1; J++)
if (TS[1][J] > 0.0) NOPTIMAL = 1;
}
void Results() {
int I,J;
if (XERR == 0) goto e30;
printf(" NO SOLUTION.\n"); goto e100;
e30:for (I=1; I<=NV; I++)
for (J=2; J<=NC+1; J++) {
if (TS[J][0] != 1.0*I) goto e70;
printf(" VARIABLE #%d: %f\n", I, TS[J][1]);
e70: ;}
printf("\n ECONOMIC FUNCTION: %f\n", TS[1][1]);
e100:printf("\n");
}
void main() {
Data();
Simplex();
Results();
}

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 81 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite