Author: Not specified Language: c Description: Not specified Timestamp: 2013-05-27 17:37:21 +0000
1. #include <cstdio>
2. #include <cstdlib>
3. #include <cmath>
4. #include <iostream>
5. using namespace std;
6.
7. #define R 3
8. #define M 7
9.
10. // xronos skepsis, diktio, cpuApp, diskApp, diskData2, diskData1, cpuData
11.  double d[M][R]={{2500,4000,7500},{2,4,7},{20,48,75},{33,57,90},{31,50,95},{14,25,44},{36,57,91}};
12.
13. // double d[M][R]={{2500,4000,7500},{2,4,7},{16.7,40,62.5},{23.6,40.7,64.3},{31,50,95},{14,25,44},{36,57,91}}; 1h lush
14.
15.
16. // double d[M][R]={{2500,4000,7500},{2,4,7},{20,48,75},{33,57,90},{23.8,38.5,73.1},{14,25,44},{36,57,91}}; 2h lush
17.
18.
19. double n[M][R],r[M][R],l[R],ro[M][R],T[R];
20. int N[R]={38,67,20};
21. double approx=0.0001;
22.
23. double apoliti(double a,double b) {
24.     if(a>b) return a-b;
25.     else return b-a;
26. }
27.
28.
29. //pollaplasiastis a(k)
30. double a(int k){
31.      return (k <= 4) ? (0.45+0.55*k) : 2.65;   //gia cpu me 4cores
32.     // return (k <= 8) ? (0.56+0.44*k) : 4.08;  gia cpu me 8cores
33. }
34.
35.
36.
37. //ypologismoi katanomhs synolikou arithmou pelatwn stathmou 1
38. double p(int k,int cat1){
39.     if (k==0) {
40.         double result=0,sum=0;
41.         double g=1;
42.         for (int j=0;j<R;j++) result+=l[j]*d[6][j];
43.         for (int kk=1;kk<=cat1;kk++){
44.             g=1;
45.             for (int ll=1;ll<=kk;ll++){
46.                 g=g*(result/a(ll));
47.             }
48.             sum+=g;
49.         }
50.         return (1/(1+sum));
51.     }
52.     else {
53.         double result=0;
54.         for (int j=0;j<R;j++) result+=l[j]*d[6][j];
55.         result=result/a(k);
56.         return result*p(k-1,cat1);
57.     }
58. }
59.
60. int main() {
61.     double temp;
62.     double sum1[R],sum2[M];
63.     int cont=1;
64.
65.
66.
67.
68.     for(int i=0;i<M;i++) for(int j=0;j<R;j++) n[i][j]=(double)N[j]/M;
69.     while(cont){
70.         cont=0;
71.         //r gia 0,1 (kathisterisis)
72.         for(int k=0;k<R;k++) {
73.             r[0][k]=d[0][k];
74.             sum1[k]=r[0][k];
75.             T[k]=r[0][k];
76.                         r[1][k]=d[1][k];
77.             sum1[k]+=r[1][k];
78.             T[k]+=r[1][k];
79.         }
80.         // r gia  2,3,4,5 (anamonis)
81.         for(int k=0;k<M;k++) sum2[k]=0;
82.         for(int i=0;i<M;i++)
83.             for(int j=0;j<R;j++)
84.                 sum2[i]+=n[i][j];
85.         for(int i=2;i<(M-1);i++)
86.             for(int j=0;j<R;j++){
87.                 r[i][j]=d[i][j]*(1+((N[j]-1)/N[j])*n[i][j]+sum2[i]-n[i][j]);
88.                 T[j]+=r[i][j];
89.                 sum1[j]+=r[i][j];
90.             }
91.         //r gia stathmo 6
92.         for (int j=0;j<R;j++){
93.             double s=0;
94.             for (int k=1;k<=N[j];k++){
95.                 s+=(double)k*p(k-1,N[j])/a(k);
96.             }
97.             r[6][j]=d[6][j]*s;
98.             T[j]+=r[6][j];
99.             sum1[j]+=r[6][j];
100.         }
101.
102.         //ypologismos tou lamda
103.         for(int j=0;j<R;j++)
104.             l[j]=N[j]/sum1[j];
105.
106.         //elegxos syglisis
107.         for(int i=0;i<M;i++)
108.             for(int j=0;j<R;j++){
109.                 ro[i][j]=l[j]*d[i][j];
110.                 temp=l[j]*r[i][j];
111.
112.                 if((apoliti(temp,n[i][j]))>approx){
113.                     cont=1;
114.                 }
115.                 n[i][j]=temp;
116.
117.             }
118.     }
119.     for(int k=0;k<R;k++) cout << l[k] <<","<<T[k]<< "\n";
120.     cout<<"ro\n";
121.     for(int i=0;i<M;i++) for(int j=0;j<R;j++) cout<< "i,j="<< i<<","<<j<<","<<ro[i][j]<<"\n";
122.     return 0;
123. }
124.