help-glpk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-glpk] [annonce] ffi-glpk extension demonstrator for jruby


From: Maurice Diamantini
Subject: Re: [Help-glpk] [annonce] ffi-glpk extension demonstrator for jruby
Date: Wed, 28 Jan 2009 15:13:45 +0100


Le 27 janv. 09 à 22:24, Yaron Kretchmer a écrit :

Maurice-
Will that work with  Ruby MRI as well?
Thanks
Yaron
I should (or will)!

But ffi is an edge extension and some low level API still evolve.
I try it with JRuby because JRuby include it and it works out of the
box (so if you have JRuby installed it should work)

MRI Ruby still require a gem installation, and is sensible to the Ruby
version or so...
I really think MRI Ruby should include FFI natively!


For now I'v only tried the following (on MRI Ruby) :

ruby -version
  => ruby 1.8.7 (2008-08-11 patchlevel 72) [powerpc-darwin9]
    (from macport version on osx)

gem install ffi --remote

type ruby
   =>ruby is hashed (/opt/local/bin/ruby) (from macport)


ruby ffi-glpk.rb

  => ffi-glpk.rb:118:in `to_array_of_double':
     undefined method `put_array_of_double'
     for #<MemoryPointer address=0x492690 size=80> (NoMethodError)
        from ./ffi-glpk.rb:103:in `glp_load_matrix2'
        from mini_glpk.rb:61:in `glpk_test'
        from mini_glpk.rb:74

So there is a problem with MRI (in my environment).
But I'm sure it will be solve automatically whith some
future release of MRI.
(and some FFI developer are probably listening the jruby list ;-)


PS.
  Also Yaron, be aware that FFI is not yet able to do
  dynamic binding for C++ libraries, only C ones
PS.2
  Why not fortran?

On Tue, Jan 27, 2009 at 12:16 PM, Diamantini Maurice <
address@hidden> wrote:

Bonjour à tous,

I'm trying to test a new extension provide with jruby which allows
to write a binding for a C library directly in ruby without
writing a C line of code.
This (ffi) extension is now part of the standard Jruby version.
That allows to use mixing of java library (like choco constraint
solver), C extensions (like glpk) directly in (j)ruby code.

As Pierre asked (on the Glpk list) for a java or other binding
for Glpk, I write this "pseudo-annonce" although ffi-glpk is just
a demonstrator for now.
But it allows to write the glpk documentation minimal example
in **full (j)ruby** code!

The demonstrator is available at :
http://www.ensta.fr/~diam/ruby/online/pub/<http://www.ensta.fr/%7Ediam/ruby/online/pub/ >

The code provided is the mimimum for writing the glpk doc mini
example in ruby.

Hope this help,
-- Maurice Diamantini

Here is the README :
==============================================================
## what is it

This directory contains a test exemple to validate Glpk interface to
(J)Ruby
thanks to the new ffi Ruby package.

- Glpk is the Gnu Library tookit for Linear Programming written in C
    by Andrew Makhorin,
       http://www.gnu.org/software/glpk/

  - Ruby is a wonderfull true objet oriented programming scripting
language
    written in C

- JRuby is a Ruby (100% compatible) version written in Java and fully supported by Sun. It is also fully integrated with the java world and
is
    as fast as the new native Ruby-1.9 version
      http://jruby.org/

- FFI is a new package which allow to write 100% Ruby interface to C
    library!! FFI is currently fully integrated with JRuby language.
    and can be installed for Ruby native language.
      http://kenai.com/projects/ruby-ffi/pages/Home

## The provided exemple allow to solve the following problem :

  max z = 10x1 + 6x2 + 4x3
  s.c.
     x1 +  x2 +  x3 <= 100
   10x1 + 4x2 + 5x3 <= 600
    2x1 + 2x2 + 6x3 <= 300

    x1 >= 0
    x2 >= 0
    x3 >= 0


This directory contains :
- a file "miniglpk.c" which is exactly the glpk exemple provide with the
glpk
documentation.
You should be able to test this programme to make sure glpk is installed
on
your system, but a compilator is not required for using glpk from (J)ruby

- a file "ffi-glpk.rb" wich contains the minimum for writing the low level
API used in the tutorial example,

- the file "mini_glpk.rb" which is the the ruby version of the tutorial.


## Execution of the test the C version

For compiling and running the C exemple, you should set two environment
variables :

- GLPK_LIB should be set the path were the library file libglpk.so or
libglpk.dylib is located,
For sample
  export GLPK_LIB=/usr/local/lib

- GLPK_INCLUDE should be set the path were the library file glpk.h
is located
For sample
  export GLPK_LIB=/usr/local/lib

Then compile by:
  gcc -I$GLPK_INCLUDE -L$GLPK_LIB -l glpk -o mini_glpk mini_glpk.c
and run by:
  ./mini_glpk
The following result should appear:

  *     0: obj =   0.000000000e+00  infeas =  0.000e+00 (0)
  *     2: obj =   7.333333333e+02  infeas =  0.000e+00 (0)
  OPTIMAL SOLUTION FOUND
  z = 733.333; x1 = 33.3333; x2 = 66.6667; x3 = 0


## Execution the jruby test

You should have the last jruby version (jruby-1.6) which contains
FFI out of the box, or ruby and install ffi with
 gem install ffi (not tested)

Also, the glpk lib should be discover aumoticaly on osx leopard or recent
linux distrib, but for now, you can specify the path path (i.e. bu
using the  previous GLPK_LIB variable.
See the start "ffi-glpk.rb" if you have problems

 then run
 ./mini_glpk.rb

It's all !

## Remark about the "ffi-glpk.rb" interface file

This kind of file could become the low level interface to the glpk
library.

It seems that the FFI community converge to the idea that there should be one standard **low** level interface to a C library. It is essentialy
a sort of mapping of the include file and should be easy to maintain
(ideally automically generated from the include file).

Then it could exist several higher level API to make this interface more
Object Oriented ou more Ruby frendly.

## ./






reply via email to

[Prev in Thread] Current Thread [Next in Thread]