Skip to content
Snippets Groups Projects
Commit 13881ec3 authored by thibault.capt's avatar thibault.capt
Browse files

Documentation

parent 68743b93
No related branches found
No related tags found
No related merge requests found
doc/background.png

315 KiB

---
title: 'Tp Simplex'
author: [Juliano Souza Luz, Thibault Capt]
date: "18.01.2023"
subject: "TP Simplex"
subtitle: "Résoudre un programme linéaire grâce à la méthode du simplex\r\nhttps://gitedu.hesge.ch/math/2e-annee/tp-math"
titlepage: true
titlepage-color: "ffffff"
titlepage-background: "background.png"
toc-own-page: true
footnotes-pretty: true
---
# TP Simplex
## Choix du langage
Nous avons donc utilisé le Java afin de résoudre ce travail pratique. En effet, python est un langage qui est très lent
à l'exécution, car celui-ci est un langage **interprété**. Nous pouvons ainsi essayer de gagner du temps d'exécution pour
la résolution du problème.
## Astuces utilisées
Ensuite, dans la plupart des cas, nous avons utilisé des **array** à 1 ou 2 dimension(s) qui
est bien plus rapide que les Listes Java. (https://stackoverflow.com/questions/716597/array-or-list-in-java-which-is-faster).
Nous avons aussi opté pour que l'utilisateur puisse choisir un mode débogage ou non, ce qui permet de supprimer presque
tous les prints en mode non-débogage et gagner énormément de temps d'exécution.
## Analyse des performances
Nous avons reçu plusieurs fichiers à tester pour vérifier le bon fonctionnement de notre code (nous approfondirons les
résultats à "null" dans les problèmes rencontrés) :
- input.txt
- Valeur obj : -34.25
- nombre de pivots : 2
- Temps d'exécution : 17ms
- input_test.txt
- Valeur obj : null
- nombre de pivots : null
- Temps d'exécution : null
- input_test2.txt
- Valeur obj : null
- nombre de pivots : null
- Temps d'exécution : null
- inputNonAdmissible.txt
- Valeur obj : -34.25
- nombre de pivots : 3
- Temps d'exécution : 20ms
- flow_1.txt
- Valeur obj : 78768
- nombre de pivots : 9
- Temps d'exécution : 33ms
- network1.txt
- Valeur obj : 78768
- nombre de pivots : 9
- Temps d'exécution : 30ms
- network2.txt
- Valeur obj : 0
- nombre de pivots : 10
- Temps d'exécution : 55ms
- network3.txt
- Valeur obj : 84077
- nombre de pivots : 45
- Temps d'exécution : 162ms
- network4.txt
- Valeur obj : null
- Nombre de pivots : null
- Temps d'exécution : null
- network5.txt
- Valeur obj : NaN
- Nombre de pivots: 1255
- Temps d'exécution : 26066ms
Le temps d'exécution est, dans l'ensemble, assez faible, bien qu'il soit encore possible de l'améliorer.
## Problèmes rencontrés
Nous avons rencontré plusieurs problèmes au cours de ce travail pratique.
Premièrement, lors de la phase 1, nous ne gérions pas tous les négatifs des membres de droite. En effet, nous passions
en paramètre la ligne où nous trouvions un négatif et remplaçait cette ligne en question. Le problème étant que s'il y
avait plusieurs négatifs dans les membres de droite, il y resterait.
Deuxièmement et n'est pas résolu, nous pouvons voir que nous avons des résultats à null. En effet, ce problème survient
lorsque notre résultat du tableau auxiliaire de la phase 1 (avant le pivot) est négatif. Par exemple, prenons le fichier
input_test, nous ne trouvons pas de résultat. Nous avons essayé de changer la valeur de notre epsilon (initialement à
1E-7) mais cela n'y change rien.
Troisièmement, le fichier network5 affiche des NaN (not a number). Il y a donc des divisions par 0 quelque part pour ce
fichier. Le problème est qu'il y a ~1400 pivots pour ce fichier et ainsi le débogage est bien trop long pour regarder
pivot par pivot.
File added
......@@ -91,7 +91,7 @@ public class Main {
Simplex spx = new Simplex(eq.getMat().getLine(), eq.getMat().getLine() + eq.getMat().getCol() + 1,
line, contraintes, debugging);
spx.createSimplex(eq, contraintes);
spx.printSimplex(spx.getMatEcart(), "Tableau initial");
if(debugging) 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()) {
......
......@@ -83,7 +83,7 @@ public class Matrix {
// Parcourir la matrice et afficher les valeurs arrondies au centième
for (int i = 0; i < line; i++) {
for (int j = 0; j < col; j++) {
System.out.format("%10.2f", this.data[i][j]);
System.out.format("%10f", this.data[i][j]);
}
System.out.println();
}
......
......@@ -8,7 +8,7 @@ public class Simplex {
private final int ligne; // Ligne
private final int colonne; // Colonne
private int nbPivot;
private static final double EPSILON = 0E-7;
private static final double EPSILON = 1E-20;
private final int nbContraintes;
public Matrix getMatEcart() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment