Advertisement
SalahAdDinYusuf

Simplex

May 20th, 2013
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <conio.h>
  4. #define CMAX 10 //max. number of variables in economic function
  5. #define VMAX 10 //max. number of constraints
  6.  
  7.  
  8. int NC, NV, NOPTIMAL,P1,P2,XERR;
  9. double TS[CMAX][VMAX];
  10.  
  11. void Data() {
  12. double R1,R2;
  13. char R;
  14. int I,J;
  15. printf("\n LINEAR PROGRAMMING\n\n");
  16. printf(" MAXIMIZE (Y/N) ? "); scanf("%c", &R);
  17. printf("\n NUMBER OF VARIABLES OF ECONOMIC FUNCTION ? "); scanf("%d", &NV);
  18. printf("\n NUMBER OF CONSTRAINTS ? "); scanf("%d", &NC);
  19. if (R == 'Y' || R=='y')
  20. R1 = 1.0;
  21. else
  22. R1 = -1.0;
  23. printf("\n INPUT COEFFICIENTS OF ECONOMIC FUNCTION:\n");
  24. for (J = 1; J<=NV; J++) {
  25. printf(" #%d ? ", J); scanf("%lf", &R2);
  26. TS[1][J+1] = R2 * R1;
  27. }
  28. printf(" Right hand side ? "); scanf("%lf", &R2);
  29. TS[1][1] = R2 * R1;
  30. for (I = 1; I<=NC; I++) {
  31. printf("\n CONSTRAINT #%d:\n", I);
  32. for (J = 1; J<=NV; J++) {
  33. printf(" #%d ? ", J); scanf("%lf", &R2);
  34. TS[I + 1][J + 1] = -R2;
  35. }
  36. printf(" Right hand side ? "); scanf("%lf", &TS[I+1][1]);
  37. }
  38. printf("\n\n RESULTS:\n\n");
  39. for(J=1; J<=NV; J++) TS[0][J+1] = J;
  40. for(I=NV+1; I<=NV+NC; I++) TS[I-NV+1][0] = I;
  41. }
  42.  
  43. void Pivot();
  44. void Formula();
  45. void Optimize();
  46.  
  47. void Simplex() {
  48. e10: Pivot();
  49. Formula();
  50. Optimize();
  51. if (NOPTIMAL == 1) goto e10;
  52. }
  53.  
  54. void Pivot() {
  55.  
  56. double RAP,V,XMAX;
  57. int I,J;
  58.  
  59. XMAX = 0.0;
  60. for(J=2; J<=NV+1; J++) {
  61. if (TS[1][J] > 0.0 && TS[1][J] > XMAX) {
  62. XMAX = TS[1][J];
  63. P2 = J;
  64. }
  65. }
  66. RAP = 999999.0;
  67. for (I=2; I<=NC+1; I++) {
  68. if (TS[I][P2] >= 0.0) goto e10;
  69. V = fabs(TS[I][1] / TS[I][P2]);
  70. if (V < RAP) {
  71. RAP = V;
  72. P1 = I;
  73. }
  74. e10:;}
  75. V = TS[0][P2]; TS[0][P2] = TS[P1][0]; TS[P1][0] = V;
  76. }
  77.  
  78. void Formula() {;
  79. //Labels: e60,e70,e100,e110;
  80. int I,J;
  81.  
  82. for (I=1; I<=NC+1; I++) {
  83. if (I == P1) goto e70;
  84. for (J=1; J<=NV+1; J++) {
  85. if (J == P2) goto e60;
  86. TS[I][J] -= TS[P1][J] * TS[I][P2] / TS[P1][P2];
  87. e60:;}
  88. e70:;}
  89. TS[P1][P2] = 1.0 / TS[P1][P2];
  90. for (J=1; J<=NV+1; J++) {
  91. if (J == P2) goto e100;
  92. TS[P1][J] *= fabs(TS[P1][P2]);
  93. e100:;}
  94. for (I=1; I<=NC+1; I++) {
  95. if (I == P1) goto e110;
  96. TS[I][P2] *= TS[P1][P2];
  97. e110:;}
  98. }
  99.  
  100. void Optimize() {
  101. int I,J;
  102. for (I=2; I<=NC+1; I++)
  103. if (TS[I][1] < 0.0) XERR = 1;
  104. NOPTIMAL = 0;
  105. if (XERR == 1) return;
  106. for (J=2; J<=NV+1; J++)
  107. if (TS[1][J] > 0.0) NOPTIMAL = 1;
  108. }
  109.  
  110. void Results() {
  111. //Labels: e30,e70,e100;
  112. int I,J;
  113.  
  114. if (XERR == 0) goto e30;
  115. printf(" NO SOLUTION.\n"); goto e100;
  116. e30:for (I=1; I<=NV; I++)
  117. for (J=2; J<=NC+1; J++) {
  118. if (TS[J][0] != 1.0*I) goto e70;
  119. printf(" VARIABLE #%d: %f\n", I, TS[J][1]);
  120. e70: ;}
  121. printf("\n ECONOMIC FUNCTION: %f\n", TS[1][1]);
  122. e100:printf("\n");
  123. }
  124.  
  125. int main() {
  126.  
  127. Data();
  128. Simplex();
  129. Results();
  130. getch ();
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement