Permalink
Browse files

update images documentation

  • Loading branch information...
sdpython committed Oct 17, 2016
1 parent 63c2620 commit 03d704032944e9a4d024e34e134fd6269a644f67
Showing with 372 additions and 14 deletions.
  1. BIN _doc/sphinxdoc/source/programmation/images/classroom_0000.png
  2. BIN _doc/sphinxdoc/source/programmation/images/classroom_0001.png
  3. BIN _doc/sphinxdoc/source/programmation/images/classroom_0002.png
  4. BIN _doc/sphinxdoc/source/programmation/images/classroom_0003.png
  5. BIN _doc/sphinxdoc/source/programmation/images/classroom_0004.png
  6. BIN _doc/sphinxdoc/source/programmation/images/classroom_0005.png
  7. BIN _doc/sphinxdoc/source/programmation/images/classroom_0006.png
  8. BIN _doc/sphinxdoc/source/programmation/images/classroom_0007.png
  9. BIN _doc/sphinxdoc/source/programmation/images/classroom_0008.png
  10. BIN _doc/sphinxdoc/source/programmation/images/classroom_0009.png
  11. BIN _doc/sphinxdoc/source/programmation/images/classroom_0010.png
  12. BIN _doc/sphinxdoc/source/programmation/images/classroom_0011.png
  13. BIN _doc/sphinxdoc/source/programmation/images/classroom_0012.png
  14. BIN _doc/sphinxdoc/source/programmation/images/classroom_0013.png
  15. BIN _doc/sphinxdoc/source/programmation/images/classroom_0014.png
  16. BIN _doc/sphinxdoc/source/programmation/images/classroom_0015.png
  17. BIN _doc/sphinxdoc/source/programmation/images/classroom_0016.png
  18. BIN _doc/sphinxdoc/source/programmation/images/classroom_0017.png
  19. BIN _doc/sphinxdoc/source/programmation/images/classroom_0018.png
  20. BIN _doc/sphinxdoc/source/programmation/images/classroom_0019.png
  21. +9 −4 _doc/sphinxdoc/source/programmation/voisins_amis.rst
  22. +55 −0 _doc/sphinxdoc/source/programmation/voisins_amis_correction.rst
  23. +16 −6 _doc/sphinxdoc/source/sanso_algo/facteur_chinois.rst
  24. BIN _doc/sphinxdoc/source/sanso_algo/images/touquet.png
  25. BIN _doc/sphinxdoc/source/sanso_algo/images/touquet2.png
  26. BIN _doc/sphinxdoc/source/sanso_algo/images/touquet3.png
  27. +94 −2 _unittests/ut_algorithm/test_classroom.py
  28. +198 −2 src/code_beatrix/algorithm/classroom.py
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -19,15 +19,20 @@ Mise en scène
-------------
La scène se passe dans une salle de classe. Chaque pair d'amis
est relié par un élastique. Tout se place comme il veut tout en maintenant
est reliée par un élastique. Tout se place comme il veut tout en maintenant
les élastiques. Une fois que tout le monde est placé, comment améliorer
la situation ?
la situation ? Voici une situation de départ :
.. images/classroom_0000.png
Les traits rouges sont des amis éloignés, les traits bleus
sont un peu moins éloignés, et les amis jaunes sont plutot
satisfaits et voici la situation qu'on aimerait atteindre :
.. images/classroom_0019.png
Quelques indices :
**Q1 :** Connaissez-vous les `cartes de Kohonen <https://fr.wikipedia.org/wiki/Carte_auto_adaptative>`_ ?
Quelques indices :
@@ -8,3 +8,58 @@
Les chaises chaotiques (solution)
=================================
Pour aller plus loin
++++++++++++++++++++
L'algorithme proposé est assez simple et peut être amélioré.
Les `cartes de Kohonen <https://fr.wikipedia.org/wiki/Carte_auto_adaptative>`_
sont une autre solution également possible. Cette version s'inspire
de la version développée pour les
`plus court chemin passant par tous les noeuds d'un graphe <http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx3/specials/tsp_kohonen.html?highlight=kohonen>`_.
Illustration de la solution
+++++++++++++++++++++++++++
.. image:: images/classroom_0000.png
.. image:: images/classroom_0001.png
.. image:: images/classroom_0002.png
.. image:: images/classroom_0003.png
.. image:: images/classroom_0004.png
.. image:: images/classroom_0005.png
.. image:: images/classroom_0006.png
.. image:: images/classroom_0007.png
.. image:: images/classroom_0008.png
.. image:: images/classroom_0009.png
.. image:: images/classroom_0010.png
.. image:: images/classroom_0011.png
.. image:: images/classroom_0012.png
.. image:: images/classroom_0013.png
.. image:: images/classroom_0014.png
.. image:: images/classroom_0015.png
.. image:: images/classroom_0016.png
.. image:: images/classroom_0017.png
.. image:: images/classroom_0018.png
.. image:: images/classroom_0009.png
@@ -20,17 +20,27 @@ par toutes les rues.
Mise en scène
-------------
On part de la carte de votre ville. Avec un feutre, on repasse sur toutes
les rues que le camion poubelle devra traverser. On recouvre la carte
On part de la carte de votre ville. Avec un feutre, on encercle la zone
dans laquelle le camion poubelle devra traverser toutes les rues. On recouvre la carte
de papier calque. Avec un feutre d'une autre couleur, on surligne les rues
par lesquelles le camion poubelle passe. Il faut bien faire attention à noter
les rues par lesquelles le camion poubelle passe deux fois. Plus il y en a, plus
le chemin est long.
par lesquelles le camion poubelle passe et on numérote le rues dans l'ordre
dans lequel on les parcourt. Quelques dessins de difficulté croissantes :
.. image:: images/touquet2.png
.. image:: images/touquet3.png
.. image:: images/touquet.png
Quelques indices :
**Q1 :** Avez-vous lu cette histoire sur les
**Q1 :** Le point de départ importe-t-il peu ?
**Q2 :** Avez-vous lu cette histoire sur les
`sept ponts de Königsberg <https://fr.wikipedia.org/wiki/Probl%C3%A8me_des_sept_ponts_de_K%C3%B6nigsberg>`_ ?
Il est possible qu'elle ait un lien avec l'histoire du camion poubelle.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -40,7 +40,7 @@
from pyquickhelper.loghelper import fLOG
from pyquickhelper.pycode import get_temp_folder, fix_tkinter_issues_virtualenv
from src.code_beatrix.algorithm.data import load_prenoms_w
from src.code_beatrix.algorithm.classroom import random_positions, plot_positions
from src.code_beatrix.algorithm.classroom import random_positions, plot_positions, optimize_positions, find_best_positions_greedy, measure_positions
class TestClassRoom(unittest.TestCase):
@@ -54,7 +54,7 @@ def test_names(self):
names = load_prenoms_w()
self.assertEqual(len(names), 50)
def test_random_position(self):
def _test_random_position(self):
fLOG(
__file__,
self._testMethodName,
@@ -77,6 +77,98 @@ def test_random_position(self):
plt.close('all')
fLOG("end")
def test_find_greedy(self):
fLOG(
__file__,
self._testMethodName,
OutputPrint=__name__ == "__main__")
positions = [('Warren', 0, 0), ('Wallerand', 0, 1), ('Walfroy', 0, 2), ('Walfrid', 0, 3),
('Waldy', 0, 4), ('Weltaz', 1,
0), ('Wendy', 1, 1), ('Wilbrord', 1, 2),
('Werburge', 1, 3), ('Wandy', 1,
4), ('Walburge', 2, 0), ('Walder', 2, 1),
('Wafaa', 2, 2), ('Waldemar', 2,
3), ('Waudru', 2, 4), ('Walter', 3, 0),
('Wilfrid', 3, 1), ('Werner', 3,
2), ('Wandrille', 3, 3), ('Walther', 3, 4),
('Wilbert', 4, 0), ('Wenceslas', 4, 1), ('Waast', 4, 2), ('Wanda', 4, 3)]
names = list(name for name, x, y in positions)
names.sort()
edges = [(names[0], names[1]), (names[0], names[2]), (names[0], names[3]),
(names[3], names[4]), (names[3], names[5]), (names[0], names[6])]
edges_dict = {}
for name1, name2 in edges:
if name1 in edges_dict:
edges_dict[name1].append(name2)
else:
edges_dict[name1] = [name2]
if name2 in edges_dict:
edges_dict[name2].append(name1)
else:
edges_dict[name2] = [name1]
positions = {k: (x, y) for k, x, y in positions}
edges_dict = {k: set(v) for k, v in edges_dict.items()}
res = find_best_positions_greedy(positions, edges_dict, names[0])
d0 = measure_positions(positions, edges)
d0_ = measure_positions(positions, edges_dict)
assert abs(d0 - d0_) < 1e-5
delta, pos = res[0]
rev = {v: k for k, v in positions.items()}
current_name = rev[pos]
c = positions.copy()
p0 = positions[names[0]]
p = positions[current_name]
positions[current_name] = p0
positions[names[0]] = p
d1 = measure_positions(positions, edges)
fLOG("d1", d1)
assert c != positions
assert abs(d1 - d0 - delta) < 1e-5
def test_optimize_position(self):
fLOG(
__file__,
self._testMethodName,
OutputPrint=__name__ == "__main__")
positions = random_positions(24)
names = list(name for name, x, y in positions)
names.sort()
edges = [(names[0], names[1]), (names[0], names[2]), (names[0], names[3]),
(names[3], names[4]), (names[3], names[5]), (names[0], names[6])]
if __name__ == "__main__":
temp = get_temp_folder(__file__, "temp_optimization")
new_positions, iter = optimize_positions(
positions, edges, fLOG=fLOG, max_iter=20, plot_folder=temp)
for i in iter:
fLOG(i)
positions = [(k, ) + v for k, v in new_positions.items()]
fix_tkinter_issues_virtualenv()
import matplotlib.pyplot as plt
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 8))
plot_positions(positions, edges=edges, ax=ax)
assert ax is not None
img = os.path.join(temp, "img.png")
fig.savefig(img)
assert os.path.exists(img)
if __name__ == "__main__":
fig.show()
plt.close('all')
fLOG("end")
else:
new_positions, iter = optimize_positions(
positions, edges, fLOG=fLOG, max_iter=20)
for i in iter:
fLOG(i)
assert iter
assert new_positions
if __name__ == "__main__":
unittest.main()
Oops, something went wrong.

0 comments on commit 03d7040

Please sign in to comment.