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 = 30 ! Number of variables (in total) NI = 25 ! Number of integer variables (0 <= NI <= N) M = 30 ! 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,n xl(i) = 0.0d0 xu(i) = 1.0d0 enddo xl(1) = 2.0d0 xu(1) = 4.5d0 xl(2) = 0.0d0 xu(2) = 8.0d0 xl(3) = 3.0d0 xu(3) = 9.0d0 xl(4) = 0.0d0 xu(4) = 5.0d0 xl(5) = 4.0d0 xu(5) = 10.d0 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 = 1000 ! 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) = 0.0D0 ! SEED PARAM( 3) = -8.0641d0 ! 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(*) double precision sqr, / x1, x2, x3, x4, x5, b6, b7, b8, b9, b10, / b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, / b21, b22, b23, b24, b25, b26, b27, b28, b29, b30 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC x1 = x(1) x2 = x(2) x3 = x(3) x4 = x(4) x5 = x(5) b6 = x(6) b7 = x(7) b8 = x(8) b9 = x(9) b10 = x(10) b11 = x(11) b12 = x(12) b13 = x(13) b14 = x(14) b15 = x(15) b16 = x(16) b17 = x(17) b18 = x(18) b19 = x(19) b20 = x(20) b21 = x(21) b22 = x(22) b23 = x(23) b24 = x(24) b25 = x(25) b26 = x(26) b27 = x(27) b28 = x(28) b29 = x(29) b30 = x(30) f(1) = -(0.6d0*sqr(x1) + 0.1d0*sqr(x4)) + 0.9d0*x2 + 0.5d0*x3 - x5 / + b6 + 0.2d0*b7 + b8 + 0.2d0*b9 + 0.9d0*b10 + 0.9d0*b11 / + 0.1d0*b12 + 0.8d0*b13 + b14 + 0.4d0*b15 + b16 / + 0.3d0*b17 + 0.1d0*b18 + 0.3d0*b19 + 0.5d0*b20 + 0.9d0*b21 / + 0.8d0*b22 + 0.1d0*b23 + 0.9d0*b24 + b25 + b26 + b27 / + 0.2d0*b28 + 0.7d0*b29 + 0.7d0*b30 f(1) = -f(1) g(1) = -(9.57d0*sqr((-2.26d0) + x1) + 2.74d0*sqr((-5.15d0) + x2) / + 9.75d0*sqr((-4.03d0) + x3) + 3.96d0*sqr((-1.74d0) + x4) / + 8.67d0*sqr((-4.74d0) + x5)) - 1000.0d0*b6 + 1077.83985d0 g(2) = -(8.38d0*sqr((-5.51d0) + x1) + 3.93d0*sqr((-9.01d0) + x2) / + 5.18d0*sqr((-3.84d0) + x3) + 5.2d0*sqr((-1.47d0) + x4) / + 7.82d0*sqr((-9.92d0) + x5)) - 1000.0d0*b7 + 1175.971d0 g(3) = -(9.81d0*sqr((-4.06d0) + x1) + 0.04d0*sqr((-1.8d0) + x2) / + 4.21d0*sqr((-0.71d0) + x3) + 7.38d0*sqr((-9.09d0) + x4) / + 4.11d0*sqr((-8.13d0) + x5)) - 1000d0*b8 + 1201.8226d0 g(4) = -(7.41d0*sqr((-6.3d0) + x1) + 6.08d0*sqr((-0.11d0) + x2) / + 5.46d0*sqr((-4.08d0) + x3) + 4.86d0*sqr((-7.29d0) + x4) / + 1.48d0*sqr((-4.24d0) + x5)) - 1000.0d0*b9 + 1143.9533d0 g(5) = -(9.96d0*sqr((-2.81d0) + x1) + 9.13d0*sqr((-1.65) + x2) / + 2.95d0*sqr((-8.08d0) + x3) + 8.25d0*sqr((-3.99) + x4) / + 3.58d0*sqr((-3.51d0) + x5)) - 1000.0d0*b10 + 1154.3895d0 g(6) = -(9.39d0*sqr((-4.29d0) + x1) + 4.27d0*sqr((-9.49d0) + x2) / + 5.09d0*sqr((-2.24d0) + x3) + 1.81d0*sqr((-9.78d0) + x4) / + 7.58d0*sqr((-1.52d0) + x5)) - 1000.0d0*b11 + 1433.3177d0 g(7) = -(1.88d0*sqr((-9.76d0) + x1) + 7.2d0*sqr((-3.64d0) + x2) / + 6.65d0*sqr((-6.62d0) + x3) + 1.74d0*sqr((-3.66d0) + x4) / + 2.86d0*sqr((-9.08d0) + x5)) - 1000.0d0*b12 + 1109.0764d0 g(8) = -(4.01d0*sqr((-1.37d0) + x1) + 2.67d0*sqr((-6.99d0) + x2) / + 4.86d0*sqr((-7.19d0) + x3) + 2.55d0*sqr((-3.03d0) + x4) / + 6.91d0*sqr((-3.39d0) + x5)) - 1000.0d0*b13 + 1041.5959d0 g(9) = -(4.18d0*sqr((-8.89d0) + x1) + 1.92d0*sqr((-8.29d0) + x2) / + 2.6d0*sqr((-6.05d0) + x3) + 7.15d0*sqr((-7.48d0) + x4) / + 2.86d0*sqr((-4.09d0) + x5)) - 1000.0d0*b14 + 1144.0623d0 g(10) = -(7.81d0*sqr((-7.42d0) + x1) + 2.14d0*sqr((-4.6d0) + x2) / + 9.63d0*sqr((-0.3d0) + x3) + 7.61d0*sqr((-0.97d0) + x4) / + 9.17d0*sqr((-8.77d0) + x5)) - 1000.0d0*b15 + 1099.8341d0 g(11) = -(8.96d0*sqr((-1.54d0) + x1) + 3.47d0*sqr((-7.06d0) + x2) / + 5.49d0*sqr((-0.01d0) + x3) + 4.73d0*sqr((-1.23d0) + x4) / + 9.43d0*sqr((-3.11d0) + x5)) - 1000.0d0*b16 + 1149.179d0 g(12) = -(9.94d0*sqr((-7.74d0) + x1) + 1.63d0*sqr((-4.4d0) + x2) / + 1.23d0*sqr((-7.93d0) + x3) + 4.33d0*sqr((-5.95d0) + x4) / + 7.08d0*sqr((-4.88d0) + x5)) - 1000.0d0*b17 + 1123.807d0 g(13) = -(0.31d0*sqr((-9.94d0) + x1) + 5.0d0*sqr((-5.21d0) + x2) / + 0.16d0*sqr((-8.58d0) + x3) + 2.52d0*sqr((-0.13d0) + x4) / + 3.08d0*sqr((-4.57d0) + x5)) - 1000.0d0*b18 + 1027.2219d0 g(14) = -(6.02d0*sqr((-9.54d0) + x1) + 0.92d0*sqr((-1.57d0) + x2) / + 7.47d0*sqr((-9.66d0) + x3) + 9.74d0*sqr((-5.24d0) + x4) / + 1.76d0*sqr((-7.9d0) + x5)) - 1000.0d0*b19 + 1089.9268d0 g(15) = -(5.06d0*sqr((-7.46d0) + x1) + 4.52d0*sqr((-8.81d0) + x2) / + 1.89d0*sqr((-1.67d0) + x3) + 1.22d0*sqr((-6.47d0) + x4) / + 9.05d0*sqr((-1.81d0) + x5)) - 1000.0d0*b20 + 1293.076d0 g(16) = -(5.92d0*sqr((-0.56d0) + x1) + 2.56d0*sqr((-8.1d0) + x2) / + 7.74d0*sqr((-0.19d0) + x3) + 6.96d0*sqr((-6.11d0) + x4) / + 5.18d0*sqr((-6.4d0) + x5)) - 1000.0d0*b21 + 1174.317d0 g(17) = -(6.45d0*sqr((-3.86d0) + x1) + 1.52d0*sqr((-6.68d0) + x2) / + 0.06d0*sqr((-6.42d0) + x3) + 5.34d0*sqr((-7.29d0) + x4) / + 8.47d0*sqr((-4.66d0) + x5)) - 1000.0d0*b22 + 1125.1028d0 g(18) = -(1.04d0*sqr((-2.98d0) + x1) + 1.36d0*sqr((-2.98d0) + x2) / + 5.99d0*sqr((-3.03d0) + x3) + 8.1d0*sqr((-0.02d0) + x4) / + 5.22d0*sqr((-0.67d0) + x5)) - 1000.0d0*b23 + 1222.8417d0 g(19) = -(1.4d0*sqr((-3.61d0) + x1) + 1.35d0*sqr((-7.62d0) + x2) / + 0.59d0*sqr((-1.79d0) + x3) + 8.58d0*sqr((-7.8d0) + x4) / + 1.21d0*sqr((-9.81d0) + x5)) - 1000.0d0*b24 + 1050.4859d0 g(20) = -(6.68d0*sqr((-5.68d0) + x1) + 9.48d0*sqr((-4.24d0) + x2) / + 1.6d0*sqr((-4.17d0) + x3) + 6.74d0*sqr((-6.75d0) + x4) / + 8.92d0*sqr((-1.08d0) + x5)) - 1000.0d0*b25 + 1361.1973d0 g(21) = -(1.95d0*sqr((-5.48d0) + x1) + 0.46d0*sqr((-3.74d0) + x2) / + 2.9d0*sqr((-3.34d0) + x3) + 1.79d0*sqr((-6.22d0) + x4) / + 0.99d0*sqr((-7.94d0) + x5)) - 1000.0d0*b26 + 1040.3264d0 g(22) = -(5.18d0*sqr((-8.13d0) + x1) + 5.1d0*sqr((-8.72d0) + x2) / + 8.81d0*sqr((-3.93d0) + x3) + 3.27d0*sqr((-8.8d0) + x4) / + 9.63d0*sqr((-8.56d0) + x5)) - 1000.0d0*b27 + 1161.8518d0 g(23) = -(1.47d0*sqr((-1.37d0) + x1) + 5.71d0*sqr((-0.54d0) + x2) / + 6.95d0*sqr((-1.55d0) + x3) + 1.42d0*sqr((-5.56d0) + x4) / + 3.49d0*sqr((-5.85d0) + x5)) - 1000.0d0*b28 + 1066.8582d0 g(24) = -(5.4d0*sqr((-8.79d0) + x1) + 3.12d0*sqr((-5.04d0) + x2) / + 5.37d0*sqr((-4.83d0) + x3) + 6.1d0*sqr((-6.94d0) + x4) / + 3.71d0*sqr((-0.38d0) + x5)) - 1000.0d0*b29 + 1340.5807d0 g(25) = -(6.32d0*sqr((-2.66d0) + x1) + 0.81d0*sqr((-4.19d0) + x2) / + 6.12d0*sqr((-6.49d0) + x3) + 6.73d0*sqr((-8.04d0) + x4) / + 7.93d0*sqr((-1.66d0) + x5)) - 1000.0d0*b30 + 1407.52d0 g(26) = -x1 + x2 - x3 - x4 - x5 + 10.0d0 g(27) = -0.6d0*x1 + 0.9d0*x2 + 0.5d0*x3 - 0.1d0*x4 - x5 - 0.64d0 g(28) = -(-x1 + x2 - x3 + x4 - x5) - 0.69d0 g(29) = -0.157d0*x1 - 0.05d0*x2 + 1.5d0 g(30) = -(-0.25d0*x2 - 1.05d0*x4 + 0.3d0*x5) -4.5d0 END function sqr(x) double precision x,sqr sqr = x**2 end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC END OF FILE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC