Bonjour,

J'essaie de programmer un problème d'optimisation mais je bloque.
Mes données sont ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
data fooddata; infile datalines;
input name $ prod $ cost prot fat carb cal Moy; datalines;
Breadb B 2.5 4 1 15 90 150
Breadc C 2 4 1 15 90 212
Milkb B 4 8 5 11.7 120 0
Milkc C 3.5 8 5 11.7 120 350
Cheeseb B 12 7 9 0.4 106 20
Cheesec C 8 7 9 0.4 106 50
;
run;
Les variables de mon problème d'optimisation sont les quantités de chacun des items qui répondront à mes contraintes. Néanmoins, je souhaite que les quantités optimisés de s'éloigne pas trop des quantités consommés pour un même aliment (fonction objectif). Par exemple pour le pain il faudrait que Breadb+breadc opt ne soit pas trop différent de 150+210=362g.
C'est ce que je n'arrive pas à coder. Mon code dans l'état actuel est le suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
proc optmodel; /* declare index set */ set<str> FOOD;
/* declare variables */ var diet{FOOD} >= 0;
/* objective function */
num Moy{FOOD}; min f=(sum{i in FOOD, j=2i-1}((Moy[j]+Moy[j+1])-(diet[j]+diet[j+1]))**2);
 
/* constraints */
num prot{FOOD}; num fat{FOOD}; num carb{FOOD}; num cal{FOOD};
num min_cal, max_prot, min_carb, min_fat; con cal_con: sum{i in FOOD}cal[i]*diet[i] >= 300;
con prot_con: sum{i in FOOD}prot[i]*diet[i] <= 10; con carb_con: sum{i in FOOD}carb[i]*diet[i] >= 10;
con fat_con: sum{i in FOOD}fat[i]*diet[i] >= 8;
 
/* read parameters */ read data fooddata into FOOD=[name] cost prot fat carb cal Moy;
 
/* solve and print the optimal solution */ solve with lp/logfreq=1; /* print each iteration to log */ print diet;
quit;
Si quelqu'un pourrait m'aider, ce serait vraiment gentil.
Merci d'avance