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 = 112 ! Number of variables (in total) NI = 24 ! Number of integer variables (0 <= NI <= N) M = 135 ! Number of constraints (in total) ME = 81 ! Number of equality constraints (0 <= ME <= M) C C Step 1.B : Lower and upper bounds: 'XL' and 'XU' C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DO I = 1,n-ni XL(I) = -3.0D0 XU(I) = 3.0D0 ENDDO DO I = 74,88 XL(I) = -6.0D0 XU(I) = 6.0D0 ENDDO DO I = 88+1,88+24 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.1D0 ! ACCURACY PARAM( 2) = 1.0D0 ! SEED PARAM( 3) = -2.0D0 ! 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(200), 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, x55, x56, x57, x58, x59, x60, / x61, x62, x63, x64, x65, x66, x67, x68, x69, x70, / x71, x72, x73, x74, x75, x76, x77, x78, x79, x80, / x81, x82, x83, x84, x85, x86, x87, x88, x89, x90, / x91, x92, x93, x94, x95, x96, x97, x98, x99,x100, / x101,x102,x103,x104,x105,x106,x107,x108,x109,x110, / x111,x112 double precision / 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, e39, e40, / e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, / e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, / e61, e62, e63, e64, e65, e66, e67, e68, e69, e70, / e71, e72, e73, e74, e75, e76, e77, e78, e79, e80, / e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, / e91, e92, e93, e94, e95, e96, e97, e98, e99,e100, / e101,e102,e103,e104,e105,e106,e107,e108,e109,e110, / e111,e112,e113,e114,e115,e116,e117,e118,e119,e120, / e121,e122,e123,e124,e125,e126,e127,e128,e129,e130, / e131,e132,e133,e134,e135 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC INTEGER I,ncont,nint,nbin CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ncont = 88 nint = 0 nbin = 24 do i=1,nbin y(i) = x(ncont+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) x55 = x(31) x56 = x(32) x57 = x(33) x58 = x(34) x59 = x(35) x60 = x(36) x61 = x(37) x62 = x(38) x63 = x(39) x64 = x(40) x65 = x(41) x66 = x(42) x67 = x(43) x68 = x(44) x69 = x(45) x70 = x(46) x71 = x(47) x72 = x(48) x73 = x(49) x74 = x(50) x75 = x(51) x76 = x(52) x77 = x(53) x78 = x(54) x79 = x(55) x80 = x(56) x81 = x(57) x82 = x(58) x83 = x(59) x84 = x(60) x85 = x(61) x86 = x(62) x87 = x(63) x88 = x(64) x89 = x(65) x90 = x(66) x91 = x(67) x92 = x(68) x93 = x(69) x94 = x(70) x95 = x(71) x96 = x(72) x97 = x(73) x98 = x(74) x99 = x(75) x100 = x(76) x101 = x(77) x102 = x(78) x103 = x(79) x104 = x(80) x105 = x(81) x106 = x(82) x107 = x(83) x108 = x(84) x109 = x(85) x110 = x(86) x111 = x(87) x112 = x(88) f(1) = -x112 e1 = -x36*x31 - x25 + x27 e2 = -x36*x32 - x26 + x28 e3 = (-x37*x31) - x35*x33 - x25 + x29 e4 = (-x37*x32) - x35*x34 - x26 + x30 e5 = sqr(x31) + sqr(x32) - 1.0d0 e6 = x32 + x33 e7 = -x31 + x34 e8 = -x36 + x112 e9 = -x35 + x112 e10 = -x25 - x50 e11 = -x25 + x39 - 1.0d0 e12 = -x25 + 0.8944d0*x40 - 0.4472d0*x52 - 1.0d0 e13 = -x25 - 0.8944d0*x41 - 0.4772d0*x53 - 1.0d0 e14 = -x27 - x54 e15 = -x27 + x43 - 1.0d0 e16 = -x27 + 0.8944d0*x44 - 0.4472d0*x56 - 1.0d0 e17 = -x27 - 0.8944d0*x45 - 0.4772d0*x57 - 1.0d0 e18 = -x29 - x58 e19 = -x29 + x47 - 1.0d0 e20 = -x29 + 0.8944d0*x48 - 0.4472d0*x60 - 1.0d0 e21 = -x29 - 0.8944d0*x49 - 0.4772d0*x61 - 1.0d0 e22 = -x26 + x38 - 1.0d0 e23 = -x26 + x51 e24 = -x26 + 0.4472d0*x40 + 0.8944d0*x52 e25 = -x26 + 0.4772d0*x41 - 0.8944d0*x53 e26 = -x28 + x42 - 1.0d0 e27 = -x28 + x55 e28 = -x28 + 0.4472d0*x44 + 0.8944d0*x56 e29 = -x28 + 0.4772d0*x45 - 0.8944d0*x57 e30 = -x30 + x46 - 1.0d0 e31 = -x30 + x59 e32 = -x30 + 0.4472d0*x48 + 0.8944d0*x60 e33 = -x30 + 0.4772d0*x49 - 0.8944d0*x61 e34 = -3.5d0*b1 - x62 e35 = -3.5d0*b3 - x64 e36 = -3.5d0*b5 - x66 e37 = -3.5d0*b7 - x68 e38 = -3.5d0*b9 - x70 e39 = -3.5d0*b11 - x72 e40 = -3.5d0*b13 - x74 e41 = -3.5d0*b15 - x76 e42 = -3.5d0*b17 - x78 e43 = -3.5d0*b19 - x80 e44 = -3.5d0*b21 - x82 e45 = -3.5d0*b23 - x84 e46 = -x63 e47 = -x65 e48 = -x67 e49 = -x69 e50 = -x71 e51 = -x73 e52 = -x75 e53 = -x77 e54 = -x79 e55 = -x81 e56 = -x83 e57 = -x85 e58 = -x62 e59 = -x64 e60 = -x66 e61 = -x68 e62 = -x70 e63 = -x72 e64 = -x74 e65 = -x76 e66 = -x78 e67 = -x80 e68 = -x82 e69 = -x84 e70 = 3.5d0*b2 - x63 e71 = 3.5d0*b4 - x65 e72 = 3.5d0*b6 - x67 e73 = 3.5d0*b8 - x69 e74 = 3.5d0*b10 - x71 e75 = 3.5d0*b12 - x73 e76 = 3.5d0*b14 - x75 e77 = 3.5d0*b16 - x77 e78 = 3.5d0*b18 - x79 e79 = 3.5d0*b20 - x81 e80 = 3.5d0*b22 - x83 e81 = 3.5d0*b24 - x85 e82 = b1 + b2 - 1.0d0 e83 = b3 + b4 - 1.0d0 e84 = b5 + b6 - 1.0d0 e85 = b7 + b8 - 1.0d0 e86 = b9 + b10 - 1.0d0 e87 = b11 + b12 - 1.0d0 e88 = b13 + b14 - 1.0d0 e89 = b15 + b16 - 1.0d0 e90 = b17 + b18 - 1.0d0 e91 = b19 + b20 - 1.0d0 e92 = b21 + b22 - 1.0d0 e93 = b23 + b24 - 1.0d0 e94 = x50 - x62 - x63 e95 = x51 - x64 - x65 e96 = x52 - x66 - x67 e97 = x53 - x68 - x69 e98 = x54 - x70 - x71 e99 = x55 - x72 - x73 e100 = x56 - x74 - x75 e101 = x57 - x76 - x77 e102 = x58 - x78 - x79 e103 = x59 - x80 - x81 e104 = x60 - x82 - x83 e105 = x61 - x84 - x85 e106 = -x63 + x86 e107 = -x65 + x87 e108 = -x67 + x88 e109 = -x69 + x89 e110 = -x71 + x90 e111 = -x73 + x91 e112 = -x75 + x92 e113 = -x77 + x93 e114 = -x79 + x94 e115 = -x81 + x95 e116 = -x83 + x96 e117 = -x85 + x97 e118 = -x50 - x54 - x58 + x98 e119 = -x51 - x55 - x59 + x99 e120 = -x52 - x56 - x60 + x100 e121 = -x53 - x57 - x61 + x101 e122 = -x86 - x90 - x94 + x102 e123 = -x87 - x91 - x95 + x103 e124 = -x88 - x92 - x96 + x104 e125 = -x89 - x93 - x97 + x105 e126 = x102 e127 = x103 e128 = x104 e129 = x105 e130 = -x50 - x51 - x52 - x53 + x106 e131 = -x54 - x55 - x56 - x57 + x107 e132 = -x58 - x59 - x60 - x61 + x108 e133 = -x86 - x87 - x88 - x89 + x109 e134 = -x90 - x91 - x92 - x93 + x110 e135 = -x94 - x95 - x96 - x97 + x111 g(1) = e1 g(2) = e2 g(3) = e3 g(4) = e4 g(5) = e5 g(6) = e6 g(7) = e7 g(8) = e10 g(9) = e11 g(10) = e12 g(11) = e13 g(12) = e14 g(13) = e15 g(14) = e16 g(15) = e17 g(16) = e18 g(17) = e19 g(18) = e20 g(19) = e21 g(20) = e22 g(21) = e23 g(22) = e24 g(23) = e25 g(24) = e26 g(25) = e27 g(26) = e28 g(27) = e29 g(28) = e30 g(29) = e31 g(30) = e32 g(31) = e33 g(32) = e82 g(33) = e83 g(34) = e84 g(35) = e85 g(36) = e86 g(37) = e87 g(38) = e88 g(39) = e89 g(40) = e90 g(41) = e91 g(42) = e92 g(43) = e93 g(44) = e94 g(45) = e95 g(46) = e96 g(47) = e97 g(48) = e98 g(49) = e99 g(50) = e100 g(51) = e101 g(52) = e102 g(53) = e103 g(54) = e104 g(55) = e105 g(56) = e106 g(57) = e107 g(58) = e108 g(59) = e109 g(60) = e110 g(61) = e111 g(62) = e112 g(63) = e113 g(64) = e114 g(65) = e115 g(66) = e116 g(67) = e117 g(68) = e118 g(69) = e119 g(70) = e120 g(71) = e121 g(72) = e122 g(73) = e123 g(74) = e124 g(75) = e125 g(76) = e130 g(77) = e131 g(78) = e132 g(79) = e133 g(80) = e134 g(81) = e135 g(82) = -e8 g(83) = -e9 g(84) = -e34 g(85) = -e35 g(86) = -e36 g(87) = -e37 g(88) = -e38 g(89) = -e39 g(90) = -e40 g(91) = -e41 g(92) = -e42 g(93) = -e43 g(94) = -e44 g(95) = -e45 g(96) = -e46 g(97) = -e47 g(98) = -e48 g(99) = -e49 g(100) = -e50 g(101) = -e51 g(102) = -e52 g(103) = -e53 g(104) = -e54 g(105) = -e55 g(106) = -e56 g(107) = -e57 g(108) = e58 g(109) = e59 g(110) = e60 g(111) = e61 g(112) = e62 g(113) = e63 g(114) = e64 g(115) = e65 g(116) = e66 g(117) = e67 g(118) = e68 g(119) = e69 g(120) = e70 g(121) = e71 g(122) = e72 g(123) = e73 g(124) = e74 g(125) = e75 g(126) = e76 g(127) = e77 g(128) = e78 g(129) = e79 g(130) = e80 g(131) = e81 g(132) = e126 g(133) = e127 g(134) = e128 g(135) = e129 END function sqr(x) double precision sqr, x sqr = x*x end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC END OF FILE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC