 FICO Xpress Optimization Examples Repository
 FICO Optimization Community FICO Xpress Optimization Home   Numerical differentation and accuracy

Description
Nonlinear example demonstrates the solver sensitibility to errors introduced by finite differences

Further explanation of this example: 'Xpress NonLinear Reference Manual'

Source Files

xnlp_solvers_numerical_derivatives.mos

```! This example demonstrates the solver sensitibility to errors introduced by
! numerical derivatives
!
! This model should be run twice, with different settings for XNLP_SOLVER
! This example is a version of the Polygon4 example.
!
! This example demonstrates a particular non-linear optimization concept as related
! to Xpress NonLinear.
! The version of the example is for Xpress 7.5.
!
!  (c) 2013 Fair Isaac Corporation

model "Polygon 4"
uses "mmxnlp"

parameters
N=5                               ! Number of vertices
SOLVER=0                          ! 0: SLP, 1: Knitro
end-parameters

declarations
RN = 1..N
Area: nlctr
rho : array(RN) of mpvar          ! Distance of vertex from the base point
theta : array(RN) of mpvar        ! Angle from x-axis
D: array(RN,RN) of nlctr          ! Limit on side length
FunctionArg: list of nlctr        ! User function arguments
AreaFunction: userfunc            ! User function definition
end-declarations

! Objective: sum of areas. Definition of a user function
AreaFunction := userfuncExcel("polygonsheet.xls", "Sheet1")

! Create function arguments
! Excel functions use their first columns as input: use a list to ensure correct order
forall (i in 1..N-1) do
FunctionArg += [nlctr(rho(i))]
FunctionArg += [nlctr(theta(i))]
end-do

! Use the Excel user function in a formula for the objective
Area := F(AreaFunction,FunctionArg)

! Bounds and start values for decision variables
forall (i in 1..N-1) do
rho(i) >= 0.1
rho(i) <= 1
setinitval(rho(i),4*i*(N + 1 - i)/((N+1)^2))
setinitval(theta(i),M_PI*i/N)
end-do

! Third side of all triangles <= 1
forall (i in 1..N-2, j in i+1..N-1)
D(i,j) := rho(i)^2 + rho(j)^2 - rho(i)*rho(j)*2*cos(theta(j)-theta(i)) <= 1

! Vertices in increasing order
forall (i in 2..N-1) theta(i) >= theta(i-1) +.01

! Boundary conditions (last vertex above x-axis)
theta(N-1) <= M_PI

! Uncomment to display user function info
! userfuncinfo(AreaFunction)

! Optional parameter settings
setparam("xnlp_verbose", true)         ! Enable XNLP output log
setparam("xnlp_solver", SOLVER)        ! Select the solver
setparam("xslp_excelvisible", true)

! Solve the problem
maximise(Area)

! Solution output
writeln("Area = ", getobjval)
forall (i in 1..N-1)
writeln("V",i,": r=",getsol(rho(i))," theta=",getsol(theta(i)))

end-model

```   