SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
CLAIRE: un pseudo-code exécutable et
compilable pour l’aide à la décision
18 Février

EPITA
Yves Caseau
Académie des Technologies
Yves Caseau – 2014 – Le langage de programmation CLAIRE

1/30
Plan


1ère Partie : Motivations
Genèse d’un pseudo-code exécutable



2ème Partie: Exemples
« The Art of Elegant Programming » 





3ème Partie: CLAIRE en un coup d’œil
Quelques fonctionnalités qui restent originales et utiles
4ème Partie: 20 ans après, so what ?
Qu’est-ce qui est réutilisable dans ce projet open-source ?

Yves Caseau – 2014 – Le langage de programmation CLAIRE

2/30
1ère Partie : Motivations

CLAIRE: Spécifications (telles que définie en 94)


Simple et Lisible





Multi-paradigme






pseudo-code exécutable
concepts simples et peu nombreux
Objets, Fonctions
Règles
Versions (exploration d'arbres de recherche)

compatibilité C++, Open-source




génère des objets C++
efficacité similaire à C++
sources et codes disponibles

Yves Caseau – 2014 – Le langage de programmation CLAIRE

3/30
1ère Partie : Motivations

CLAIRE de 1994 à 2014
De 1994 à 2004 : 10 ans de RO
E-Lab (Bouygues), XL Solutions, THALES
 Applications d’optimisation :
 Ordonnancement, Emplois du temps, Routage
 Yield Management à TF1 Pub
 Exemple des challenges ROADEF
 3 fois finalistes 2001, 2003, 2005
Utilisé en support de cours à Jussieu/ENS








« Contraintes et Algorithmes »

Introduction de Java comme cible de compilation en 99-2000

De 2004 à 2014 : GTES
 Simulation par Jeux et Apprentissage
 Optimisation locale, Théorie des Jeux et Monte-Carlo
 Plateforme pour « serious games »
Yves Caseau – 2014 – Le langage de programmation CLAIRE

4/30
Game Theoretical Evolutionary Simulation (GTES)
GTES is a tool for looking at a complex model with too many unknowns
Game Theoretical
Approach

Abstrac
-tions

Problem
(fuzzy,
complex,
…)

“tactical” may
be derived
Parameters which
from
describe the
“strategy”
player’s goals
(local
optimization)

Strategy

« Players »

Model:
Set of
equations
with too
many
unknown
parameters !

Tactical
Split
parameters

Environment

eParameter
s
Parameters which are
meaningful (e.g., oil
price future)

Obscure &
unknown

sParameters

GTES looks for possible equilibriums in uncertain settings
Classification
Actors

Global
Optimization
Problem

Strategies

Tactics
Parameters

Machine
learning:
Local
Optimization

Taking the model’s
uncertainty into account

Search for
Nash Equilibrium

Context

Environment

Competition between
mobile operators (open
market modeling)
• Distribution channels
ecosystem
• Analysis of information
flows -how they fit
various communication
channels

randomize

What it is good for:
Model workbench
(find faults in systemic
thinking )
• Support for “serious
games”
• Develop insights about a
complex situation
•

GTES
Parametric Analysis

What it was used for:
•

Player’s degrees
of freedom
Scenario-defined

GTES is a proven tool

Monte-Carlo
Sampling

Yves Caseau – 2014 – Le langage de programmation CLAIRE

Parameterization of
Players’ goals
Noncooperative
repeated
Game

What it is not:
• Optimization engine
• A forecasting framework
• State-of-the-art
technology
(applied to crude models)

5/30
1ère Partie : Motivations

Applications récentes de CLAIRE


Réseaux commerciaux de distribution
Equilibrer commissionnement et fidélisation
sur l’ensemble des canaux

4500
4000
3500
B

3000
2500



CGS: Cellular Game Simulation
Simulation de l’arrivée de Free dans un
marché à 3 acteurs  - cf. CSDM 2012



S

1500

F

1000

M

500
0
-500

2011

2012

2013

2014

2015

S3G: Systemic Simulation of SmartGrids
Comprendre les avantages/inconvénients
d’une approche distribuée vs. centralisée



O

2000

Licences LTE
choisir la bonne stratégie de portefeuille pour
les enchères à un tour des fréquences LTE fin
2012

Yves Caseau – 2014 – Le langage de programmation CLAIRE

6/30
1ère Partie : Motivations

CLAIRE en tant que système
Domaines

Exécutables

Stochastic
RO

GTES

Interprète/Debug
/ Trace / etc.

Générateur
de code
Generate

Reader

Algorithmes

Langage
Elégant
(CLAIRE)

Méta/Réflexif
CLAIRE en CLAIRE

Optimiseur
de code
Optimize

Core / Language

C++ Kernel
(LISP en C++)
Kernel

Yves Caseau – 2014 – Le langage de programmation CLAIRE

Alloc / GC / list /
sets / funcall / …

7/30
Sudoku (I)
// finds a cell with a min count (naive heuristic)
findPivot(g:Grid) : any
-> let minv := 10, cmin := unknown in
(for c in g.cells
(if (c.value = 0 & c.count < minv)
(minv := c.count, cmin := c)),
cmin)

column

Cell
Value:
Count:
Possible:

line

2ème Partie : Exemples

square

// solve a sudoku : branch on possible values using a recursive function
// branch(...) does all the work :)
solve(g:Grid) : boolean
-> when c := findPivot(g) in
exists(v in (1 .. 9) |
(if c.possible[v] branch((c.value := v, solve(g)))
else false))
else true

Yves Caseau – 2014 – Le langage de programmation CLAIRE

8/30
2ème Partie : Exemples

Sudoku (II)

Claim: un
programme
élégant ET
efficace

// first propagation rule
r1() :: rule(
c.value := v => (store(c.line.counts,v,0),
// disable counts[v] since v was found !
store(c.column.counts,v,0),
store(c.square.counts,v,0),
for v2 in (1 .. 9)
// for all values v2 that were still OK
(if (v != v2 & c.possible[v2]) noLonger(c,v2),
for c2 in (c.line.cells but c) forbid(c2,v),
// v is used for c.line
for c2 in (c.column.cells but c) forbid(c2,v), // … and c.column
for c2 in (c.square.cells but c) forbid(c2,v)))) // … and c.square
// second rule : if c.count = 1, the only possible value is certain
r2() :: rule(
c.count := y & y = 1 => c.value := some(y in (1 .. 9) | c.possible[y]))
// third rule (uses the CellSetSupport event) :
// if a value v is possible only in one cell, it is certain
r3() :: rule(
updateCount(cs,v) & cs.counts[v] <= 1
=> when c := some(c in cs.cells | c.value = 0 & c.possible[v]) in c.value := v
else contradiction!())
Yves Caseau – 2014 – Le langage de programmation CLAIRE

9/30
2ème Partie : Exemples

Configuration : Exemple à base de règle








compatibility1() :: rule(
st.speaker :add sp & not(sp.ohms % st.amplifier.ohms) )
=> technical_problem(s = "conflict speakers-amp"))
compatibility2() :: rule(
st.sources :add x & size(st.sources) > st.amp.inputs
=> technical_problem(s = "too many sources"))
compatibility3() :: rule(
(st.out :add x) & x.maxpower < st.amp.power
=> technical_problem(s = "amp to strong for the speakers"))
my_system :: stereo(amp = amp1)
(exists(sp in speaker |
(try (my_system.out :add sp, true)
catch technical_problem
(//[0] rejects ~S because ~A // sp, exception!().s,
my_system.out :delete sp,
false))),

Yves Caseau – 2014 – Le langage de programmation CLAIRE

10/30
2ème Partie : Exemples

Exemple: Algorithme Hongrois (I)
// builds a maximum weight complete matching

match()
-> (...,
// initialization
while (HN != N) (if not(grow()) dual_change()))
// a step repeats adding nodes until the forest is hungarian (return value is false)
// or the matching is improved (return value is true)
// explore is the stack of even nodes that have net been explored yet

grow() : boolean
-> let i := pop(explore) in
( exists( j in {j in GpiSet(i,LastExplored[i] + 1,LastValid[i]) | not(odd?[j])} |
(if (sol-[j] != 0)
(//[SPEAK] grow: add (~S,~S) to forest// i,j,
odd?[j] := true,
pushEven+(sol-[j]),
tree[j] := i,
false)
else (augment(i,j), true))) |
(if (explore[0] != 0) grow()) )
Yves Caseau – 2014 – Le langage de programmation CLAIRE

11/30
2ème Partie : Exemples

Exemple: Algorithme Hongrois (II)
// change the dual feasible solution, throw a contradiction if there are no perfect matching

dual_change() : integer
-> let e := min( list{vclose[i] | i in {j in Dom | not(odd?[j])}}) in
(//[SPEAK] DUAL CHANGE: we pick epsilon = ~S // e,
if (e = NMAX) contradiction!(),
for k in stack(even) (pi+[k] :+ e, LastExplored[k] := LastValid[k]),
for j in {j in Dom | odd?[j]} (pi-[j] :- e, vclose[j] := NMAX)),
clear(explore),
for i in stack(even)
let l := Gpi[i], k := size(l), toExplore := false in
(while (LastValid[i] < k) (k, toExplore) := reduceStep(i,j,l,k,toexplore),
if toExplore push(explore,i)))
// look at edges outside the valid set one at a time

