salut a tous
je dois implementer une contrainte d'un probleme de RCPSP(Ressource constraints project scheduling problem)
jai deja implemeter en xpress Mosel les deux premiere c.a.d
Pour chaque précédence dans mon tableau de précédence: Temps de début du successeur - Temps début du prédécesseur >= durée prédécesseur
je dois l'implemente en mosel xpress
au fond de page je met le code deja ecrit avec les differente procedure et le fichier .dat
Code : Sélectionner tout - Visualiser dans une fenêtre à part forall(i in precedenza_r) sum(j in Tmax_r) E(i,j)*Tmax_r()- sum(j in Tmax_r) E(i,j)*precedenza_r(j) >= durata(i) elle ne fonctione pas
fichier.dat
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
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 model RCPSP uses "mmxprs"; !gain access to the Xpress-Optimizer solver forward procedure RCPSP_input forward procedure RCPSP_modello forward procedure RCPSP_output declarations Zp: linctr !funzione obiettivo Tmax:integer Tmax_r:range Nbrisorsa:range !! attivita:range ! conterra tuute le attivita del progetto precedenza_r:range durata:array(attivita)of integer !! durata di ogni attivita risorsamax: array(Nbrisorsa) of integer !risorsa max disponibili aogni mese risorsausata:array(attivita,Nbrisorsa)of integer! risorsa usta al mese t(i) precedenza:array(precedenza_r,Nbrisorsa)of integer E:array(attivita,Tmax_r)of mpvar !!=1 if attivita (i) inizia del tempo (i) end-declarations writeln("Begin running model") RCPSP_input !! chiamata della procedure RCPSP_modello minimize(Zp) writeln("End running model") RCPSP_output procedure RCPSP_input initializations from "RCPSP1.dat" Tmax durata risorsamax risorsausata precedenza end-initializations Tmax_r:=0..Tmax writeln("Tmax =",Tmax_r) writeln("durata=",durata) writeln("risorsamax=",risorsamax) writeln("risorsausata=",risorsausata) writeln("precedenza=",precedenza) end-procedure procedure RCPSP_modello forall(i in attivita, j in Tmax_r) create(E(i,j)) Zp:=sum(i in attivita,j in Tmax_r) E(i,j)*j !definizione funzione obiettivo forall(i in attivita) sum(j in Tmax_r) E(i,j)=1 !ogni attivita inizia una sola volta forall(i in precedenza_r) sum(j in Tmax_r) E(i,j)*Tmax_r()- sum(j in Tmax_r) E(i,j)*precedenza_r(j) >= durata(i) !forall(i in precedenza_r) sum(j in Tmax_r) E(i,j)*durata(i+1)- sum(j in Tmax_r) E(i,j)*attivita(i) >= durata(i) forall(i in attivita, j in Tmax_r) E(i,j) is_binary end-procedure procedure RCPSP_output writeln("\tSOLUZIONE MODELLO:") writeln("\tZp= ",getobjval) forall(i in attivita,j in Tmax_r) do if (getsol(E(i,j))=1) then writeln("attivita ",i," inizia al tempo ", j) end-if end-do end-procedure end-model
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Tmax:15 durata:[(1)0 (2)3 (3)3 (4)1 (5)1 (6)2 (7)3 (8)2 (9)1 (10)3 (11)0] risorsamax:[(1)4 (2)4 (3)4] risorsausata:[[0,0,0],[2,2,2],[3,1,1],[1,0,1],[2,2,2],[4,0,1],[1,2,2],[3,2,0],[1,1,0],[2,2,3],[0,0,0]] precedenza:[(1 1) 1 (1 2) 2 (2 1) 1(2 2) 3(3 1) 1(3 2) 4(4 1) 1(4 2) 7(5 1)2(5 2)8(6 1)3(6 2)5(7 1)3(7 2)6(8 1)3(8 2)9(9 1)4(9 2)10(10 1)6(10 2)10(11 1)5(11 2)8(12 1)7(12 2)11(13 1)8(13 2)11(14 1)9(14 2)11(15 1)10(15 2)11]
Partager