/**[br]Simplex-Algorithmus Single Step für Google Sheets[br]@CustomFunction[br]=Simplex( Tableau )[br]Tableau Zellenbezug Anzahl Spalten>Zeilen[br]Tableau schrittweise bis zum Optimum Tableau[n-1][i]>0, iZeilen[br]Tableau mit pivotZeile pivotSpalte berechnen[br](C)2018 hawe[br]Version zu "Grundlagen Simplex Algorithmus" [br]+Zeilen/Spalten Index von 'SimplexFindPivot()' kompatibel zu Excel [br] Zeilen/Spalten Nummerierung beginnend mit 1[br]Array Function 4 Simplex [br]=ArrayFormula(SimplexBerechneTableau(D4:I7;3;1))[br]=ArrayFormula(Simplex(D4:I7))[br]*/[br]function SimplexBerechneTableau (tablo, pivotZeile, pivotSpalte){[br]var m = tablo[0].length; // Spalten[br]var n = tablo.length; // Zeilen[br]pivotZeile--;[br]pivotSpalte--; [br]var div = tablo[pivotZeile][pivotSpalte];[br][br]for(var j = 0; j < m; j++){[br] tablo[pivotZeile][j] = tablo[pivotZeile][j] / div;[br]};[br][br]div = tablo[pivotZeile][pivotSpalte];[br]for(var i = 0; i < n; i++){[br] if(i != pivotZeile ){[br] div = tablo[i][pivotSpalte];[br] for(j = 0; j < m; j++){[br] tablo[i][j] = tablo[i][j] - div * tablo[pivotZeile][j];[br] }[br] }[br]}[br]return tablo;[br]};[br][br] [br]/**[br]Finde Pivotzeile,Pivotspalte im Simplex-Tableau[br]@CustomFunction[br]=SimplexFindPivot( Tableau )[br]Tablo Zellenbezug Anzahl Spalten>Zeilen[br]liefert Zeilen-Array [0][Zeilenindex][Spaltenindex][br]für mit 1 beginnende Zeilen/Spalten-Nummerierung (kompatibel zu Excel)[br]*/ [br]function SimplexFindPivot( tablo ){[br]const Zeile = 0;[br]const Spalte = 1;[br]var maxWert = 0;[br]var minWert = 10000000000000;[br]var div = 0;[br]var pivot = new Array(1);[br] pivot[0] = new Array(2);[br]var m = tablo[0].length; // Spalten[br]var n = tablo.length; // Zeilen [br]pivot[0][Zeile] = 0;[br]pivot[0][Spalte] = 0;[br] [br]for(var j = 0; j < m-1; j++){[br] if(tablo[n-1][j] < maxWert){ // || nextPivot * (tablo[n-1][j] == maxWert) ){[br] maxWert = tablo[n-1][j];[br] pivot[0][Spalte] = j;[br] }[br]};[br]for(var i = 0; i < n-1; i++){[br] if( tablo[i][pivot[0][Spalte]] != 0 ){[br] div = tablo[i][m-1] / tablo[i][pivot[0][Spalte]];[br] if((tablo[i][pivot[0][Spalte]] > 0 && div < minWert) || minWert == 0 ){[br] minWert = div;[br] pivot[0][Zeile] = i;[br] }[br] }[br]};[br]// Kompatibel zu XL liefere Spalten-/Zeilen-Nummer zum Startindex 1[br]pivot[0][Zeile]++;[br]pivot[0][Spalte]++;[br] [br]return pivot;[br]}[br][br][br]function testsimple(){[br] var n = 3;[br] var m = 4; [br] [br] var tablo = new Array();[br] tablo[0]=[1,1,1,1,0,0,400];[br] tablo[1]=[3,2,2,0,2,0,800];[br] tablo[2]=[1,1,0,0,0,2,260];[br] tablo[3]=[-2,-2,-1,0,0,0,0];[br] [br] tablo = Simplex( tablo );[br] tablo = Simplex( tablo );[br] tablo = Simplex( tablo );[br] [br] tablo[3]=[-2,-2,-1,0,0,0,0];[br] [br]// for (var i = 0; i < n; i++) {[br]// tablo[i] = new Array(m);[br]// };[br] [br]// for (var i=0; i < n; i++){[br]// for (var j = 0; j < m; j++){[br]// tablo[i][j] = tablo[i][j];[br]// };[br]// };[br] [br][br]}[br][br][br]/** Copyright (C) 2018 H.W. Hofmann;[br]This file is part of 'Simplex-Gauss-Algorithmus.xlsm'.;[br]Simplex-Gauss-Algorithmus.xlsm is free software you can redistribute it and/or modify;[br]it under the terms of the GNU General Public License as published by;[br]the Free Software Foundation, either version 3 of the License, or;[br](at your option) any later version.;[br]VBA Simplex_LP Gauss LGS is distributed in the hope that it will be useful,;[br] but WITHOUT ANY WARRANTY; without even the implied warranty of;[br]MERCHANTABILITY || FITNESS FOR A PARTICULAR PURPOSE. See the;[br]GNU General Public License for more details.;[br]Look at the GNU General Public License;[br]*/