Skip to content
Snippets Groups Projects
Select Git revision
  • 30c5b71813dc87654486348289018eee3e644abe
  • main default protected
  • thibault.capt-main-patch-72132
3 results

Main.java

Blame
  • 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");
        }
    }