Bonjour a tous,

j'essaye de programmer l'algorithme NEH sur Matlab j'espère que quelqun peut m'aider ^_^

voila ce que j'ai essayer de faire :

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
clear all; close all; clc;
tic;
n=4;% nombre des jobs sur la première machine
m=3;%nombre total des jobs sur la 2 eme machine, 
 
k=perms(1:m);
[ l1 , l2]= (size(k)); 
p=[2 5 1 6]; %processing time sur la premiere machine
q=[3 4 2 ];% processing time sur la deuxieme machine
 
S{1}=[1 3];
S{2}=[1 2];
S{3}=[4];
 
 
J=zeros(1,m);
for i=1:m
J(1,i)=sum(p(S{i}));
end
[v, seq]=sort (J,'descend');% obtention de la séquence qu'on l'appelle 'seq'
 
for i=1:m
H{i}=S{seq(i)}
end
D{1} = H{1};% On exécute d'abord S dans la première position
F{1}=D{1};
for i=2:length(S);
D{i} = unique([D{i-1} H{i}]);% On fait S2\S1, S3\S2,...
F{i}= setdiff(D{i},D{i-1});
end 
 
c=zeros(1,m);
for i=1:m
c(1,i)=sum(p(F{i}));% On détermine le temps de fin sur la première machine
end
G=cumsum(c);
C=zeros(1,m);
C(1,1)=G(1,1)+q(seq(1,1));
for i=2:m
C(1,i)=max((G(1,i)),C(1,i-1))+q(seq(1,i));% temps de fin sur la 2 eme machine
 
end
makespan=C(1,m);
 
for i=1:length(k)
kl{i}=k(i,;
end
 
 
toc;


kl me donne toutes les combinaison possible
je doit calculer le makespan pour chaque combinaison kl{i} et ala fin je doit choisir la plus petite comme valeur optimal de makespan


comment je doit faire ?

merci