reduceStep(i:Dom,j:Dom,l:list,k:integer,toExplore:boolean) : tuple(integer,boolean)
-> let j := l[k], c := Cpi(i,j) in
(if (c = 0) (//[SPEAK] dual_change: Add edge ~S,~S // i,j,
Gpiadd(l,i,j,k), toexplore := true)
else (vclose[j] :min c, k :- 1)),
list(k, toexplore))
Yves Caseau – 2014 – Le langage de programmation CLAIRE

12/30
3ème Partie : Exemples

CLAIRE d'un coup d'oeil


Un langage objet fonctionnel polymorphe




Un langage de modélisation (ensembles, relations)




haut niveau d'abstraction, confort d'utilisation

Un langage de « patterns » (issus de la modélisation)




compilé et interprété, simple et efficace

En particulier, facilite la programmation « par ensembles »

Outils pour la recherche arborescente


points de choix et retours arrière

Yves Caseau – 2014 – Le langage de programmation CLAIRE

13/30
Objets


Une hiérarchie de classes avec héritage simple

point <: object(x:integer, y:integer)


Classes paramétrées

stack[of] <: thing(of:type, contents:list)


Une sur-hiérarchie de types complexes avec héritage multiple

(1 .. 10) U (20 .. 30)  (1 .. 30)  integer
stack[of = integer]  stack[of:subtype[integer]]
 stack
tuple(integer,integer)
 list[integer]
 list[integer U float]

Yves Caseau – 2014 – Le langage de programmation CLAIRE

14/30
Polymorphisme


Surcharge complètement libre

