Exemple #1
0
def test_constructeur(lots):
    """Constructeur alternatif."""
    a, b, c, d, e, f, g = lots
    entree = """
Lot1 / 5 / caillou ciseau / 10 1
Lot2 / 2 / caillou ciseau / 7 2
60 10
"""

    probleme2 = Probleme(lots=[a, b], demande=[60, 10])
    probleme = Probleme.par_str(entree)
    assert probleme == probleme2
def probleme():
    """Crée 1 problème simple avec deux lots."""
    probleme = Probleme.par_str(
        """
Lot1 / 5 / caillou ciseau / 10 1
Lot2 / 7 / caillou ciseau / 7 2
60 10
"""
    )
    return probleme
Exemple #3
0
def test_encode():
    """Teste l'encodage d'une ligne."""
    correspondance = {
        "Lot1 / 5 / caillou ciseau / 10 2":
        Lot(nom="Lot1",
            cout=5,
            type_arme=["caillou", "ciseau"],
            quantite=[10, 2]),
        "Lot2 / 10 / caillou ciseau / 9 4":
        Lot(nom="Lot2",
            cout=10,
            type_arme=["caillou", "ciseau"],
            quantite=[9, 4])
    }
    for entree, attendu in correspondance.items():
        assert attendu == Probleme._encode(entree)
Exemple #4
0
def test_repr():
    """Teste le repr."""
    probleme = Probleme(lots=[
        Lot(nom='Lot1',
            cout=5,
            type_arme=['caillou', 'ciseau'],
            quantite=[10, 1]),
        Lot(nom='Lot2',
            cout=2,
            type_arme=['caillou', 'ciseau'],
            quantite=[7, 2])
    ],
                        demande=[60, 10])
    assert (
        repr(probleme) ==
        "probleme(lots=[Lot(nom='Lot1', cout=5, type_arme=['caillou', 'ciseau'], quantite=[10, 1]), Lot(nom='Lot2', cout=2, type_arme=['caillou', 'ciseau'], quantite=[7, 2])],demande = [60, 10])"
    )
Exemple #5
0
    def __init__(self):
        self.bouton = ipw.Button(description="Résoudre")
        self.bouton2 = ipw.Button(description = "actualiser")
        self.zone_entree = ipw.Textarea(value=
"""Lot1 / 5 / caillou ciseau / 10 1
Lot2 / 7 / caillou ciseau / 7 2
60 10
""", layout=ipw.Layout(height="80px", width = "700px"), description = "données")
        self.probleme = Probleme.par_str(self.zone_entree.value)
        self.zone_probleme = ipw.Output()
        self.zone_solution_primal = ipw.Output()
        self.zone_solution_dual = ipw.Output()
        self.zone_curs_cout = ipw.Output()
        self.zone_titre = ipw.Output()
        self.zone_text_init = ipw.Textarea(value="""'nom_lot' / 'cout_lot' / 'liste_types' / quantite_par_type' -> une ligne par lot
Demande -> une seule ligne 
        
- Un exemple introductif est déjà présent. 
- Attention de respecter le même ordre pour pour les listes type d'arme et quantités
- 'Résoudre' résoud le problème à partir des données rentrées dans le tableau de donnée .
- 'Actualiser' résoud avec les valeurs de coût actualisée par les curseurs.
- Les curseurs s'afficheront automatiquement après la première résolution
- Pour une explication détaillée du contexte du problème, voir les fichiers 'README' et 'rapport'""", layout=ipw.Layout(height="100px", width = "700px"), disabled=True)
        self.zone_titre_init = ipw.Output()
        self.total = ipw.VBox(
            [
                ipw.Box([self.zone_titre], layout = ipw.Layout(justify_content = "center")),
                ipw.VBox([self.zone_titre_init, self.zone_text_init]),
                ipw.VBox([self.bouton, self.zone_entree]),
                ipw.HBox(
                    [
                        self.zone_probleme,
                        self.zone_solution_primal,
                        self.zone_solution_dual
                    ]),
                ipw.HBox([self.zone_curs_cout, self.bouton2]),
            ]
        )
        self.bouton.on_click(self._sur_clique)
        self.bouton2.on_click(self._sur_clique2)
