### fmcmap/tp067v3.map

fmcTitle ("tp067v3"):

# Source version 1
# FMCMAP post processor version 1.1

# FMC's first native input language.
# The Hock & Schittkowski test problem #67.
# This is a free, more intuitive formulation of #67,
# without discontinuities, as it would probably be defined
# by a modeler of our days.
# The solution is equal to the one obtained with tp067v1,
# i.e., it is sensible but not exact in the sense of #67.

y2 := tp067v3x (fmc_ident_tcb, 2, 0, x1, x2, x3):
y3 := tp067v3x (fmc_ident_tcb, 3, 0, x1, x2, x3):
y4 := tp067v3x (fmc_ident_tcb, 4, 0, x1, x2, x3):
y5 := tp067v3x (fmc_ident_tcb, 5, 0, x1, x2, x3):
y6 := tp067v3x (fmc_ident_tcb, 6, 0, x1, x2, x3):
y7 := tp067v3x (fmc_ident_tcb, 7, 0, x1, x2, x3):
y8 := tp067v3x (fmc_ident_tcb, 8, 0, x1, x2, x3):

fmcFunctionDiffHint ([ tp067v3x, 0, 0, 0,
tp067v3x ( fmcFunctionArg1,  fmcFunctionArg2,  1,
fmcFunctionArg4,  fmcFunctionArg5,  fmcFunctionArg6 ),
tp067v3x ( fmcFunctionArg1,  fmcFunctionArg2,  2,
fmcFunctionArg4,  fmcFunctionArg5,  fmcFunctionArg6 ),
tp067v3x ( fmcFunctionArg1,  fmcFunctionArg2,  3,
fmcFunctionArg4,  fmcFunctionArg5,  fmcFunctionArg6 ) ]):

fmcExternalCodePath ("../../doc/RevisedHockSchittkowski/src/tp067v3x.c"):

myminfun := -(0.063*y2*y5 - 5.04*x1 - 3.36*y3 - 0.035*x2 - 10*x3):
fmcMinimum (myminfun):

fmcInequality (i1,  y2 -     0):
fmcInequality (i2,  y3 -     0):
fmcInequality (i3,  y4 -    85):
fmcInequality (i4,  y5 -    90):
fmcInequality (i5,  y6 -     3):
fmcInequality (i6,  y7 - 1/100):
fmcInequality (i7,  y8 -   145):

fmcInequality (i8, 5000 - y2):
fmcInequality (i9, 2000 - y3):
fmcInequality (i10,  93 - y4):
fmcInequality (i11,  95 - y5):
fmcInequality (i12,  12 - y6):
fmcInequality (i13,   4 - y7):
fmcInequality (i14, 162 - y8):

fmcStrongLowerBound (x1, 10^(-5)):
fmcStrongLowerBound (x2, 10^(-5)):
fmcStrongLowerBound (x3, 10^(-5)):

fmcStrongUpperBound (x1,  2000):
fmcStrongUpperBound (x2, 16000):
fmcStrongUpperBound (x3,   120):

fmcInitialValue (x1,  1745):
fmcInitialValue (x2, 12000):
fmcInitialValue (x3,   110):

myownabs := proc (x::algebraic) return (fmc_m_abs (x)): end proc:

myabsdevnod0_0 := myownabs (myminfun + 1162.02698005969):
myreldevnod0_0 := myownabs (myminfun/1162.02698005969 + 1):
myabsdevnod0_1 := myownabs (x1 - 1728.371443241086):
myreldevnod0_1 := myownabs (x1/1728.371443241086 - 1):
myabsdevnod0_2 := myownabs (x2 - 16000):
myreldevnod0_2 := myownabs (x2/16000 - 1):
myabsdevnod0_3 := myownabs (x3 - 98.13617652300942):
myreldevnod0_3 := myownabs (x3/98.13617652300942 - 1):
myabsdevnod1_0 := (1/2)*(myownabs (myabsdevnod0_0 - myabsdevnod0_1) + (myabsdevnod0_0 + myabsdevnod0_1)):
myreldevnod1_0 := (1/2)*(myownabs (myreldevnod0_0 - myreldevnod0_1) + (myreldevnod0_0 + myreldevnod0_1)):
myabsdevnod1_2 := (1/2)*(myownabs (myabsdevnod0_2 - myabsdevnod0_3) + (myabsdevnod0_2 + myabsdevnod0_3)):
myreldevnod1_2 := (1/2)*(myownabs (myreldevnod0_2 - myreldevnod0_3) + (myreldevnod0_2 + myreldevnod0_3)):
myabsdevnod2_0 := (1/2)*(myownabs (myabsdevnod1_0 - myabsdevnod1_2) + (myabsdevnod1_0 + myabsdevnod1_2)):
myreldevnod2_0 := (1/2)*(myownabs (myreldevnod1_0 - myreldevnod1_2) + (myreldevnod1_0 + myreldevnod1_2)):
zmyabsdevmax := myabsdevnod2_0:
zmyreldevmax := myreldevnod2_0:
fmcEscortFloat (x1, x1):
fmcEscortFloat (x2, x2):
fmcEscortFloat (x3, x3):
fmcEscortFloat ('myminfun', myminfun):
fmcEscortFloat ('zmyabsdevmax', zmyabsdevmax):
fmcEscortFloat ('zmyreldevmax', zmyreldevmax):

Stephan K.H. Seidl