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 = 37 ! Number of variables (in total) NI = 33 ! Number of integer variables (0 <= NI <= N) M = 24 ! 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,4 XL(I) = 1.0D0 XU(I) = 1.0D2 ENDDO DO I = 4+1,4+31 XL(I) = 0.0D0 XU(I) = 1.0D0 ENDDO DO I = 4+31+1,N XL(I) = 5.0D0 XU(I) = 1.0D2 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 = 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) = 2.0D0 ! SEED PARAM( 3) = 5.3d0 ! 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(100), / b1, b2, i3, i4, x5, x6, x7, x8, b9, b10, / b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, / b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, / b31, b32, b33, b34, b35, b36, b37, / e2, e3, e4, e5, e6, e7, e8, e9, e10, / e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, / e21, e22, e23, e24, e25 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC INTEGER I,ncont,nint,nbin CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ncont = 4 nint = 2 nbin = 31 do i=1,nbin+nint y(i) = x(ncont+i) enddo b1 = y(1) b2 = y(2) b9 = y(3) b10 = y(4) b11 = y(5) b12 = y(6) b13 = y(7) b14 = y(8) b15 = y(9) b16 = y(10) b17 = y(11) b18 = y(12) b19 = y(13) b20 = y(14) b21 = y(15) b22 = y(16) b23 = y(17) b24 = y(18) b25 = y(19) b26 = y(20) b27 = y(21) b28 = y(22) b29 = y(23) b30 = y(24) b31 = y(25) b32 = y(26) b33 = y(27) b34 = y(28) b35 = y(29) b36 = y(30) b37 = y(31) i3 = y(32) i4 = y(33) x5 = x(1) x6 = x(2) x7 = x(3) x8 = x(4) f(1)= 0.1d0*b1 + 0.2d0*b2 + b9 + 2.0d0*b10 + 3.0d0*b11 + 4.0d0*b12 / + 5.0d0*b13 + 6.0d0*b14 + 7.0d0*b15 + 8.0d0*b16 + b17 / + 2.0d0*b18 + 3.0d0*b19 + 4.0d0*b20 + 5.0d0*b21 + 6.0d0*b22 / + 7.0d0*b23 e2 = 460.0d0*b24 + 920.0d0*b25 + 1380.0d0*b26 + 1840.0d0*b27 / + 570.0d0*b32 + 1140.0d0*b33 + 1710.0d0*b34 - 1900.0d0 e3 = 460.0d0*b28 + 920.0d0*b29 + 1380.0d0*b30 + 1840.0d0*b31 / + 570.0d0*b35 + 1140.0d0*b36 + 1710.0d0*b37 - 1900.0d0 e4 = -460.0d0*b24 - 920.0d0*b25 - 1380.0d0*b26 - 1840.0d0*b27 / - 570.0d0*b32 - 1140.0d0*b33 - 1710.0d0*b34 + 1700.0d0 e5 = -460.0d0*b28 - 920.0d0*b29 - 1380.0d0*b30 - 1840.0d0*b31 / - 570.0d0*b35 - 1140.0d0*b36 - 1710.0d0*b37 + 1700.0d0 e6 = b24 + 2.0d0*b25 + 3.0d0*b26 + 4.0d0*b27 + b32 + 2.0d0*b33 / + 3.0d0*b34 - 5.0d0 e7 = b28 + 2.0d0*b29 + 3.0d0*b30 + 4.0d0*b31 + b35 + 2.0d0*b36 / + 3.0d0*b37 - 5.0d0 e8 = b1 - b9 - 2.0d0*b10 - 3.0d0*b11 - 4.0d0*b12 - 5.0d0*b13 / - 6.0d0*b14 - 7.0d0*b15 - 8.0d0*b16 e9 = b2 - b17 - 2.0d0*b18 - 3.0d0*b19 - 4.0d0*b20 - 5.0d0*b21 / - 6.0d0*b22 - 7.0d0*b23 e10 = -8.0d0*b1 + b9 + 2.0d0*b10 + 3.0d0*b11 + 4.0d0*b12 / + 5.0d0*b13 + 6.0d0*b14 + 7.0d0*b15 + 8.0d0*b16 e11 = -7.0d0*b2 + b17 + 2.0d0*b18 + 3.0d0*b19 + 4.0d0*b20 / + 5.0d0*b21 + 6.0d0*b22 + 7.0d0*b23 e12 = i3 - 3.0d0*b9 - 8.0d0*b10 - 15.0d0*b11 - 24.0d0*b12 / - 35.0d0*b13 - 48.0d0*b14 - 63.0d0*b15 / - 80.0d0*b16 - 1 e13 = i4 - 3.0d0*b17 - 8.0d0*b18 - 15.0d0*b19 - 24.0d0*b20 / - 35.0d0*b21 - 48.0d0*b22 - 63.0d0*b23 - 1.0d0 e14 = b9 + b10 + b11 + b12 + b13 + b14 + b15 + b16 - 1.0d0 e15 = b17 + b18 + b19 + b20 + b21 + b22 + b23 - 1.0d0 e16 = x5 - 3.0d0*b24 - 8.0d0*b25 - 15.0d0*b26 - 24.0d0*b27 - 1.0d0 e17 = x6 - 3.0d0*b28 - 8.0d0*b29 - 15.0d0*b30 - 24.0d0*b31 - 1.0d0 e18 = x7 - 3.0d0*b32 - 8.0d0*b33 - 15.0d0*b34 - 1.0d0 e19 = x8 - 3.0d0*b35 - 8.0d0*b36 - 15.0d0*b37 - 1.0d0 e20 = b24 + b25 + b26 + b27 - 1.0d0 e21 = b28 + b29 + b30 + b31 - 1.0d0 e22 = b32 + b33 + b34 - 1.0d0 e23 = b35 + b36 + b37 - 1.0d0 e24 = -(dsqrt(i3*x5) + dsqrt(i4*x6)) + b9 + 2.0d0*b10 + 3.0d0*b11 / + 4.0d0*b12 + 5.0d0*b13 + 6.0d0*b14 + 7.0d0*b15 + 8.0d0*b16 / + b17 + 2.0d0*b18 + 3.0d0*b19 + 4.0d0*b20 + 5.0d0*b21 / + 6.0d0*b22 + 7.0d0*b23 + b24 + 2.0d0*b25 + 3.0d0*b26 / + 4.0d0*b27 + b28 + 2.0d0*b29 + 3.0d0*b30 + 4.0d0*b31 / + 10.0d0 e25 = -(dsqrt(i3*x7) + dsqrt(i4*x8)) + b9 + 2.0d0*b10 + 3.0d0*b11 / + 4.0d0*b12 + 5.0d0*b13 + 6.0d0*b14 + 7.0d0*b15 + 8.0d0*b16 / + b17 + 2.0d0*b18 + 3.0d0*b19 + 4.0d0*b20 + 5.0d0*b21 / + 6.0d0*b22 + 7.0d0*b23 + b32 + 2.0d0*b33 + 3.0d0*b34 + b35 / + 2.0d0*b36 + 3.0d0*b37 + 9.0d0 g(1) = e12 g(2) = e13 g(3) = e16 g(4) = e17 g(5) = e18 g(6) = e19 g(7) = -e2 g(8) = -e3 g(9) = -e4 g(10) = -e5 g(11) = -e6 g(12) = -e7 g(13) = -e8 g(14) = -e9 g(15) = -e10 g(16) = -e11 g(17) = -e14 g(18) = -e15 g(19) = -e20 g(20) = -e21 g(21) = -e22 g(22) = -e23 g(23) = -e24 g(24) = -e25 END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC END OF FILE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC