Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Simplex Algorithmus
- public class Simplex {
- private double[][] simplexAsArray;
- private int numberOfVariables;
- public Simplex(final double[][] simplexAsArray, final int numberOfVariables) {
- this.simplexAsArray = simplexAsArray;
- this.numberOfVariables = numberOfVariables;
- }
- public double[] solveSimplex() {
- double[] result = new double[numberOfVariables + 1];
- int p;
- int q;
- while (!isFinished()) {
- printSimplex();
- System.out.println ("-----------------------------------------------------------------------------------------------------");
- p = determineP();
- q = determineQ(p);
- pivot(p, q);
- }
- for (int i = 0; i < numberOfVariables; i++) {
- for (int j = 0; j < simplexAsArray.length; j++) {
- if (simplexAsArray[j][i] == 1.0) {
- result[i] = simplexAsArray[j][simplexAsArray[j].length - 1];
- }
- }
- }
- result[numberOfVariables] = simplexAsArray[0][simplexAsArray[0].length - 1];
- return result;
- }
- private boolean solutionFound() {
- return determineP() == -1;
- }
- private int searchNewPivotElementElementColumn() {
- for (int i = 0; i < simplexAsArray[0].length; i++) {
- if (simplexAsArray[0][i] < 0) {
- return i;
- }
- }
- return -1;
- }
- /**
- *
- * This method determines the row the next pivot step.
- *
- * @param p the column used for the next pivot step
- * @return the row used for the next pivot step
- *
- */
- private int searchNewPivotElementRow(int p) {
- double max = 0;
- int q = -1;
- for (int i = 1; i < simplexAsArray.length; i++) {
- if (simplexAsArray[i][p] > 0 && (simplexAsArray[i][p] / simplexAsArray[i][simplexAsArray[i].length - 1] > max)) {
- max = simplexAsArray[i][p] / simplexAsArray[i][simplexAsArray[i].length - 1];
- q = i;
- }
- }
- return q;
- }
- private void usePivotElement(int p, int q) {
- for (int j = 0; j < simplexAsArray.length; j++) {
- for (int k = simplexAsArray[0].length - 1; k >= 0; k--) {
- if (j != q && k != p) {
- simplexAsArray[j][k] = simplexAsArray[j][k] - simplexAsArray[q][k] * simplexAsArray[j][p] / simplexAsArray[q][p];
- }
- }
- }
- for (int j = 0; j < simplexAsArray.length; j++) {
- if (j != q) {
- simplexAsArray[j][p] = 0;
- }
- }
- for (int k = 0; k < simplexAsArray[0].length; k++) {
- if (k != p) {
- simplexAsArray[q][k] = simplexAsArray[q][k] / simplexAsArray[q][p];
- }
- }
- simplexAsArray[q][p] = 1;
- }
- private void printSimplex() {
- for (int i = 0; i < simplexAsArray.length; i++) {
- for (int j = 0; j < simplexAsArray[i].length; j++) {
- System.out.print(simplexAsArray[i][j] + " ");
- }
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement