CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C This is an example call of MIDACO 6.0 C ------------------------------------- C C MIDACO solves Multi-Objective Mixed-Integer Non-Linear Problems: C C C Minimize F_1(X),... F_O(X) where X(1,...N-NI) is CONTINUOUS C and X(N-NI+1,...N) is DISCRETE C C subject to G_j(X) = 0 (j=1,...ME) equality constraints C G_j(X) >= 0 (j=ME+1,...M) inequality constraints C C and bounds XL <= X <= XU C C C The problem statement of this example is given below. You can use C this example as template to run your own problem. To do so: Replace C the objective functions 'F' (and in case the constraints 'G') given C here with your own problem and follow the below instruction steps. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCC MAIN PROGRAM CCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC PROGRAM MAIN IMPLICIT NONE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C Dimensions of the optimization problem INTEGER O, N, NI, M, ME C Lower and upper bounds ('XL' & 'XU') and optimization variable 'X' DOUBLE PRECISION XL(1000), XU(1000), X(1000) C Objectives 'F(X)' and constraints 'G(X)' DOUBLE PRECISION F(10), G(1000) C MIDACO information and stop flags INTEGER IFLAG, ISTOP C MIDACO parameter DOUBLE PRECISION PARAM(13) C MIDACO integer 'IW' and real'RW' workspace and pareto front 'PF' INTEGER LIW, LRW, LPF PARAMETER (LIW = 50000, LRW = 50000, LPF = 50000) INTEGER IW(LIW) DOUBLE PRECISION RW(LRW),PF(LPF) C Parameter for stopping criteria, printing and license INTEGER MAXTIME, MAXEVAL, PRINTEVAL, SAVE2FILE, I CHARACTER*60 KEY KEY='************************************************************' CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCC Step 1: Problem definition CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C Step 1.A : Problem dimensions C CCCCCCCCCCCCCCCCCCCCCCCCCCCCC O = 1 ! Number of objectives N = 54 ! Number of variables (in total) NI = 24 ! Number of integer variables (0 <= NI <= N) M = 38 ! Number of constraints (in total) ME = 6 ! Number of equality constraints (0 <= ME <= M) C C Step 1.B : Lower and upper bounds: 'XL' and 'XU' C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DO I = 1,30 XL(I) = 0.0D0 XU(I) = 1.0D5 ENDDO DO I = 31,54 XL(I) = 0.0D0 XU(I) = 1.0D0 ENDDO C C Step 1.C : Starting point 'X' C CCCCCCCCCCCCCCCCCCCCCCCCCCCCC DO I = 1,N X(I) = XL(I) ! Here for example: starting point = lower bounds ENDDO CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCC Step 2: Choose stopping criteria and printing options CCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C Step 2.A : Stopping criteria C CCCCCCCCCCCCCCCCCCCCCCCCCCCC MAXEVAL = 999999999 ! Maximum evaluation budget (e.g. 1000000) MAXTIME = 60*60*24 ! Maximum time limit (e.g. 60*60*24 = 1 Day) C C Step 2.B : Printing options C CCCCCCCCCCCCCCCCCCCCCCCCCCC PRINTEVAL = 1000000 ! Print-Frequency for current best solution (e.g. 1000) SAVE2FILE = 1 ! Save SCREEN and SOLUTION to TXT-files [0=NO/1=YES] CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCC Step 3: Choose MIDACO parameters (FOR ADVANCED USERS) CCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC PARAM( 1) = 0.01D0 ! ACCURACY PARAM( 2) = 1.0D0 ! SEED PARAM( 3) = 0.19D0 ! FSTOP PARAM( 4) = 0.0D0 ! ALGOSTOP PARAM( 5) = 0.0D0 ! EVALSTOP PARAM( 6) = 0.0D0 ! FOCUS PARAM( 7) = 0.0D0 ! ANTS PARAM( 8) = 0.0D0 ! KERNEL PARAM( 9) = 0.0D0 ! ORACLE PARAM(10) = 0.0D0 ! PARETOMAX PARAM(11) = 0.0D0 ! EPSILON PARAM(12) = 0.0D0 ! BALANCE PARAM(13) = 0.0D0 ! CHARACTER CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C Call MIDACO by Reverse Communication C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C Print MIDACO headline with basic information CALL MIDACO_PRINT(1,PRINTEVAL,SAVE2FILE,IFLAG,ISTOP,F,G,X,XL, & XU,O,N,NI,M,ME,RW,PF,MAXEVAL,MAXTIME,PARAM,1,0,KEY) DO WHILE(ISTOP.EQ.0) !~~~Start~of~reverse~communication~loop C Evaluate Objective F(X) and constraints G(X) CALL PROBLEM_FUNCTION( F, G , X) C Call MIDACO CALL MIDACO(1,O,N,NI,M,ME,X,F,G,XL,XU,IFLAG, & ISTOP,PARAM,RW,LRW,IW,LIW,PF,LPF,KEY) C Call MIDACO printing routine CALL MIDACO_PRINT(2,PRINTEVAL,SAVE2FILE,IFLAG,ISTOP,F,G,X, & XL,XU,O,N,NI,M,ME,RW,PF,MAXEVAL,MAXTIME,PARAM,1,0,KEY) ENDDO !~~~~~~~~~~~~~~~~~~~~End~of~reverse~communication~loop CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ! PRINT*," Solution F(1) = ", F(1) ! PRINT*," Solution G(1) = ", G(1) ! PRINT*," Solution X(1) = ", X(1) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC END OF MAIN CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCC OPTIMIZATION PROBLEM CCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE PROBLEM_FUNCTION(F,G,X) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IMPLICIT NONE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DOUBLE PRECISION F(*),G(*),X(*) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC double precision y(54), sqr, / b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, / b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, / b21, b22, b23, b24, x25, x26, x27, x28, x29, x30, / x31, x32, x33, x34, x35, x36, x37, x38, x39, x40, / x41, x42, x43, x44, x45, x46, x47, x48, x49, x50, / x51, x52, x53, x54, / e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, / e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, / e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, / e31, e32, e33, e34, e35, e36, e37, e38 integer i CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC do i=1,24 y(i) = x(30+i) enddo b1 = y(1) b2 = y(2) b3 = y(3) b4 = y(4) b5 = y(5) b6 = y(6) b7 = y(7) b8 = y(8) b9 = y(9) b10 = y(10) b11 = y(11) b12 = y(12) b13 = y(13) b14 = y(14) b15 = y(15) b16 = y(16) b17 = y(17) b18 = y(18) b19 = y(19) b20 = y(20) b21 = y(21) b22 = y(22) b23 = y(23) b24 = y(24) x25 = x(1) x26 = x(2) x27 = x(3) x28 = x(4) x29 = x(5) x30 = x(6) x31 = x(7) x32 = x(8) x33 = x(9) x34 = x(10) x35 = x(11) x36 = x(12) x37 = x(13) x38 = x(14) x39 = x(15) x40 = x(16) x41 = x(17) x42 = x(18) x43 = x(19) x44 = x(20) x45 = x(21) x46 = x(22) x47 = x(23) x48 = x(24) x49 = x(25) x50 = x(26) x51 = x(27) x52 = x(28) x53 = x(29) x54 = x(30) f(1) = x25 + x26 + x27 + x28 + x29 + x30 + x31 + x32 + x33 + x34 / + x35 + x36 + x37 + x38 + x39 + x40 + x41 + x42 + x43 + x44 / + x45 + x46 + x47 + x48 e1 = - sqr(8.0d0 - x49) - 100.0d0*b1 + x25 + 100.0d0 e2 = - sqr(8.0d0 - x50) - 100.0d0*b2 + x26 + 100.0d0 e3 = - sqr(8.0d0 - x51) - 100.0d0*b3 + x27 + 100.0d0 e4 = - sqr(8.5d0 - x49) - 100.0d0*b4 + x28 + 100.0d0 e5 = - sqr(8.5d0 - x50) - 100.0d0*b5 + x29 + 100.0d0 e6 = - sqr(8.5d0 - x51) - 100.0d0*b6 + x30 + 100.0d0 e7 = - sqr(8.3d0 - x49) - 100.0d0*b7 + x31 + 100.0d0 e8 = - sqr(8.3d0 - x50) - 100.0d0*b8 + x32 + 100.0d0 e9 = - sqr(8.3d0 - x51) - 100.0d0*b9 + x33 + 100.0d0 e10 = - sqr(8.7d0 - x49) - 100.0d0*b10 + x34 + 100.0d0 e11 = - sqr(8.7d0 - x50) - 100.0d0*b11 + x35 + 100.0d0 e12 = - sqr(8.7d0 - x51) - 100.0d0*b12 + x36 + 100.0d0 e13 = - sqr(8.6d0 - x49) - 100.0d0*b13 + x37 + 100.0d0 e14 = - sqr(8.6d0 - x50) - 100.0d0*b14 + x38 + 100.0d0 e15 = - sqr(8.6d0 - x51) - 100.0d0*b15 + x39 + 100.0d0 e16 = - sqr(9.0d0 - x49) - 100.0d0*b16 + x40 + 100.0d0 e17 = - sqr(9.0d0 - x50) - 100.0d0*b17 + x41 + 100.0d0 e18 = - sqr(9.0d0 - x51) - 100.0d0*b18 + x42 + 100.0d0 e19 = - sqr(9.2d0 - x49) - 100.0d0*b19 + x43 + 100.0d0 e20 = - sqr(9.2d0 - x50) - 100.0d0*b20 + x44 + 100.0d0 e21 = - sqr(9.2d0 - x51) - 100.0d0*b21 + x45 + 100.0d0 e22 = - sqr(9.5d0 - x49) - 100.0d0*b22 + x46 + 100.0d0 e23 = - sqr(9.5d0 - x50) - 100.0d0*b23 + x47 + 100.0d0 e24 = - sqr(9.5d0 - x51) - 100.0d0*b24 + x48 + 100.0d0 e25 = b1 + b2 + b3 - 1.0d0 e26 = b4 + b5 + b6 - 1.0d0 e27 = b7 + b8 + b9 - 1.0d0 e28 = b10 + b11 + b12 - 1.0d0 e29 = b13 + b14 + b15 - 1.0d0 e30 = b16 + b17 + b18 - 1.0d0 e31 = b19 + b20 + b21 - 1.0d0 e32 = b22 + b23 + b24 - 1.0d0 e33 = -b1 - b4 - b7 - b10 - b13 - b16 - b19 - b22 + x52 e34 = -b2 - b5 - b8 - b11 - b14 - b17 - b20 - b23 + x53 e35 = -b3 - b6 - b9 - b12 - b15 - b18 - b21 - b24 + x54 e36 = x52*x49 - 8.0d0*b1 - 8.5d0*b4 - 8.3d0*b7 - 8.7d0*b10 / - 8.6d0*b13 - 9.0d0*b16 - 9.2d0*b19 - 9.5d0*b22 e37 = x53*x50 - 8.0d0*b2 - 8.5d0*b5 - 8.3d0*b8 - 8.7d0*b11 / - 8.6d0*b14 - 9.0d0*b17 - 9.2d0*b20 - 9.5d0*b23 e38 = x54*x51 - 8.0d0*b3 - 8.5d0*b6 - 8.3d0*b9 - 8.7d0*b12 / - 8.6d0*b15 - 9.0d0*b18 - 9.2d0*b21 - 9.5d0*b24 g(1) = e33 g(2) = e34 g(3) = e35 g(4) = e36 g(5) = e37 g(6) = e38 g(7) = e1 g(8) = e2 g(9) = e3 g(10) = e4 g(11) = e5 g(12) = e6 g(13) = e7 g(14) = e8 g(15) = e9 g(16) = e10 g(17) = e11 g(18) = e12 g(19) = e13 g(20) = e14 g(21) = e15 g(22) = e16 g(23) = e17 g(24) = e18 g(25) = e19 g(26) = e20 g(27) = e21 g(28) = e22 g(29) = e23 g(30) = e24 g(31) = e25 g(32) = e26 g(33) = e27 g(34) = e28 g(35) = e29 g(36) = e30 g(37) = e31 g(38) = e32 END function sqr(x) double precision sqr, x sqr = x*x end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC END OF FILE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC