-
Notifications
You must be signed in to change notification settings - Fork 0
/
proyectoID.gms
104 lines (89 loc) · 3.66 KB
/
proyectoID.gms
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
* El organismo de promoción de la ciencia en España
* debe seleccionar los proyectos de I+D a los que va a subvencionar
* en los próximos 2 años.
* La siguiente tabla muestra las solucitudes recibidas.
* Para cada solicitud se indica la valoración obtenida
* por el panel de expertos, el área de investigación,
* el presupuesto solicitado para cada una de las dos anualidades
* (en miles de euros) y la región geográfica
* en la que se desarrollaría el proyecto (numeradas de 1 a 3).
* Proyectos 1 2 3 4 5 6 7 8
* Valoración expertos 65 80 75 100 95 70 90 60
* Área inf inf inf mat mat mat fis fis
* Presupuesto año 1 190 170 160 120 110 200 130 150
* Presupuesto año 2 140 110 170 100 120 200 160 180
* Región 1 2 3 3 2 1 2 1
Sets
a area de investigacion /inf, mat, fis/
j proyecto de I+D /1*8/
r region geografica /1*3/
t 2 anio /1*2/
pr(j,r) proyecto_region /1.1, 2.2, 3.3, 4.3, 5.2, 6.1, 7.2, 8.1/
pa(j,a) proyecto_area /1.inf, 2.inf, 3.inf,
4.mat, 5.mat, 6.mat,
7.fis, 8.fis/
;
Parameters
valoracion(j) /1 65, 2 80, 3 75, 4 100,
5 95, 6 70, 7 90, 8 60/
region(j,r)
area(j,a)
;
region(j,r)=pr(j,r);
area(j,a)=pa(j,a);
display region;
display area;
Table
presupuesto(j,t)
1 2
1 190 140
2 170 110
3 160 170
4 120 100
5 110 120
6 200 200
7 130 160
8 150 180
;
* Construir un modelo de optimización lineal que maximice
* la suma de la puntuación total obtenida por los proyectos seleccionados,
* teniendo en cuenta que no se pueden seleccionar más de 6 proyectos,
* debe haber al menos uno por región y área de investigación,
* y el presupuesto máximo financiable es de 590000 euros cada año
* y 1446000 en total, además de las condiciones que se indican a continuación.
Scalars
max_proyecto /6/
presupuesto_anio /590000/
presupuesto_total /1446000/
;
* Para ello, utilice las variables binarias X_j que toma el valor 1
* si el proyecto j es seleccionado y 0 en otro caso.
Binary Variable x(j);
* Si NO se seleccionan el proyecto 8, deben seleccionarse los proyectos 1 y 2:
Equation r1;
r1.. x('1')+x('2')+2*x('8')=g=2;
* Los proyectos de la región 1 son incompatibles entre sí:
Equation r2;
r2.. sum(pr(j,'1'), x(j)) =l= 1;
* No se pueden financiar proyectos con un presupuesto total superior a 330 euros:
Equation r3(j);
r3(j).. sum(t,x(j)*presupuesto(j,t))=l=330;
Free Variable z valoracion total;
Equations
obj maximice la suma de la puntuacion total
r_proyecto no se pueden seleccionar más de 6 proyectos,
r_presupuesto_anio(t) presupuesto cada año
r_presupuesto_total presupuesto total
r_region(r) al menos uno por region
r_area(a) al menos uno por area
;
* coding area
obj.. z =e= sum(j,x(j)*valoracion(j));
r_proyecto.. sum(j,x(j))=l=max_proyecto;
r_region(r).. sum(j, region(j,r)*x(j))=g=1;
r_area(a).. sum(j,area(j,a)*x(j))=g=1;
r_presupuesto_anio(t).. sum(j,x(j)*presupuesto(j,t)*1000)=l=presupuesto_anio;
r_presupuesto_total.. sum((j,t), x(j)*presupuesto(j,t)*1000)=l=presupuesto_total;
option optcr = 0.001
Model proyectoID /All/;
Solve proyectoID using MIP maximizing z;