SLIDE 1 A slow afternoon chez PARKAS and a very fast fly (our grand challenge)
Timothy Bourke1,2 Marc Pouzet2,1
- 1. INRIA Paris-Rocquencourt
- 2. École normale supérieure (DI)
http://www.di.ens.fr/ParkasTeam.html
Synchron 2013, November 19, Daghstuhl, Germany
SLIDE 2 A very fast fly
SLIDE 3 A very fast fly
Barcelona 100km Girona
SLIDE 4 A very fast fly
Barcelona 100km Girona car1 = 50km/hr
SLIDE 5 A very fast fly
Barcelona 100km Girona car1 = 50km/hr car2 = -50km/hr
SLIDE 6 A very fast fly
Barcelona 100km Girona car1 = 50km/hr car2 = -50km/hr fly = 80km/hr changes direction whenever it reaches a car
SLIDE 7 A very fast fly
The usual questions
- 1. How far has the fly traveled when the two cars meet?
- 2. How many zig-zags does the fly do during this period?
SLIDE 8 A very fast fly
The usual questions
- 1. How far has the fly traveled when the two cars meet?
- 2. How many zig-zags does the fly do during this period?
Extra credit (Thanks to Rafel Cases and Jordi Cortadella)
- 1. Where will the fly be when the two cars reach their destinations?
SLIDE 9 Simulink model
travelled last(fly velocity) fly position 1 s fly >= carB >= 0 fly >= carA >= 0 fly <= carB >= 0 fly <= carA >= 0 distance 100 direction changes 5 carA <= carB >= 0 Zerocrossings −u −u simout Hit Crossing: fly − carB Hit Crossing: fly − carA 80 |u| carA carB
SLIDE 10 Simulink model
travelled last(fly velocity) fly position 1 s fly >= carB >= 0 fly >= carA >= 0 fly <= carB >= 0 fly <= carA >= 0 distance 100 direction changes 5 carA <= carB >= 0 Zerocrossings −u −u simout Hit Crossing: fly − carB Hit Crossing: fly − carA 80 |u| carA carB
SLIDE 11 Simulink model
travelled last(fly velocity) fly position 1 s fly >= carB >= 0 fly >= carA >= 0 fly <= carB >= 0 fly <= carA >= 0 distance 100 direction changes 5 carA <= carB >= 0 Zerocrossings −u −u simout Hit Crossing: fly − carB Hit Crossing: fly − carA 80 |u| carA carB
zigzags?
SLIDE 12 Simulink Results
20 40 60 80 100 0.5 1 1.5 2 distance (kilometres) time (hours)
Barcelona Girona
(Simulink R2012a: ode45, relative tolerance = 1e-3)
SLIDE 13 Simulink model
travelled last(fly velocity) fly position 1 s fly >= carB >= 0 fly >= carA >= 0 fly <= carB >= 0 fly <= carA >= 0 distance 100 direction changes 5 carA <= carB >= 0 Zerocrossings −u −u simout Hit Crossing: fly − carB Hit Crossing: fly − carA 80 |u| carA carB
zigzags
SLIDE 14 Simulink model (with more zero-crossings)
travelled last(fly velocity) fly position 1 s fly >= carB >= 0 fly >= carA >= 0 fly <= carB >= 0 fly <= carA >= 0 distance 100 direction changes 42 carA <= carB >= 0 Zerocrossings −u −u simout Hit Crossing: fly − carB Hit Crossing: fly − carA 80 |u| carA carB
zigzags?
SLIDE 15 Simulink Results (with more zero-crossings)
20 40 60 80 100 0.5 1 1.5 2 distance (kilometres) time (hours)
Barcelona Girona
(Simulink R2012a: ode45, relative tolerance = 1e-3)
SLIDE 16 Simulink Results (with more zero-crossings)
20 40 60 80 100 0.5 1 1.5 2 distance (kilometres) time (hours)
Barcelona Girona
distance (kilometres) time (hours)
[0.9999999999999:1.0000000000001] (Simulink R2012a: ode45, relative tolerance = 1e-3)
SLIDE 17 Simulink model (with more zero-crossings)
travelled last(fly velocity) fly position 1 s fly >= carB >= 0 fly >= carA >= 0 fly <= carB >= 0 fly <= carA >= 0 distance 100 direction changes 42 carA <= carB >= 0 Zerocrossings −u −u simout Hit Crossing: fly − carB Hit Crossing: fly − carA 80 |u| carA carB
zigzags
SLIDE 18
42!
SLIDE 19 Zélus model
let barcelona = 0.0 let girona = 100.0 let fly_velocity = 80.0 let car_velocity = 50.0 let hybrid model () = (car1, car2, fly, zigzag, zeros) where rec der car1 = car_velocity init barcelona and der car2 = −. car_velocity init girona and der fly = dir ∗. fly_velocity init barcelona and automaton | Above → do car_above = car2 and car_below = car1 until up(car1 −. car2) then Below | Below → do car_above = car1 and car_below = car2 done end and present up (car_below −. fly) | up(fly −. car_above) → do dir = −. (last dir) and zeros = last zeros + 1 and emit zigzag = () done and init dir = 1.0 and init zeros = 0
SLIDE 20 Zélus model
let barcelona = 0.0 let girona = 100.0 let fly_velocity = 80.0 let car_velocity = 50.0 let hybrid model () = (car1, car2, fly, zigzag, zeros) where rec der car1 = car_velocity init barcelona and der car2 = −. car_velocity init girona and der fly = dir ∗. fly_velocity init barcelona and automaton | Above → do car_above = car2 and car_below = car1 until up(car1 −. car2) then Below | Below → do car_above = car1 and car_below = car2 done end and present up (car_below −. fly) | up(fly −. car_above) → do dir = −. (last dir) and zeros = last zeros + 1 and emit zigzag = () done and init dir = 1.0 and init zeros = 0
SLIDE 21 Zélus model
let barcelona = 0.0 let girona = 100.0 let fly_velocity = 80.0 let car_velocity = 50.0 let hybrid model () = (car1, car2, fly, zigzag, zeros) where rec der car1 = car_velocity init barcelona and der car2 = −. car_velocity init girona and der fly = dir ∗. fly_velocity init barcelona and automaton | Above → do car_above = car2 and car_below = car1 until up(car1 −. car2) then Below | Below → do car_above = car1 and car_below = car2 done end and present up (car_below −. fly) | up(fly −. car_above) → do dir = −. (last dir) and zeros = last zeros + 1 and emit zigzag = () done and init dir = 1.0 and init zeros = 0
zigzags=48
SLIDE 22 Zélus Results
20 40 60 80 100 0.5 1 1.5 2 distance (kilometres) time (hours)
Barcelona Girona
(Sundials CVODE with our custom Illinois implementation)
SLIDE 23 Zélus Results
20 40 60 80 100 0.5 1 1.5 2 distance (kilometres) time (hours)
Barcelona Girona
distance (kilometres) time (hours)
[0.999999999999995:1.000000000000005] (Sundials CVODE with our custom Illinois implementation)
SLIDE 24 Concluding remarks
◮ All very well, but the problem is mathematically not well posed. ◮ The system is not well defined at the instant the cars pass each other. ◮ Question: should we / can we:
◮ statically detect and reject such cases? ◮ stop with an error at runtime?
◮ (Thanks to Rafel Cases, Jordi Cortadella, and Gérard Berry.)