implementing an interval computation library for ocaml · pdf fileimplementing an interval...

23
Implementing an interval computation library for OCaml on x86/AMD64 architectures J-M. Alliot J-B. Gotteland C. Vanaret N. Durand D. Gianazza OCaml Users and Developers Workshop 2012 International Conference in Functional Programming September 14, 2012 Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 1 / 23

Upload: vuongcong

Post on 18-Mar-2018

241 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Implementing an interval computation libraryfor OCaml on x86/AMD64 architectures

J-M. Alliot J-B. Gotteland C. Vanaret N. Durand D. Gianazza

OCaml Users and Developers Workshop 2012International Conference in Functional Programming

September 14, 2012

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 1 / 23

Page 2: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

1 IntroductionObjectivesInterval arithmeticWhy a new interval library?

2 A functional implementation for OCamlUnexpected problemsModulesImplementation principles

3 Performance comparison

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 2 / 23

Page 3: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Introduction

1 IntroductionObjectivesInterval arithmeticWhy a new interval library?

2 A functional implementation for OCamlUnexpected problemsModulesImplementation principles

3 Performance comparison

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 3 / 23

Page 4: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Introduction Objectives

Objectives

Bound global solutions of difficult continuous optimization problems

minx∈D

f(x)

s.t. gi(x) ≤ 0, i ∈ {1, . . . , p}hj(x) = 0, j ∈ {1, . . . , q}

Hybridization of optimization methods [ADGG12]

I Evolutionary Algorithms (EA)

I Interval Branch & Bound algorithm (BB)computation of lower/upper bound of f over a subspace of D

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 4 / 23

Page 5: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Introduction Interval arithmetic

Interval arithmetic

Numerical analysis method to bound round-off errors [Moo66]

Problem (P)I f(x, y) = 333.75y6 + x2(11x2y2 − y6 − 121y4 − 2) + 5.5y8 + x/(2y)

I f(77617, 33096) = −0.827396 (6 digits)

I OCaml 3.12 compiler: −1.180592.1021

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 5 / 23

Page 6: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Introduction Interval arithmetic

Interval arithmetic

Interval arithmetic

I Extends to intervals {+, −, ∗, /}, exp, log, etc.

I An interval extension F of f yields a rigorous enclosure of f(X)

I Computation of lower/upper bound with outward rounding

[a, b]⊕ [c, d] = [a+low c, b+high d]

I a+low c must be a lower bound of a+ c

I b+high d must be an upper bound of b+ d

Problem (P)Interval arithmetic yields: [−5.902958.1021, 5.902958.1021]

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 6 / 23

Page 7: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Introduction Interval arithmetic

Interval arithmetic

F interval extension

I f(x, y) = x2 + exp(y), x ∈ [−3, 2], y ∈ [0, 1]:

F ([−3, 2], [0, 1]) = [−3, 2]2 + exp([0, 1])= [0, 9] + [1, e] = [1, e+ 9]

I f(x) = sin(x), x ∈ [1, 2]: F ([1, 2]) = [sin(1), 1]

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 7 / 23

Page 8: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Introduction Interval arithmetic

Interval Branch and Bound Algorithms

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 8 / 23

Page 9: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Introduction Why a new interval library?

Why a new interval library?

Existing interval libraries

I C++ libraries: PROFIL/BIAS, Interval in Boost C++, Gaol

I Sun interval library: Fortran 95 or C++ [Mic01]

I MPFI: C or C++ [RR02]

I ...

Motivations for a new library

I Preference for OCaml functional programming

I Need for speed and efficiency

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 9 / 23

Page 10: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

A functional implementation for OCaml

1 IntroductionObjectivesInterval arithmeticWhy a new interval library?

2 A functional implementation for OCamlUnexpected problemsModulesImplementation principles

3 Performance comparison

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 10 / 23

Page 11: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

A functional implementation for OCaml Unexpected problems

Unexpected problems

C (and OCaml) math functions

I do not return the same results on 32- and 64-bit architectures

I may yield wrong results in low and high rounding modes

Necessity to write low-level functions in assembly language(restricted to x86/Amd64 architectures)

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 11 / 23

Page 12: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

A functional implementation for OCaml Modules

A functional implementation for OCaml

Modules

I Chcw: elementary float functions

I in all rounding modes (nearest, low, high)I written in C and assembly language

I Fpu: OCaml binding to Chcw

I Interval: OCaml interval arithmetic

I Fpu rename: redefinition of OCaml float functions

I Except float operators: (+.) (-.) (*.) (/.)

I Fpu rename all: redefinition of all OCaml float functionsI Including float operators

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 12 / 23

Page 13: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

A functional implementation for OCaml Modules

Module Fpu

