(dernière modification : )

Qu’est-ce qu’un algorithme?

Définition (selon Marcello)

Ensemble d’instructions qui respectent deux condition:

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

Exemple de 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:

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

Exemple de modélisation

É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