$ontext Find the chain (of uniform density) of length L suspended between two points with minimal potential energy. This model is from the COPS benchmarking suite. See http://www-unix.mcs.anl.gov/~more/cops/. The number of intervals for the discretization can be specified using the command line parameter --nh. COPS performance tests have been reported for nh = 50, 100, 200, 400 Tested with nh=3000, 4000, 5000; May 26, 2005 References: Neculai Andrei, "Models, Test Problems and Applications for Mathematical Programming". Technical Press, Bucharest, 2003. Application A7, page 350. Dolan, E D, and More, J J, Benchmarking Optimization Software with COPS. Tech. rep., Mathematics and Computer Science Division, 2000. Cesari, L, Optimization - Theory and Applications. Springer Verlag, 1983. $offtext $if set n $set nh %n% $if not set nh $set nh 400 set nh /i0 * i%nh%/; alias(nh,i); scalars L length of the suspended chain / 4 / a height of the chain at t=0 (left) / 1 / b height of the chain at t=1 (left) / 3 / tf ODEs defined in [0 tf] / 1 / h uniform interval length n number of subintervals tmin; if (b>a, tmin = 0.25 else tmin = 0.75); n = card(nh) - 1; h = tf/n; variables x(i) height of the chain u(i) derivative of x energy potential energy ; x.fx('i0') = a; x.fx('i%nh%') = b; x.l(i) = 4*abs(b-a)*((ord(i)-1)/n)*(0.5*((ord(i)-1)/n) - tmin) + a; u.l(i) = 4*abs(b-a)*(((ord(i)-1)/n) - tmin); *Equations equations obj, x_eqn(i), length_eqn ; obj.. energy =e= 0.5*h*sum(nh(i+1), x(i)*sqrt(1+sqr(u(i))) + x(i+1)*sqrt(1+sqr(u(i+1)))); x_eqn(i+1).. x(i+1) =e= x(i) + 0.5*h*(u(i)+u(i+1)); length_eqn.. 0.5*h*sum(nh(i+1), sqrt(1+sqr(u(i))) + sqrt(1+sqr(u(i+1)))) =e= L; model chain /all/; $iftheni x%mode%==xbook $onecho >minos.opt superbasics limit = 5000 $offecho chain.workspace=120; $endif solve chain using nlp minimizing energy; $iftheni x%mode%==xbook file res /chain.dat/; put res loop(i, put x.l(i):10:5, put/) $endif *------------ January 26, 2011 * For nh=1000 I obtained the following results: * CONOPT: 20 iterations, 2.654 seconds, vfo=5.0685102 * KNITRO: 8 iterations, 0.380 seconds, vfo=5.06850999 * MINOS : 202 iterations, 73.145 seconds, vfo=5.068510 * End Hanging Chain