val ffloat: int -> floatval ffloat high: int -> floatval ffloat low: int -> float(** Float functions. The float function is exact on 32-bit machinesbut not on 64-bit machines with ints larger than 53 bits *)

val fadd: float -> float -> floatval fadd low: float -> float -> floatval fadd high: float -> float -> float(** Floating-point addition in nearest, low and high modes *)

val fsub: float -> float -> floatval fsub low: float -> float -> floatval fsub high: float -> float -> float(** Floating-point substraction in nearest, low and high modes *)

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 13 / 23

Page 14: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

A functional implementation for OCaml Modules

Module Fpu rename all

val (+.): float -> float -> floatval (-.): float -> float -> floatval (/.): float -> float -> floatval ( *.): float -> float -> float

val mod float: float -> float -> floatval sqrt: float -> floatval log: float -> floatval exp: float -> float

val ( ** ): float -> float -> float

I Opening the Fpu rename all module ensures thatthese functions return the same results on all architectures

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 14 / 23

Page 15: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

A functional implementation for OCaml Modules

Interface of module Interval

type interval = {low: float; (** lower bound *)high: float (** upper bound *)

}(...)

val pi I: interval(...)

val float i: int -> interval(...)

val (+$.): interval -> float -> intervalval (+$): interval -> interval -> interval

(...)

val sqrt I: interval -> intervalval pow I i: interval -> int -> interval

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 15 / 23

Page 16: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

A functional implementation for OCaml Implementation principles

Implementation principles

Rules

I No “empty” interval (raise an exception instead)

I Interval bounds may be infinite

I Interval bounds are not supposed to be nanLower bound is not supposed to be infinityUpper bound is not supposed to be neg infinity

I nan, infinity and neg infinity operands are not handled

Examples

I 1/[0, 0] fails

I 1/[0, 1] returns [1,+∞]

I 1/[−1, 1] returns [−∞,+∞]

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 16 / 23

Page 17: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

A functional implementation for OCaml Implementation principles

Module Interval

(...)

let inv I {low = a; high = b} =let sa = compare a 0. and sb = compare b 0. inif sa = 0 then

if sb = 0 then failwith ”inv I”else {low = fdiv low 1. b; high = infinity}

else if 0 < sa || sb < 0 then {low = fdiv low 1. b; high = fdiv high 1. a}else if sb = 0 then {low = neg infinity; high = fdiv high 1. a}else {low = neg infinity; high = infinity}(...)

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 17 / 23

Page 18: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Performance comparison

1 IntroductionObjectivesInterval arithmeticWhy a new interval library?

2 A functional implementation for OCamlUnexpected problemsModulesImplementation principles

3 Performance comparison

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 18 / 23

Page 19: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Performance comparison

Performance comparison

Comparison with an OCaml binding to MPFI(runtime for 106 operations)

+ - x /0

0,05

0,1

0,15

0,2

0,25

0,3

MPFINative

Interval operation

Run

time

(se

cond

s)

log exp cos sin0

0,5

1

1,5

2

2,5

3

3,5

4

4,5

5

MPFINative

Interval operation

Run

time

(se

cond

s)

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 19 / 23

Page 20: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

Performance comparison

Conclusion

Native implementation

I low-level redefinition of elementary functions

I reliable, fast despite the functional paradigm

I available under GNU Lesser General Public License

Successfully used in our hybrid optimization algorithm

I computation of optima of Michalewicz function (improvement fordeterministic methods)

I applications to aeronautical problems (air traffic conflict resolution)

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 20 / 23

Page 21: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

References

References I

J.-M. Alliot, N. Durand, D. Gianazza, and J.-B. Gotteland, Finding andproving the optimum: Cooperative stochastic and deterministic search, 20thEuropean Conference on Artificial Intelligence (ECAI 2012), August 27-31,2012, Montpellier, France, 2012.

SUN Microsystems, C++ interval arithmetic programming manual, SUN,Palo Alto, California, 2001.

R. E. Moore, Interval analysis, Prentice-Hall, 1966.

Nathalie Revol and Fabrice Rouillier, Motivations for an arbitrary precisioninterval arithmetic and the MPFI library, Rapport de recherche, INRIA, 2002.

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 21 / 23

Page 22: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

References

Questions

For implementation details, please contact

Jean-Marc [email protected]

Jean-Baptiste [email protected]

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 22 / 23

Page 23: Implementing an interval computation library for OCaml · PDF fileImplementing an interval computation library ... Implementing an interval library for OCaml OUD ... Implementing an

References

Implementing an interval computation libraryfor OCaml on x86/AMD64 architectures

J-M. Alliot J-B. Gotteland C. Vanaret N. Durand D. Gianazza

OCaml Users and Developers Workshop 2012International Conference in Functional Programming

September 14, 2012

Charlie Vanaret (ENAC-IRIT) Implementing an interval library for OCaml OUD 2012 23 / 23