f(x:{O},y:(1 .. 12)) -> 1
f(x:(0 .. 10), y:integer) -> (x + y)
f(x:integer,y:({1,2} U (7 .. 10)) -> (x - y)


Typage et liaisons statiques et dynamiques



génération de code

sum(s:set[integer]) : integer
=> let d := 0 in (for x in s d :+ x, d)
sum(1 .. 10) devient
let d := 0, m := 10, x := 1 in
(while (x <= m) (d :+ x, x :+ 1), d)


Polymorphisme de composition



Exploite les règles du type f(g(x)) = h(x)
exemple : det(A * B) = det(A) * det(B)

Yves Caseau – 2014 – Le langage de programmation CLAIRE

15/30
Relations


Relations binaires … étendues
comment[c:class] : string := " "
dist[x:(0 .. 100),y:(0 .. 100)] : integer := 0



Modélisation
meet[s:set[person]] : date := unknown
course[tuple(person,set[person])] : room := unknown



Gestion des relations inverses



Gestion de unknown (absence de valeur)



Règles de propagation sur événement


Nouvelle valeur ou ajout d’une valeur (relation multi-valuée)



R1() :: rule(x.salary := (y -> z) => x.tax :+ (z-y) * 0.1)

Yves Caseau – 2014 – Le langage de programmation CLAIRE

16/30
Raisonnement Hypothétique


Mondes



backtrack() crée un retour arrière





choice() crée un point de choix
commit() entérine les updates depuis le dernier point de choix

Recherche arborescente


Fonctionnement en pile, optimisé

solve() : boolean ->
when q := pick() in
exists( c in possible(q) |
branch( (column[q] := c, solve())))
else true
branch(e) :: (choice(),
( (try e catch contradiction false) |
(backtrack(), false) ))

Yves Caseau – 2014 – Le langage de programmation CLAIRE

17/30
Ensembles Concrets et Abstraits


Ensembles en extension






Types de données






classes for x in person print(x), size(person)
sets, lists set(1,2,3,4),
list(Peter, Paul, Mary)
bibliothèque de structures de données (Bitvectors, Hset, ...)

Intervalles 1 .. n,
Union, Intersection array U property, list ^ subytpe[char]
Types paramétrés for x in person[age:(15 .. 18)] print(x)

Expressions ensemblistes


image
{age(x) | x in person}, list{i + 1 | i in (1 .. 10)}



sélection
{x in person | x.age > 0}, list{i in (1 .. n) | f(i) > 0}

Yves Caseau – 2014 – Le langage de programmation CLAIRE

18/30
Extensibilité


Classes


L'ensemble des structures de données représentant un ensemble est
extensible

Hset[of] <: set_class(of:type,content:list,index:integer)

add(s:Hset[X], y:X) : void
-> let i := hash(s.content,y) in ....
set!(s:Hset) -> {x in s.content | known?(x)}


Patterns


un pattern est un appel fonctionnel qui peut être traité de façon
paresseuse

but(x:abstract_set,y:any) : set -> {z in x | z != y}
%(x:any, y:but[tuple(abstract_set,any)])
=> (x % y.args[1] & x != y.args(2))

Yves Caseau – 2014 – Le langage de programmation CLAIRE

19/30
Itération Explicite


Itération paresseuse en fonction du type d'ensemble

for x in person print(x)
for y in (1 .. n) f(y)


Génération de code source

for c in person.descendent
for x in c.instances print(x)
let y := 1 in
(while (y <= n) (f(y), y :+ 1))


Itération extensible

iterate(x:Hset,v:Variable,e:any)
=> for v in x.content (if known?(v) e)
iterate(x:but[tuple(abstract_set,any)],v:Variable,e:any)
=> for v in x.args[1] (if (v != x.args[2]) e)

Yves Caseau – 2014 – Le langage de programmation CLAIRE

20/30
Itération Implicite


Chaque expression implique une itération

{x in (1 .. 10) | f(x) > 0}
{length(c.subclass) | c in (class but class)}
let s := {}, x := 1 in
(while (x <= 10) (if (f(x) > 0) s :add x, x :+ 1),
s)


L'itération d'une expression est aussi paresseuse

for x in {x in (1 .. 10) | f(x) > 0} print(x)
for y in {c.slots | c in (class  relation.ancestors)}
print(y)
for c in class.instances
if not(c % relation.ancestors) print(c.slots)

Yves Caseau – 2014 – Le langage de programmation CLAIRE

21/30
Itérateurs de Structures


La combinaison d'itérateurs et de patterns permet d'itérer des
structures plus complexes

Tree <: object(value:any,right:Tree,left:Tree)
TreeIterator <: object(tosee:list, status:boolean)
iterate(x:by[tuple(Tree,TreeIterator)], v:Variable, e:any)
=> let v := start(x.args[2], x.args[1]) in
while (v != unknown)
(e, v := next(x.args[2], x.args[1])
TreeIteratorDFS <: TreeIterator()
start(x:TreeIteratorDFS, y:Tree) -> ...
next(x:TreeIteratorDFS, y:Tree) -> ...
DFS :: TreeIteratorDFS()

TreeIteratorBFS <: TreeIterator() ...
for x in (myTree by DFS) print(x)
{y.weight | y in (myTree by BFS)}

Yves Caseau – 2014 – Le langage de programmation CLAIRE

22/30
Application: Listes Chaînées


La représentation la plus efficace utilise des slots

Task <: object( ....
next:Task, prev:Task, ....)



L'utilisation de patterns permet de créer des listes virtuelles

chain(x:Task) : list[Task]
-> let l := list(x), in
(while known?(next,x) (x := x.next, l :add x),
l)
insert(x:Task,y:list[Task]) => ...
iterate(x:chain[tuple(Task)],v:Variable,e:any) => ...



Ces listes peuvent être utilisées comme des listes normales

count(chain(t1)),
sum({x.weight | x in chain(t0)}),
...
Yves Caseau – 2014 – Le langage de programmation CLAIRE

23/30
Paramétrisation
[iterate(s:Interval, v:Variable, e:any)
=> for v in users(use(s)) (if SET(v)[index(v)] e)

]

[<atleast(x:Task, y:Task) => atleast(x) <= atleast(y) ]
[min(s:any, f:property, default:any) : any
=> let x := default in
(for y in s (if f(x,y) x := y), x) ]

min(i but t, <atleast, TEnd)
let x := TEnd in
(for y in users(use(i))
(if SET(i)[index(y)]
(if (y != t)
(if (atleast(y) <= atleast(x)) x := y))),
x)
Yves Caseau – 2014 – Le langage de programmation CLAIRE

24/30
Génération de Code




CLAIRE génère un code C++ lisible
La compilation du noyau objet est directe, sans surcoûts
La compilation des expressions ensemblistes est optimisée
list{g(x) | x in {i in (1 .. 10) | f(i) > 0}}
let l := nil , y := 1, max := 10 in
(while (y <= 10)
( if (f(y) > 0)
l :add g(y),
y :+ 1),
l)

Yves Caseau – 2014 – Le langage de programmation CLAIRE

25/30
4ème Partie : Utilité de CLAIRE en 2014

CLAIRE 20 ans après : que reste-t-il ?
1.

Un pseudo-code exécutable
… too late 

2.

Noyau « Lisp en C++ »
… bof 

3.

Interprète réflexif
… réutilisable

4.

Compilateur extensible
… CLAIRE to X ?

5.

Pas mal de code …
(algorithmes optimisation)

Yves Caseau – 2014 – Le langage de programmation CLAIRE

Mais un contexte « favorable » :
1.

Retour en force de l’Intelligence
Artificielle à toutes les échelles
(du cloud au Javascript)

2.

« Comportement intelligent »
donc « problem solving » &
« optimisation combinatoire »

3.

Montée des « jeux » comme
paradigme d’interaction

26/30
4ème Partie : Utilité de CLAIRE en 2014

Comment jouer avec CLAIRE ?


Site : http://claire3.free.fr/



Documentation (95 pages)



GitHub: http://github.com/ycaseau/CLAIRE3.4



Top level:
CLAIRE est en premier lieu un langage
interprété, héritier de LISP 



C++ compiler





Version Windows maintenue / à jour
Version G++ un peu poussiéreuse …

Page Facebook CLAIRE 

Yves Caseau – 2014 – Le langage de programmation CLAIRE

27/30
4ème Partie : Utilité de CLAIRE en 2014

CLAIRE comme plateforme d’expérimentation


CLAIRE est entièrement réflexif






Première utilisation : plate-forme de prototypage pour un nouveau
langage






Tout est objet (à la SMALLTALK)
Toute expression du langage est représentée par un objet (à la LISP)
L’environnement :
 toplevel = eval(read()), debug, trace, profile, inspect, …

Extensibilité & capacité à tout redéfinir
Par exemple, ajouter du parallélisme ….

Deuxième utilisation : massacre à la tronçonneuse 





Interprète langage fonctionnel
Système de types (treillis complet avec union/intersection)
Mécanismes d’exploration arborescente (choice/backtrack)

Yves Caseau – 2014 – Le langage de programmation CLAIRE

28/30
4ème Partie : Utilité de CLAIRE en 2014

CLAIRE comme générateur de DSL


La syntaxe de CLAIRE est facilement extensible





Beaucoup de savoir-faire dans l’optimiseur de code







Inférence de type par interprétation abstraite
Optimisation de nombreuses propriétés (allocation mémoire)
Gestion de l’abstraction et du polymorphisme (cf. 3e partie)
Optimisation des « patterns »

Générateur de code source en deux étapes





Comme en LISP, le « reader » est paramétrable
Entièrement en CLAIRE (il a existé une version lex/yacc)

Un étage générique, indépendant du code source
Un « producer » séparé pour C++ ou Java

Générateur de Java disponible sur demande


Prochaine étape : « producer » pour JavaScript

Yves Caseau – 2014 – Le langage de programmation CLAIRE

29/30
Conclusion


CLAIRE comme plateforme de mise au point de “modules intelligents”
pour les UI de demain :
Reader

Besoin de
“comportement
intelligent”

Algorithmes

Programme
CLAIRE
Interprete

Mise au point



Generate

A inclure dans une page
ou un projet global

Core / Language
compilateur

Code
JavaScript

Apprentissage

Mon principal objectif pour les 5 ans à venir






Mettre GTES à disposition en tant que “framework for serious games”
A venir : S3G, CGS, RTMS, GWDG, SIFOA
Cf. mes deux blogs: BDIS & Architecture Organisationnelle
Livre en préparation pour 2017 

Yves Caseau – 2014 – Le langage de programmation CLAIRE

30/30

Contenu connexe

Tendances

Mission d'audit des Systéme d'information
Mission d'audit des Systéme d'informationMission d'audit des Systéme d'information
Mission d'audit des Systéme d'informationAymen Foudhaili
 
Presentation DevOps : enjeux , objectifs, consequences
Presentation DevOps : enjeux , objectifs, consequencesPresentation DevOps : enjeux , objectifs, consequences
Presentation DevOps : enjeux , objectifs, consequencesStéphane Di Cioccio
 
Livre Blanc SAS - EBG 30 cas concrets de Datavisualisation / Dataviz
Livre Blanc SAS - EBG 30 cas concrets de Datavisualisation / DatavizLivre Blanc SAS - EBG 30 cas concrets de Datavisualisation / Dataviz
Livre Blanc SAS - EBG 30 cas concrets de Datavisualisation / Datavizechangeurba
 
Méthodes Agiles, L’essentiel de KANBAN.
Méthodes Agiles, L’essentiel de KANBAN.Méthodes Agiles, L’essentiel de KANBAN.
Méthodes Agiles, L’essentiel de KANBAN.aettarrouzi
 
Les fondamentaux de la gestion de projet
Les fondamentaux de la gestion de projetLes fondamentaux de la gestion de projet
Les fondamentaux de la gestion de projetCOMPETENSIS
 
Métriques de qualité logicielle
Métriques de qualité logicielleMétriques de qualité logicielle
Métriques de qualité logicielleYouness Boukouchi
 
Référentiels et Normes pour l'Audit de la Sécurité des SI
Référentiels et Normes pour l'Audit de la Sécurité des SIRéférentiels et Normes pour l'Audit de la Sécurité des SI
Référentiels et Normes pour l'Audit de la Sécurité des SIAlghajati
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
Jeu manager sa communication 2019
Jeu manager sa communication 2019Jeu manager sa communication 2019
Jeu manager sa communication 2019CIPE
 
Tests & recette - Les fondamentaux
Tests & recette - Les fondamentauxTests & recette - Les fondamentaux
Tests & recette - Les fondamentauxCOMPETENSIS
 
Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...Ramzi Noumairi
 
Apache SPARK ML : principes, concepts et mise en œuvre
Apache SPARK  ML : principes, concepts et  mise en œuvre Apache SPARK  ML : principes, concepts et  mise en œuvre
Apache SPARK ML : principes, concepts et mise en œuvre MICHRAFY MUSTAFA
 
De l'expression de besoins vers spécifications de la solution
De l'expression de besoins vers spécifications de la solutionDe l'expression de besoins vers spécifications de la solution
De l'expression de besoins vers spécifications de la solutionCOMPETENSIS
 
Green, le jeu de l'environnement
Green, le jeu de l'environnementGreen, le jeu de l'environnement
Green, le jeu de l'environnementCIPE
 
Projet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoinsProjet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoinsJean-Marc Dupont
 

Tendances (20)

Mission d'audit des Systéme d'information
Mission d'audit des Systéme d'informationMission d'audit des Systéme d'information
Mission d'audit des Systéme d'information
 
Presentation DevOps : enjeux , objectifs, consequences
Presentation DevOps : enjeux , objectifs, consequencesPresentation DevOps : enjeux , objectifs, consequences
Presentation DevOps : enjeux , objectifs, consequences
 
Livre Blanc SAS - EBG 30 cas concrets de Datavisualisation / Dataviz
Livre Blanc SAS - EBG 30 cas concrets de Datavisualisation / DatavizLivre Blanc SAS - EBG 30 cas concrets de Datavisualisation / Dataviz
Livre Blanc SAS - EBG 30 cas concrets de Datavisualisation / Dataviz
 
Méthodes Agiles, L’essentiel de KANBAN.
Méthodes Agiles, L’essentiel de KANBAN.Méthodes Agiles, L’essentiel de KANBAN.
Méthodes Agiles, L’essentiel de KANBAN.
 
Les fondamentaux de la gestion de projet
Les fondamentaux de la gestion de projetLes fondamentaux de la gestion de projet
Les fondamentaux de la gestion de projet
 
Cours datamining
Cours dataminingCours datamining
Cours datamining
 
Métriques de qualité logicielle
Métriques de qualité logicielleMétriques de qualité logicielle
Métriques de qualité logicielle
 
Référentiels et Normes pour l'Audit de la Sécurité des SI
Référentiels et Normes pour l'Audit de la Sécurité des SIRéférentiels et Normes pour l'Audit de la Sécurité des SI
Référentiels et Normes pour l'Audit de la Sécurité des SI
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Mehari
MehariMehari
Mehari
 
Jeu manager sa communication 2019
Jeu manager sa communication 2019Jeu manager sa communication 2019
Jeu manager sa communication 2019
 
Partie1BI-DW2019
Partie1BI-DW2019Partie1BI-DW2019
Partie1BI-DW2019
 
Tests & recette - Les fondamentaux
Tests & recette - Les fondamentauxTests & recette - Les fondamentaux
Tests & recette - Les fondamentaux
 
Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...Présentation PFE (Conception et développement d'une application web && mobile...
Présentation PFE (Conception et développement d'une application web && mobile...
 
Apache SPARK ML : principes, concepts et mise en œuvre
Apache SPARK  ML : principes, concepts et  mise en œuvre Apache SPARK  ML : principes, concepts et  mise en œuvre
Apache SPARK ML : principes, concepts et mise en œuvre
 
Gestion de projet
Gestion de projetGestion de projet
Gestion de projet
 
Présentation bi 1.0
Présentation bi 1.0Présentation bi 1.0
Présentation bi 1.0
 
De l'expression de besoins vers spécifications de la solution
De l'expression de besoins vers spécifications de la solutionDe l'expression de besoins vers spécifications de la solution
De l'expression de besoins vers spécifications de la solution
 
Green, le jeu de l'environnement
Green, le jeu de l'environnementGreen, le jeu de l'environnement
Green, le jeu de l'environnement
 
Projet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoinsProjet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoins
 

En vedette

XEBICON Public November 2015
XEBICON Public November 2015XEBICON Public November 2015
XEBICON Public November 2015Yves Caseau
 
Management socialnetworksfeb2012
Management socialnetworksfeb2012Management socialnetworksfeb2012
Management socialnetworksfeb2012Yves Caseau
 
Google socialnetworksmarch08
Google socialnetworksmarch08Google socialnetworksmarch08
Google socialnetworksmarch08Yves Caseau
 
The European CIO Conference - November 27th, 2014
The European CIO Conference - November 27th, 2014The European CIO Conference - November 27th, 2014
The European CIO Conference - November 27th, 2014Yves Caseau
 
Managing Business Processes Communication and Performance
Managing Business Processes Communication and Performance Managing Business Processes Communication and Performance
Managing Business Processes Communication and Performance Yves Caseau
 
Smart homeamsterdamoctober2013
Smart homeamsterdamoctober2013Smart homeamsterdamoctober2013
Smart homeamsterdamoctober2013Yves Caseau
 
Intelligence Artificielle - Journée MEDEF & AFIA
Intelligence Artificielle - Journée MEDEF & AFIAIntelligence Artificielle - Journée MEDEF & AFIA
Intelligence Artificielle - Journée MEDEF & AFIAYves Caseau
 
Lean entreprisetwodotzerodauphinefev2014
Lean entreprisetwodotzerodauphinefev2014Lean entreprisetwodotzerodauphinefev2014
Lean entreprisetwodotzerodauphinefev2014Yves Caseau
 
Cours chapitre7 2012
Cours chapitre7 2012Cours chapitre7 2012
Cours chapitre7 2012Yves Caseau
 
Cours chapitre5 2012
Cours chapitre5 2012Cours chapitre5 2012
Cours chapitre5 2012Yves Caseau
 
Cours chapitre4 2012
Cours chapitre4 2012Cours chapitre4 2012
Cours chapitre4 2012Yves Caseau
 
Cours chapitre2 2012
Cours chapitre2 2012Cours chapitre2 2012
Cours chapitre2 2012Yves Caseau
 
Cours chapitre8 2012
Cours chapitre8 2012Cours chapitre8 2012
Cours chapitre8 2012Yves Caseau
 
Entreprise troispointzeropublicjan2015
Entreprise troispointzeropublicjan2015Entreprise troispointzeropublicjan2015
Entreprise troispointzeropublicjan2015Yves Caseau
 
Cours chapitre6 2012
Cours chapitre6 2012Cours chapitre6 2012
Cours chapitre6 2012Yves Caseau
 
Cours chapitre1 2012
Cours chapitre1 2012Cours chapitre1 2012
Cours chapitre1 2012Yves Caseau
 
Cours chapitre9 2012
Cours chapitre9 2012Cours chapitre9 2012
Cours chapitre9 2012Yves Caseau
 

En vedette (20)

Claire98
Claire98Claire98
Claire98
 
XEBICON Public November 2015
XEBICON Public November 2015XEBICON Public November 2015
XEBICON Public November 2015
 
Management socialnetworksfeb2012
Management socialnetworksfeb2012Management socialnetworksfeb2012
Management socialnetworksfeb2012
 
Google socialnetworksmarch08
Google socialnetworksmarch08Google socialnetworksmarch08
Google socialnetworksmarch08
 
GTES UTC 2014
GTES  UTC 2014GTES  UTC 2014
GTES UTC 2014
 
The European CIO Conference - November 27th, 2014
The European CIO Conference - November 27th, 2014The European CIO Conference - November 27th, 2014
The European CIO Conference - November 27th, 2014
 
Managing Business Processes Communication and Performance
Managing Business Processes Communication and Performance Managing Business Processes Communication and Performance
Managing Business Processes Communication and Performance
 
Smart homeamsterdamoctober2013
Smart homeamsterdamoctober2013Smart homeamsterdamoctober2013
Smart homeamsterdamoctober2013
 
Intelligence Artificielle - Journée MEDEF & AFIA
Intelligence Artificielle - Journée MEDEF & AFIAIntelligence Artificielle - Journée MEDEF & AFIA
Intelligence Artificielle - Journée MEDEF & AFIA
 
Disic mars2014
Disic mars2014Disic mars2014
Disic mars2014
 
Lean entreprisetwodotzerodauphinefev2014
Lean entreprisetwodotzerodauphinefev2014Lean entreprisetwodotzerodauphinefev2014
Lean entreprisetwodotzerodauphinefev2014
 
Cours chapitre7 2012
Cours chapitre7 2012Cours chapitre7 2012
Cours chapitre7 2012
 
Cours chapitre5 2012
Cours chapitre5 2012Cours chapitre5 2012
Cours chapitre5 2012
 
Cours chapitre4 2012
Cours chapitre4 2012Cours chapitre4 2012
Cours chapitre4 2012
 
Cours chapitre2 2012
Cours chapitre2 2012Cours chapitre2 2012
Cours chapitre2 2012
 
Cours chapitre8 2012
Cours chapitre8 2012Cours chapitre8 2012
Cours chapitre8 2012
 
Entreprise troispointzeropublicjan2015
Entreprise troispointzeropublicjan2015Entreprise troispointzeropublicjan2015
Entreprise troispointzeropublicjan2015
 
Cours chapitre6 2012
Cours chapitre6 2012Cours chapitre6 2012
Cours chapitre6 2012
 
Cours chapitre1 2012
Cours chapitre1 2012Cours chapitre1 2012
Cours chapitre1 2012
 
Cours chapitre9 2012
Cours chapitre9 2012Cours chapitre9 2012
Cours chapitre9 2012
 

Similaire à Claire epita-février2014

Introduction a la compilation Aperçu de la compilation / Assembleur MIPS - C1
Introduction a la compilation  Aperçu de la compilation / Assembleur MIPS - C1Introduction a la compilation  Aperçu de la compilation / Assembleur MIPS - C1
Introduction a la compilation Aperçu de la compilation / Assembleur MIPS - C1Beligh HAMDI
 
Mat lab1
Mat lab1Mat lab1
Mat lab1fouadDD
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetAmine Chkr
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzlesMicrosoft
 
ALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowMathias Kluba
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivationsSana Aroussi
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 

Similaire à Claire epita-février2014 (20)

Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17
 
040423+seminar+info+uqam.ppt
040423+seminar+info+uqam.ppt040423+seminar+info+uqam.ppt
040423+seminar+info+uqam.ppt
 
Introduction a la compilation Aperçu de la compilation / Assembleur MIPS - C1
Introduction a la compilation  Aperçu de la compilation / Assembleur MIPS - C1Introduction a la compilation  Aperçu de la compilation / Assembleur MIPS - C1
Introduction a la compilation Aperçu de la compilation / Assembleur MIPS - C1
 
030225+seminar+gelo+diro.ppt
030225+seminar+gelo+diro.ppt030225+seminar+gelo+diro.ppt
030225+seminar+gelo+diro.ppt
 
Cours de Matlab
Cours de MatlabCours de Matlab
Cours de Matlab
 
Mat lab1
Mat lab1Mat lab1
Mat lab1
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception Objet
 
Uml
UmlUml
Uml
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
 
ALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - Specflow
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Chapitre i introduction et motivations
Chapitre i introduction et motivationsChapitre i introduction et motivations
Chapitre i introduction et motivations
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 

Plus de Yves Caseau

DataAquitaine February 2022
DataAquitaine February 2022DataAquitaine February 2022
DataAquitaine February 2022Yves Caseau
 
Global warming dynamic gamesv0.3
Global warming dynamic gamesv0.3Global warming dynamic gamesv0.3
Global warming dynamic gamesv0.3Yves Caseau
 
Machine Learning for Self-Tracking
Machine Learning for Self-TrackingMachine Learning for Self-Tracking
Machine Learning for Self-TrackingYves Caseau
 
Information Systems for Digital Transformation
Information Systems for Digital TransformationInformation Systems for Digital Transformation
Information Systems for Digital TransformationYves Caseau
 
Lean from the guts
Lean from the gutsLean from the guts
Lean from the gutsYves Caseau
 
Taking advantageofai july2018
Taking advantageofai july2018Taking advantageofai july2018
Taking advantageofai july2018Yves Caseau
 
Software Pitch 2018
Software Pitch 2018Software Pitch 2018
Software Pitch 2018Yves Caseau
 
Big data, Behavioral Change and IOT Architecture
Big data, Behavioral Change and IOT ArchitectureBig data, Behavioral Change and IOT Architecture
Big data, Behavioral Change and IOT ArchitectureYves Caseau
 
Smart selfnovember2013
Smart selfnovember2013Smart selfnovember2013
Smart selfnovember2013Yves Caseau
 
Cours chapitre3 2012
Cours chapitre3 2012Cours chapitre3 2012
Cours chapitre3 2012Yves Caseau
 

Plus de Yves Caseau (11)

CCEM2023.pptx
CCEM2023.pptxCCEM2023.pptx
CCEM2023.pptx
 
DataAquitaine February 2022
DataAquitaine February 2022DataAquitaine February 2022
DataAquitaine February 2022
 
Global warming dynamic gamesv0.3
Global warming dynamic gamesv0.3Global warming dynamic gamesv0.3
Global warming dynamic gamesv0.3
 
Machine Learning for Self-Tracking
Machine Learning for Self-TrackingMachine Learning for Self-Tracking
Machine Learning for Self-Tracking
 
Information Systems for Digital Transformation
Information Systems for Digital TransformationInformation Systems for Digital Transformation
Information Systems for Digital Transformation
 
Lean from the guts
Lean from the gutsLean from the guts
Lean from the guts
 
Taking advantageofai july2018
Taking advantageofai july2018Taking advantageofai july2018
Taking advantageofai july2018
 
Software Pitch 2018
Software Pitch 2018Software Pitch 2018
Software Pitch 2018
 
Big data, Behavioral Change and IOT Architecture
Big data, Behavioral Change and IOT ArchitectureBig data, Behavioral Change and IOT Architecture
Big data, Behavioral Change and IOT Architecture
 
Smart selfnovember2013
Smart selfnovember2013Smart selfnovember2013
Smart selfnovember2013
 
Cours chapitre3 2012
Cours chapitre3 2012Cours chapitre3 2012
Cours chapitre3 2012
 

Claire epita-février2014

  • 1. CLAIRE: un pseudo-code exécutable et compilable pour l’aide à la décision 18 Février EPITA Yves Caseau Académie des Technologies Yves Caseau – 2014 – Le langage de programmation CLAIRE 1/30
  • 2. Plan  1ère Partie : Motivations Genèse d’un pseudo-code exécutable  2ème Partie: Exemples « The Art of Elegant Programming »    3ème Partie: CLAIRE en un coup d’œil Quelques fonctionnalités qui restent originales et utiles 4ème Partie: 20 ans après, so what ? Qu’est-ce qui est réutilisable dans ce projet open-source ? Yves Caseau – 2014 – Le langage de programmation CLAIRE 2/30
  • 3. 1ère Partie : Motivations CLAIRE: Spécifications (telles que définie en 94)  Simple et Lisible    Multi-paradigme     pseudo-code exécutable concepts simples et peu nombreux Objets, Fonctions Règles Versions (exploration d'arbres de recherche) compatibilité C++, Open-source    génère des objets C++ efficacité similaire à C++ sources et codes disponibles Yves Caseau – 2014 – Le langage de programmation CLAIRE 3/30
  • 4. 1ère Partie : Motivations CLAIRE de 1994 à 2014 De 1994 à 2004 : 10 ans de RO E-Lab (Bouygues), XL Solutions, THALES  Applications d’optimisation :  Ordonnancement, Emplois du temps, Routage  Yield Management à TF1 Pub  Exemple des challenges ROADEF  3 fois finalistes 2001, 2003, 2005 Utilisé en support de cours à Jussieu/ENS     « Contraintes et Algorithmes » Introduction de Java comme cible de compilation en 99-2000 De 2004 à 2014 : GTES  Simulation par Jeux et Apprentissage  Optimisation locale, Théorie des Jeux et Monte-Carlo  Plateforme pour « serious games » Yves Caseau – 2014 – Le langage de programmation CLAIRE 4/30
  • 5. Game Theoretical Evolutionary Simulation (GTES) GTES is a tool for looking at a complex model with too many unknowns Game Theoretical Approach Abstrac -tions Problem (fuzzy, complex, …) “tactical” may be derived Parameters which from describe the “strategy” player’s goals (local optimization) Strategy « Players » Model: Set of equations with too many unknown parameters ! Tactical Split parameters Environment eParameter s Parameters which are meaningful (e.g., oil price future) Obscure & unknown sParameters GTES looks for possible equilibriums in uncertain settings Classification Actors Global Optimization Problem Strategies Tactics Parameters Machine learning: Local Optimization Taking the model’s uncertainty into account Search for Nash Equilibrium Context Environment Competition between mobile operators (open market modeling) • Distribution channels ecosystem • Analysis of information flows -how they fit various communication channels randomize What it is good for: Model workbench (find faults in systemic thinking ) • Support for “serious games” • Develop insights about a complex situation • GTES Parametric Analysis What it was used for: • Player’s degrees of freedom Scenario-defined GTES is a proven tool Monte-Carlo Sampling Yves Caseau – 2014 – Le langage de programmation CLAIRE Parameterization of Players’ goals Noncooperative repeated Game What it is not: • Optimization engine • A forecasting framework • State-of-the-art technology (applied to crude models) 5/30
  • 6. 1ère Partie : Motivations Applications récentes de CLAIRE  Réseaux commerciaux de distribution Equilibrer commissionnement et fidélisation sur l’ensemble des canaux 4500 4000 3500 B 3000 2500  CGS: Cellular Game Simulation Simulation de l’arrivée de Free dans un marché à 3 acteurs  - cf. CSDM 2012  S 1500 F 1000 M 500 0 -500 2011 2012 2013 2014 2015 S3G: Systemic Simulation of SmartGrids Comprendre les avantages/inconvénients d’une approche distribuée vs. centralisée  O 2000 Licences LTE choisir la bonne stratégie de portefeuille pour les enchères à un tour des fréquences LTE fin 2012 Yves Caseau – 2014 – Le langage de programmation CLAIRE 6/30
  • 7. 1ère Partie : Motivations CLAIRE en tant que système Domaines Exécutables Stochastic RO GTES Interprète/Debug / Trace / etc. Générateur de code Generate Reader Algorithmes Langage Elégant (CLAIRE) Méta/Réflexif CLAIRE en CLAIRE Optimiseur de code Optimize Core / Language C++ Kernel (LISP en C++) Kernel Yves Caseau – 2014 – Le langage de programmation CLAIRE Alloc / GC / list / sets / funcall / … 7/30
  • 8. Sudoku (I) // finds a cell with a min count (naive heuristic) findPivot(g:Grid) : any -> let minv := 10, cmin := unknown in (for c in g.cells (if (c.value = 0 & c.count < minv) (minv := c.count, cmin := c)), cmin) column Cell Value: Count: Possible: line 2ème Partie : Exemples square // solve a sudoku : branch on possible values using a recursive function // branch(...) does all the work :) solve(g:Grid) : boolean -> when c := findPivot(g) in exists(v in (1 .. 9) | (if c.possible[v] branch((c.value := v, solve(g))) else false)) else true Yves Caseau – 2014 – Le langage de programmation CLAIRE 8/30
  • 9. 2ème Partie : Exemples Sudoku (II) Claim: un programme élégant ET efficace // first propagation rule r1() :: rule( c.value := v => (store(c.line.counts,v,0), // disable counts[v] since v was found ! store(c.column.counts,v,0), store(c.square.counts,v,0), for v2 in (1 .. 9) // for all values v2 that were still OK (if (v != v2 & c.possible[v2]) noLonger(c,v2), for c2 in (c.line.cells but c) forbid(c2,v), // v is used for c.line for c2 in (c.column.cells but c) forbid(c2,v), // … and c.column for c2 in (c.square.cells but c) forbid(c2,v)))) // … and c.square // second rule : if c.count = 1, the only possible value is certain r2() :: rule( c.count := y & y = 1 => c.value := some(y in (1 .. 9) | c.possible[y])) // third rule (uses the CellSetSupport event) : // if a value v is possible only in one cell, it is certain r3() :: rule( updateCount(cs,v) & cs.counts[v] <= 1 => when c := some(c in cs.cells | c.value = 0 & c.possible[v]) in c.value := v else contradiction!()) Yves Caseau – 2014 – Le langage de programmation CLAIRE 9/30
  • 10. 2ème Partie : Exemples Configuration : Exemple à base de règle     compatibility1() :: rule( st.speaker :add sp & not(sp.ohms % st.amplifier.ohms) ) => technical_problem(s = "conflict speakers-amp")) compatibility2() :: rule( st.sources :add x & size(st.sources) > st.amp.inputs => technical_problem(s = "too many sources")) compatibility3() :: rule( (st.out :add x) & x.maxpower < st.amp.power => technical_problem(s = "amp to strong for the speakers")) my_system :: stereo(amp = amp1) (exists(sp in speaker | (try (my_system.out :add sp, true) catch technical_problem (//[0] rejects ~S because ~A // sp, exception!().s, my_system.out :delete sp, false))), Yves Caseau – 2014 – Le langage de programmation CLAIRE 10/30
  • 11. 2ème Partie : Exemples Exemple: Algorithme Hongrois (I) // builds a maximum weight complete matching match() -> (..., // initialization while (HN != N) (if not(grow()) dual_change())) // a step repeats adding nodes until the forest is hungarian (return value is false) // or the matching is improved (return value is true) // explore is the stack of even nodes that have net been explored yet grow() : boolean -> let i := pop(explore) in ( exists( j in {j in GpiSet(i,LastExplored[i] + 1,LastValid[i]) | not(odd?[j])} | (if (sol-[j] != 0) (//[SPEAK] grow: add (~S,~S) to forest// i,j, odd?[j] := true, pushEven+(sol-[j]), tree[j] := i, false) else (augment(i,j), true))) | (if (explore[0] != 0) grow()) ) Yves Caseau – 2014 – Le langage de programmation CLAIRE 11/30
  • 12. 2ème Partie : Exemples Exemple: Algorithme Hongrois (II) // change the dual feasible solution, throw a contradiction if there are no perfect matching dual_change() : integer -> let e := min( list{vclose[i] | i in {j in Dom | not(odd?[j])}}) in (//[SPEAK] DUAL CHANGE: we pick epsilon = ~S // e, if (e = NMAX) contradiction!(), for k in stack(even) (pi+[k] :+ e, LastExplored[k] := LastValid[k]), for j in {j in Dom | odd?[j]} (pi-[j] :- e, vclose[j] := NMAX)), clear(explore), for i in stack(even) let l := Gpi[i], k := size(l), toExplore := false in (while (LastValid[i] < k) (k, toExplore) := reduceStep(i,j,l,k,toexplore), if toExplore push(explore,i))) // look at edges outside the valid set one at a time reduceStep(i:Dom,j:Dom,l:list,k:integer,toExplore:boolean) : tuple(integer,boolean) -> let j := l[k], c := Cpi(i,j) in (if (c = 0) (//[SPEAK] dual_change: Add edge ~S,~S // i,j, Gpiadd(l,i,j,k), toexplore := true) else (vclose[j] :min c, k :- 1)), list(k, toexplore)) Yves Caseau – 2014 – Le langage de programmation CLAIRE 12/30
  • 13. 3ème Partie : Exemples CLAIRE d'un coup d'oeil  Un langage objet fonctionnel polymorphe   Un langage de modélisation (ensembles, relations)   haut niveau d'abstraction, confort d'utilisation Un langage de « patterns » (issus de la modélisation)   compilé et interprété, simple et efficace En particulier, facilite la programmation « par ensembles » Outils pour la recherche arborescente  points de choix et retours arrière Yves Caseau – 2014 – Le langage de programmation CLAIRE 13/30
  • 14. Objets  Une hiérarchie de classes avec héritage simple point <: object(x:integer, y:integer)  Classes paramétrées stack[of] <: thing(of:type, contents:list)  Une sur-hiérarchie de types complexes avec héritage multiple (1 .. 10) U (20 .. 30)  (1 .. 30)  integer stack[of = integer]  stack[of:subtype[integer]]  stack tuple(integer,integer)  list[integer]  list[integer U float] Yves Caseau – 2014 – Le langage de programmation CLAIRE 14/30
  • 15. Polymorphisme  Surcharge complètement libre f(x:{O},y:(1 .. 12)) -> 1 f(x:(0 .. 10), y:integer) -> (x + y) f(x:integer,y:({1,2} U (7 .. 10)) -> (x - y)  Typage et liaisons statiques et dynamiques  génération de code sum(s:set[integer]) : integer => let d := 0 in (for x in s d :+ x, d) sum(1 .. 10) devient let d := 0, m := 10, x := 1 in (while (x <= m) (d :+ x, x :+ 1), d)  Polymorphisme de composition   Exploite les règles du type f(g(x)) = h(x) exemple : det(A * B) = det(A) * det(B) Yves Caseau – 2014 – Le langage de programmation CLAIRE 15/30
  • 16. Relations  Relations binaires … étendues comment[c:class] : string := " " dist[x:(0 .. 100),y:(0 .. 100)] : integer := 0  Modélisation meet[s:set[person]] : date := unknown course[tuple(person,set[person])] : room := unknown  Gestion des relations inverses  Gestion de unknown (absence de valeur)  Règles de propagation sur événement  Nouvelle valeur ou ajout d’une valeur (relation multi-valuée)  R1() :: rule(x.salary := (y -> z) => x.tax :+ (z-y) * 0.1) Yves Caseau – 2014 – Le langage de programmation CLAIRE 16/30
  • 17. Raisonnement Hypothétique  Mondes   backtrack() crée un retour arrière   choice() crée un point de choix commit() entérine les updates depuis le dernier point de choix Recherche arborescente  Fonctionnement en pile, optimisé solve() : boolean -> when q := pick() in exists( c in possible(q) | branch( (column[q] := c, solve()))) else true branch(e) :: (choice(), ( (try e catch contradiction false) | (backtrack(), false) )) Yves Caseau – 2014 – Le langage de programmation CLAIRE 17/30
  • 18. Ensembles Concrets et Abstraits  Ensembles en extension     Types de données     classes for x in person print(x), size(person) sets, lists set(1,2,3,4), list(Peter, Paul, Mary) bibliothèque de structures de données (Bitvectors, Hset, ...) Intervalles 1 .. n, Union, Intersection array U property, list ^ subytpe[char] Types paramétrés for x in person[age:(15 .. 18)] print(x) Expressions ensemblistes  image {age(x) | x in person}, list{i + 1 | i in (1 .. 10)}  sélection {x in person | x.age > 0}, list{i in (1 .. n) | f(i) > 0} Yves Caseau – 2014 – Le langage de programmation CLAIRE 18/30
  • 19. Extensibilité  Classes  L'ensemble des structures de données représentant un ensemble est extensible Hset[of] <: set_class(of:type,content:list,index:integer) add(s:Hset[X], y:X) : void -> let i := hash(s.content,y) in .... set!(s:Hset) -> {x in s.content | known?(x)}  Patterns  un pattern est un appel fonctionnel qui peut être traité de façon paresseuse but(x:abstract_set,y:any) : set -> {z in x | z != y} %(x:any, y:but[tuple(abstract_set,any)]) => (x % y.args[1] & x != y.args(2)) Yves Caseau – 2014 – Le langage de programmation CLAIRE 19/30
  • 20. Itération Explicite  Itération paresseuse en fonction du type d'ensemble for x in person print(x) for y in (1 .. n) f(y)  Génération de code source for c in person.descendent for x in c.instances print(x) let y := 1 in (while (y <= n) (f(y), y :+ 1))  Itération extensible iterate(x:Hset,v:Variable,e:any) => for v in x.content (if known?(v) e) iterate(x:but[tuple(abstract_set,any)],v:Variable,e:any) => for v in x.args[1] (if (v != x.args[2]) e) Yves Caseau – 2014 – Le langage de programmation CLAIRE 20/30
  • 21. Itération Implicite  Chaque expression implique une itération {x in (1 .. 10) | f(x) > 0} {length(c.subclass) | c in (class but class)} let s := {}, x := 1 in (while (x <= 10) (if (f(x) > 0) s :add x, x :+ 1), s)  L'itération d'une expression est aussi paresseuse for x in {x in (1 .. 10) | f(x) > 0} print(x) for y in {c.slots | c in (class relation.ancestors)} print(y) for c in class.instances if not(c % relation.ancestors) print(c.slots) Yves Caseau – 2014 – Le langage de programmation CLAIRE 21/30
  • 22. Itérateurs de Structures  La combinaison d'itérateurs et de patterns permet d'itérer des structures plus complexes Tree <: object(value:any,right:Tree,left:Tree) TreeIterator <: object(tosee:list, status:boolean) iterate(x:by[tuple(Tree,TreeIterator)], v:Variable, e:any) => let v := start(x.args[2], x.args[1]) in while (v != unknown) (e, v := next(x.args[2], x.args[1]) TreeIteratorDFS <: TreeIterator() start(x:TreeIteratorDFS, y:Tree) -> ... next(x:TreeIteratorDFS, y:Tree) -> ... DFS :: TreeIteratorDFS() TreeIteratorBFS <: TreeIterator() ... for x in (myTree by DFS) print(x) {y.weight | y in (myTree by BFS)} Yves Caseau – 2014 – Le langage de programmation CLAIRE 22/30
  • 23. Application: Listes Chaînées  La représentation la plus efficace utilise des slots Task <: object( .... next:Task, prev:Task, ....)  L'utilisation de patterns permet de créer des listes virtuelles chain(x:Task) : list[Task] -> let l := list(x), in (while known?(next,x) (x := x.next, l :add x), l) insert(x:Task,y:list[Task]) => ... iterate(x:chain[tuple(Task)],v:Variable,e:any) => ...  Ces listes peuvent être utilisées comme des listes normales count(chain(t1)), sum({x.weight | x in chain(t0)}), ... Yves Caseau – 2014 – Le langage de programmation CLAIRE 23/30
  • 24. Paramétrisation [iterate(s:Interval, v:Variable, e:any) => for v in users(use(s)) (if SET(v)[index(v)] e) ] [<atleast(x:Task, y:Task) => atleast(x) <= atleast(y) ] [min(s:any, f:property, default:any) : any => let x := default in (for y in s (if f(x,y) x := y), x) ] min(i but t, <atleast, TEnd) let x := TEnd in (for y in users(use(i)) (if SET(i)[index(y)] (if (y != t) (if (atleast(y) <= atleast(x)) x := y))), x) Yves Caseau – 2014 – Le langage de programmation CLAIRE 24/30
  • 25. Génération de Code    CLAIRE génère un code C++ lisible La compilation du noyau objet est directe, sans surcoûts La compilation des expressions ensemblistes est optimisée list{g(x) | x in {i in (1 .. 10) | f(i) > 0}} let l := nil , y := 1, max := 10 in (while (y <= 10) ( if (f(y) > 0) l :add g(y), y :+ 1), l) Yves Caseau – 2014 – Le langage de programmation CLAIRE 25/30
  • 26. 4ème Partie : Utilité de CLAIRE en 2014 CLAIRE 20 ans après : que reste-t-il ? 1. Un pseudo-code exécutable … too late  2. Noyau « Lisp en C++ » … bof  3. Interprète réflexif … réutilisable 4. Compilateur extensible … CLAIRE to X ? 5. Pas mal de code … (algorithmes optimisation) Yves Caseau – 2014 – Le langage de programmation CLAIRE Mais un contexte « favorable » : 1. Retour en force de l’Intelligence Artificielle à toutes les échelles (du cloud au Javascript) 2. « Comportement intelligent » donc « problem solving » & « optimisation combinatoire » 3. Montée des « jeux » comme paradigme d’interaction 26/30
  • 27. 4ème Partie : Utilité de CLAIRE en 2014 Comment jouer avec CLAIRE ?  Site : http://claire3.free.fr/  Documentation (95 pages)  GitHub: http://github.com/ycaseau/CLAIRE3.4  Top level: CLAIRE est en premier lieu un langage interprété, héritier de LISP   C++ compiler    Version Windows maintenue / à jour Version G++ un peu poussiéreuse … Page Facebook CLAIRE  Yves Caseau – 2014 – Le langage de programmation CLAIRE 27/30
  • 28. 4ème Partie : Utilité de CLAIRE en 2014 CLAIRE comme plateforme d’expérimentation  CLAIRE est entièrement réflexif     Première utilisation : plate-forme de prototypage pour un nouveau langage    Tout est objet (à la SMALLTALK) Toute expression du langage est représentée par un objet (à la LISP) L’environnement :  toplevel = eval(read()), debug, trace, profile, inspect, … Extensibilité & capacité à tout redéfinir Par exemple, ajouter du parallélisme …. Deuxième utilisation : massacre à la tronçonneuse     Interprète langage fonctionnel Système de types (treillis complet avec union/intersection) Mécanismes d’exploration arborescente (choice/backtrack) Yves Caseau – 2014 – Le langage de programmation CLAIRE 28/30
  • 29. 4ème Partie : Utilité de CLAIRE en 2014 CLAIRE comme générateur de DSL  La syntaxe de CLAIRE est facilement extensible    Beaucoup de savoir-faire dans l’optimiseur de code      Inférence de type par interprétation abstraite Optimisation de nombreuses propriétés (allocation mémoire) Gestion de l’abstraction et du polymorphisme (cf. 3e partie) Optimisation des « patterns » Générateur de code source en deux étapes    Comme en LISP, le « reader » est paramétrable Entièrement en CLAIRE (il a existé une version lex/yacc) Un étage générique, indépendant du code source Un « producer » séparé pour C++ ou Java Générateur de Java disponible sur demande  Prochaine étape : « producer » pour JavaScript Yves Caseau – 2014 – Le langage de programmation CLAIRE 29/30
  • 30. Conclusion  CLAIRE comme plateforme de mise au point de “modules intelligents” pour les UI de demain : Reader Besoin de “comportement intelligent” Algorithmes Programme CLAIRE Interprete Mise au point  Generate A inclure dans une page ou un projet global Core / Language compilateur Code JavaScript Apprentissage Mon principal objectif pour les 5 ans à venir     Mettre GTES à disposition en tant que “framework for serious games” A venir : S3G, CGS, RTMS, GWDG, SIFOA Cf. mes deux blogs: BDIS & Architecture Organisationnelle Livre en préparation pour 2017  Yves Caseau – 2014 – Le langage de programmation CLAIRE 30/30