Qu’est-ce qu’un algorithme?
Définition (selon Marcello)
Ensemble d’instructions qui respectent deux condition:
- à chaque instruction il est possible de connaître l’instruction suivante;
- si on suit les étapes on arrive à une instruction qui demande l’arrêt.
Un algorithme n’a pas besoin d’être dans un environnement numérique: il peut être appliqué dans le monde physique sans problème (ex. se passer une craie dans une classe, en suivant une série d’instructions).
La beauté d’un algorithme, c’est qu’il permet de composer un programme de Hilbert (utiliser les mathématiques dans un système formel).
Chaque fonction calculable (tout ce qui est calculable) a un algorithme qui permet de la résoudre (computable).
Machine de Turing
La machine de Turing est une machine abstraite, théorique. Turing n’a pas créé sa machine de Turing comme telle (bien qu’il a créé les premiers ordinateurs), il l’a plutôt idéalisé dans son célèbre article de 1936.
La machine de Turing est constituée:
- d’un support, un ruban infini, avec des cases;
- d’une pointe qui permet de lire et écrire.
Chaque case est inscriptible avec des symboles arbitraires (ex. 0
et 1
, c’est plus simple en binaire – sur le support d’inscription, ça peut aussi être le vide).
La machine de Turing a besoin d’un algorithme, d’instructions pour savoir quoi faire.
Enjeu: transformer une tâche en une série d'instructions atomiques (simples) non ambigües.
Un ordinateur est une réalisation d’une machine de Turing, mais avec un support beaucoup différent.
Une machine morale
Cardon souligne: un algorithme implémente un système de valeurs, une vision du monde.
La question fondamentale devient une question herméneutique (avant les questions de performance ou de fonctionnement): quelle vision du monde l’algorithme est-il en train d’imposer?
Les formats, les protocoles, les plateforme, les logiciels, sont des machines morales.
On ne peut étudier cette dimension morale des algorithmes – ce qu’elle fait, et non simplement si elle fonctionne ou non – qu’avec la philosophie, la littérature, l’histoire, la bibliothéconomie, etc. Un code fonctionnel (en Python, C++, etc.) peut être lu par n’importe qui, on n’a qu’à apprendre la syntaxe. Mais la lecture herméneutique, historique, étudiant les effets sociaux, etc. ne peut être faite que par des littéraires, avec leur méthode particulière. C’est pour cela que le code est trop important pour être laissé aux seuls informaticiens!
Google est un grand producteur d’autorité, de vision du monde, il modélise par un algorithme ce qui est «pertinent» ou pas. Nous avons commencé à commencé à penser comme Google – ce qui est pertinent est ce qui est performant, c’est-à-dire produit par Google.
À partir des années 1950, on cherche à définir le mérite d’un texte, on construit une méritocratie (c’est ce que fait l’algorithme PageRank). On a besoin d’une autre mesure: l’indice de citation (citation index): plus un article est cité, plus il est pertinent.
L’indice de citatoin comporte son lot de problèmes (on peut écrire un texte complètement débile, le premier de son genre, et être cité par d’autres qui en parlent en mal – mais qui en parlent). Il y a également un échange des citations qui se met en place entre les chercheurs («je te cite, tu me cites»).
Question fondamentale: qu’est-ce que la pertinence? Il faut étudier les critères sur lesquels cette «pertinence» repose.
Exemple: modélisation de l’amour
Épisode de Black Mirror qui met en scène une vision leibnizienne du couplage (calcul de «tous les mondes possibles»): Hang the DJ (saison 4).
# algorithme.py
import json
A= '{"amourLecture":"8", "amourMusique":"8", "tendPol":"0", "lat": "45.5088", "long":"-73.5878", "age":"20"}'
B= '{"amourLecture":"5", "amourMusique":"10", "tendPol":"5", "lat": "46.7911", "long":"-71.3933", "age":"32"}'
C= '{"amourLecture":"0", "amourMusique":"0", "tendPol":"10", "lat": "45.5088", "long":"-73.5878", "age":"32"}'
D= '{"amourLecture":"10", "amourMusique":"0", "tendPol":"0", "lat": "48.8534", "long":"2.3488", "age":"40"}'
# print(str(A))
A=json.loads(str(A))
B=json.loads(str(B))
C=json.loads(str(C))
D=json.loads(str(D))
def ecart_AB(x,y):
ecartCult_AB=abs(int(x['amourLecture'])-int(y['amourLecture']))+abs(int(x['amourMusique'])-int(y['amourMusique']))
ecartPol_AB=abs(int(x['tendPol'])-int(y['tendPol']))
ecartGeo_AB=abs(float(x['lat'])-float(y['lat']))+abs(float(x['long'])-float(y['long']))
ecartAge_AB=abs(int(x['age'])-int(y['age']))
ecartTotal_AB=ecartCult_AB + ecartPol_AB + ecartGeo_AB + ecartAge_AB
print('ecart culturel: ' + str(ecartCult_AB) +'\n' + 'ecart politique: ' + str(ecartPol_AB) + '\n' + 'ecart geographique: ' + str(ecartGeo_AB) + '\n' + 'ecart age: ' + str(ecartAge_AB) + '\n' )
print('Ecart total: ')
print(str(ecartTotal_AB) + '\n')
return(ecartTotal_AB)
print('Ecart entre A et B \n')
ecartAB=ecart_AB(A,B)
print('Ecart entre A et C \n')
ecartAC=ecart_AB(A,C)
print('Ecart entre A et D \n')
ecartAD=ecart_AB(A,D)
print('Ecart entre B et C \n')
ecartBC=ecart_AB(B,C)
print('Ecart entre B et D \n')
ecartBD=ecart_AB(B,D)
print('Ecart entre C et D \n')
ecartCD=ecart_AB(C,D)
Le script imprime le résultat suivant:
# > python algorithme.py
Ecart entre A et B
ecart culturel: 5
ecart politique: 5
ecart geographique: 3.4768000000000043
ecart age: 12
Ecart total:
25.476800000000004
Ecart entre A et C
ecart culturel: 16
ecart politique: 10
ecart geographique: 0.0
ecart age: 12
Ecart total:
38.0
Ecart entre A et D
ecart culturel: 10
ecart politique: 0
ecart geographique: 79.2812
ecart age: 20
Ecart total:
109.2812
Ecart entre B et C
ecart culturel: 15
ecart politique: 5
ecart geographique: 3.4768000000000043
ecart age: 0
Ecart total:
23.476800000000004
Ecart entre B et D
ecart culturel: 15
ecart politique: 5
ecart geographique: 75.80439999999999
ecart age: 8
Ecart total:
103.80439999999999
Ecart entre C et D
ecart culturel: 10
ecart politique: 10
ecart geographique: 79.2812
ecart age: 8
Ecart total:
107.2812