MIDACO Version 6.0 Release Notes

While Version 6.0 incorporates numerous internal restructurings and algorithmic extensions to further improve its overall performance, the number of changes on the user interface level was kept to a minimum to allow an easy transition. Below is a list of notable changes together with their explanation. An updated and fully detailed user manual will be available within the next weeks.


BALANCE parameter

MIDACO version 6.0 offers a new parameter (called BALANCE) for multi-objective problems. The BALANCE parameter defines the priority (or importance) given to each individual objective function. By default (BALANCE=0.00) each objective will be given the same priority and therefore MIDACO will return the best equally balanced solution among the pareto front as solution (see below Figure 1).

In case the entire importance should be given to a specific individual objective function, this can be achieved by setting the BALANCE parameter value equal to the number of the individual objective function. For example, below Figure 2 uses a BALANCE = 1.00 and therefore puts the entire importance on the first objective function. Figure 3 uses a BALANCE = 2.00 and therefore puts the entire importance on the second objective function. Consequently, the MIDACO solution is positioned at the very  left side in Figure 2, while it is positioned at the very right side of the pareto front in Figure 3.


Examples of different BALANCE parameter values and their impact on the MIDACO solution


Figure 1


Figure 2


Figure 3

BALANCE = 0.00  (default) BALANCE = 1.00 BALANCE = 2.00


Figure 4


Figure 5


Figure 6

BALANCE = 0.36  BALANCE = 0.82  BALANCE = 0.19


Python source code to reproduce above figures:   example.py.txt



Fine tuning of the BALANCE parameter is possible by exploiting the decimal digits of parameter value as numerical indicator for individual objective functions. In such approach, each individual objective can be given a priority value between 0 and 9. For example: If the first objective should be given a priority of 3 and the second objective should be given a priority of 6, then the BALANCE parameter value would be set to  BALANCE = 0.36. Above Figure 4 displays the result for such a setting. Note that in contrast to Figure 1 (equally balanced solution), the MIDACO solution in Figure 4 is positioned lower on the front, giving the second objective a value about twice as good as the first objective (namely F1≈0.66 and F2≈0.33).

As another example, consider that the first objective should be given a priority of 8 while the second objective should be given a priority of only 2.Then the BALANCE parameter is set to 0.82. Figure 5 displays the resulting MIDACO solution for such setting. Note that the MIDACO solution in Figure 5 is positioned much more in favor of the first objective, than the second objective.

As last example, consider that the first objective should be given a low importance of 1, while the second objective should be given a  high importance of 9. Then the BALANCE parameter is set to 0.19 and Figure 6 displays the resulting MIDACO solution position. Note that in Figure 6 the MIDACO position is located close to the right side of the pareto front, reflecting the desire to significantly favor the second objective over the first objective.


PARETOMAX parameter

The new default value in version 6.0 for PARETOMAX equals 1000, instead of 100 in version 5.0. This means that MIDACO will save up to 1000 non-dominated solutions in the MIDACO_PARETOFRONT file. Like in version 5.0, the user can optionally choose any  value for PARETOMAX.



The handling of the MIDACO_HISTORY.TXT file via the  save2file  parameter has slightly changed. Like in the 5.0 version, If a value lower or equal to one is assigned to save2file no history file is generated. If a value greater or equal to two is assigned to save2file a history file is generated and it will collect as many solution as given by the numerical value of save2file. If the the number of solutions exceeds those numerical value given by save2file, the history will be deleted and re-openend. This automatic deletion and re-opening is done to avoid an exploding file size of the history file.

For example: If save2file = 10000, then a history file will be generated that contains up to 10,000 of the latest solutions. In case  all solutions  should be saved in the history file, this can easily be achieved by setting a sufficient high value (e.g. 10000000) to the save2file parameter; but be aware that the file size of such history can become very large.

Note that the MIDACO history file option is available only for following programming languages:

Matlab, Octave, Python, Java, C/C++, Fortran and R (on Mac/Linux if non-native dll printing is enabled)


Workspace requirement

This change is only relevant for Fortran and C/C++ user, who use static allocation of of the real (RW) and integer (IW) workspace arrays. The real and integer workspace requirements of version 6.0 has increased due to internal algorithmic extensions. The new minimal length (LRW) for the real workspace is given by:

LRW = 120*N+20*M+20*O+20*P+P*(M+2*O)+O*O+5000

The new minimal length (LIW) for the integer workspace is given by:

LIW = 3*N+P+1000

As an example, consider an unconstrained, single-objective problem with 1000 variables that is solved without parallelization. Therefore the the minimal real workspace (RW) length is calculated as:

LRW = 120*1000+20*0+20*1+20*1+1*(0+2*1)+1*1+5000 = 125043

Assuming that one real (double-precision) variable requires 8 bytes, the above minimal workspace requirement equals 125043 * 8 bytes which is (only) about 1 MB. The integer minimal integer workspace LIW is calculated by LIW = 3*1000+1+1000 = 4001 and therefore neglectable as some 4 KB.

Note that MIDACO user in Fortran and C/C++ user do not need to be concerned with the above exact workspace calculation. Simply allocate the RW and IW arrays large enough (e.g. RW[1000000]) will suffice.