Exemple #6
0
 def _sur_clique(self, b):
     try:
         self.probleme = Probleme.par_str(self.zone_entree.value)
         self.zone_curs_cout.clear_output()
         self.zone_probleme.clear_output()
         self.zone_solution_primal.clear_output()
         self.zone_solution_dual.clear_output()        
         with self.zone_probleme:
             display(affichage.genere_table(self.probleme))
         with self.zone_solution_primal:
             display(affichage.tables_solutions(self.probleme, primal = True, frac = False))
         with self.zone_solution_dual:
             display(affichage.tables_solutions(self.probleme, primal = False, frac = False))
         with self.zone_curs_cout:
             for i in range(0,len(self.probleme.lots)):
                 a = self.probleme.lots[i].cout
                 display(curseur = ipw.interact(self.probleme.lots[i]._set_cout, coût=(0, a*2, round((a/100),1))))
     except Mon_exception:
         with self.zone_probleme:
             self.zone_probleme.clear_output()
             self.zone_solution_primal.clear_output()
             self.zone_solution_dual.clear_output()
             self.zone_curs_cout.clear_output()
             display(erreur= print("Il y a un problème avec les données rentrées. \nLe problème n'est pas valide."))
     except Mon_exception_lot:
         with self.zone_probleme:
             self.zone_probleme.clear_output()
             self.zone_solution_primal.clear_output()
             self.zone_solution_dual.clear_output()
             self.zone_curs_cout.clear_output()
             display(erreur= print("Il y a un problème avec les données rentrées. \nUn des lots n'est pas valide."))
     except ValueError:
         with self.zone_probleme:
             self.zone_probleme.clear_output()
             self.zone_solution_primal.clear_output()
             self.zone_solution_dual.clear_output()
             self.zone_curs_cout.clear_output()
             display(erreur= print("Il y a un problème avec les données rentrées. \nAssurez vous d'avoir correctement saisi les données."))
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""Description.

Démonstration du module.
"""

from prog_dual import resolution, Probleme, Mon_exception, affichage

mon_probleme = Probleme.par_str("""
Lot1 / 10000000 / Fusils Grenades Chars Mitrailleuses Bazookas / 500 1000 10 100 80
Lot2 / 12000000 / Fusils Grenades Chars Mitrailleuses Bazookas / 300 2000 20 80 120
Lot3 / 15000000 / Fusils Grenades Chars Mitrailleuses Bazookas / 800 1500 15 15 200
100000 200000 100 400 400
""")

print(affichage.genere_table(mon_probleme))

affichage.affichage_solutions(mon_probleme, False)
Exemple #8
0
def test_verif_deux_lots_min(lots):
    """vérifie que le pb est composé d'au moins deux lot"""
    a, b, c, d, e, f, g = lots
    with pytest.raises(Mon_exception):
        probleme = Probleme([a], [60, 10])
Exemple #9
0
def test_verif_noms(lots):
    """vérifie que que deux lots n'ont pas le même nom."""
    a, b, c, d, e, f, g = lots
    with pytest.raises(Mon_exception):
        probleme = Probleme([f, g], [60, 10])
Exemple #10
0
def test_verif_lots_differents(lots):
    """vérifie que deux lots n'ont pas les mêmes quantités pour tous les types d'armes"""
    a, b, c, d, e, f, g = lots
    with pytest.raises(Mon_exception):
        probleme = Probleme([e, f], [60, 10])
Exemple #11
0
def test_verif_lots_meme_taille(lots):
    """vérifie que les lots ont la même longueur."""
    a, b, c, d, e, f, g = lots
    with pytest.raises(Mon_exception):
        probleme = Probleme([c, e], [60, 10])
Exemple #12
0
def test_verif_same_type_arme(lots):
    """vérifie que les lots sont composés du même type d'armes"""
    a, b, c, d, e, f, g = lots
    with pytest.raises(Mon_exception):
        probleme = Probleme([c, d], [60, 10])
Exemple #13
0
def test_instanciation(lots):
    """Création."""
    a, b, c, d, e, f, g = lots
    probleme = Probleme(lots=[a, b], demande=[60, 10])
    assert isinstance(probleme, Probleme)
Exemple #14
0
def test_egalite(lots):
    """Doit être différent de l'identité."""
    a, b, c, d, e, f, g = lots
    probleme1 = Probleme([a, b], [60, 10])
    probleme2 = Probleme([a, b], [60, 10])
    assert probleme1 == probleme2
Exemple #15
0
def test_acces(lots):
    """Utilisation de []."""
    a, b, c, d, e, f, g = lots
    probleme = Probleme([a, b], [60, 10])
    assert probleme.lots[0] == a
Exemple #16
0
def test_noms(lots):
    """Teste la propriété noms."""
    a, b, c, d, e, f, g = lots
    probleme = Probleme([a, b], [60, 10])
    assert ["Lot1", "Lot2"] == [lot.nom for lot in probleme.lots]
Exemple #17
0
def test_lots(lots):
    """Teste la propriété lots."""
    a, b, c, d, e, f, g = lots
    probleme = Probleme([a, b], [60, 10])
    assert [a, b] == list(probleme.lots)
Exemple #18
0
def test_verif_lenDemand_len_arme(lots):
    """vérifie que la longueur de liste demande = nb de type d'arme."""
    a, b, c, d, e, f, g = lots
    with pytest.raises(Mon_exception):
        probleme = Probleme([a, b], [60, 10, 30])