Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
public class SimplexMethod {
private static TriangularMatrixAlgorithms<Fraction> tma = new TriangularMatrixAlgorithms<Fraction>();
public static Fraction Maximize(Vector<Fraction> c,
NumericMatrix<Fraction> a, Vector<Fraction> b) {
if ((c == null) || (a == null) || (b == null)) {
throw new NullPointerException();
}
if ((c.getLength() != a.getNoColumns())
|| (b.getLength() != a.getNoRows())) {
throw new IllegalArgumentException();
}
NumericMatrix<Fraction> tojeterazjedno = new NumMatrix<Fraction>(a
.getNoRows() + 1, a.getNoColumns() + a.getNoRows() + 1);
Fraction[][] polevtjtj = new Fraction[tojeterazjedno.getNoRows()][tojeterazjedno
.getNoColumns()];
for (int i = 0; i < tojeterazjedno.getNoRows() - 1; i++) {
for (int j = 0; j < tojeterazjedno.getNoColumns() - 1; j++) {
if ((i < a.getNoRows()) && (j < a.getNoColumns())) {
polevtjtj[i][j] = a.getElement(i, j);
} else {
if (j == (i + a.getNoColumns())) {
polevtjtj[i][j] = Fraction.ONE;
} else {
polevtjtj[i][j] = Fraction.ZERO;
}
}
}
}
for (int i = 0; i < tojeterazjedno.getNoColumns(); i++) {
if (i < c.getLength()) {
polevtjtj[tojeterazjedno.getNoRows() - 1][i] = c.getElement(i)
.negate();
} else {
polevtjtj[tojeterazjedno.getNoRows() - 1][i] = Fraction.ZERO;
}
}
for (int i = 0; i < tojeterazjedno.getNoRows() - 1; i++) {
polevtjtj[i][tojeterazjedno.getNoColumns() - 1] = b.getElement(i);
}
tojeterazjedno = new NumMatrix<Fraction>(polevtjtj);
System.out.println(tojeterazjedno);
boolean optimalne = true;
for (int i = 0; i < tojeterazjedno.getNoColumns()-1; i++) {
if (tojeterazjedno.getElement(tojeterazjedno.getNoRows() - 1, i)
.compareTo(Fraction.ZERO) < 0) {
optimalne = false;
}
}
int stlpec=0;
int riadok=0;
boolean cyklus=true;
ArrayList<Fraction> zoznam = new ArrayList<Fraction>();
while (!optimalne) {
for (int i = 1; i < tojeterazjedno.getNoColumns()-1; i++) {
zoznam.add(tojeterazjedno.getElement(
tojeterazjedno.getNoRows() - 1, i));
}
Collections.sort(zoznam);
cyklus=true;
tu:
if(cyklus){
for (int i = 0; i < tojeterazjedno.getNoColumns()-1; i++) {
if (tojeterazjedno
.getElement(tojeterazjedno.getNoRows() - 1, i).equals(
zoznam.get(0))) {
stlpec = i;
cyklus=false;
break tu;
}
}}
zoznam.clear();
for (int i = 0; i < a.getNoRows(); i++) {
if (tojeterazjedno.getElement(i, stlpec)
.equals(Fraction.ZERO)){
zoznam.add(new Fraction(Integer.MAX_VALUE));
}else{
zoznam.add(tojeterazjedno.getElement(i,
tojeterazjedno.getNoColumns() - 1).divide(
tojeterazjedno.getElement(i, stlpec)));
}
}
Collections.sort(zoznam);
cyklus=true;
sem:
if(cyklus){
for (int i = 0; i < a.getNoRows(); i++) {
if(tojeterazjedno.getElement(i, stlpec).equals(Fraction.ZERO)){
}else{
if (tojeterazjedno.getElement(i,
tojeterazjedno.getNoColumns() - 1).divide(
tojeterazjedno.getElement(i, stlpec)).equals(
zoznam.get(0))) {
riadok = i;
cyklus=false;
break sem;
}}
}}
zoznam.clear();
for (int i = 0; i < tojeterazjedno.getNoRows(); i++) {
if (i != riadok){
if (!(tojeterazjedno.getElement(i, stlpec)
.equals(Fraction.ZERO))&&(!(tojeterazjedno.getElement(riadok, stlpec).equals(Fraction.ZERO)))) {
tojeterazjedno = tma.multiplyRowWithScalar(
tojeterazjedno, riadok, tojeterazjedno
.getElement(i, stlpec).divide(
tojeterazjedno.getElement(
riadok, stlpec))
.negate());
tojeterazjedno = tma.sumRows(tojeterazjedno, riadok, i);
}
}
}
tojeterazjedno=tma.multiplyRowWithScalar(tojeterazjedno, riadok, tojeterazjedno.getElement(riadok,stlpec).invert());
System.out.println(tojeterazjedno);
cyklus=true;
optimalne = true;
tuto:
if(cyklus){
for (int i = 0; i < tojeterazjedno.getNoColumns()-1; i++) {
if (tojeterazjedno
.getElement(tojeterazjedno.getNoRows() - 1, i)
.compareTo(Fraction.ZERO) < 0) {
optimalne = false;
cyklus=false;
break tuto;
}
}
}
}
return null;
}
}neviete náhodou čo tu môže spôsobovať zacyklenie mne sa zdá ako keby tojeterazjedno bolo vždy to isté a v cykle sa nezmenilo aj keď ho mením
Offline
↑ jarrro:
Kdyz na to tak koukám tak kdekoli :) Ne, přijde mi to děsně nepřehledný a nechce se mi to luštit...To odsazování je šílený a na to pokračování na dalších řádkách taky nejsem zvyklej...
Cyklama se to tam jenom hemží...jestli nevíš kde je problém tak hoď do každýho nějakej výpis a máš to hned
Offline
↑ xxsawer:už je to ok tam v tom fore hneď pod while je int i=1 a má byť 0 už to ide dobre
Offline