* * Main program for CONMIN (SHANNO - PHUA) * =========================================== * * * * Date created: October 15, 2004 * ================================== * * * * MAIN -------> INIPOINT * CONMIN (Shanno) ---> EVALFG * GETTIM * EXETIM * * * Modified: April 20, 2006 * March 27, 2013 (new inipoint and evalfg subroutines) * * * Subroutine CONMIN is described in the papers: * 1) Shanno, D.F., Conjugate gradient methods with inexact * searches. * Mathematics of Operations Research, vol. 3, No. 3, August 1978, * pp. 244256. * * 2) Shanno, D.F., On the convergence of a new conjugate gradient * algorithm. * SIAM J. Numer. Anal., vol.15, No.6, December 1978, pp.1247-1257. * * 3) Shanno, D.F., Phua, K.H., Algorithm 500. Minimization of * unconstrained multivariate functions. * ACM TOMS, vol.2, No.1, March 1976, pp.87-94. * * 4) Andrei, N., Criticism of the unconstrained optimization algorithms * reasoning. * Academiei Publishing House, Bucharest 2009. * ISBN 978-973-27-1669-4 * (Chapter 8, pp.317-448.) * * Remark: * Professor Shanno sent me the Fortran subrutine CONMIN * in October 17, 1983. *-------------------------------------------------------------- * double precision x(20000), g(20000), work(500002) double precision eps, epsf, acc, timp double precision f, gnorm2 integer*4 gh,gm,gs,gc, ght,gmt,gst,gct, timpexp integer*2 iyear, imonth, iday character*70 numef, fnumef(200) * c Input file open(unit=7,file='funcname.txt',status='old') c Output files open(unit=2,file='conmin.out',status='unknown') open(unit=3,file='conmin.rez',status='unknown') mdim=500002 * eps = 0.000001d0 epsf = (10.d0)**(-20) acc=1.d-10 maxfun = 15000 maxiter = 10000 do i=1,80 read(7,21) numef fnumef(i)=numef 21 format(a70) end do write(2,19) 19 format(10x,'CONMIN Unconstrained Optimization Experiments') write(2,17) 17 format(2x,'Tolerances:') write(2,136) eps, epsf 136 format(6x,'eps =',e20.13,4x,';',4x,'epsf =',e20.13) write(2,137) 137 format(2x,'Stopping Criterion:',/, * 6x,'if(ginf .le. eps) return') c * 6x,'if(ginf .lt. eps .or.', c * 1x,'dabs(alpha*dg) .le. epsf*dabs(f)) return') call getdat(iyear, imonth, iday) write(2,18) imonth, iday, iyear 18 format(/,2x,'Date: --- Month:',i2,' Day:',i2,' Year: ',i4,/) *--------------------------------------------- Here Start Experiments do nexp = 1,80 numef = fnumef(nexp) write(2,41) nexp, numef write(*,41) nexp, numef 41 format(/,2x,'nexp=',i4,2x,'CONMIN Algorithm. Function: ',a70) write(2,140) 140 format(/,7x,'n',5x,'iter',2x,'irstart',3x,'fgcnt',5x,'time', * 10x,'fxnew',16x,'gnorm2') write(2,145) 145 format(1x,87('-')) write(*,1401) 1401 format(7x,'n',5x,'iter',2x,'irstart',3x,'fgcnt',5x,'time', * 8x,'fxnew',11x,'gnorm2') * itertot=0 nrfunt=0 irstartt=0 timp=0.d0 do n=1000, 10000, 1000 * Initial point call inipoint(n,x,nexp) call gettim(gh,gm,gs,gc) call conmin(n,x,f,g,nrfun,iter,irstart,eps,nexit,maxfun, * maxiter,work,mdim,acc,epsf,gnorm2, nexp) call gettim(ght,gmt,gst,gct) call exetim(gh,gm,gs,gc, ght,gmt,gst,gct) *------------------------------------------------------------ * Compute general characteristics c if(nexit .eq. 0) then itertot = itertot + iter nrfunt = nrfunt + nrfun irstartt=irstartt + irstart timpexp = ght*360000 + gmt*6000 + gst*100 + gct timp = timp + float(timpexp) c end if * Write information ---------------------------------------- *.rez if(n .eq. 1000) then write(3,101)nexp,n, iter, nrfun, timpexp, f,gnorm2 101 format(i2,i6,2x,i6,2x,i6,2x,i6,2x,e20.13,2x,e20.13) else write(3,102) n, iter, nrfun, timpexp, f,gnorm2 102 format(2x,i6,2x,i6,2x,i6,2x,i6,2x,e20.13,2x,e20.13) end if * Write information ---------------------------------------- *.out write(2,150) n, iter, irstart,nrfun, timpexp, f, gnorm2 150 format(2x,i6,3x,i6,3x,i6,2x,i6,2x,i7,2x,e20.13,2x,e20.13) write(*,1501) n, iter, irstart,nrfun, timpexp, f, gnorm2 1501 format(2x,i6,3x,i6,3x,i6,2x,i6,2x,i7,2x,e15.8,2x,e15.8) end do proc=float(irstartt)*100.d0/float(itertot) write(2,145) write(2,155) itertot, irstartt, nrfunt, timp/100.d0, proc 155 format(1x,'TOTAL',4x,i7,2x,i7,1x,i7,2x,f7.2,'(seconds) ;', * 4x,'proc=',f5.2,'%',/) end do write(3,170) 170 format(/,2x,'CONMIN by SHANNO, stopped by: ginf <= 10^(-6)') stop end * *------------------------------------------- END Main Program (CONMIN) c*** ***** c**** **** c--------------------- SUBROUTINE CONMIN (SHANNO) -------------- c**** =========================== **** c*** ***** *------------------------------------------------------------------ * Generated: November 26, 2001 * Modified: October 13, 2004, ...> * * Subroutine conmin for unconstrained minimization using the * conjugate gradient algorithm with Beale's restart procedure * * This subroutine has been written by Prof. Shanno. * I modified it many times. *------------------------------------------------------------------ * subroutine conmin(n,x,f,g,nrfun,iter,irstart,eps,nexit,maxfun, * maxiter,work,mdim,epsmach,epsf,gnorm2, nexp) * double precision x(n), g(n) double precision work(mdim) * double precision f, fmin double precision xsq,gsq, ginf, gnorm2 double precision dty, yty double precision eps, epsmach, epsf double precision alpha, dg,dg1, rtst double precision ap, at, fp, dp, step, dal double precision u1,u2,u3,u4 * logical rsw * * Initialization of some parameters. * iter=0 nrfun=0 irstart=0 nexit=0 dg=1.d0 alpha=1.d0 * * Set parameters to extract vectors from array w. * nx=n ng=nx+n nry=ng+n nrd=nry+n * * Compute the function and its gradient. * 20 continue call evalfg(n,x,f,g, nexp) nrfun=nrfun+1 nrst=n rsw=.true. * * Compute the initial search direction. * dg1=0.d0 xsq=0.d0 do i=1,n work(i)=-g(i) xsq=xsq+x(i)*x(i) dg1=dg1-g(i)*g(i) end do gsq=-dg1 * * Test if the initial point is the minimum. * STOP * * if(gsq.le.eps*eps*dmax1(1.d0,xsq)) return * * Begin the major iteration loop. * =============================== * 40 continue fmin=f ncalls=nrfun * * Begin linear search. * alpha=alpha*dg/dg1 * * If a restart has been performed set alpha=1.d0 * if(nrst.eq.1) alpha=1.d0 * * If this is the first iteration set alpha=1.d0/dsqrt(gsq). * if(rsw) alpha=1.d0/dsqrt(gsq) * * Fit a cubic. * ap=0.d0 fp=fmin dp=dg1 * dg=dg1 * * Update the iteration. * iter=iter+1 if(iter .gt. maxiter) then nexit = 4 return end if * * Compute the steplength. * step=0.d0 do i=1,n step=step+work(i)*work(i) nxpi=nx+i ngpi=ng+i work(nxpi)=x(i) work(ngpi)=g(i) end do step=dsqrt(step) * * Begin the linear search iteration. * 80 continue * if(alpha*step.gt.epsmach) go to 90 * * Test if direction is a gradient direction. * if(.not.rsw) go to 20 nexit=2 return * * Compute the trial point. * 90 continue do i=1,n nxpi=nx+i x(i)=work(nxpi)+alpha*work(i) end do * * Evaluate the function and its gradient. * call evalfg(n,x,f,g, nexp) nrfun=nrfun+1 * * Test if the maximum number of function calls have been used. * if(nrfun.le.maxfun) go to 110 nexit=0 return * * Compute the derivative of function at alpha. * 110 continue dal=0.d0 do i=1,n dal=dal+g(i)*work(i) end do * * * if(f.gt.fmin.and.dal.lt.0.d0) go to 160 * * * if(f.gt.(fmin+0.0001d0*alpha*dg).or.dabs(dal/dg) * .gt.(0.9d0)) go to 130 * * * if((nrfun-ncalls).le.1.and.dabs(dal/dg).gt.eps) go to 130 go to 170 * * A new point must be tried. * 130 continue u1=dp+dal - 3.d0*(fp-f)/(ap-alpha) u2=u1*u1-dp*dal if(u2.lt.0.d0) u2=0.d0 u2=dsqrt(u2) at=alpha - (alpha-ap)*(dal+u2-u1)/(dal-dp+2.d0*u2) * * Test whether the line minimum has been bracketed. * if((dal/dp).gt.0.d0) go to 140 * * The minimum has been bracketed. * if(at.lt.(1.01d0*dmin1(alpha,ap)).or.at.gt.(0.99d0* * dmax1(alpha,ap))) at=(alpha+ap)/2.d0 go to 150 * * The minimum has not been bracketed. * 140 continue if(dal.gt.0.d0.and.0.d0.lt.at.and.at.lt. * (0.99d0*dmin1(ap,alpha))) go to 150 * * Test if both points are less than the minimum, and * the trial point is sufficiently large. * if(dal.le.0.d0.and.at.gt.(1.01d0*dmax1(ap,alpha))) go to 150 * * If the trial point is too small, than double the largest prior point. * if(dal.le.0.d0) at=2.d0*dmax1(ap,alpha) * * If the trial point is too large, than halve the smallest prior point. * if(dal.gt.0.d0) at=dmin1(ap,alpha)/2.d0 * * Set ap=alpha, alpha=at, and continue the search. * 150 continue ap=alpha fp=f dp=dal alpha=at go to 80 * * A relative max has been passed. Reduce alpha and restart the search * 160 continue alpha=alpha/3.d0 ap=0.d0 fp=fmin dp=dg go to 80 * * The line search has converged. * Test the convergence of the algorithm. * 170 continue *------------------------------------------------ Prepare for stop test * October 13, 2004 ginf = dabs(g(1)) do i=2,n if(dabs(g(i)) .gt. ginf) ginf = dabs(g(i)) end do *- gsq=0.d0 xsq=0.d0 do i=1,n gsq=gsq+g(i)*g(i) xsq=xsq+x(i)*x(i) end do gnorm2 = sqrt(gsq) * * STOP test * * ============= c if(gsq.le.eps*eps*dmax1(1.d0,xsq))then c if(gnorm2 .le. eps) return c if(ginf .lt. eps .or. c * dabs(f-fmin)/(1.d0+dabs(f)) .le. epsf) return c * dabs(alpha*dg) .le. epsf*dabs(f)) return if(ginf .lt. eps) return *---------------------------------------------------------------- End * * Search continues. * do i=1,n work(i)=alpha*work(i) end do * * * Compute the new search vector using the conjugate gradient algorithm. * Conjugate Gradient Section. * -------------------------- * rtst=0.d0 do i=1,n ngpi=ng+i rtst=rtst+g(i)*work(ngpi) end do if(dabs(rtst/gsq).gt.0.2d0) then nrst=n irstart = irstart + 1 end if * * If a restart is indicated, than save the curent d and y as * the Beale restart vectors and compute d'y and y'y. * if(nrst.ne.n) go to 220 dty=0.d0 yty=0.d0 * do i=1,n nrdpi=nrd+i nrypi=nry+i ngpi=ng+i work(nrypi)=g(i)-work(ngpi) work(nrdpi)=work(i) dty=dty+work(nrypi)*work(nrypi) yty=yty+work(i)*work(nrypi) end do * * Compute the restart Hessian times the current gradient. * 220 continue u1=0.d0 u2=0.d0 do i=1,n nrdpi=nrd+i nrypi=nry+i u1=u1-work(nrdpi)*g(i)/dty u2=u2+work(nrdpi)*g(i)*2.d0/yty - work(nrypi)*g(i)/dty end do u3=yty/dty * do i=1,n nxpi=nx+i nrdpi=nrd+i nrypi=nry+i work(nxpi)=-u3*g(i)-u1*work(nrypi)-u2*work(nrdpi) end do * * If this is a restart iteration, than work(nx+i) contains the new * search vector. * if(nrst.eq.n) go to 300 * * Here, not a restart iteration. *## u1=0.d0 u2=0.d0 u3=0.d0 u4=0.d0 do i=1,n ngpi=ng+i nrdpi=nrd+i nrypi=nry+i u1=u1-(g(i)-work(ngpi))*work(nrdpi)/dty u2=u2-(g(i)-work(ngpi))*work(nrypi)/dty+ * 2.d0*work(nrdpi)*(g(i)-work(ngpi))/yty u3=u3+work(i)*(g(i)-work(ngpi)) end do * step=0.d0 do i=1,n ngpi=ng+i nrdpi=nrd+i nrypi=nry+i step=(yty/dty)*(g(i)-work(ngpi)) + * u1*work(nrypi) + u2*work(nrdpi) u4=u4+step*(g(i)-work(ngpi)) work(ngpi)=step end do * * Compute the doubly updated Hessian times the current * gradient to obtain the search direction. * u1=0.d0 u2=0.d0 do i=1,n u1=u1-work(i)*g(i)/u3 ngpi=ng+i u2=u2+(1.d0+u4/u3)*work(i)*g(i)/u3-work(ngpi)*g(i)/u3 end do * do i=1,n ngpi=ng+i nxpi=nx+i work(nxpi)=work(nxpi)-u1*work(ngpi)-u2*work(i) end do * * Compute the derivative along the new search direction. * 300 dg1=0.d0 do i=1,n nxpi=nx+i work(i)=work(nxpi) dg1=dg1+work(i)*g(i) end do * * If the new direction is not a descent one, then STOP. * if(dg1.gt.0.d0) go to 320 * * Update nrst to assure at least one restart every n iterations . * if(nrst.eq.n) nrst=0 nrst=nrst+1 rsw=.false. go to 40 * * Roundoff has produced a bad direction. * 320 nexit=3 return * end * *------------------------------------------------- Last card conmin.for * SHANNO c*** ***** c**** **** c--------------------- SUBROUTINE EXETIM ------------------------> c**** **** c*** ***** *---------------------------------------------------------------- * Date created : May 30, 1995 * Date last modified : May 30, 1995 * * Subroutine for execution time computation. * *---------------------------------------------------------------- * subroutine exetim(tih,tim,tis,tic,tfh,tfm,tfs,tfc) * integer*4 tih,tim,tis,tic integer*4 tfh,tfm,tfs,tfc * integer*4 ti,tf integer*4 ch,cm,cs data ch,cm,cs/360000,6000,100/ * ti=tih*ch+tim*cm+tis*cs+tic tf=tfh*ch+tfm*cm+tfs*cs+tfc tf=tf-ti tfh=tf/ch tf=tf-tfh*ch tfm=tf/cm tf=tf-tfm*cm tfs=tf/cs tfc=tf-tfs*cs * return end *-------------------------------------------------- END EXETIM * * * .-----------------------------------------------------------------. * | Subroutine inipoint 80 problems| * | =================== | * | | * |Subroutine for initial point specification. | * |This is a user subroutine: | * | | * | The calling sequence is: | * | | * | call inipoint(n,x,nexp) | * |where: | * | n (integer) the number of variables, | * | x (double) array with the initial point. | * | nexp (integer) parameter specifying the number of the | * | problem considered in a train of experiments. | * | | * | Neculai Andrei | * .-----------------------------------------------------------------. ****************************************************************** subroutine inipoint(n,x, nexp) C This subroutine computes the initial point real*8 x(n) go to ( 1, 2, 3, 4, 5, 6, 7, 8, 9,10, * 11,12,13,14,15,16,17,18,19,20, * 21,22,23,24,25,26,27,28,29,30, * 31,32,33,34,35,36,37,38,39,40, * 41,42,43,44,45,46,47,48,49,50, * 51,52,53,54,55,56,57,58,59,60, * 61,62,63,64,65,66,67,68,69,70, * 71,72,73,74,75,76,77,78,79,80) nexp 1 continue c Freudenstein & Roth - FREUROTH (CUTE) i=1 91 x(i) = 0.5d0 x(i+1)= -2.d0 i=i+2 if(i.le.n) go to 91 return 2 continue c Trigonometric do i=1,n x(i) = 0.2d0 end do return 3 continue c Extended Rosenbrock SROSENBR (CUTE) i=1 93 x(i) = -1.2d0 x(i+1)= 1.d0 i=i+2 if(i.le.n) go to 93 return 4 continue c Extended White & Holst i=1 94 x(i) = -1.2d0 x(i+1)= 1.d0 i=i+2 if(i.le.n) go to 94 return 5 continue c Extended Beale i=1 95 x(i) = 1.d0 x(i+1)= 0.8d0 i=i+2 if(i.le.n) go to 95 return 6 continue c Penalty do i=1,n x(i) = float(i) end do return 7 continue c Perturbed Quadratic do i=1,n x(i) = 1.d0 end do return 8 continue c Raydan 1 do i=1,n x(i) = 1.d0 end do return 9 continue c Raydan 2 do i=1,n x(i) = 1.d0 end do return 10 continue c TR-SUMM do i=1,n x(i) = 1.d0 end do return 11 continue c Diagonal 1 do i=1,n x(i) = 1.d0/float(i) end do return 12 continue c Diagonal 2 do i=1,n x(i) = 1.d0 end do return 13 continue c Hager do i=1,n x(i) = 1.d0 end do return 14 continue c Generalized Tridiagonal 1 do i=1,n x(i) = 2.d0 end do return 15 continue c Extended Tridiagonal 1 do i=1,n x(i) = 2.d0 end do return 16 continue c Extended Three Expo Terms do i=1,n x(i) = 0.1d0 end do return 17 continue c Generalized Tridiagonal 2 do i=1,n x(i) = -1.d0 end do return 18 continue c Diagonal 3 (1c1c) do i=1,n x(i) = 1.d0 end do return 19 continue c Diagonal Full Borded do i=1,n x(i) = 0.1d0 end do return 20 continue c Extended Himmelblau do i=1,n x(i) = 1.d0 end do return 21 continue c Extended Powell i=1 921 x(i) = 3.d0 x(i+1)= -1.d0 x(i+2)= 0.d0 x(i+3)= 1.d0 i=i+4 if(i.le.n) go to 921 return 22 continue c Tridiagonal Double Borded TR-DB1 do i=1,n x(i) = -1.d0 end do return 23 continue c Extended PSC1 i=1 923 x(i) = 3.d0 x(i+1)= 0.1d0 i=i+2 if(i.le.n) go to 923 return 24 continue c Extended BD1 do i=1,n x(i) = 0.11d0 end do return 25 continue c Extended Maratos i=1 925 x(i) = 1.1d0 x(i+1)= 0.1d0 i=i+2 if(i.le.n) go to 925 return 26 continue * FH1 * Full Hessian FH1 (Summ of Quadratics, Quadratic inside) * do i=1,n x(i) = float(i)/float(n) end do return 27 continue c Extended Cliff i=1 927 x(i) = 0.d0 x(i+1)= -0.1d0 i=i+2 if(i.le.n) go to 927 return 28 continue c Quadratic Diagonal Perturbed do i=1,n x(i) = 0.5d0 end do return 29 continue * FH2 * Full Hessian FH2 (Quadratic, perturbed with sin/cos) * do i=1,n x(i) = 1.d0 end do return 30 continue * FH3 * Full Hessian FH3 (Quartic, perturbed with sin/cos) * do i=1,n x(i) = 1.d0 end do return 31 continue c TR-DBAD * Tridiagonal Double Borded Arrow-Down * i=1 931 x(i) = 1.d0 x(i+1)= -1.d0 i=i+2 if(i.le.n) go to 931 return 32 continue c TR-WHITEHOLST * Tridiagonal White & Holst (c=4) * i=1 932 x(i) = -1.2d0 x(i+1)= 1.0d0 i=i+2 if(i.le.n) go to 932 return 33 continue c D-DBAUP3 * Diagonal Double Borded Arrow Up * i=1 933 x(i) = 4.d0 x(i+1)= 0.d0 i=i+2 if(i.le.n) go to 933 return 34 continue c TRIDIA * Tridiagonal * do i=1,n x(i) = 1.d0 end do return 35 continue c ARWHEAD * Diagonal Bouble borded Arrow Down * do i=1,n x(i) = 1.d0 end do return 36 continue c NONDIA (CUTE) * Diagonal Bouble borded Arrow Up do i=1,n x(i) = -1.d0 end do return 37 continue c Extended Wood WOODS (CUTE) i=1 937 x(i) = -3.d0 x(i+1)= -1.d0 x(i+2)= -3.d0 x(i+3)= -1.d0 i=i+4 if(i.le.n) go to 937 return 38 continue c Extended Hiebert do i=1,n x(i) = 0.00001d0 end do return 39 continue c BDQRTIC (CUTE) do i=1,n x(i) = 1.d0 end do return 40 continue c DQDRTIC (CUTE) do i=1,n x(i) = 3.d0 end do return 41 continue c EG2 (CUTE) do i=1,n x(i) = 1.d0 end do return 42 continue c EDENSCH (CUTE) do i=1,n x(i) = 0.d0 end do return 43 continue c Broyden Pentadiagonal (CUTE) do i=1,n x(i) = -1.d0 end do return 44 continue c Almost Perturbed Quadratic do i=1,n x(i) = 0.5d0 end do return 45 continue c Almost Perturbed Quartic do i=1,n x(i) = 0.5d0 end do return 46 continue c FLETCHCR (CUTE) do i=1,n x(i) = 0.5d0 end do return 47 continue c ENGVAL1 (CUTE) do i=1,n x(i) = 2.d0 end do return 48 continue c DENSCHNA (CUTE) do i=1,n x(i) = 8.d0 end do return 49 continue c DENSCHNB (CUTE) do i=1,n x(i) = 1000.d0 end do return 50 continue c DENSCHNC (CUTE) do i=1,n x(i) = 8.d0 end do return 51 continue c DENSCHNF (CUTE) i=1 951 x(i) = 100.d0 x(i+1)= -100.d0 i=i+2 if(i.le.n) go to 951 return 52 continue c SINQUAD (CUTE) do i=1,n x(i) = 0.1d0 end do return 53 continue c HIMMELBG (CUTE) do i=1,n x(i) = 1.5d0 end do return 54 continue c HIMMELBH (CUTE) do i=1,n x(i) = 1.5d0 end do return 55 continue c DIXON3DQ (CUTE) do i=1,n x(i) = -1.d0 end do return 56 continue c BIGGSB1 (CUTE) do i=1,n x(i) = 0.d0 end do return 57 continue c Perturbed Quadratic do i=1,n x(i) = 0.5d0 end do return 58 continue c GENROSNB (CUTE) i=1 958 x(i) = -1.2d0 x(i+1)= 1.d0 i=i+2 if(i.le.n) go to 958 return 59 continue c QP1 Extended Quadratic Penalty do i=1,n x(i) = 1.d0 end do return 60 continue c QP2 Extended Quadratic Penalty do i=1,n x(i) = 1.d0 end do return 61 continue c STAIRCASE S1 do i=1,n x(i) = 1.d0 end do return 62 continue c STAIRCASE S2 do i=1,n x(i) = 1.d0 end do return 63 continue c S3 do i=1,n x(i) = 2.d0 end do return 64 continue c Trigonometric do i=1,n x(i) = 0.2d0 end do return 65 continue c QP3 Extended Quadratic Penalty do i=1,n x(i) = 1.d0 end do return 66 continue c EG1 do i=1,n x(i) = 2.d0 end do return 67 continue c GENROSEN-2 i=1 967 x(i) = -1.2d0 x(i+1)= 1.d0 i=i+2 if(i.le.n) go to 967 return 68 continue c PRODsin (m=n-1) do i=1,n x(i) = 5.d0 end do return 69 continue c PROD1 (m=n) do i=1,n x(i) = 1.d0 end do return 70 continue c PRODcos (m=n-1) do i=1,n x(i) = 5.d0 end do return 71 continue c PROD2 (m=1) do i=1,n x(i) = 15.d0 end do return 72 continue c ARGLINB (m=5) i=1 972 x(i) = 0.01d0 x(i+1)= 0.001d0 i=i+2 if(i.le.n) go to 972 return 73 continue c DIXMAANA (CUTE) do i=1,n x(i) = 2.d0 end do return 74 continue c DIXMAANB (CUTE) do i=1,n x(i) = 2.d0 end do return 75 continue c DIXMAANC (CUTE) do i=1,n x(i) = 2.d0 end do return 76 continue c DIXMAAND (CUTE) do i=1,n x(i) = 2.d0 end do return 77 continue c DIXMAANE (CUTE) do i=1,n x(i) = 2.d0 end do return 78 continue c VARDIM (CUTE) do i=1,n x(i) = 1.d0-float(i)/float(n) end do return 79 continue c DIAG-AUP1 do i=1,n x(i) = 4.d0 end do return 80 continue c ENGVAL8 do i=1,n x(i) = 2.d0 end do return *** end c------------------------------------------------ End INIPOINT *************************************************************** * Date created: October 28, 2004 * * 80 problems * * * * * * TEST FUNCTIONS FOR UNCONSTRAINED OPTIMIZATION * * =============================================== * * * * Subroutine for functions and their gradient specification. * * This is a user subroutine: * * * * The calling sequence is: * * * * call evalfg(n,x,f,g, nexp) * * where: * * n (integer) the number of variables, * * x (double) array with the initial point, * * f (double) function value in point x, * * g (double) array with gradient value in point x, * * nexp (integer) parameter specifying the number of the * * problem considered in a train of * * experiments. * * * * ----------------------------------------------------------- * * * * 57 problems: October 28, 2004 * * 66 problems: March 29, 2005 * * 70 problems: April 28, 2005 * * 75 problems: April 19, 2006 * * 80 problems: January 28, 2013 * * * * Neculai Andrei* *************************************************************** * subroutine evalfg(n,x,f,g, nexp) real*8 x(n), f, g(n) real*8 t1,t2,t3,t4, c, d real*8 s, temp(1000000), temp1, tsum, sum real*8 u(1000000), v(1000000), t(1000000) real*8 u1, v1, c1, c2 real*8 alpha, beta, gamma, delta integer k1, k2, k3, k4 * go to ( 1, 2, 3, 4, 5, 6, 7, 8, 9,10, * 11,12,13,14,15,16,17,18,19,20, * 21,22,23,24,25,26,27,28,29,30, * 31,32,33,34,35,36,37,38,39,40, * 41,42,43,44,45,46,47,48,49,50, * 51,52,53,54,55,56,57,58,59,60, * 61,62,63,64,65,66,67,68,69,70, * 71,72,73,74,75,76,77,78,79,80) nexp cF1 FREUROTH (CUTE) * Extended Freudenstein & Roth * * Initial Point: [0.5, -2, ...,0.5, -2]. * 1 continue f = 0.d0 j=1 do i=1,n/2 t1=-13.d0+x(2*i-1)+5.d0*x(2*i)*x(2*i)-x(2*i)**3-2.d0*x(2*i) t2=-29.d0+x(2*i-1)+x(2*i)**3+x(2*i)**2-14.d0*x(2*i) f = f + t1*t1 + t2*t2 *-- g(j) =2.d0*(t1+t2) g(j+1)=2.d0*t1*(10.d0*x(2*i)-3.d0*x(2*i)*x(2*i)-2.d0) + * 2.d0*t2*(3.d0*x(2*i)*x(2*i)+2.d0*x(2*i)-14.d0) j=j+2 end do return cF2 Extended Trigonometric ET1 * * Initial Point: [0.2, 0.2, ....,0.2]. 2 continue s= float(n) do i=1,n s = s - dcos(x(i)) end do do i=1,n temp(i) = s + float(i)*(1.d0-dcos(x(i))) - dsin(x(i)) end do f = 0.d0 do i=1,n f = f + temp(i)**2 end do *-- s=0.d0 do i=1,n s = s + temp(i) end do do i=1,n g(i) = 2.d0*s*dsin(x(i)) + + 2.d0*temp(i)*(float(i)*dsin(x(i))-dcos(x(i))) end do return cF3 SROSENBR (CUTE) * Extended Rosenbrock function * * Initial point: [-1.2, 1, -1.2, 1, ..........., -1.2, 1] 3 continue c=1000.d0 f=0.d0 do i=1,n/2 f = f + c*(x(2*i)-x(2*i-1)**2)**2 + (1.d0-x(2*i-1))**2 end do *-- j=1 do i=1,n/2 g(j) = -4.d0*c*x(2*i-1)*(x(2*i)-x(2*i-1)**2) - * 2.d0*(1.d0-x(2*i-1)) g(j+1) = 2.d0*c*(x(2*i)-x(2*i-1)**2) j = j + 2 end do return cF4 Extended White & Holst function * * Initial point: [-1.2, 1, -1.2, 1, ..........., -1.2, 1] 4 continue c=1.d0 f=0.d0 do i=1,n/2 f = f + c*(x(2*i)-x(2*i-1)**3)**2 + (1.d0-x(2*i-1))**2 end do *-- j=1 do i=1,n/2 g(j) = -6.d0*c*x(2*i-1)*x(2*i-1)*(x(2*i)-x(2*i-1)**3) - * 2.d0*(1.d0-x(2*i-1)) g(j+1) = 2.d0*c*(x(2*i)-x(2*i-1)**3) j = j + 2 end do return * cF5 Extended Beale Function BEALE (CUTE) * * Initial Point: [1, 0.8, ...., 1, 0.8] * 5 continue * f=0.d0 j=1 do i=1,n/2 t1=1.5d0 -x(2*i-1)+x(2*i-1)*x(2*i) t2=2.25d0 -x(2*i-1)+x(2*i-1)*x(2*i)*x(2*i) t3=2.625d0-x(2*i-1)+x(2*i-1)*x(2*i)*x(2*i)*x(2*i) f = f + t1*t1 + t2*t2 + t3*t3 *-- g(j) =2.d0*t1*(-1.d0+x(2*i)) + * 2.d0*t2*(-1.d0+x(2*i)**2) + * 2.d0*t3*(-1.d0+x(2*i)**3) g(j+1)=2.d0*t1*x(2*i-1) + * 2.d0*t2*2.d0*x(2*i-1)*x(2*i) + * 2.d0*t3*3.d0*x(2*i-1)*x(2*i)*x(2*i) j=j+2 end do * return cF6 Extended Penalty Function U52 (MatrixRom) * * Intial Point: [1,2,3,.....,n]. * 6 continue temp1=0.d0 do i=1,n temp1 = temp1 + x(i)**2 end do * f = (temp1 - 0.25d0)**2 do i=1,n-1 f = f + (x(i)-1.d0)**2 end do *-- do i=1,n-1 g(i) = 2.d0*(x(i)-1.d0) + 4.d0*x(i)*(temp1-0.25d0) end do g(n) = 4.d0*x(n)*(temp1-0.25d0) return cF7 Perturbed Quadratic function * * Initial Point: [1, 1, ......,1]. * 7 continue temp1 = 0.d0 do i=1,n temp1 = temp1 + x(i) end do f = temp1*temp1/100.d0 do i=1,n f = f + float(i)*x(i)**2 end do *-- do i=1,n g(i) = float(i) * 2.d0 * x(i) + temp1/50.d0 end do return cF8 Raydan 1 Function * * Initial point: [1, 1, ..., 1] 8 continue f=0.d0 do i=1,n f = f + float(i) * (dexp(x(i))-x(i)) / 10.d0 end do *-- do i=1,n g(i) = float(i) * (dexp(x(i)) - 1.d0) / 10.d0 end do return cF9 Raydan 2 Function * * Initial Point: [1, 1, .....,1] * 9 continue f=0.d0 do i=1,n f = f + dexp(x(i)) - x(i) end do *-- do i=1,n g(i) = dexp(x(i)) - 1.d0 end do return cF10 TR-Summ of quadratics Function * * Initial Point: [1, 1, ....., 1] * 10 continue c = 100000.d0 f = 0.d0 do i=1,n-1 f = f + x(i)*x(i) + c*(x(i+1)+x(i)*x(i))**2 end do *-- g(1) = 2.d0*x(1) + 4.d0*c*(x(2)+x(1)*x(1))*x(1) do i=2,n-1 g(i) = 2.d0*c*(x(i)+x(i-1)**2) + 2.d0*x(i) + * 4.d0*c*(x(i+1)+x(i)*x(i))*x(i) end do g(n) = 2.d0*c*(x(n)+x(n-1)**2) return cF11 Diagonal1 Function * * Initial Point: [1/1, 1/2, ....., 1/n] * 11 continue f=0.d0 do i=1,n f = f + dexp(x(i)) - x(i)/float(i) end do *-- do i=1,n g(i) = dexp(x(i)) - 1.d0/float(i) end do return cF12 Diagonal2 Function * * Initial Point: [1,1,...,1] 12 continue f=0.d0 do i=1,n f = f + dexp(x(i)) - float(i)*dsin(x(i)) end do *-- do i=1,n g(i) = dexp(x(i)) - float(i)*dcos(x(i)) end do return cF13 Hager Function * * Initial Point: [1,1,...,1] 13 continue f=0.d0 do i=1,n f = f + dexp(x(i)) - x(i)*sqrt(float(i)) end do *-- do i=1,n g(i) = dexp(x(i)) - sqrt(float(i)) end do return cF14 Generalized Tridiagonal-1 Function * * Initial Point: [2,2,...,2] 14 continue f=0.d0 do i=1,n-1 u(i) = x(i) + x(i+1) - 3.d0 v(i) = x(i) - x(i+1) + 1.d0 end do do i=1,n-1 f = f + u(i)**2 + v(i)**4 end do *-- g(1) = 2.d0*u(1) + 4.d0*v(1)**3 do i=2,n-1 g(i) = 2.d0*u(i-1) - 4.d0*v(i-1)**3 + 2.d0*u(i) + 4.d0*v(i)**3 end do g(n) = 2.d0*u(n-1) - 4.d0*v(n-1)**3 return cF15 Extended Tridiagonal-1 Function * * Initial Point: [2,2,...,2] 15 continue f=0.d0 do i=1,n/2 u(i) = x(2*i-1) + x(2*i) - 3.d0 v(i) = x(2*i-1) - x(2*i) + 1.d0 end do do i=1,n/2 f = f + u(i)**2 + v(i)**4 end do *-- j=1 do i=1,n/2 g(j) = 2.d0*u(i) + 4.d0*v(i)**3 g(j+1) = 2.d0*u(i) - 4.d0*v(i)**3 j=j+2 end do return cF16 Extended Three Exponential Terms * * Intial Point: [0.1,0.1,.....,0.1]. * 16 continue f=0.d0 j=1 do i=1,n/2 t1= x(2*i-1) + 3.d0*x(2*i) - 0.1d0 t2= x(2*i-1) - 3.d0*x(2*i) - 0.1d0 t3=-x(2*i-1) - 0.1d0 f = f + dexp(t1) + dexp(t2) + dexp(t3) *-- g(j) = dexp(t1) + dexp(t2) - dexp(t3) g(j+1) = 3.d0*dexp(t1) - 3.d0*dexp(t2) j=j+2 end do return cF17 Generalized Tridiagonal-2 * Penta Diagonal * Initial point: [-1, -1, .........., -1., -1] 17 continue f = 0.d0 u(1) = 5.d0*x(1)-3.d0*x(1)**2-x(1)**3-3.d0*x(2)+1.d0 do i=2,n-1 u(i)=5.d0*x(i)-3.d0*x(i)**2-x(i)**3-x(i-1)-3.d0*x(i+1)+1.d0 end do u(n)=5.d0*x(n)-3.d0*x(n)**2-x(n)**3-x(n-1)+1.d0 do i=1,n f = f + u(i)**2 v(i) = 5.d0 -6.d0*x(i) -3.d0*x(i)**2 end do *-- g(1) = 2.d0*u(1)*v(1) - 2.d0*u(2) do i=2,n-1 g(i) = -6.d0*u(i-1) + 2.d0*u(i)*v(i) - 2.d0*u(i+1) end do g(n) = -6.d0*u(n-1) + 2.d0*u(n)*v(n) return cF18 Diagonal3 (1c1c) Function * * Initial point: [1, 1, .........., 1., 1] 18 continue c=10000.d0 f = 0.d0 do i=1,n/2 f = f + (x(2*i-1)**2 + c*x(2*i)**2)/2.d0 end do *-- j=1 do i=1,n/2 g(j) = x(2*i-1) g(j+1) = c*x(2*i) j=j+2 end do return cF19 Diagonal Full Borded * * Initial point: [0.1, 0.1, .........., 0.1] 19 continue f=(x(1)-1.d0)**4 + (x(n)**2-x(1)**2)**2 do i=1,n-2 temp(i) = sin(x(i+1)-x(n)) - x(1)**2 - x(i+1)**2 f = f + temp(i)*temp(i) end do *-- g(1) = 4.d0*(x(1)-1.d0)**3 - 4.d0*x(1)*(x(n)**2-x(1)**2) do i=1,n-2 g(1) = g(1) - 4.d0*temp(i)*x(1) end do do i=2,n-1 g(i) = 2.d0*temp(i-1)*(cos(x(i)-x(n))-2.d0*x(i)) end do g(n) = 4.d0*x(n)*(x(n)**2-x(1)**2) do i=1,n-2 g(n) = g(n) - 2.d0*temp(i)*cos(x(i+1)-x(n)) end do return cF20 HIMMELBC (CUTE) * Extended Himmelblau Function * * Initial Point: [1, 1, ....., 1] 20 continue f=0.d0 j=1 do i=1,n/2 u1 = x(2*i-1)**2 + x(2*i) - 11.d0 v1 = x(2*i-1) + x(2*i)**2 - 7.d0 f = f + u1*u1 + v1*v1 *-- g(j) = 4.d0*u1*x(2*i-1) + 2.d0*v1 g(j+1) = 2.d0*u1 + 4.d0*v1*x(2*i) j=j+2 end do return cF21 Extended Powell * * Initial Point: [3, -1, 0, 1, ......]. *------------------------------------------------------------------- * 21 continue f=0.d0 j=1 do i=1,n/4 t1= x(4*i-3) + 10.d0*x(4*i-2) t2= x(4*i-1) - x(4*i) t3= x(4*i-2) - 2.d0*x(4*i-1) t4= x(4*i-3) - x(4*i) f = f + t1*t1 + 5.d0*t2*t2 + t3**4 + 10.d0*t4**4 *-- g(j) = 2.d0*t1 + 40.d0*t4**3 g(j+1)= 20.d0*t1 + 4.d0*t3**3 g(j+2)= 10.d0*t2 - 8.d0*t3**3 g(j+3)= -10.d0*t2 - 40.d0*t4**3 j=j+4 end do return cF22 TR-DB1 * Tridiagonal Double Borded * Initial Point: [-1, -1, ...., -1] * 22 continue f = (x(1)-1.d0)**2 do i=1,n-1 temp(i) = x(1) - 0.5d0*x(i)**2 - 0.5d0*x(i+1)**2 f = f + temp(i)*temp(i) end do *-- g(1) = 2.d0*(x(1)-1.d0) + 2.d0*temp(1)*(1.d0-x(1)) do i=2,n-1 g(1) = g(1) + 2.d0*temp(i) end do do i=2,n-1 g(i) = -2.d0*x(i)*(temp(i-1) + temp(i)) end do g(n) = -2.d0*x(n)*temp(n-1) return cF23 Extended PSC1 Function * * Initial point: [3, 0.1, ..., 3, 0.1] 23 continue f = 0.d0 do i=1,n/2 f = f + (x(2*i-1)**2 +x(2*i)**2 +x(2*i-1)*x(2*i))**2 * + (dsin(x(2*i-1)))**2 + (dcos(x(2*i)))**2 end do *-- j=1 do i=1,n/2 g(j) = 2.d0*(x(2*i-1)**2+x(2*i)**2+x(2*i-1)*x(2*i)) * + (2.d0*x(2*i-1)+x(2*i)) + + 2.d0*(dsin(x(2*i-1)))*(dcos(x(2*i-1))) g(j+1) = 2.d0*(x(2*i-1)**2+x(2*i)**2+x(2*i-1)*x(2*i)) * + (2.d0*x(2*i)+x(2*i-1)) - + 2.d0*(dcos(x(2*i)))*(dsin(x(2*i))) j=j+2 end do return cF24 Extended Block Diagonal BD1 Function * * Initial Point: [0.1, 0.1, ..., 0.1]. * 24 continue f = 0.d0 j=1 do i=1,n/2 t1 = x(2*i-1)**2 + x(2*i)**2 - 2.d0 t2 = dexp(x(2*i-1)) - x(2*i) f = f + t1*t1 + t2*t2 *-- g(j) = 4.d0*t1*x(2*i-1) + 2.d0*t2*dexp(x(2*i-1)) g(j+1) = 4.d0*t1*x(2*i) - 2.d0*t2 j=j+2 end do return cF25 Extended Maratos Function * * Initial Point: [1.1, 0.1, ...,1.1, 0.1]. * 25 continue c = 1.d0 f = 0.d0 j=1 do i=1,n/2 t1 = x(2*i-1)**2 + x(2*i)**2 - 1.d0 f = f + (x(2*i-1) + c*t1*t1) *-- g(j) = 1.d0 + 4.d0 * c * t1 * x(2*i-1) g(j+1) = 4.d0 * c * t1 * x(2*i) j=j+2 end do return cF26 FH (m=500) * Full Hessian FH1 (Summ of Quadratics, Quadratic inside) * 26 continue m=500 f=0.d0 do i=1,m u(i)=0.d0 do j=1,n u(i) = u(i) + float(i)*float(j)*x(j)*x(j) end do f = f + (u(i)-1.d0)**2 end do *-- do j=1,n g(j) = 0.d0 do i=1,m g(j) = g(j) + 4.d0*(u(i)-1.d0)*float(i)*float(j)*x(j) end do end do return cF27 Extended CLIFF (CUTE) * * Initial Point: [0, -0.1, ......, 0, -0.1]. * 27 continue f=0.d0 j=1 do i=1,n/2 temp1 = (x(2*i-1)-3.d0)/100.d0 f = f+temp1*temp1-(x(2*i-1)-x(2*i))+dexp(20.d0*(x(2*i-1)-x(2*i))) *-- g(j) = temp1/50.d0 - 1.d0 + 20.d0*dexp(20.d0*(x(2*i-1)-x(2*i))) g(j+1) = 1.d0 - 20.d0*dexp(20.d0*(x(2*i-1)-x(2*i))) j=j+2 end do return cF28 Quadratic Diagonal Perturbed Function * * Initial Point: [0.5, 0.5, ......, 0.5]. * 28 continue temp1 = 0.d0 do i=1,n temp1 = temp1 + x(i) end do f = temp1*temp1 do i=1,n f = f + (float(i)/100.d0) * x(i)**2 end do *-- do i=1,n g(i) = float(i) * x(i) / 50.d0 + 2.d0*temp1 end do return cF29 FH2 * Full Hessian FH2 (Quadratic, perturbed with sin/cos) * Initial Point: [1, 1, ......, 1]. * 29 continue s = 0.d0 do i=1,n s = s + x(i) end do f = s*s do i=1,n f = f + float(i)*(dsin(x(i)) + dcos(x(i)))/1000.d0 end do *-- do i=1,n g(i) = 2.d0*s + float(i)*(dcos(x(i)) - dsin(x(i)))/1000.d0 end do return cF30 FH3 * Full Hessian FH3 (Quartic, perturbed with sin/cos) * Initial Point: [1, 1, ......, 1]. * 30 continue s = 0.d0 do i=1,n s = s + x(i)**2 end do f = s*s do i=1,n f = f + float(i)*(dsin(x(i)) + dcos(x(i)))/1000.d0 end do *-- do i=1,n g(i) = 4.d0*s*x(i) + float(i)*(dcos(x(i)) - dsin(x(i)))/1000.d0 end do return cF31 NONDQUAR * Tridiagonal Double Borded Arrow-Down * 31 continue f = (x(1)-x(2))**2 + (x(n-1)+x(n))**2 do i=1,n-2 f = f + (x(i)+x(i+1)+x(n))**4 end do *-- g(1) = 2.d0*(x(1)-x(2))+4.d0*(x(1)+x(2)+x(n))**3 g(2) =-2.d0*(x(1)-x(2))+4.d0*(x(1)+x(2)+x(n))**3 + * 4.d0*(x(2)+x(3)+x(n))**3 do i=3,n-2 g(i) = 4.d0*(x(i-1)+x(i)+x(n))**3 + * 4.d0*(x(i)+x(i+1)+x(n))**3 end do g(n-1) = 4.d0*(x(n-2)+x(n-1)+x(n))**3 + * 2.d0*(x(n-1)+x(n)) g(n) = 2.d0*(x(n-1)+x(n)) do i=1,n-2 g(n) = g(n) + 4.d0*(x(i)+x(i+1)+x(n))**3 end do return cF32 TR-WHITEHOLST * Tridiagonal. White-Holst (c=4) * Initial point x =[-1.2, 1, ..., -1.2, 1] * 32 continue c = 4.d0 f = 0.d0 do i=1,n-1 f = f + c*(x(i+1)-x(i)**3)**2 + (1.d0-x(i))**2 end do *-- g(1) = -6.d0*c*(x(2)-x(1)**3)*x(1)*x(1) - 2.d0*(1.d0-x(1)) do i=2,n-1 g(i) = 2.d0*c*(x(i)-x(i-1)**3) - * 6.d0*c*(x(i+1)-x(i)**3)*x(i)*x(i) - * 2.d0*(1.d0-x(i)) end do g(n) = 2.d0*c*(x(n)-x(n-1)**3) return cF33 D-DBAUP3 * Diagonal Double Borded Arrow Up * Initial point: x0=[4, 0, ....,4,0] * 33 continue f=0.d0 do i=1,n f = f + 4.d0*(x(i)*x(i) - x(1))**2 + (x(i)-1.d0)**2 end do *-- g(1) = 2.d0*(x(1)-1.d0) + 8.d0*(x(1)*x(1)-x(1))*(2.d0*x(1)-1.d0) do i=2,n g(1) = g(1) - 8.d0*(x(i)*x(i)-x(1)) end do do i=2,n g(i) = 16.d0*x(i)*(x(i)*x(i)-x(1)) + 2.d0*(x(i)-1.d0) end do return cF34 TRIDIA (CUTE) * * Initial point x0=[1,1,...,1]. * * 34 continue * alpha=5.d0 beta =1.d0 gamma=1.d0 delta=1.d0 f=gamma*(delta*x(1)-1.d0)**2 do i=2,n f = f + float(i)*(alpha*x(i)-beta*x(i-1))**2 end do *-- g(1) = 2.d0*gamma*(delta*x(1)-1.d0)*delta - * 4.d0*(alpha*x(2)-beta*x(1))*beta do i=2,n-1 g(i) = 2.d0*float(i)*(alpha*x(i)-beta*x(i-1))*alpha - * 2.d0*float(i+1)*(alpha*x(i+1)-beta*x(i))*beta end do g(n) = 2.d0*float(n)*(alpha*x(n)-beta*x(n-1))*alpha return cF35 ARWHEAD (CUTE) * * Initial point x0=[1,1,...,1]. * * 35 continue f=0.d0 do i=1,n-1 f = f + (-4.d0*x(i)+3.d0) + (x(i)**2+x(n)**2)**2 end do *-- do i=1,n-1 g(i) = -4.d0 + 4.d0*x(i)*(x(i)**2+x(n)**2) end do g(n) = 0.d0 do i=1,n-1 g(n) = g(n) + 4.d0*x(n)*(x(i)**2+x(n)**2) end do return cF36 * NONDIA (Shanno-78) (CUTE) * * Initial point x0=[-1,-1,...,-1]. * * 36 continue c=100.d0 f=(x(1)-1.d0)**2 + c*(x(1)-x(1)**2)**2 do i=2,n f = f + c*(x(1)-x(i)**2)**2 end do *-- g(1)=2.d0*(x(1)-1.d0) + 2.d0*c*(x(1)-x(1)**2)*(1.d0-2.d0*x(1)) do i=2,n g(1) = g(1) + 2.d0*c*(x(1)-x(i)**2) end do do i=2,n g(i) = -4.d0*c*x(i)*(x(1)-x(i)**2) end do return cF37 Extended Wood Function * WOODS (CUTE) * * Initial Point: [-3,-1,-3,-1,......] * 37 continue f=0.d0 j=1 do i=1,n/4 f = f + 100.d0*(x(4*i-3)**2-x(4*i-2))**2 * + (x(4*i-3)-1.d0)**2 * + 90.d0*(x(4*i-1)**2-x(4*i))**2 * + (1.d0-x(4*i-1))**2 * + 10.1d0*(x(4*i-2)-1.d0)**2 * + 10.1d0*(x(4*i) -1.d0)**2 * + 19.8d0*(x(4*i-2)-1.d0)*(x(4*i)-1.d0) *-- g(j) = 400.d0*(x(4*i-3)**2-x(4*i-2))*x(4*i-3) * + 2.d0*(x(4*i-3)-1.d0) g(j+1) =-200.d0*(x(4*i-3)**2-x(4*i-2)) * + 20.2d0*(x(4*i-2)-1.d0) * + 19.8d0*(x(4*i)-1.d0) g(j+2) = 360.d0*(x(4*i-1)**2-x(4*i))*x(4*i-1) * - 2.d0*(1.d0-x(4*i-1)) g(j+3) =-180.d0*(x(4*i-1)**2-x(4*i)) * + 20.2d0*(x(4*i) -1.d0) * + 19.8d0*(x(4*i-2)-1.d0) j=j+4 end do return cF38 Extended Hiebert Function * * Initial Point: [0,0,...0]. 38 continue c1 = 10.d0 c2 = 500.d0 f = 0.d0 j=1 do i=1,n/2 f = f + (x(2*i-1)-c1)**2 + (x(2*i-1)*x(2*i)-c2)**2 *-- g(j) = 2.d0*(x(2*i-1)-c1) * + 2.d0*(x(2*i-1)*x(2*i)-c2)*x(2*i) g(j+1) = 2.d0*(x(2*i-1)*x(2*i)-c2)*x(2*i-1) j=j+2 end do return cF39 BDQRTIC (CUTE) * * Initial point x0=[1.,1.,...,1.]. * * 39 continue * n4=n-4 f=0.d0 do i=1,n4 temp(i) = x(i)**2 + 2.d0*x(i+1)**2 + 3.d0*x(i+2)**2 * + 4.d0*x(i+3)**2 + 5.d0*x(n)**2 end do do i=1,n4 f = f + (-4.d0*x(i)+3.d0)**2 + temp(i)**2 end do *-- g(1) = -8.d0*(-4.d0*x(1)+3.d0) + * (4.d0*temp(1))*x(1) g(2) = -8.d0*(-4.d0*x(2)+3.d0) + * (8.d0*temp(1)+ 4.d0*temp(2))*x(2) g(3) = -8.d0*(-4.d0*x(3)+3.d0) + * (12.d0*temp(1)+ 8.d0*temp(2)+ 4.d0*temp(3))*x(3) g(4) = -8.d0*(-4.d0*x(4)+3.d0) + * (16.d0*temp(1)+12.d0*temp(2) +8.d0*temp(3)+ * 4.d0*temp(4))*x(4) do i=5,n4 g(i) = -8.d0*(-4.d0*x(i)+3.d0) + * (16.d0*temp(i-3)+12.d0*temp(i-2)+ * 8.d0*temp(i-1)+4.d0*temp(i))*x(i) end do g(n4+1) =(16.d0*temp(n4-2)+12.d0*temp(n4-1)+8.d0*temp(n4))*x(n4+1) g(n4+2) =(16.d0*temp(n4-1)+12.d0*temp(n4))*x(n4+2) g(n4+3) =(16.d0*temp(n4))*x(n4+3) tsum=0.d0 do i=1,n4 tsum = tsum + temp(i) end do g(n) = 20.d0*tsum*x(n) return cF40 DQDRTIC (CUTE) * * Initial point x0=[3,3,3...,3]. * * 40 continue c=1000.d0 d=1000.d0 f=0.d0 do i=1,n-2 f = f + (x(i)**2 + c*x(i+1)**2 + d*x(i+2)**2) end do *-- g(1) = 2.d0*x(1) g(2) = 2.d0*c*x(2) + 2.d0*x(2) do i=3,n-2 g(i) = 2.d0*(1.d0+d+c)*x(i) end do g(n-1) = 2.d0*(c+d)*x(n-1) g(n) = 2.d0*d*x(n) return cF41 EG2 (CUTE) * * Initial point x0=[1,1,1...,1]. * * 41 continue f=0.5d0*dsin(x(n)*x(n)) do i=1,n-1 f = f + dsin(x(1)+x(i)*x(i)-1.d0) end do *-- g(1)=(1.d0+2.d0*x(1))*dcos(x(1)+x(1)*x(1)-1.d0) do i=2,n-1 g(1) = g(1) + dcos(x(1)+x(i)*x(i)-1.d0) end do do i=2,n-1 g(i) = 2.d0*x(i)*dcos(x(1)+x(i)*x(i)-1.d0) end do g(n) = x(n)*dcos(x(n)*x(n)) return cF42 EDENSCH Function (CUTE) * * Initial Point: [0., 0., ..., 0.]. 42 continue f = 16.d0 do i=1,n-1 f = f + (x(i)-2.d0)**4 + * (x(i)*x(i+1)-2.d0*x(i+1))**2 + * (x(i+1)+1.d0)**2 end do *-- g(1) = 4.d0*(x(1)-2.d0)**3 + 2.d0*x(2)*(x(1)*x(2)-2.d0*x(2)) do i=2,n-1 g(i) = 2.d0*(x(i-1)*x(i)-2.d0*x(i))*(x(i-1)-2.d0) + * 2.d0*(x(i)+1.d0) + * 4.d0*(x(i)-2.d0)**3 + * 2.d0*x(i+1)*(x(i)*x(i+1)-2.d0*x(i+1)) end do g(n) = 2.d0*(x(n-1)*x(n)-2.d0*x(n))*(x(n-1)-2.d0) + * 2.d0*(x(n)+1.d0) return cF43 Broyden Pentadiagonal * * Initial point x0=[-1., -1., ..., -1.]. * 43 continue * temp(1) = 3.d0*x(1) - 2.d0*x(1)*x(1) do i=2,n-1 temp(i) = 3.d0*x(i)-2.d0*x(i)*x(i)-x(i-1)-2.d0*x(i+1)+1.d0 end do temp(n) = 3.d0*x(n)-2.d0*x(n)*x(n)-x(n-1)+1.d0 f = 0.d0 do i=1,n f = f + temp(i)*temp(i) end do *-- g(1) = 2.d0*temp(1)*(3.d0-4.d0*x(1)) - 2.d0*temp(2) g(2) = 2.d0*temp(2)*(3.d0-4.d0*x(2)) - 2.d0*temp(3) do i=3,n-1 g(i) = -4.d0*temp(i-1) * +2.d0*temp(i)*(3.d0-4.d0*x(i)) * -2.d0*temp(i+1) end do g(n) = -4.d0*temp(n-1) + 2.d0*temp(n)*(3.d0-4.d0*x(n)) return cF44 Almost Perturbed Quadratic * * Initial point x0=[0.5, 0.5, ...,0.5]. * 44 continue * f = ((x(1)+x(n))**2)/100.d0 do i=1,n f = f + float(i)*x(i)*x(i) end do *-- g(1) = 2.d0*x(1) + (x(1)+x(n))/50.d0 do i=2,n-1 g(i) = 2.d0*float(i)*x(i) end do g(n) = 2.d0*float(n)*x(n) + (x(1)+x(n))/50.d0 return cF45 Almost Perturbed Quartic * * Initial point x0=[0.5, 0.5, ...,0.5]. * 45 continue * f = ((x(1)+x(n))**2)/100.d0 do i=1,n f = f + float(i)*x(i)**4 end do *-- g(1) = 4.d0*x(1)**3 + (x(1)+x(n))/50.d0 do i=2,n-1 g(i) = 4.d0*float(i)*x(i)**3 end do g(n) = 4.d0*float(n)*x(n)**3 + (x(1)+x(n))/50.d0 return cF46 FLETCHCR (CUTE) * * Initial Point: [0.5,0.5,...0.5] 46 continue f=0.d0 do i=1,n-1 f = f + 100.d0*(x(i+1)-x(i)+1.d0-x(i)*x(i))**2 end do *-- g(1) = 200.d0*(x(2)-x(1)+1.d0-x(1)*x(1))*(-1.d0-2.d0*x(1)) do i=2,n-1 g(i) = 200.d0*(x(i)-x(i-1)+1.d0-x(i-1)*x(i-1))+ * 200.d0*(x(i+1)-x(i)+1.d0-x(i)*x(i))*(-1.d0-2.d0*x(i)) end do g(n) = 200.d0*(x(n)-x(n-1)+1.d0-x(n-1)**2) return cF47 ENGVAL1 (CUTE) * * Initial point x0=[2.,2.,2...,2.]. * 47 continue do i=1,n-1 t(i) = x(i)*x(i) + x(i+1)*x(i+1) end do f = 0.d0 do i=1,n-1 f = f + t(i)*t(i) + (-4.d0*x(i) + 3.d0) end do *-- g(1) = 4.d0*x(1)*t(1) - 4.d0 do i=2,n-1 g(i) = 4.d0*x(i)*t(i-1) + 4.d0*x(i)*t(i) - 4.d0 end do g(n) = 4.d0*x(n)*t(n-1) return cF48 DENSCHNA (CUTE) * * Initial point: [8, 8,...,8] * 48 continue f=0.d0 do i=1,n/2 f = f + x(2*i-1)**4 + * (x(2*i-1)+x(2*i))**2 + * (-1.d0+dexp(x(2*i)))**2 end do *-- j=1 do i=1,n/2 g(j) = 4.d0*x(2*i-1)**3 + 2.d0*(x(2*i-1)+x(2*i)) g(j+1) = 2.d0*(x(2*i-1)+x(2*i)) + * 2.d0*(dexp(x(2*i)))*(-1.d0+dexp(x(2*i))) j=j+2 end do return cF49 DENSCHNB (CUTE) * * Initial point: [0.1, 0.1,...,0.1] 49 continue f=0.d0 do i=1,n/2 f = f + (x(2*i-1)-2.d0)**2 + * ((x(2*i-1)-2.d0)**2)*(x(2*i)**2) + * (x(2*i)+1.d0)**2 end do *-- j=1 do i=1,n/2 g(j) = 2.d0*(x(2*i-1)-2.d0) + 2.d0*(x(2*i-1)-2.d0)*x(2*i)*x(2*i) g(j+1) = ((x(2*i-1)-2.d0)**2)*2.d0*x(2*i) + 2.d0*(x(2*i)+1.d0) j=j+2 end do return cF50 DENSCHNC (CUTE) * * Initial point: [8, 8,...,8] 50 continue f=0.d0 do i=1,n/2 f = f + (-2.d0+x(2*i-1)**2+x(2*i)**2)**2 + * (-2.d0+dexp(x(2*i-1)-1.d0)+x(2*i)**3)**2 end do *-- j=1 do i=1,n/2 g(j) = 4.d0*x(2*i-1)*(-2.d0+x(2*i-1)**2+x(2*i)**2)+ * 2.d0*(dexp(x(2*i-1)-1.d0))*(-2.d0+dexp(x(2*i-1)-1.d0)+x(2*i)**3) g(j+1) = 4.d0*x(2*i)*(-2.d0+x(2*i-1)**2+x(2*i)**2)+ * 6.d0*(x(2*i)**2)*(-2.d0+dexp(x(2*i-1)-1.d0)+x(2*i)**3) j=j+2 end do return cF51 DENSCHNF (CUTE) * * Initial point: [2,0,2,0,...,2,0] 51 continue f=0.d0 do i=1,n/2 f=f+(2.d0*(x(2*i-1)+x(2*i))**2+(x(2*i-1)-x(2*i))**2-8.d0)**2+ * (5.d0*x(2*i-1)**2+(x(2*i)-3.d0)**2-9.d0)**2 end do *-- j=1 do i=1,n/2 g(j)=2.d0*(2.d0*(x(2*i-1)+x(2*i))**2+(x(2*i-1)-x(2*i))**2-8.d0)* * (4.d0*(x(2*i-1)+x(2*i))+2.d0*(x(2*i-1)-x(2*i))) + * 2.d0*(5.d0*x(2*i-1)**2+(x(2*i)-3.d0)**2-9.d0)*10.d0*x(2*i-1) g(j+1)=2.d0*(2.d0*(x(2*i-1)+x(2*i))**2+(x(2*i-1)-x(2*i))**2-8.d0)* * (4.d0*(x(2*i-1)+x(2*i))-2.d0*(x(2*i-1)-x(2*i))) + * 2.d0*(5.d0*x(2*i-1)**2+(x(2*i)-3.d0)**2-9.d0)*2.d0*(x(2*i)-3.d0) j=j+2 end do return cF52 SINQUAD (CUTE) * * Initial Point: [0.1, 0.1, ..., 0.1] 52 continue f=(x(1)-1.d0)**4 + (x(n)**2-x(1)**2)**2 do i=1,n-2 t(i) = dsin(x(i+1)-x(n)) - x(1)**2 + x(i+1)**2 f = f + t(i)*t(i) end do *-- g(1) = 4.d0*(x(1)-1.d0)**3 - 4.d0*x(1)*(x(n)**2-x(1)**2) do i=1,n-2 g(1) = g(1) - 4.d0*t(i)*x(1) end do do i=2,n-1 g(i) = 2.d0*t(i-1)*(dcos(x(i)-x(n))+2.d0*x(i)) end do g(n) = 4.d0*x(n)*(x(n)**2-x(1)**2) do i=1,n-2 g(n) = g(n) - 2.d0*t(i)*dcos(x(i+1)-x(n)) end do return cF53 HIMMELBG (CUTE) * * Initial Point: [1.5,1.5,...,1.5] 53 continue f=0.d0 do i=1,n/2 f = f + (2.d0*x(2*i-1)**2+3.d0*x(2*i)**2)* * (dexp(-x(2*i-1)-x(2*i))) end do *-- j=1 do i=1,n/2 t1 = 2.d0*x(2*i-1)**2+3.d0*x(2*i)**2 t2 = dexp(-x(2*i-1)-x(2*i)) g(j) = 4.d0*x(2*i-1)*t2 - t1*t2 g(j+1) = 6.d0*x(2*i)*t2 - t1*t2 j=j+2 end do return cF54 HIMMELBH (CUTE) * * Initial Point: [1.5,1.5,...,1.5] 54 continue f= 0.d0 do i=1,n/2 f=f+(-3.d0*x(2*i-1)-2.d0*x(2*i)+2.d0+x(2*i-1)**3 + x(2*i)**2) end do *-- j=1 do i=1,n/2 g(j) = -3.d0 + 3.d0*x(2*i-1)**2 g(j+1) = -2.d0 + 2.d0*x(2*i) j=j+2 end do return cF55 DIXON3DQ (CUTE) * * Initial Point x0=[-1, -1,..., -1] * 55 continue f=(x(1)-2.d0)**2 do i=1,n-1 f = f + (x(i)-x(i+1))**2 end do f = f + (x(n)-1.d0)**2 *-- g(1) = 2.d0*(x(1)-2.d0) + 2.d0*(x(1)-x(2)) do i=2,n-1 g(i) = -2.d0*(x(i-1)-x(i)) + 2.d0*(x(i)-x(i+1)) end do g(n) = -2.d0*(x(n-1)-x(n)) + 2.d0*(x(n)-1.d0) return cF56 BIGGSB1 (CUTE) * * Initial Point: [0., 0., ....,0.] 56 continue f=(x(1)-1.d0)**2 + (1.d0-x(n))**2 do i=2,n f = f + (x(i)-x(i-1))**2 end do *-- g(1) = 4.d0*x(1) - 2.d0*x(2) - 2.d0 do i=2,n-1 g(i) = 4.d0*x(i) - 2.d0*x(i-1) - 2.d0*x(i+1) end do g(n) = 4.d0*x(n) - 2.d0*x(n-1) - 2.d0 return cF57 Perturbed Quadratic function * * Initial Point: [0.5, 0.5, ......, 0.5]. * 57 continue temp1 = 0.d0 do i=1,n temp1 = temp1 + float(i)*x(i) end do f = temp1*temp1 do i=1,n f = f + float(i)*x(i)**2 end do *-- do i=1,n g(i) = float(i)*2.d0*x(i) + 2.d0*temp1*float(i) end do return cF58 GENROSNB (CUTE) * * Initial Point: [-1.2, 1, ... -1.2, 1] 58 continue f = (x(1)-1.d0)**2 do i=2,n f = f + 100.d0*(x(i)-x(i-1)**2)**2 end do *-- g(1) = 2.d0*(x(1)-1.d0)-400.d0*x(1)*(x(2)-x(1)**2) do i=2,n-1 g(i) = 200.d0*(x(i)-x(i-1)**2)-400.d0*x(i)*(x(i+1)-x(i)**2) end do g(n) = 200.d0*(x(n)-x(n-1)**2) return cF59 QP1 Extended Quadratic Penalty * * Initial Point: [1, 1, ......,1]. * 59 continue t1=0.d0 do i=1,n t1 = t1 + x(i)*x(i) end do t1 = t1 - 0.5d0 f = 0.d0 do i=1,n-1 f = f + (x(i)*x(i) - 2.d0)**2 g(i) = 4.d0*(x(i)*x(i)-2.d0)*x(i) + 4.d0*t1*x(i) end do f = f + t1*t1 g(n) = 4.d0*t1*x(n) return cF60 QP2 Quadratic Penalty QP2 Function * * Initial Point: [1, 1, ......,1]. * 60 continue t1=0.d0 do i=1,n t1 = t1 + x(i)*x(i) end do t1 = t1 - 100.d0 f = 0.d0 do i=1,n-1 f = f + (x(i)*x(i) - dsin(x(i)))**2 g(i) = 2.d0*(x(i)*x(i)-dsin(x(i)))*(2.d0*x(i)-dcos(x(i))) * + 4.d0*t1*x(i) end do f = f + t1*t1 g(n) = 4.d0*t1*x(n) return cF61 STAIRCASE S1 * * Initial point x0=[1,1,...,1]. * 61 continue f=0.d0 do i=1,n-1 f = f + (x(i)+x(i+1)-float(i))**2 end do *-- g(1) = 2.d0*(x(1)+x(2)-1.d0) do i=2,n-1 g(i) = 2.d0*(x(i-1)+x(i)-float(i-1)) + * 2.d0*(x(i)+x(i+1)-float(i)) end do g(n) = 2.d0*(x(n-1)+x(n)-float(n-1)) return cF62 STAIRCASE S2 * * Initial point x0=[1,1,...,1]. * 62 continue f = 0.d0 do i=2,n f = f + (x(i-1)+x(i)-float(i))**2 end do *-- g(1)=2.d0*(x(1)+x(2)-2.d0) do i=2,n-1 g(i) = 2.d0*(x(i-1)+x(i)-float(i)) + * 2.d0*(x(i)+x(i+1)-float(i+1)) end do g(n) = 2.d0*(x(n-1)+x(n)-float(n)) return cF63 STAIRCASE S3 * * Initial point x0=[2,2,...,2]. * 63 continue f = 0.d0 do i=2,n f = f + (x(i-1)+x(i)+float(i))**2 end do *-- g(1) = 2.d0*(x(1)+x(2)+2.d0) do i=2,n-1 g(i) = 2.d0*(x(i-1)+x(i)+float(i))+ * 2.d0*(x(i)+x(i+1)+float(i+1)) end do g(n) = 2.d0*(x(n-1)+x(n)+float(n)) return cF64 Extended Trigonometric ET2 * * Initial Point: [0.2, 0.2, ....,0.2]. 64 continue s= float(n) do i=1,n s = s - dsin(x(i)) end do do i=1,n temp(i) = s + float(i)*(1.d0-dsin(x(i))) - dsin(x(i)) end do f = 0.d0 do i=1,n f = f + temp(i)**2 end do *-- s=0.d0 do i=1,n s = s + temp(i) end do do i=1,n g(i) = -2.d0*s*dcos(x(i)) + + 2.d0*temp(i)*(-float(i)*dcos(x(i))-dcos(x(i))) end do return cF65 QP3 Extended Quadratic Penalty * * Initial Point: [1., 1., ....,1.]. 65 continue t1=0.d0 do i=1,n t1 = t1 + x(i)*x(i) end do t1 = t1 - 0.25d0 f = t1*t1 do i=1,n-1 f = f - (x(i)*x(i) - 1.d0)**2 g(i) = -4.d0*(x(i)*x(i)-1.d0)*x(i) + 4.d0*t1*x(i) end do g(n) = 4.d0*t1*x(n) return cF66 EG3 * * Initial point x0=[1,1,1...,1]. * * 66 continue f=0.5d0*dcos(x(n)*x(n)) do i=1,n-1 f = f + dcos(x(1)+x(i)*x(i)-1.d0) end do *-- g(1)=-(1.d0+2.d0*x(1))*dsin(x(1)+x(1)*x(1)-1.d0) do i=2,n-1 g(1) = g(1) - dsin(x(1)+x(i)*x(i)-1.d0) end do do i=2,n-1 g(i) = -2.d0*x(i)*dsin(x(1)+x(i)*x(i)-1.d0) end do g(n) = -x(n)*dsin(x(n)*x(n)) return cF67 GENROSEN-2 * * Initial point x0=[-1.2, 1, -1.2, 1,...,1]. * * 67 continue c = 100.d0 f = (x(1)-1.d0)**2 do i=2,n f = f + c*(x(i-1)**2-x(i))**2 end do *-- g(1) = 2.d0*(x(1)-1.d0) + 4.d0*c*(x(1)**2-x(2))*x(1) do i=2,n-1 g(i)=-2.d0*c*(x(i-1)**2-x(i))+4.d0*c*(x(i)**2-x(i+1))*x(i) end do g(n) = -2.d0*c*(x(n-1)**2-x(n)) return cF68 PRODsin (m=n-1) * * Initial point x0=[5. 5, 5, 5,...,5]. * * 68 continue m = n-1 t1=0.d0 t2=0.d0 do i=1,m t1 = t1 + x(i)*x(i) end do do i=1,n t2 = t2 + dsin(x(i)) end do f = t1*t2 *-- do i=1,m g(i) = 2.d0*x(i)*t2 + t1*dcos(x(i)) end do do i=m+1,n g(i) = t1*dcos(x(i)) end do return cF69 PROD1 (m=n) * * Initial point x0=[1. 1, 1, 1,...,1]. * * 69 continue m = n t1=0.d0 t2=0.d0 do i=1,m t1 = t1 + x(i) end do do i=1,n t2 = t2 + x(i) end do f = t1*t2 *-- do i=1,m g(i) = t1+t2 end do do i=m+1,n g(i) = t1 end do return cF70 PRODcos (m=n-1) * * Initial point x0=[5. 5, 5, 5,...,5]. * * 70 continue m = n-1 t1=0.d0 t2=0.d0 do i=1,m t1 = t1 + x(i)*x(i) end do do i=1,n t2 = t2 + dcos(x(i)) end do f = t1*t2 *-- do i=1,m g(i) = 2.d0*x(i)*t2 - t1*dsin(x(i)) end do do i=m+1,n g(i) = -t1*dsin(x(i)) end do return cF71 PROD2 (m=1) * * Initial point x0=[15. 15, 15, 15,...,15]. * * 71 continue m = 1 t1=0.d0 t2=0.d0 do i=1,m t1 = t1 + x(i)**4 end do do i=1,n t2 = t2 + float(i)*x(i) end do f = t1*t2 *-- do i=1,m g(i) = 4.d0*t2*x(i)**3 + float(i)*t1 end do do i=m+1,n g(i) = float(i)*t1 end do return cF72 ARGLINB (m=5) * * Initial point x0=[0.01 0.001, .... ,0.01 0.001]. * * 72 continue m=5 f=0.d0 do i=1,m u(i)=0.d0 do j=1,n u(i) = u(i) + float(i)*float(j)*x(j) end do f = f + (u(i)-1.d0)**2 end do *-- do j=1,n g(j) = 0.d0 do i=1,m g(j) = g(j) + 2.d0*(u(i)-1.d0)*float(i)*float(j) end do end do return cF73 DIXMAANA (CUTE) * * Initial point x0=[2.,2.,2...,2.]. * Modified m=n/4 73 continue * alpha = 1.d0 beta = 0.d0 gamma = 0.125d0 delta = 0.125d0 k1 = 0 k2 = 0 k3 = 0 k4 = 0 m = n/4 f = 1.d0 do i=1,n f = f + alpha * x(i)*x(i)*((float(i)/float(n))**k1) end do do i=1,n-1 f = f + beta * x(i)*x(i)*((x(i+1)+x(i+1)*x(i+1))**2) * * ((float(i)/float(n))**k2) end do do i=1,2*m f = f + gamma * x(i)*x(i) * (x(i+m)**4) * * ((float(i)/float(n))**k3) end do do i=1,m f = f + delta * x(i) * x(i+2*m) * * ((float(i)/float(n))**k4) end do *-- do i=1,n g(i) =0.d0 end do c1 do i=1,n g(i) = g(i) + 2.d0*alpha*x(i)*((float(i)/float(n))**k1) end do c2 g(1) = g(1) + 2.d0*beta*x(1)*((x(2)+x(2)*x(2))**2)* * ((float(1)/float(n))**k2) do i=2,n-1 g(i) = g(i) + 2.d0*beta*(x(i-1)**2)*(x(i)+x(i)**2)* * (1.d0+2.d0*x(i))*((float(i-1)/float(n))**k2)+ * 2.d0*beta*x(i)*((x(i+1)+x(i+1)**2)**2)* * ((float(i)/float(n))**k2) end do g(n) = g(n) + 2.d0*beta*(x(n-1)**2)*(x(n)+x(n)**2)* * (1.d0+2.d0*x(n)) c3 do i=1,2*m g(i) = g(i) + 2.d0*gamma*x(i)*(x(i+m)**4)* * ((float(i)/float(n))**k3) g(i+m) = g(i+m) + gamma*(x(i)**2)*4.d0*(x(i+m)**3)* * ((float(i)/float(n))**k3) end do c4 do i=1,m g(i) = g(i) + delta*x(i+2*m)*((float(i)/float(n))**k4) g(i+2*m) = g(i+2*m) + delta*x(i)*((float(i)/float(n))**k4) end do return cF74 DIXMAANB (CUTE) * * Initial point x0=[2.,2.,2...,2.]. * Modified m=n/4 74 continue * alpha = 1.d0 beta = 0.0625d0 gamma = 0.0625d0 delta = 0.0625d0 k1 = 0 k2 = 0 k3 = 0 k4 = 1 m = n/4 f = 1.d0 do i=1,n f = f + alpha * x(i)*x(i)*((float(i)/float(n))**k1) end do do i=1,n-1 f = f + beta * x(i)*x(i)*((x(i+1)+x(i+1)*x(i+1))**2) * * ((float(i)/float(n))**k2) end do do i=1,2*m f = f + gamma * x(i)*x(i) * (x(i+m)**4) * * ((float(i)/float(n))**k3) end do do i=1,m f = f + delta * x(i) * x(i+2*m) * * ((float(i)/float(n))**k4) end do *-- do i=1,n g(i) =0.d0 end do c1 do i=1,n g(i) = g(i) + 2.d0*alpha*x(i)*((float(i)/float(n))**k1) end do c2 g(1) = g(1) + 2.d0*beta*x(1)*((x(2)+x(2)*x(2))**2)* * ((float(1)/float(n))**k2) do i=2,n-1 g(i) = g(i) + 2.d0*beta*(x(i-1)**2)*(x(i)+x(i)**2)* * (1.d0+2.d0*x(i))*((float(i-1)/float(n))**k2)+ * 2.d0*beta*x(i)*((x(i+1)+x(i+1)**2)**2)* * ((float(i)/float(n))**k2) end do g(n) = g(n) + 2.d0*beta*(x(n-1)**2)*(x(n)+x(n)**2)* * (1.d0+2.d0*x(n)) c3 do i=1,2*m g(i) = g(i) + 2.d0*gamma*x(i)*(x(i+m)**4)* * ((float(i)/float(n))**k3) g(i+m) = g(i+m) + gamma*(x(i)**2)*4.d0*(x(i+m)**3)* * ((float(i)/float(n))**k3) end do c4 do i=1,m g(i) = g(i) + delta*x(i+2*m)*((float(i)/float(n))**k4) g(i+2*m) = g(i+2*m) + delta*x(i)*((float(i)/float(n))**k4) end do return cF75 DIXMAANC (CUTE) * * Initial point x0=[2.,2.,2...,2.]. * Modified m=n/4 75 continue * alpha = 1.d0 beta = 0.125d0 gamma = 0.125d0 delta = 0.125d0 k1 = 0 k2 = 0 k3 = 0 k4 = 0 m = n/4 f = 1.d0 do i=1,n f = f + alpha * x(i)*x(i)*((float(i)/float(n))**k1) end do do i=1,n-1 f = f + beta * x(i)*x(i)*((x(i+1)+x(i+1)*x(i+1))**2) * * ((float(i)/float(n))**k2) end do do i=1,2*m f = f + gamma * x(i)*x(i) * (x(i+m)**4) * * ((float(i)/float(n))**k3) end do do i=1,m f = f + delta * x(i) * x(i+2*m) * * ((float(i)/float(n))**k4) end do *-- do i=1,n g(i) =0.d0 end do c1 do i=1,n g(i) = g(i) + 2.d0*alpha*x(i)*((float(i)/float(n))**k1) end do c2 g(1) = g(1) + 2.d0*beta*x(1)*((x(2)+x(2)*x(2))**2)* * ((float(1)/float(n))**k2) do i=2,n-1 g(i) = g(i) + 2.d0*beta*(x(i-1)**2)*(x(i)+x(i)**2)* * (1.d0+2.d0*x(i))*((float(i-1)/float(n))**k2)+ * 2.d0*beta*x(i)*((x(i+1)+x(i+1)**2)**2)* * ((float(i)/float(n))**k2) end do g(n) = g(n) + 2.d0*beta*(x(n-1)**2)*(x(n)+x(n)**2)* * (1.d0+2.d0*x(n)) c3 do i=1,2*m g(i) = g(i) + 2.d0*gamma*x(i)*(x(i+m)**4)* * ((float(i)/float(n))**k3) g(i+m) = g(i+m) + gamma*(x(i)**2)*4.d0*(x(i+m)**3)* * ((float(i)/float(n))**k3) end do c4 do i=1,m g(i) = g(i) + delta*x(i+2*m)*((float(i)/float(n))**k4) g(i+2*m) = g(i+2*m) + delta*x(i)*((float(i)/float(n))**k4) end do return cF76 DIXMAAND (CUTE) * * Initial point x0=[2.,2.,2...,2.]. * Modified m=n/4 76 continue * alpha = 1.d0 beta = 0.26d0 gamma = 0.26d0 delta = 0.26d0 k1 = 0 k2 = 0 k3 = 0 k4 = 0 m = n/4 f = 1.d0 do i=1,n f = f + alpha * x(i)*x(i)*((float(i)/float(n))**k1) end do do i=1,n-1 f = f + beta * x(i)*x(i)*((x(i+1)+x(i+1)*x(i+1))**2) * * ((float(i)/float(n))**k2) end do do i=1,2*m f = f + gamma * x(i)*x(i) * (x(i+m)**4) * * ((float(i)/float(n))**k3) end do do i=1,m f = f + delta * x(i) * x(i+2*m) * * ((float(i)/float(n))**k4) end do *-- do i=1,n g(i) =0.d0 end do c1 do i=1,n g(i) = g(i) + 2.d0*alpha*x(i)*((float(i)/float(n))**k1) end do c2 g(1) = g(1) + 2.d0*beta*x(1)*((x(2)+x(2)*x(2))**2)* * ((float(1)/float(n))**k2) do i=2,n-1 g(i) = g(i) + 2.d0*beta*(x(i-1)**2)*(x(i)+x(i)**2)* * (1.d0+2.d0*x(i))*((float(i-1)/float(n))**k2)+ * 2.d0*beta*x(i)*((x(i+1)+x(i+1)**2)**2)* * ((float(i)/float(n))**k2) end do g(n) = g(n) + 2.d0*beta*(x(n-1)**2)*(x(n)+x(n)**2)* * (1.d0+2.d0*x(n)) c3 do i=1,2*m g(i) = g(i) + 2.d0*gamma*x(i)*(x(i+m)**4)* * ((float(i)/float(n))**k3) g(i+m) = g(i+m) + gamma*(x(i)**2)*4.d0*(x(i+m)**3)* * ((float(i)/float(n))**k3) end do c4 do i=1,m g(i) = g(i) + delta*x(i+2*m)*((float(i)/float(n))**k4) g(i+2*m) = g(i+2*m) + delta*x(i)*((float(i)/float(n))**k4) end do return cF77 DIXMAANL (CUTE) * * Initial point x0=[2.,2.,2...,2.]. * Modified m=n/4 77 continue * alpha = 1.d0 beta = 0.26d0 gamma = 0.26d0 delta = 0.26d0 k1 = 2 k2 = 0 k3 = 0 k4 = 2 m = n/4 f = 1.d0 do i=1,n f = f + alpha * x(i)*x(i)*((float(i)/float(n))**k1) end do do i=1,n-1 f = f + beta * x(i)*x(i)*((x(i+1)+x(i+1)*x(i+1))**2) * * ((float(i)/float(n))**k2) end do do i=1,2*m f = f + gamma * x(i)*x(i) * (x(i+m)**4) * * ((float(i)/float(n))**k3) end do do i=1,m f = f + delta * x(i) * x(i+2*m) * * ((float(i)/float(n))**k4) end do *-- do i=1,n g(i) =0.d0 end do c1 do i=1,n g(i) = g(i) + 2.d0*alpha*x(i)*((float(i)/float(n))**k1) end do c2 g(1) = g(1) + 2.d0*beta*x(1)*((x(2)+x(2)*x(2))**2)* * ((float(1)/float(n))**k2) do i=2,n-1 g(i) = g(i) + 2.d0*beta*(x(i-1)**2)*(x(i)+x(i)**2)* * (1.d0+2.d0*x(i))*((float(i-1)/float(n))**k2)+ * 2.d0*beta*x(i)*((x(i+1)+x(i+1)**2)**2)* * ((float(i)/float(n))**k2) end do g(n) = g(n) + 2.d0*beta*(x(n-1)**2)*(x(n)+x(n)**2)* * (1.d0+2.d0*x(n)) c3 do i=1,2*m g(i) = g(i) + 2.d0*gamma*x(i)*(x(i+m)**4)* * ((float(i)/float(n))**k3) g(i+m) = g(i+m) + gamma*(x(i)**2)*4.d0*(x(i+m)**3)* * ((float(i)/float(n))**k3) end do c4 do i=1,m g(i) = g(i) + delta*x(i+2*m)*((float(i)/float(n))**k4) g(i+2*m) = g(i+2*m) + delta*x(i)*((float(i)/float(n))**k4) end do return cF78 VARDIM (CUTE) * * Initial point x0=[1-1/n, 1-2/n,...,1-n/n.]. * Modified m=n/4 78 continue s = float(n)*float(n+1)/2.d0 t1=0.d0 do i=1,n t1 = t1 + float(i)*x(i) end do t1 = t1-s f = 0.d0 do i=1,n f = f + (x(i)-1.d0)**2 end do f = f + t1**2 + t1**4 *-- do i=1,n g(i) = 2.d0*(x(i)-1.d0) + 2.d0*t1*float(i) + 4.d0*float(i)*t1**3 end do return cF79 DIAG-AUP1 * * Initial point x0=[4., 4., ....4.]. * 79 continue f=0.d0 do i=1,n f = f + 4.d0*(x(i)*x(i) - x(1))**2 + (x(i)**2-1.d0)**2 end do *-- g(1) = 4.d0*(x(1)**2-1.d0)*x(1) + * 8.d0*(x(1)*x(1)-x(1))*(2.d0*x(1)-1.d0) do i=2,n g(1) = g(1) - 8.d0*(x(i)*x(i)-x(1)) end do do i=2,n g(i) = 16.d0*x(i)*(x(i)*x(i)-x(1)) + 4.d0*(x(i)**2-1.d0)*x(i) end do return cF80 ENGVAL8 * * Initial point x0=[2., 2., ....2.]. * 80 continue f = 0.d0 do i=1,n-1 f = f + (x(i)**2+x(i+1)**2)**2 - (7.d0-8.d0*x(i)) end do *-- g(1) = 4.d0*(x(1)**2+x(2)**2)*x(1) + 8.d0 do i=2,n-1 g(i)=4.d0*(x(i-1)**2+x(i)**2)*x(i) + * 4.d0*(x(i)**2+x(i+1)**2)*x(i) + 8.d0 end do g(n) = 4.d0*(x(n-1)**2+x(n)**2)*x(n) return *** end c------------------------------------------------ End EVALFG *