Minimieren Sie die Simplex-Methode

Ich finde Thema, über Simplex-Methode hier Ändern Simplex-Algorithmus zur Minimierung der objektiven Funktion NICHT zu maximieren
Aber die Antwort hat auch nicht geholfen. Wenn ich von

double[] variables = {  13.0,  23.0 };

zu

double[] variables = { -13.0, -23.0 };

Programm dont berechnen(keine Ausnahme), es drucken erste Schritt und das ist alles.
Könnte mir jemand helfen mit der alter-simplex-Methode von maximieren und minimieren?

code:

import java.util.*;

public class Simplex
{
private static final double EPSILON = 1.0E-10;
private double[][] tableaux;
private int numOfConstraints;
private int numOfVariables;

private int[] basis;
/**
 * Constructor for objects of class Simplex
 */
public Simplex()
{


    double[][] thisTableaux = {
        {  5.0, 15.0 },
        {  4.0,  4.0 },
        { 35.0, 20.0 },
    };

    double[] constraints = { 480.0, 160.0, 1190.0 };

    double[] variables = {  -13.0,  -23.0 };

    numOfConstraints = constraints.length;
    numOfVariables = variables.length;

    tableaux = new double[numOfConstraints+1][numOfVariables+numOfConstraints+1];

    //adds all elements from thisTableaux to tableaux
    for(int i=0; i < numOfConstraints; i++)
    {
        for(int j=0; j < numOfVariables; j++)
        {
            tableaux[i][j] = thisTableaux[i][j];
        }
    } 


    //adds a slack variable for each variable there is and sets it to 1.0
    for(int i=0; i < numOfConstraints; i++)
    {
        tableaux[i][numOfVariables+i] = 1.0;
    }


    //adds variables into the second [] of tableux
    for(int j=0; j < numOfVariables; j++)
    {
        tableaux[numOfConstraints][j] = variables[j];
    }



    //adds constraints to first [] of tableaux
    for(int k=0; k < numOfConstraints; k++)
    {
        tableaux[k][numOfConstraints+numOfVariables] = constraints[k];
    }



    basis = new int[numOfConstraints];

    for(int i=0; i < numOfConstraints; i++)
    {
        basis[i] = numOfVariables + i;
    }

    show();

    optimise();

    assert check(thisTableaux, constraints, variables);


}

public void optimise() {
    while(true) {

        int q = findLowestNonBasicCol();

        if(q == -1) {
            break;
        }

        int p = getPivotRow(q);
        if(p == -1) throw new ArithmeticException("Linear Program Unbounded");

        pivot(p, q);

        basis[p] = q;
    }

}

public int findLowestNonBasicCol() {

    for(int i=0; i < numOfConstraints + numOfVariables; i++)
    {
        if(tableaux[numOfConstraints][i] > 0) {


            return i;
        }
    }

    return -1;


}

public int findIndexOfLowestNonBasicCol() {

    int q = 0;
    for(int i=1; i < numOfConstraints + numOfVariables; i++)
    {
        if(tableaux[numOfConstraints][i] > tableaux[numOfConstraints][q]) {
            q = i;
        }
    }

    if(tableaux[numOfConstraints][q] <= 0) {
        return -1;
    }

    else {
        return q;
    }
}

/**
 * Finds row p which will be the pivot row using the minimum ratio rule.
 * -1 if there is no pivot row
 */
public int getPivotRow(int q) {

    int p = -1;

    for(int i=0; i < numOfConstraints; i++) {

        if (tableaux[i][q] <=0) {
            continue;
        }

        else if (p == -1) {
            p = i;
        }

        else if((tableaux[i][numOfConstraints+numOfVariables] / tableaux[i][q] < tableaux[p][numOfConstraints+numOfVariables] / tableaux[p][q])) {
            p = i;
        }
    }
  • wo ist dein code ? und Sie wollen einfach nur, um mehrere Sie mit -1 ?
  • Herzlich willkommen auf StackOverflow. Sie müssen sich bewusst sein, dass wir nicht deine Gedanken Lesen. Sie müssen genügend Informationen, damit wir das problem reproduzieren können, das Sie haben und sollten Sie die Antwort, die Sie erwarten. Wenn Sie sagen dont calculate Sie haben zu sagen, was es macht. Auch ich schlage vor, Sie versuchen, Debuggen Ihrer Programme, da dies oft schneller, als zu erklären, was Ihr problem ist in genug detail.
  • nach dem Debuggen finde ich, dass die form verändern (13, 23) zu ( - 13, -23) nicht helfen. Dieses problem ist verknüpft mit der Methode findLowestNonBasicCol(), wenn vorhanden, überprüfen Sie für eine positive Zahl, wenn (tableaux[numOfConstraints][i] > 0)
InformationsquelleAutor user3650408 | 2014-05-18
Schreibe einen Kommentar