Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. Simplex Algorithmus
  2.  
  3. public class Simplex {
  4.  
  5. private double[][] simplexAsArray;
  6. private int numberOfVariables;
  7.  
  8.  
  9. public Simplex(final double[][] simplexAsArray, final int numberOfVariables) {
  10. this.simplexAsArray = simplexAsArray;
  11. this.numberOfVariables = numberOfVariables;
  12. }
  13.  
  14.  
  15. public double[] solveSimplex() {
  16. double[] result = new double[numberOfVariables + 1];
  17. int p;
  18. int q;
  19.  
  20. while (!isFinished()) {
  21. printSimplex();
  22. System.out.println ("-----------------------------------------------------------------------------------------------------");
  23. p = determineP();
  24. q = determineQ(p);
  25. pivot(p, q);
  26. }
  27. for (int i = 0; i < numberOfVariables; i++) {
  28. for (int j = 0; j < simplexAsArray.length; j++) {
  29. if (simplexAsArray[j][i] == 1.0) {
  30. result[i] = simplexAsArray[j][simplexAsArray[j].length - 1];
  31. }
  32. }
  33. }
  34. result[numberOfVariables] = simplexAsArray[0][simplexAsArray[0].length - 1];
  35.  
  36. return result;
  37. }
  38.  
  39. private boolean solutionFound() {
  40. return determineP() == -1;
  41. }
  42.  
  43. private int searchNewPivotElementElementColumn() {
  44. for (int i = 0; i < simplexAsArray[0].length; i++) {
  45. if (simplexAsArray[0][i] < 0) {
  46. return i;
  47. }
  48. }
  49.  
  50. return -1;
  51. }
  52.  
  53. /**
  54. *
  55. * This method determines the row the next pivot step.
  56. *
  57. * @param p the column used for the next pivot step
  58. * @return the row used for the next pivot step
  59. *
  60. */
  61. private int searchNewPivotElementRow(int p) {
  62. double max = 0;
  63. int q = -1;
  64.  
  65. for (int i = 1; i < simplexAsArray.length; i++) {
  66. if (simplexAsArray[i][p] > 0 && (simplexAsArray[i][p] / simplexAsArray[i][simplexAsArray[i].length - 1] > max)) {
  67. max = simplexAsArray[i][p] / simplexAsArray[i][simplexAsArray[i].length - 1];
  68. q = i;
  69. }
  70. }
  71.  
  72. return q;
  73. }
  74.  
  75.  
  76. private void usePivotElement(int p, int q) {
  77. for (int j = 0; j < simplexAsArray.length; j++) {
  78. for (int k = simplexAsArray[0].length - 1; k >= 0; k--) {
  79. if (j != q && k != p) {
  80. simplexAsArray[j][k] = simplexAsArray[j][k] - simplexAsArray[q][k] * simplexAsArray[j][p] / simplexAsArray[q][p];
  81. }
  82. }
  83. }
  84. for (int j = 0; j < simplexAsArray.length; j++) {
  85. if (j != q) {
  86. simplexAsArray[j][p] = 0;
  87. }
  88. }
  89. for (int k = 0; k < simplexAsArray[0].length; k++) {
  90. if (k != p) {
  91. simplexAsArray[q][k] = simplexAsArray[q][k] / simplexAsArray[q][p];
  92. }
  93. }
  94. simplexAsArray[q][p] = 1;
  95. }
  96.  
  97. private void printSimplex() {
  98. for (int i = 0; i < simplexAsArray.length; i++) {
  99. for (int j = 0; j < simplexAsArray[i].length; j++) {
  100. System.out.print(simplexAsArray[i][j] + " ");
  101. }
  102. System.out.println();
  103. }
  104. }
  105.  
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement