forum.alglib.net
http://forum.alglib.net/

Does ALGLib work with Delphi 10.3 for Linux?
http://forum.alglib.net/viewtopic.php?f=2&t=4313
Page 1 of 1

Author:  beowulf68 [ Mon Jan 20, 2020 8:14 am ]
Post subject:  Does ALGLib work with Delphi 10.3 for Linux?

I am able to compile when I change the following in the XALGLIB.pas wrapoer


Code:
{$IFDEF FPC}
uses {$IFDEF MSWINDOWS}Windows{$ELSE}Dynlibs{$ENDIF}, Math, StrUtils;
{$ELSE}
//uses {$IFDEF MSWINDOWS}Windows{$ELSE}SysUtils{$ENDIF}, Math, StrUtils, AnsiStrings;
uses Math, StrUtils, AnsiStrings;
{$ENDIF}



Delphi is able to compile under Linux 64, but I get runtime error when I try to run the binary on my Linux box running 19.04 Ubuntu.

Thanks!

Author:  Sergey.Bochkanov [ Tue Jan 21, 2020 2:01 pm ]
Post subject:  Re: Does ALGLib work with Delphi 10.3 for Linux?

Hi!

A few questions:

1) did you put ALGLIB binary into same directory as your app binary file?
2) when exactly runtime error happens - in the xalglib.pas initialization section? or when you call some ALGLIB function?
3) what exactly kind of error you get - some standard Delphi exception? ALGLIB usually puts short textual description into Exception.Message - is it present?

Sergey

Author:  beowulf68 [ Tue Jan 28, 2020 2:38 am ]
Post subject:  Re: Does ALGLib work with Delphi 10.3 for Linux?

Hi

1. Yes I have copied alglib316_64hpc.so to the directory.

2. Error inside ALGLib function Str2Vector

Code is the example code in ALGLib. I have added WriteLn to find out where the error occurs.
Code:
program Project3;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Classes,
  Math,
  xalglib;

var
    a: Tsparsematrix;
    b: TVector;
    x0: TVector;
    s: TVector;
    x: TVector;
    state: Tminqpstate;
    rep: Tminqpreport;

begin
  try
    Writeln('Hello World');
    a:=nil;
    state:=nil;

    //
    // This example demonstrates minimization of F(x0,x1) = x0^2 + x1^2 -6*x0 - 4*x1,
    // with quadratic term given by sparse matrix structure.
    //
    // Exact solution is [x0,x1] = [3,2]
    //
    // We provide algorithm with starting point, although in this case
    // (dense matrix, no constraints) it can work without such information.
    //
    // IMPORTANT: this solver minimizes  following  function:
    //     f(x) = 0.5*x'*A*x + b'*x.
    // Note that quadratic term has 0.5 before it. So if you want to minimize
    // quadratic function, you should rewrite it in such way that quadratic term
    // is multiplied by 0.5 too.
    //
    // For example, our function is f(x)=x0^2+x1^2+..., but we rewrite it as
    //     f(x) = 0.5*(2*x0^2+2*x1^2) + ....
    // and pass diag(2,2) as quadratic term - NOT diag(1,1)!
    //
    Writeln('1');
    b:=Str2Vector('[-6,-4]');  // <--- runtime error here
    Writeln('1.1');
    x0:=Str2Vector('[0,1]');
    Writeln('1.2');
    s:=Str2Vector('[1,1]');
    Writeln('1.3');


    Writeln('2');
    // initialize sparsematrix structure
    sparsecreate(2, 2, 0, a);
    sparseset(a, 0, 0, 2.0);
    sparseset(a, 1, 1, 2.0);

    // create solver, set quadratic/linear terms
    Writeln('3');
    minqpcreate(2, state);
    minqpsetquadratictermsparse(state, a, true);
    minqpsetlinearterm(state, b);
    minqpsetstartingpoint(state, x0);

    // Set scale of the parameters.
    // It is strongly recommended that you set scale of your variables.
    // Knowing their scales is essential for evaluation of stopping criteria
    // and for preconditioning of the algorithm steps.
    // You can find more information on scaling at http://www.alglib.net/optimization/scaling.php
    //
    // NOTE: for convex problems you may try using minqpsetscaleautodiag()
    //       which automatically determines variable scales.
    Writeln('4');
    minqpsetscale(state, s);

    //
    // Solve problem with BLEIC-based QP solver.
    //
    // This solver is intended for problems with moderate (up to 50) number
    // of general linear constraints and unlimited number of box constraints.
    // It also supports sparse problems.
    //
    // Default stopping criteria are used.
    //
    Writeln('5');
    minqpsetalgobleic(state, 0.0, 0.0, 0.0, 0);
    minqpoptimize(state);
    minqpresults(state, x, rep);
    WriteLn(Format('%s', [FormatVector(x,2)])); // EXPECTED: [3,2]

    Writeln('6');
    FreeAndNil(a);
    Writeln('7');
    FreeAndNil(state);
    Writeln('8');

    ReadLn;
    ExitCode:=0;

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.



Note that I also had to comment out and change the following in XALGLib.pas itself, otherwise I would get the System.Sysutils redeclared error.

Code:
{$IFDEF FPC}
uses {$IFDEF MSWINDOWS}Windows{$ELSE}Dynlibs{$ENDIF}, Math, StrUtils;
{$ELSE}
//uses {$IFDEF MSWINDOWS}Windows{$ELSE}SysUtils{$ENDIF}, Math, StrUtils, AnsiStrings;
uses Math, StrUtils, AnsiStrings;
{$ENDIF}


3. Output
Code:
lliew@beowulf:~/PAServer/scratch-dir/laure-Beowulf/Project3$ ./Project3
Hello World
1
free(): invalid pointer
Aborted (core dumped)
lliew@beowulf:~/PAServer/scratch-dir/laure-Beowulf/Project3$ ls
Project3  alglib316_64hpc.so

Page 1 of 1 All times are UTC
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/