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 = 17 ! Number of variables (in total) NI = 17 ! Number of integer variables (0 <= NI <= N) M = 0 ! 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) = 1.0D0 XU(I) = DBLE(N) ENDDO C C Step 1.C : Starting point 'X' C CCCCCCCCCCCCCCCCCCCCCCCCCCCCC DO I = 1,N X(I) = XL(I) + DBLE(I-1) 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 = 100000 ! 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) = 2085.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) = 3.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 INTEGER I,N,CityA,CityB,distance(100,100) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC Distance(1,1)=0 Distance(2,1)=633 Distance(3,1)=257 Distance(4,1)=91 Distance(5,1)=412 Distance(6,1)=150 Distance(7,1)=80 Distance(8,1)=134 Distance(9,1)=259 Distance(10,1)=505 Distance(11,1)=353 Distance(12,1)=324 Distance(13,1)=70 Distance(14,1)=211 Distance(15,1)=268 Distance(16,1)=246 Distance(17,1)=121 Distance(1,2)=633 Distance(2,2)=0 Distance(3,2)=390 Distance(4,2)=661 Distance(5,2)=227 Distance(6,2)=488 Distance(7,2)=572 Distance(8,2)=530 Distance(9,2)=555 Distance(10,2)=289 Distance(11,2)=282 Distance(12,2)=638 Distance(13,2)=567 Distance(14,2)=466 Distance(15,2)=420 Distance(16,2)=745 Distance(17,2)=518 Distance(1,3)=257 Distance(2,3)=390 Distance(3,3)=0 Distance(4,3)=228 Distance(5,3)=169 Distance(6,3)=112 Distance(7,3)=196 Distance(8,3)=154 Distance(9,3)=372 Distance(10,3)=262 Distance(11,3)=110 Distance(12,3)=437 Distance(13,3)=191 Distance(14,3)=74 Distance(15,3)=53 Distance(16,3)=472 Distance(17,3)=142 Distance(1,4)=91 Distance(2,4)=661 Distance(3,4)=228 Distance(4,4)=0 Distance(5,4)=383 Distance(6,4)=120 Distance(7,4)=77 Distance(8,4)=105 Distance(9,4)=175 Distance(10,4)=476 Distance(11,4)=324 Distance(12,4)=240 Distance(13,4)=27 Distance(14,4)=182 Distance(15,4)=239 Distance(16,4)=237 Distance(17,4)=84 Distance(1,5)=412 Distance(2,5)=227 Distance(3,5)=169 Distance(4,5)=383 Distance(5,5)=0 Distance(6,5)=267 Distance(7,5)=351 Distance(8,5)=309 Distance(9,5)=338 Distance(10,5)=196 Distance(11,5)=61 Distance(12,5)=421 Distance(13,5)=346 Distance(14,5)=243 Distance(15,5)=199 Distance(16,5)=528 Distance(17,5)=297 Distance(1,6)=150 Distance(2,6)=488 Distance(3,6)=112 Distance(4,6)=120 Distance(5,6)=267 Distance(6,6)=0 Distance(7,6)=63 Distance(8,6)=34 Distance(9,6)=264 Distance(10,6)=360 Distance(11,6)=208 Distance(12,6)=329 Distance(13,6)=83 Distance(14,6)=105 Distance(15,6)=123 Distance(16,6)=364 Distance(17,6)=35 Distance(1,7)=80 Distance(2,7)=572 Distance(3,7)=196 Distance(4,7)=77 Distance(5,7)=351 Distance(6,7)=63 Distance(7,7)=0 Distance(8,7)=29 Distance(9,7)=232 Distance(10,7)=444 Distance(11,7)=292 Distance(12,7)=297 Distance(13,7)=47 Distance(14,7)=150 Distance(15,7)=207 Distance(16,7)=332 Distance(17,7)=29 Distance(1,8)=134 Distance(2,8)=530 Distance(3,8)=154 Distance(4,8)=105 Distance(5,8)=309 Distance(6,8)=34 Distance(7,8)=29 Distance(8,8)=0 Distance(9,8)=249 Distance(10,8)=402 Distance(11,8)=250 Distance(12,8)=314 Distance(13,8)=68 Distance(14,8)=108 Distance(15,8)=165 Distance(16,8)=349 Distance(17,8)=36 Distance(1,9)=259 Distance(2,9)=555 Distance(3,9)=372 Distance(4,9)=175 Distance(5,9)=338 Distance(6,9)=264 Distance(7,9)=232 Distance(8,9)=249 Distance(9,9)=0 Distance(10,9)=495 Distance(11,9)=352 Distance(12,9)=95 Distance(13,9)=189 Distance(14,9)=326 Distance(15,9)=383 Distance(16,9)=202 Distance(17,9)=236 Distance(1,10)=505 Distance(2,10)=289 Distance(3,10)=262 Distance(4,10)=476 Distance(5,10)=196 Distance(6,10)=360 Distance(7,10)=444 Distance(8,10)=402 Distance(9,10)=495 Distance(10,10)=0 Distance(11,10)=154 Distance(12,10)=578 Distance(13,10)=439 Distance(14,10)=336 Distance(15,10)=240 Distance(16,10)=685 Distance(17,10)=390 Distance(1,11)=353 Distance(2,11)=282 Distance(3,11)=110 Distance(4,11)=324 Distance(5,11)=61 Distance(6,11)=208 Distance(7,11)=292 Distance(8,11)=250 Distance(9,11)=352 Distance(10,11)=154 Distance(11,11)=0 Distance(12,11)=435 Distance(13,11)=287 Distance(14,11)=184 Distance(15,11)=140 Distance(16,11)=542 Distance(17,11)=238 Distance(1,12)=324 Distance(2,12)=638 Distance(3,12)=437 Distance(4,12)=240 Distance(5,12)=421 Distance(6,12)=329 Distance(7,12)=297 Distance(8,12)=314 Distance(9,12)=95 Distance(10,12)=578 Distance(11,12)=435 Distance(12,12)=0 Distance(13,12)=254 Distance(14,12)=391 Distance(15,12)=448 Distance(16,12)=157 Distance(17,12)=301 Distance(1,13)=70 Distance(2,13)=567 Distance(3,13)=191 Distance(4,13)=27 Distance(5,13)=346 Distance(6,13)=83 Distance(7,13)=47 Distance(8,13)=68 Distance(9,13)=189 Distance(10,13)=439 Distance(11,13)=287 Distance(12,13)=254 Distance(13,13)=0 Distance(14,13)=145 Distance(15,13)=202 Distance(16,13)=289 Distance(17,13)=55 Distance(1,14)=211 Distance(2,14)=466 Distance(3,14)=74 Distance(4,14)=182 Distance(5,14)=243 Distance(6,14)=105 Distance(7,14)=150 Distance(8,14)=108 Distance(9,14)=326 Distance(10,14)=336 Distance(11,14)=184 Distance(12,14)=391 Distance(13,14)=145 Distance(14,14)=0 Distance(15,14)=57 Distance(16,14)=426 Distance(17,14)=96 Distance(1,15)=268 Distance(2,15)=420 Distance(3,15)=53 Distance(4,15)=239 Distance(5,15)=199 Distance(6,15)=123 Distance(7,15)=207 Distance(8,15)=165 Distance(9,15)=383 Distance(10,15)=240 Distance(11,15)=140 Distance(12,15)=448 Distance(13,15)=202 Distance(14,15)=57 Distance(15,15)=0 Distance(16,15)=483 Distance(17,15)=153 Distance(1,16)=246 Distance(2,16)=745 Distance(3,16)=472 Distance(4,16)=237 Distance(5,16)=528 Distance(6,16)=364 Distance(7,16)=332 Distance(8,16)=349 Distance(9,16)=202 Distance(10,16)=685 Distance(11,16)=542 Distance(12,16)=157 Distance(13,16)=289 Distance(14,16)=426 Distance(15,16)=483 Distance(16,16)=0 Distance(17,16)=336 Distance(1,17)=121 Distance(2,17)=518 Distance(3,17)=142 Distance(4,17)=84 Distance(5,17)=297 Distance(6,17)=35 Distance(7,17)=29 Distance(8,17)=36 Distance(9,17)=236 Distance(10,17)=390 Distance(11,17)=238 Distance(12,17)=301 Distance(13,17)=55 Distance(14,17)=96 Distance(15,17)=153 Distance(16,17)=336 Distance(17,17)=0 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC N = 17 C Objective: Total distance between all visited cities F(1) = 0.0 DO I = 1,N-1 CityA = INT(X(I)) CityB = INT(X(I+1)) F(1) = F(1) + DISTANCE( CityA, CityB ) ENDDO C Close circle by connecting last with first city CityA = INT(X(N)) CityB = INT(X(1)) F(1) = F(1) + DISTANCE( CityA, CityB ) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C ALLDifferent constraint already fullfilled C by using MIDACO - special character C Constraint: Visit every city only once ccc DO I = 1,N ccc G(I) = 0.0 ccc DO J = 1,N ccc IF( I.NE.J .AND. DABS(X(I)-X(J)).LT.0.9 )THEN ccc G(I) = G(I) - 1.0 ccc ENDIF ccc ENDDO ccc ENDDO END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCC END OF FILE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC