function fprime=testfunctionprime(x,funnum) % TESTFUNCTIONPRIME - The derivatives of various test functions for optimization % These are the derivatives of the test functions that appear in Appendix I. % Set funnum to the function you want to use. % funnum=17 is the MOO function and is not plotted % % From the book: % Practical Genetic Algorithms % by Haupt & Haupt. % % Epage: 250 % % Written by: % -- % John L. Weatherwax 2006-08-28 % % email: wax@alum.mit.edu % % Please send comments and especially bug reports to the % above email address. % %----- % check inputs: assert( prod(size(x))==length(x), 'input must be a vector (and not a matrix)' ); % make sure our input is a row vector x = x(:)'; switch funnum case 1, fprime = zeros(size(x)); indsL = find( x < 0. ); indsR = find( x >= 0. ); fprime(indsL) = -1 - sin(x(indsL)); fprime(indsR) = +1 - sin(x(indsR)); case 2, fprime = zeros(size(x)); indsL = find( x < 0. ); indsR = find( x >= 0. ); fprime(indsL) = -1 + cos(x(indsL)); fprime(indsR) = +1 + cos(x(indsR)); case 3, fprime = zeros(2,1); fprime(1) = 2*x(1); fprime(2) = 2*x(2); case 4, fprime = zeros(2,1); fprime(1) = -400*x(1)*(x(2) - x(1)^2) - 2*(1.-x(1)); fprime(2) = +200*(x(2) - x(1)^2); case 5, assert( false, 'not yet implemented' ); fprime = sum( abs(x')-10*cos(sqrt(abs(10*x'))) )'; case 6, fprime = ( 2 * x + 1 ) .* cos(x) - ( x.^2 + x ) .* sin(x); case 7, fprime = zeros(2,1); fprime(1) = sin(4*x(1)) + 4*x(1)*cos(4*x(1)); fprime(2) = 1.1*sin(2*x(2)) + 2.2*x(2)*cos(2*x(2)); case 8, fprime = zeros(2,1); fprime(1) = 4*x(2)*cos(4*x(1)) + 1.1*sin(2*x(2)); fprime(2) = sin(4*x(1)) + 2.2*x(1)*cos(2*x(2)); case 9, assert( false, 'not yet implemented' ); f(:,1) = x(:,1).^4 + 2*x(:,2).^4 + randn(length(x(:,1)),1); case 10, fprime = zeros(2,1); fprime(1) = 2*x(1) + 20*pi*sin(2*pi*x(1)); fprime(2) = 2*x(2) + 20*pi*sin(2*pi*x(2)); case 11, fprime = zeros(2,1); fprime(1) = x(1)/2000. + sin(x(1))*cos(x(2)); fprime(2) = x(2)/2000. - cos(x(1))*sin(x(2)); case 12, assert( false, 'not yet implemented' ); f(:,1) = 0.5+(sin(sqrt(x(:,1).^2 + x(:,2).^2).^2)-0.5)./(1+0.1*(x(:,1).^2+x(:,2).^2)); case 13, assert( false, 'not yet implemented' ); aa = x(:,1).^2 + x(:,2).^2; bb = ((x(:,1)+0.5).^2 + x(:,2).^2).^0.1; f(:,1) = aa.^0.25.*sin(30*bb).^2 + abs(x(:,1))+abs(x(:,2)); case 14, assert( false, 'not yet implemented' ); f(:,1) = besselj(0,x(:,1).^2+x(:,2).^2)+abs(1-x(:,1))/10+abs(1-x(:,2))/10; case 15, assert( false, 'not yet implemented' ); f(:,1) = -exp(0.2*sqrt((x(:,1)-1).^2+(x(:,2)-1).^2)+(cos(2*x(:,1))+sin(2*x(:,1)))); case 16, assert( false, 'not yet implemented' ); f(:,1) = -x(:,1).*sin(sqrt(abs(x(:,1)-(x(:,2)+9))))-(x(:,2)+9).*sin(sqrt(abs(x(:,2)+0.5*x(:,1)+9))); case 17, assert( false, 'not yet implemented' ); x=x+1; f(:,1) = (x(:,1)+x(:,2).^2 + sqrt(x(:,3))+ 1.0./x(:,4))/8.5; f(:,2) = (1./x(:,1)+1./x(:,2)+x(:,3)+x(:,4))/6; otherwise error( 'unknown function' ); end