Chapitre 5: Modélisation simple Where we examine various modelling abilities of CLP languages
Modélisation simple Modélisation Choix de modélisation Itération Optimisation
Modélisation Choisir les variables qui seront utilisées représente les paramètres du problème (cela peut être raisonnable ou difficile) Modéliser les relations idéales entre ces variables utilisant les contraintes primitives disponibles dans le domaine
Modélisation - Exemple Un voyageur veut traverser une rivière infestée de requins aussi vite que possible. Réfléchissant à la route la plus rapide est nager en ligne droite et être entrainé en aval largeur de la rivière: W vitesse de la rivière: S ensemble de positions: P vitesse de nage: R R P S W
Modélisation - Exemple Raison: dans le temps, le nageur nage la largeur de la rivière, il flotte en aval la distance donnée par la rivière. Modéliser: river(W, S, R, P) :- T = W/R, P = S*T. Supposons qu'il nage à 1.5m/s, la vitesse de la rivière est de 1 m/s et sa largeur est de 24m. river(24, 1, 1.5, P). L'unique réponse: P = 16
Modélisation – Exemple (suite) Si sa vitesse de nage est entre 1 et 1.3 m/s et qu'il n'a que 20m de position, que peut-il faire? 1 <= R, R <= 1.3, P <= 20, river(24,1,R,P). Modélisation basée sur la flexibilité des contraintes!
Choix de modélisation De multiples règles permettent la modélisation des relations qu'impliquent les choix E.g. Les tables de données utilisant différents faits. father(jim,edward). father(jim,maggy). father(edward,peter). father(edward,helen). father(edward,kitty). father(bill,fi). mother(maggy,fi). mother(fi,lillian).
Choix - Exemples La requête father(edward,X) trouve les fils de Edward. Réponse: 𝑋=𝑝𝑒𝑡𝑒𝑟, 𝑋=ℎ𝑒𝑙𝑒𝑛, 𝑋=𝑘𝑖𝑡𝑡𝑦 La requête mother(X,fi) trouve la mère de Fi. Réponse: 𝑋=𝑚𝑎𝑔𝑔𝑦
Choix - Exemples On peut définir d'autres prédicats parent(X,Y) :- father(X,Y). parent(X,Y) :- mother(X,Y). sibling(X,Y) :- parent(Z,X), parent(Z,Y), X != Y. cousin(X,Y) :- parent(Z,X), sibling(Z,T), parent(T,Y). La requête cousin(peter, X) a l'unique réponse X = fi
Choix plus difficiles A call option gives the holder the right to buy 100 shares at a fixed price E. A put option gives the holder the right to sell 100 shares at a fixed price E pay off of an option is determined by cost C and current share price S e.g. call cost $200 exercise $300 stock price $2, don’t exercise payoff = -$200 stock price $7, exercise payoff = $200
Options Trading call C=200, E = 300 put C=100, E = 300 Butterfly strike: buy call at 500 and 100 sell 2 puts at 300
Fonctions de modélisation 𝑐𝑎𝑙𝑙 𝑝𝑎𝑦𝑜𝑓𝑓 (𝑆,𝐶,𝐸 = −𝐶 si0≤𝑆≤ 𝐸 100 100𝑆−𝐸−𝐶 si𝑆≥ 𝐸 100 Modéliser une fonction avec n arguments comme un prédicat avec n+1 arguments. Les tests sont des contraintes et le résultat est une équation. buy_call_payoff(S,C,E,P) :- 0 <= S, S <= E/100, P = -C. S >= E/100, P = 100*S - E - C.
Options de modélisation Ajouter un argument de plus: B=1 (acheter), B = -1 (vendre) call_option(B,S,C,E,P) :- 0 <= S, S <= E/100, P = -C * B. S >= E/100, P = (100*S - E - C)*B. La requête (the original call option question) call_option(1, 7, 200, 300, P) a la réponse P = 200
Utilisation du modèle Définis la relation dans le graphe précédent butterfly(S, P1 + 2*P2 + P3) :- Buy = 1, Sell = -1, call_option(Buy, S, 100, 500, P1), call_option(Sell, S, 200, 300, P2), call_option(Buy, S, 400, 100, P3). Définis la relation dans le graphe précédent P >= 0, butterfly(S,P). a deux réponses 𝑃=100𝑆−200Ù2≤𝑆Ù𝑆≤3 𝑃=−100𝑆+400Ù3≤𝑆Ù𝑆≤4
Modélisation d'itération Le modèle naturel peut être une itération de paramètres Les langages CLP n'ont pas de constructions itératives directes comme (for, while) mais ont la récursion.
Itération - Exemple Hypothèque: principal P, taux d'intérêt I, paiement R et balance B sur les périodes T Intérêt simple: 𝐵=𝑃+𝑃×𝐼−𝑅 Relation pour 3 périodes: 𝑃 1 =𝑃+𝑃×𝐼−𝑅∧ 𝑃 2 = 𝑃 1 + 𝑃 1 ×𝐼−𝑅∧ 𝑃 3 = 𝑃 2 + 𝑃 2 ×𝐼−𝑅∧ 𝐵= 𝑃 3 Le nombre de contraintes dépend de la variable T
Raisonner récursivement 0 périodes: B = P Sinon nouveau princ. P + P*I - R et nouveau temps T-1 mortgage(P,T,I,R,B) :- T = 0, B = P. (M1) mortgage(P,T,I,R,B) :- T >= 1, NP = P + P * I - R, NT = T - 1, (M2) mortgage(NP,NT,I,R,B).
Dérivation - Exemple 𝑚𝑜𝑟𝑡𝑔𝑎𝑔𝑒(𝑃,3,𝐼,𝑅,𝐵)∣𝑡𝑟𝑢𝑒 ↓𝑀2 𝑚𝑜𝑟𝑡𝑔𝑎𝑔𝑒( 𝑃 1 ,2,𝐼,𝑅,𝐵)∣ 𝑃 1 =𝑃+𝑃×𝐼−𝑅 ↓𝑀2 𝑚𝑜𝑟𝑡𝑔𝑎𝑔𝑒( 𝑃 2 ,1,𝐼,𝑅,𝐵)∣ 𝑃 1 =𝑃+𝑃×𝐼−𝑅∧ 𝑃 2 = 𝑃 1 + 𝑃 1 ×𝐼−𝑅 ↓𝑀2 𝑚𝑜𝑟𝑡𝑔𝑎𝑔𝑒( 𝑃 3 ,0,𝐼,𝑅,𝐵)∣ 𝑃 1 =𝑃+𝑃×𝐼−𝑅∧ 𝑃 2 = 𝑃 1 + 𝑃 1 ×𝐼−𝑅∧ 𝑃 3 = 𝑃 2 + 𝑃 2 ×𝐼−𝑅〉 ↓𝑀1 []∣ 𝑃 1 =𝑃+𝑃×𝐼−𝑅∧ 𝑃 2 = 𝑃 1 + 𝑃 1 ×𝐼−𝑅∧ 𝑃 3 = 𝑃 2 + 𝑃 2 ×𝐼−𝑅∧𝐵= 𝑃 3 〉
Traduire l'itération Les programmeurs CLP débutants devraient avoir des difficultés à définir les relations récursives. Donner une définition procédurale Traduire l'itération en récursion Traduire les tests et les affectations en contraintes
Traduction - Exemple Pseudo code C pour le problème d'hypothèque float mg1(float P, int I, float I, float R) { while (T >= 1) { P = P + P * I - R; T = T - 1; } return P; Chaque variable ne prend qu'une seule valeur mg(P, T, I, R, B) :- T >= 1, NP = P + P * I - R, NT = T - 1, mg(NP, NT, I, R, B). mg(P, T, I, R, B) :- T = 0, (note extra) B = P. Remplacer les tests et les affectations par des contraintes Supprimer la boucle en utilisant la récursion Remplacer la fonction avec une procédure répondant par référence
Pourquoi des contraintes et pas du C? Les deux programmes peuvent répondre à la requête mortgage(500, 3, 10/100, 150, B). Mais le programme CLP peut résoudre mortgage(P, 3, 10/100, 150, 0). Et beaucoup d'autres requêtes mortgage(P, 3, 10/100, R, B). 𝑃=373.028 𝑃=0.38553𝐵+6.14457𝑅
Optimisation Certains programmes nécessitent une « meilleure » solution Minimisation litérale: minimize(G,E) Les réponses sont les réponses de la requête G qui minimise l'expression E
Optimisation - Exemples p(X,Y) := X = 1. p(X,Y) :- Y = 1. X >= 0, Y >= 0, minimize(p(X,Y), X+Y) Réponses: X = 1 /\ Y = 0 and X = 0 /\ Y = 1 X >= 0, X >= Y, minimize(true, X-Y) Réponses: X >= 0 /\ X = Y minimize(butterfly(S,P), -P) Réponse: S = 3 /\ P = 100
Évaluation de l'optimisation Une évaluation v est une solution à un état si c'est une solution à des réponses de l'état étape de dérivation de la minimisation: <G1 | C1> to <G2 | C2> where G1 = L1,L2,...,Lm L1 est minimize(G,E) Il existe une solution v de <G | C1> avec v(E) = m et pour toute autre solution w, m <= w(E) G2 is G,L2,...,Lm et C2 est C1 /\ E = m sinon G2 est [] et C2 est false
Optimisation - Exemple X >= 0, minimize(X >= Y, X-Y) 𝑋≥0,minimize(𝑋≥𝑌,𝑋−𝑌)∣𝑡𝑟𝑢𝑒 ↓ minimize(𝑋≥𝑌,𝑋−𝑌)∣𝑋≥0 ↓ 𝑋≥𝑌∣𝑋≥0∧𝑋−𝑌=0 ↓ ]∣𝑋≥0∧𝑋−𝑌=0∧𝑋≥𝑌 𝑋≥𝑌∣𝑋≥0 ↓ ]∣𝑋≥0∧𝑋≥𝑌 La valeur minimum de X- Y est 0 e.g. Simplifié 𝑋≥0∧𝑋=𝑌 𝑋→3,𝑌→3
Optimisation L'optimisation n'est pas obligatoirement sur la requête straddle(S,C1+C2,E,P1+P2) :- Buy = 1, call_option(Buy, S, C1, E, P1), put_option(Buy, S, Cs, E, P2). best_straddle(C,E,P) :- minimize(straddle(S,C,E,P),-P).
Modélisation simple - Résumé Convertion de problèmes de contraintes en contraintes du domaine Le choix est modélisé avec différentes règles Les fonctions sont modélisées comme des prédicats avec un argument de plus. L'itération est modélisée en utilisant la récursion L'optimisation nécéssite un nouveau type de literal