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 = 48 ! Number of variables (in total) NI = 48 ! Number of integer variables (0 <= NI <= N) M = 53 ! Number of constraints (in total) ME = 0 ! Number of equality constraints (0 <= ME <= M) C C Step 1.B : Lower and upper bounds: 'XL' and 'XU' C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DO I = 1,36 XL(I) = 0.0D0 XU(I) = 5.0D0 ENDDO DO I = 37,N XL(I) = 0.0D0 XU(I) = 1.0D0 ENDDO XU(28) = 100.0D0 XU(29) = 100.0D0 XU(30) = 100.0D0 XU(31) = 100.0D0 XU(32) = 100.0D0 XU(33) = 100.0D0 XU(34) = 100.0D0 XU(35) = 100.0D0 XU(36) = 100.0D0 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 = 50000 ! 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.0D0 ! ACCURACY PARAM( 2) = 9.0D0 ! SEED PARAM( 3) = 48.07D0 ! 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 DOUBLE PRECISION (A-C,H-I) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DOUBLE PRECISION F(*),G(*),X(*) INTEGER J CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C Rename Variables b1 = X(37) b2 = X(38) b3 = X(39) i4 = X(1) i5 = X(2) i6 = X(3) i7 = X(4) i8 = X(5) i9 = X(6) i10 = X(7) i11 = X(8) i12 = X(9) i13 = X(10) i14 = X(11) i15 = X(12) i16 = X(13) i17 = X(14) i18 = X(15) i19 = X(16) i20 = X(17) i21 = X(18) i22 = X(19) i23 = X(20) i24 = X(21) i25 = X(22) i26 = X(23) i27 = X(24) i28 = X(25) i29 = X(26) i30 = X(27) b31 = X(40) b32 = X(41) b33 = X(42) b34 = X(43) b35 = X(44) b36 = X(45) b37 = X(46) b38 = X(47) b39 = X(48) i40 = X(28) i41 = X(29) i42 = X(30) i43 = X(31) i44 = X(32) i45 = X(33) i46 = X(34) i47 = X(35) i48 = X(36) G(1) = i40*i4 + i43*i7 + i46*i10 + i41*i5 + i44*i8 + i47*i11 / + i42*i6 + i45*i9 + i48*i12 - 9.0D0 G(2) = i40*i13 + i43*i16 + i46*i19 + i41*i14 + i44*i17 / + i47*i20 + i42*i15 + i45*i18 + i48*i21 - 15.0D0 G(3) = i40*i22 + i43*i25 + i46*i28 + i41*i23 + i44*i26 / + i47*i29 + i42*i24 + i45*i27 + i48*i30 - 80.0D0 G(4) = - (12.0D0*i4 + 24.0D0*i13 + 36.0D0*i22 - 48.0D0*b31) G(5) = - (12.0D0*i5 + 24.0D0*i14 + 36.0D0*i23 - 48.0D0*b32) G(6) = - (12.0D0*i6 + 24.0D0*i15 + 36.0D0*i24 - 62.0D0*b33) G(7) = - (12.0D0*i7 + 24.0D0*i16 + 36.0D0*i25 - 48.0D0*b34) G(8) = - (12.0D0*i8 + 24.0D0*i17 + 36.0D0*i26 - 48.0D0*b35) G(9) = - (12.0D0*i9 + 24.0D0*i18 + 36.0D0*i27 - 62.0D0*b36) G(10) = - (12.0D0*i10 + 24.0D0*i19 + 36.0D0*i28 - 48.0D0*b37) G(11) = - (12.0D0*i11 + 24.0D0*i20 + 36.0D0*i29 - 48.0D0*b38) G(12) = - (12.0D0*i12 + 24.0D0*i21 + 36.0D0*i30 - 62.0D0*b39) DO J=1,12 G(J) = G(J)*1.0D-2 ENDDO G(13) = - (- i4 - i13 - i22 + b31) G(14) = - (- i5 - i14 - i23 + b32) G(15) = - (- i6 - i15 - i24 + b33) G(16) = - (- i7 - i16 - i25 + b34) G(17) = - (- i8 - i17 - i26 + b35) G(18) = - (- i9 - i18 - i27 + b36) G(19) = - (- i10 - i19 - i28 + b37) G(20) = - (- i11 - i20 - i29 + b38) G(21) = - (- i12 - i21 - i30 + b39) G(22) = - (- 72.0D0*b31 + i40) G(23) = - (- 182.0D0*b32 + i41) G(24) = - (- 182.0D0*b33 + i42) G(25) = - (- 72.0D0*b34 + i43) G(26) = - (- 182.0D0*b35 + i44) G(27) = - (- 182.0D0*b36 + i45) G(28) = - (- 72.0D0*b37 + i46) G(29) = - (- 182.0D0*b38 + i47) G(30) = - (- 182.0D0*b39 + i48) DO J=22,30 G(J) = G(J)*1.0D-3 ENDDO G(31) = - (i4 + i13 + i22 - 5.0D0*b31) G(32) = - (i5 + i14 + i23 - 5.0D0*b32) G(33) = - (i6 + i15 + i24 - 5.0D0*b33) G(34) = - (i7 + i16 + i25 - 5.0D0*b34) G(35) = - (i8 + i17 + i26 - 5.0D0*b35) G(36) = - (i9 + i18 + i27 - 5.0D0*b36) G(37) = - (i10 + i19 + i28 - 5.0D0*b37) G(38) = - (i11 + i20 + i29 - 5.0D0*b38) G(39) = - (i12 + i21 + i30 - 5.0D0*b39) G(40) = - (- 500.0D0*b1 + 7.0D0*i40 + 7.0D0*i43 + 7.0D0*i46) G(41) = - (- 1270.0D0*b2 + 7.0D0*i41 + 7.0D0*i44 + 7.0D0*i47) G(42) = - (- 1270.0D0*b3 + 7.0D0*i42 + 7.0D0*i45 + 7.0D0*i48) DO J=40,42 G(J) = G(J)*1.0D-4 ENDDO G(43) = - (- b31 + b34) G(44) = - (- b32 + b35) G(45) = - (- b33 + b36) G(46) = - (- b34 + b37) G(47) = - (- b35 + b38) G(48) = - (- b36 + b39) G(49) = - (- i40 + i43) G(50) = - (- i41 + i44) G(51) = - (- i42 + i45) G(52) = - (- i43 + i46) G(53) = - (- i44 + i47) G(54) = - (- i45 + i48) F(1) = - (- 35.0D0*b2 - 35.0D0*b3 - 6.53333333333333D0*b31 / - 6.53333333333333D0*b32 - 6.7375D0*b33 / - 6.53333333333333D0*b34 - 6.53333333333333D0*b35 / - 6.7375D0*b36 - 6.53333333333333D0*b37 / - 6.53333333333333D0*b38 - 6.7375D0*b39) END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC END OF FILE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC