Select Git revision
Main.java 3.37 KiB
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;
public class Main {
/**
* Compter le nombre de variables S.C
*
* @param sc scanner
* @return le nombre de variables S.C
*/
private static Integer nbSc(Scanner sc) {
int count = 0;
while (sc.hasNextLine()) {
count++;
sc.nextLine();
}
return count - 1; // A cause de la premiere ligne
}
/**
* Compter le nombre d'inéquations S.C
*
* @param sc scanner
* @return le nombre d'inéquations S.C
*/
private static Integer nbContraintes(Scanner sc) {
String firstLine = sc.nextLine();
String[] elements = firstLine.split(";");
return elements.length - 1; // Enlever le sens de la fonction
}
/**
* Fonction main
*
* @param args arguments en entrées
*/
public static void main(String[] args) throws FileNotFoundException, RuntimeException {
long start = System.nanoTime();
Scanner readFile = new Scanner(System.in);
System.out.println("Entrez le nom du fichier à tester, il doit se situer dans le dossier src.");
//String nameFile = readFile.nextLine();
String nameFile = "network2.txt";
//String nameFile = "input.txt";
File f = new File("src/" + nameFile);
Scanner sc = new Scanner(f);
String[] elements;
int sousCondition = nbSc(sc), line = 0;
sc = new Scanner(f); // remettre le scanner à la première ligne
int contraintes = nbContraintes(sc);
sc = new Scanner(f); // remettre le scanner à la première ligne
Equation eq = new Equation(sousCondition, contraintes); // lignes supp au cas où, il y a des "="
// Max / Min + function obj
String firstLine = sc.nextLine();
elements = firstLine.split(";");
eq.setFirstLine(elements);
// S.C.
while (sc.hasNextLine()) {
String tmp = sc.nextLine();
elements = tmp.split(";");
switch (eq.getSens()) {
case "min", "max" ->
// création de l'équation dans le sens min
line = eq.createEq(elements, line);
default -> {
System.err.println("Le sens n'a pas été entré.");
System.exit(1);
}
}
line++;
}
// Print
eq.printEq();
// Tableau initial
Simplex spx = new Simplex(eq.getMat().getLine(), eq.getMat().getLine() + eq.getMat().getCol() + 1, line, contraintes);
spx.createSimplex(eq, contraintes);
spx.printSimplex(spx.getMatEcart(), "Tableau initial");
// true = phase 1 membres de droite pas admissible | false = phase 2 membres de droite admissible
if (spx.which_phase()) {
spx.tabAux();
} else {
spx.pivot(spx.getMatEcart(), false);
spx.printSimplex(spx.getMatEcart(), "Résultat");
System.out.println("Nombre de pivot: " + spx.getNbPivot());
}
sc.close();
// Mesure du temps
long stop = System.nanoTime();
long duration = TimeUnit.MILLISECONDS.convert(stop - start, TimeUnit.NANOSECONDS);
System.out.println("Temps d'exécution: " + duration + " ms");
}
}