2788


Kod źródłowy tych funkcji wygląda następująco:

Procesor* symulowane_wyzarzanie(zadania *z, int il, int m,

Procesor *p)

{

double tp,tk;

int i,j,b,t1,t2;

randomize();

Procesor * p1;

p1 = new Procesor [m+1];

p = p1;

// stan początkowy - przydzielenie wszystkich

tp = 0; //zadań pierwszemu procesorowi - punkt 1.

tk = 1;

for (i=0; i<m; i++) p[i].zeruj_licznik();

b=0;

for (;b==0;)

{

for (i=0; i<il; i++) // funkcja czy_mozna() sprawdza czy

if ((z[i].czy_mozna()) && (!(z[i].przydzielone)))

{ // wszystkie poprzedniki są już przydzielone

p[0].dodaj(z[i].numer,tp,tk,i);

tp++; // jeśli nie to dodanie zadania do pierwszego procesora

tk++;

z[i].przydziel();

}

b=1;

for (i=0; i<il; i++) // sprawdza czy wszystkie zadania

if (z[i].przydzielone == false) b=0; // są już przydzielone

}

p1 = p;

double T = 1000; // punkt 2.

double Tk = 1;

double r = 0.99;

int nr;

int pr;

double delta = 0;

int M=0, N=0;

while (T >= Tk) // punkt3

{

0x08 graphic
nr = random(il); // wylosowanie zadania - punkt 3.1

t1 = int(t_kon_poprz(z[nr],p1,m,il));

t2 = int(t_pocz_nast(z[nr],p1,m,il));

z[nr].przydzielone = false;

for (i=0; i<m; i++)

for (j=0; j<p1[i].licznik; j++)

if (nr == p1[i].ind_zad[j])

{ // Usunięcie z procesora zadania o wylosowanym

p1[i].ind_zad[j] = -1; //numerze (zm. Nr)

p1[i].nr_zad[j] = 0;

p1[i].t_kon[j] = 0;

p1[i].t_pocz[j] = 0;

}

b=0;

while (b==0) //przydzielenie tego zadania do

0x08 graphic
{ //wylosowanego procesora

0x08 graphic
pr = random(m);

for (i=t1; i<t2; i++s

if (p1[pr].ind_zad[i] == -1)

{ // jeżeli miejsce w procesorze jest puste

p1[pr].dodaj1(i,z[nr].numer,z[nr].index);

z[nr].przydziel(); // to przydziel mu zadanie

b=1;

break;

}

0x08 graphic
}

0x08 graphic

0x08 graphic
0x08 graphic
delta = J(p1,m) - J(p,m);

if (delta<=0)

{

p = p1;

M++;

0x08 graphic
}

else if ( (double(random(10000)/10000)) <=

(exp(double(-delta/T))) ) p = p1;

N++;

0x08 graphic

if ( (N==10) || (M==1) )

{

M = 0;

N = 0;

T = r * T;

}

}

return p;

}

double J(Procesor *p , int m)

{ //wyznacza czas końca wykonywania wszystkich zadań

double max = p[0].max_czas();

for (int i=0; i<m; i++)

if (max<p[i].max_czas()) max = p[i].max_czas();

return max;

}

//czas końca poprzedników

// czas początku następników

// wylosowanie procesora do którego będzie przydzielone zad.

// Szukanie pierwszego wolnego miejsca w procesorze

punkt 3.2 algorytmu S.A. (funkcja J - patrz poniżej

punkt 3.3

//wyznaczenie końca wszystkich zadań

punkt 3.4

punkt 3.5

punkt 3.6



Wyszukiwarka

Podobne podstrony:
200603avt745 avt 2788 WYKRYWACZ PLUSKIEW, BottomLayerNormal
200603avt745 avt 2788 WYKRYWACZ PLUSKIEW, BottomLayerMirror
200603avt745 avt 2788 WYKRYWACZ PLUSKIEW, TopOverlay
200603avt745 avt 2788 WYKRYWACZ PLUSKIEW, AVT745
2788
2788
2788
2788
2788
200603avt745 avt 2788 WYKRYWACZ PLUSKIEW, 68 053
200603avt745 avt 2788 WYKRYWACZ PLUSKIEW, MultiLayer
200603avt745 avt 2788 WYKRYWACZ PLUSKIEW, BottomLayerNormal
2788

więcej podobnych podstron