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

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
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
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
fichier.dat
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]