Appendix A – Initial Dataset of Illustrative Case
No. of BS |
Category of Basic Site |
Location of BS |
Demand in Basic Site, unit: kg |
|
Capacity (Ski) of supply of items A from Production Site to the current Basic Site, unit: kg |
Sum of Capacity of item A for BS |
||||||||||
items A |
items B |
|
PS1 |
PS2 |
PS3 |
PS4 |
PS5 |
PS6 |
PS7 |
PS8 |
PS9 |
PS10 |
||||
1 |
Airport |
(1, 8) |
DiA~N(10000, 2408) |
DiB~N(15264, 5780) |
|
0 |
2156 |
0 |
5389 |
4311 |
0 |
0 |
1078 |
3233 |
0 |
16167 |
2 |
Coach station |
(82, 18) |
DiA~N(2892, 250) |
DiB~N(4142, 222) |
|
0 |
0 |
0 |
0 |
1200 |
0 |
1800 |
0 |
0 |
600 |
3600 |
3 |
Coach station |
(45, 4) |
DiA~N(2718, 62) |
DiB~N(4177, 792) |
|
192 |
384 |
0 |
0 |
575 |
0 |
767 |
0 |
959 |
0 |
2877 |
4 |
Train station |
(58, 84) |
DiA~N(4185, 1010) |
DiB~N(6158, 1367) |
|
0 |
0 |
1287 |
0 |
0 |
1716 |
0 |
0 |
858 |
429 |
4290 |
5 |
Train station |
(83, 81) |
DiA~N(4222, 624) |
DiB~N(5954, 52) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
4813 |
4813 |
6 |
Train station |
(87, 22) |
DiA~N(4422, 1015) |
DiB~N(7624, 1421) |
|
0 |
0 |
0 |
0 |
3090 |
0 |
1030 |
0 |
0 |
2060 |
6180 |
7 |
Metro station |
(6, 33) |
DiA~N(586, 102) |
DiB~N(1503, 286) |
|
0 |
415 |
0 |
138 |
0 |
0 |
0 |
0 |
277 |
0 |
830 |
8 |
Metro station |
(71, 57) |
DiA~N(802, 79) |
DiB~N(664, 118) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
933 |
933 |
9 |
Metro station |
(56, 44) |
DiA~N(832, 43) |
DiB~N(1328, 269) |
|
0 |
0 |
613 |
0 |
0 |
0 |
0 |
0 |
0 |
307 |
920 |
10 |
Metro station |
(73, 65) |
DiA~N(669, 146) |
DiB~N(656, 158) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
836 |
836 |
11 |
Metro station |
(93, 69) |
DiA~N(643, 124) |
DiB~N(1249, 136) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
772 |
772 |
12 |
Metro station |
(67, 72) |
DiA~N(625, 66) |
DiB~N(1059, 68) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
692 |
692 |
13 |
Metro station |
(37, 76) |
DiA~N(845, 21) |
DiB~N(961, 175) |
|
0 |
0 |
273 |
0 |
0 |
182 |
0 |
0 |
363 |
91 |
909 |
14 |
Metro station |
(76, 70) |
DiA~N(583, 21) |
DiB~N(974, 167) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
623 |
623 |
15 |
Metro station |
(95, 19) |
DiA~N(899, 10) |
DiB~N(1314, 309) |
|
0 |
0 |
0 |
0 |
0 |
0 |
306 |
0 |
0 |
613 |
919 |
16 |
Metro station |
(29, 8) |
DiA~N(603, 5) |
DiB~N(890, 203) |
|
0 |
311 |
0 |
104 |
0 |
208 |
0 |
0 |
0 |
0 |
623 |
17 |
Restaurant |
(89, 81) |
DiA~N(1735, 249) |
DiB~N(2742, 45) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2501 |
2501 |
18 |
Restaurant |
(66, 10) |
DiA~N(1994, 489) |
DiB~N(1393, 164) |
|
1388 |
0 |
0 |
0 |
925 |
0 |
0 |
0 |
463 |
0 |
2776 |
19 |
Restaurant |
(95, 1) |
DiA~N(1711, 347) |
DiB~N(3684, 270) |
|
0 |
0 |
0 |
0 |
618 |
0 |
927 |
0 |
0 |
309 |
1854 |
20 |
Restaurant |
(58, 11) |
DiA~N(1556, 29) |
DiB~N(2936, 627) |
|
221 |
0 |
442 |
0 |
111 |
0 |
0 |
0 |
553 |
332 |
1659 |
21 |
Restaurant |
(91, 54) |
DiA~N(2331, 130) |
DiB~N(2909, 61) |
|
0 |
0 |
0 |
0 |
875 |
0 |
0 |
0 |
0 |
1750 |
2625 |
22 |
Restaurant |
(20, 75) |
DiA~N(2387, 39) |
DiB~N(1802, 309) |
|
0 |
0 |
0 |
0 |
0 |
423 |
0 |
0 |
846 |
1268 |
2537 |
23 |
Restaurant |
(61, 89) |
DiA~N(2425, 528) |
DiB~N(1731, 256) |
|
0 |
0 |
246 |
0 |
0 |
983 |
0 |
0 |
738 |
492 |
2459 |
24 |
Restaurant |
(43, 32) |
DiA~N(1706, 5) |
DiB~N(3174, 529) |
|
0 |
0 |
574 |
862 |
0 |
0 |
0 |
0 |
287 |
0 |
1723 |
25 |
Restaurant |
(65, 34) |
DiA~N(1757, 293) |
DiB~N(209, 41) |
|
814 |
1220 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
407 |
2441 |
26 |
Restaurant |
(65, 61) |
DiA~N(1959, 113) |
DiB~N(2935, 343) |
|
746 |
0 |
0 |
1491 |
0 |
0 |
0 |
0 |
0 |
0 |
2237 |
27 |
Hotel |
(7, 17) |
DiA~N(1390, 170) |
DiB~N(852, 171) |
|
0 |
1196 |
0 |
0 |
0 |
0 |
0 |
0 |
598 |
0 |
1794 |
28 |
Hotel |
(74, 39) |
DiA~N(1084, 185) |
DiB~N(1984, 286) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1518 |
1518 |
29 |
Hotel |
(78, 54) |
DiA~N(1480, 100) |
DiB~N(1785, 59) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1657 |
1657 |
30 |
Hotel |
(94, 65) |
DiA~N(1336, 138) |
DiB~N(2083, 298) |
|
0 |
0 |
0 |
0 |
1198 |
0 |
0 |
0 |
0 |
599 |
1797 |
31 |
Hotel |
(97, 27) |
DiA~N(1010, 178) |
DiB~N(1016, 234) |
|
0 |
0 |
0 |
0 |
0 |
0 |
358 |
0 |
0 |
716 |
1074 |
32 |
Hotel |
(94, 86) |
DiA~N(1189, 215) |
DiB~N(1118, 114) |
|
0 |
0 |
0 |
0 |
884 |
0 |
0 |
0 |
0 |
442 |
1326 |
33 |
Hotel |
(70, 45) |
DiA~N(792, 91) |
DiB~N(2001, 236) |
|
0 |
609 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
304 |
913 |
34 |
Hotel |
(90, 28) |
DiA~N(1195, 122) |
DiB~N(1710, 166) |
|
0 |
0 |
0 |
0 |
0 |
0 |
941 |
0 |
0 |
471 |
1412 |
35 |
Hotel |
(13, 96) |
DiA~N(1375, 290) |
DiB~N(753, 164) |
|
0 |
0 |
0 |
0 |
0 |
985 |
0 |
0 |
328 |
657 |
1970 |
36 |
Hotel |
(11, 62) |
DiA~N(763, 5) |
DiB~N(1415, 344) |
|
0 |
260 |
0 |
0 |
0 |
0 |
0 |
0 |
520 |
0 |
780 |
37 |
Tourist attractions |
(47, 40) |
DiA~N(8858, 333) |
DiB~N(11697, 1432) |
|
0 |
0 |
4625 |
1542 |
0 |
0 |
0 |
0 |
3083 |
0 |
9250 |
38 |
Tourist attractions |
(22, 94) |
DiA~N(8202, 1975) |
DiB~N(12321, 96) |
|
0 |
0 |
0 |
0 |
0 |
7317 |
0 |
0 |
2439 |
4878 |
14634 |
39 |
Tourist attractions |
(55, 63) |
DiA~N(8510, 1989) |
DiB~N(13844, 2765) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
4981 |
9963 |
14944 |
40 |
Tourist attractions |
(44, 85) |
DiA~N(8247, 968) |
DiB~N(11739, 87) |
|
0 |
0 |
1022 |
0 |
0 |
4088 |
0 |
0 |
2044 |
3066 |
10220 |
41 |
Tourist attractions |
(76, 41) |
DiA~N(8804, 313) |
DiB~N(10709, 1586) |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
9391 |
9391 |
42 |
Tourist attractions |
(28, 98) |
DiA~N(8391, 1428) |
DiB~N(13323, 410) |
|
0 |
0 |
0 |
0 |
0 |
2874 |
0 |
0 |
1437 |
4311 |
8622 |
43 |
Tourist attractions |
(14, 41) |
DiA~N(8312, 103) |
DiB~N(11699, 754) |
|
0 |
0 |
0 |
2855 |
0 |
0 |
0 |
0 |
5710 |
0 |
8565 |
44 |
Whole retailer/Retailer |
(97, 35) |
DiA~N(6295, 1289) |
DiB~N(8247, 1416) |
|
0 |
0 |
0 |
0 |
6161 |
0 |
0 |
0 |
0 |
3081 |
9242 |
45 |
Whole retailer/Retailer |
(62, 1) |
DiA~N(6495, 194) |
DiB~N(9324, 1801) |
|
2752 |
1376 |
0 |
0 |
2064 |
0 |
0 |
0 |
688 |
0 |
6880 |
46 |
Whole retailer/Retailer |
(13, 19) |
DiA~N(6492, 1429) |
DiB~N(11305, 397) |
|
0 |
4922 |
0 |
0 |
0 |
2461 |
0 |
0 |
0 |
0 |
7383 |
47 |
Whole retailer/Retailer |
(31, 49) |
DiA~N(6363, 895) |
DiB~N(8866, 1580) |
|
3957 |
989 |
2968 |
1979 |
0 |
0 |
0 |
0 |
0 |
0 |
9893 |
48 |
Whole retailer/Retailer |
(41, 95) |
DiA~N(6365, 588) |
DiB~N(8637, 1225) |
|
0 |
0 |
0 |
775 |
0 |
2326 |
0 |
0 |
3101 |
1551 |
7753 |
49 |
Whole retailer/Retailer |
(7, 1) |
DiA~N(7451, 1606) |
DiB~N(10154, 2153) |
|
0 |
6310 |
0 |
0 |
0 |
0 |
3155 |
0 |
0 |
0 |
9465 |
50 |
Whole retailer/Retailer |
(73, 24) |
DiA~N(6886, 1671) |
DiB~N(10071, 1103) |
|
0 |
0 |
0 |
0 |
1197 |
0 |
3592 |
0 |
2395 |
4789 |
11973 |
Location of the current PS |
|
(55, 25) |
(18, 19) |
(45, 66) |
(30, 40) |
(73, 17) |
(28, 78) |
(88, 11) |
(10, 85) |
(15, 63) |
(59, 69) |
|
Appendix B – Data of Good Compromise Solutions
Good Compromise Solution 1 |
Good Compromise Solution 2 |
||||||||||||||||||||||||||||||
BSi* |
bqAi* /kg |
bqBi* /kg |
CDCj* |
qAj* /kg |
qBj* /kg |
Qkj* /kg |
PSk* |
BSi* |
bqAi* /kg |
bqBi* /kg |
CDCj* |
qAj* /kg |
qBj* /kg |
Qkj* /kg |
PSk* |
||||||||||||||||
1 |
14954 |
16994 |
2 |
24016 |
29487 |
1994 |
2 |
1 |
14735 |
16986 |
2 |
23776 |
29578 |
1965 |
2 |
||||||||||||||||
2 |
3435 |
4699 |
4985 |
4 |
2 |
3442 |
4673 |
4912 |
4 |
||||||||||||||||||||||
22 |
2477 |
2543 |
6297 |
5 |
22 |
2474 |
2562 |
6222 |
5 |
||||||||||||||||||||||
30 |
1746 |
2960 |
413 |
6 |
30 |
1719 |
3023 |
413 |
6 |
||||||||||||||||||||||
34 |
1404 |
2286 |
2653 |
7 |
34 |
1406 |
2330 |
2658 |
7 |
||||||||||||||||||||||
997 |
8 |
983 |
8 |
||||||||||||||||||||||||||||
3816 |
9 |
3772 |
9 |
||||||||||||||||||||||||||||
2861 |
10 |
2852 |
10 |
||||||||||||||||||||||||||||
4 |
4255 |
9417 |
4 |
13053 |
23013 |
1277 |
3 |
4 |
4257 |
10286 |
4
|
13032
|
24027
|
1277 |
3 |
||||||||||||||||
44 |
8797 |
13593 |
5865 |
5 |
44
|
8775 |
13739
|
5850 |
5 |
||||||||||||||||||||||
1702 |
6 |
1703 |
6 |
||||||||||||||||||||||||||||
851 |
9 |
852 |
9 |
||||||||||||||||||||||||||||
3358 |
10 |
3351 |
10 |
||||||||||||||||||||||||||||
5 |
4749 |
6041 |
5 |
27933 |
42197 |
742 |
1 |
5 |
4734 |
6065 |
5 |
27704 |
41958 |
737 |
1 |
||||||||||||||||
6 |
6043 |
9904 |
6244 |
2 |
6 |
5876 |
9926 |
|
|
6289 |
2 |
||||||||||||||||||||
17 |
2410 |
2864 |
1482 |
4 |
17 |
2303 |
2863 |
1472 |
4 |
||||||||||||||||||||||
19 |
1820 |
4107 |
4510 |
5 |
19 |
1830 |
4293 |
4427 |
5 |
||||||||||||||||||||||
26 |
2223 |
3840 |
5039 |
7 |
26 |
2208 |
3778 |
5039 |
7 |
||||||||||||||||||||||
32 |
1323 |
1417 |
9917 |
10 |
32 |
1318 |
1410 |
9741 |
10 |
||||||||||||||||||||||
49 |
9365 |
14016 |
49 |
9433 |
13616 |
||||||||||||||||||||||||||
7 |
771 |
2472 |
7 |
7588 |
15364 |
2727 |
1 |
7 |
770 |
2562 |
7 |
7566 |
15433 |
2718 |
1 |
||||||||||||||||
45 |
6816 |
12890 |
1749 |
2 |
45 |
6796 |
12869 |
1744 |
2 |
||||||||||||||||||||||
128 |
4 |
128 |
4 |
||||||||||||||||||||||||||||
2045 |
5 |
2039 |
5 |
||||||||||||||||||||||||||||
939 |
9 |
937 |
9 |
||||||||||||||||||||||||||||
9 |
908 |
2315 |
9 |
1588 |
3623 |
605 |
3 |
9 |
903 |
2402 |
9 |
1576 |
3684 |
602 |
3 |
||||||||||||||||
12 |
680 |
1307 |
983 |
10 |
12 |
673 |
1280 |
975 |
10 |
||||||||||||||||||||||
3 |
2855 |
5860 |
13 |
3754 |
7295 |
191 |
1 |
3 |
2853 |
5903 |
13
|
3758
|
7202
|
190 |
1 |
||||||||||||||||
13 |
899 |
1433 |
381 |
2 |
13
|
905
|
1297
|
381 |
2 |
||||||||||||||||||||||
270 |
3 |
272 |
3 |
||||||||||||||||||||||||||||
571 |
5 |
570 |
5 |
||||||||||||||||||||||||||||
180 |
6 |
181 |
6 |
||||||||||||||||||||||||||||
761 |
7 |
761 |
7 |
||||||||||||||||||||||||||||
1311 |
9 |
1312 |
9 |
||||||||||||||||||||||||||||
90 |
10 |
91 |
10 |
||||||||||||||||||||||||||||
8 |
920 |
1023 |
14 |
2152 |
3981 |
310 |
2 |
8 |
922 |
1020 |
14
|
2159 |
3929
|
310 |
2 |
||||||||||||||||
14 |
610 |
1439 |
104 |
4 |
14 |
615 |
1458 |
|
104 |
4 |
|||||||||||||||||||||
16 |
622 |
1516 |
208 |
6 |
16 |
620 |
1447
|
207 |
6 |
||||||||||||||||||||||
1530 |
10 |
|
|
1538 |
10 |
||||||||||||||||||||||||||
25 |
2325 |
2350 |
25 |
16930 |
14924 |
775 |
1 |
25 |
2352 |
2350 |
25
|
15089
|
15003
|
784 |
1 |
||||||||||||||||
38 |
14606 |
12572 |
1162 |
2 |
38
|
12737
|
12651
|
1176 |
2 |
||||||||||||||||||||||
7303 |
6 |
6369 |
6 |
||||||||||||||||||||||||||||
2434 |
9 |
2123 |
9 |
||||||||||||||||||||||||||||
5256 |
10 |
4638 |
10 |
||||||||||||||||||||||||||||
27 |
1742 |
1294 |
27 |
1742 |
1295 |
1161 |
2 |
27
|
1752
|
1293
|
27
|
1752
|
1294
|
1168 |
2 |
||||||||||||||||
581 |
9 |
584 |
9 |
||||||||||||||||||||||||||||
10 |
828 |
1054 |
31 |
14113 |
21391 |
1348 |
1 |
10 |
810 |
1095 |
31
|
1398 |
21374
|
1304 |
1 |
||||||||||||||||
15 |
915 |
2335 |
898 |
5 |
15 |
915 |
2322 |
869 |
5 |
||||||||||||||||||||||
18 |
2695 |
1766 |
2869 |
6 |
18 |
2608 |
1820 |
2861 |
6 |
||||||||||||||||||||||
31 |
1069 |
1728 |
661 |
7 |
31 |
1071 |
1742 |
662 |
7 |
||||||||||||||||||||||
42 |
8606 |
14504 |
1884 |
9 |
42
|
8583
|
14391
|
1866 |
9 |
||||||||||||||||||||||
6454 |
10 |
6426 |
10 |
||||||||||||||||||||||||||||
35 |
1764 |
1169 |
35 |
11155 |
12393 |
3756 |
1 |
35 |
1755 |
1132 |
35
|
10664
|
12699
|
3564 |
1 |
||||||||||||||||
47 |
9391 |
11222 |
939 |
2 |
47
|
8909
|
11565
|
891 |
2 |
||||||||||||||||||||||
2817 |
3 |
2673 |
3 |
||||||||||||||||||||||||||||
1879 |
4 |
1782 |
4 |
||||||||||||||||||||||||||||
882 |
6 |
877 |
6 |
||||||||||||||||||||||||||||
294 |
9 |
292 |
9 |
||||||||||||||||||||||||||||
588 |
10 |
585 |
10 |
||||||||||||||||||||||||||||
23 |
2458 |
2403 |
36 |
12121 |
19285 |
5105 |
2 |
23 |
2452 |
2392 |
36
|
12147
|
19198
|
5120 |
2 |
||||||||||||||||
29 |
1617 |
1997 |
246 |
3 |
29 |
1627 |
2018 |
245 |
3 |
||||||||||||||||||||||
36 |
778 |
2297 |
3405 |
6 |
36 |
777 |
2298 |
3411 |
6 |
||||||||||||||||||||||
46 |
7268 |
12584 |
1256 |
9 |
46
|
7291
|
12486
|
1254 |
9 |
||||||||||||||||||||||
2109 |
10 |
2118 |
10 |
||||||||||||||||||||||||||||
24 |
1721 |
4894 |
37 |
31282 |
43874 |
6172 |
3 |
24 |
1721 |
4747 |
37
|
30739
|
43312
|
6169 |
3 |
||||||||||||||||
37 |
9187 |
14249 |
2392 |
4 |
37 |
9217 |
13984 |
2398 |
4 |
||||||||||||||||||||||
40 |
10049 |
11972 |
1032 |
5 |
40 |
9871 |
11985 |
993 |
5 |
||||||||||||||||||||||
50 |
10326 |
12755 |
4020 |
6 |
50
|
9930
|
12592
|
3948 |
6 |
||||||||||||||||||||||
3098 |
7 |
2979 |
7 |
||||||||||||||||||||||||||||
7424 |
9 |
7319 |
9 |
||||||||||||||||||||||||||||
7145 |
10 |
6933 |
10 |
||||||||||||||||||||||||||||
11 |
759 |
1779 |
39 |
12914 |
23449 |
4051 |
9 |
11 |
761 |
1758 |
39 |
13012 |
20680
|
4084 |
9 |
||||||||||||||||
39 |
12155 |
21667 |
8862 |
10 |
39 |
12251 |
18920 |
|
|
8929 |
10 |
||||||||||||||||||||
20 |
1629 |
4576 |
43 |
20402 |
35145 |
217 |
1 |
20 |
1632 |
4628 |
43 |
20352 |
36424 |
218 |
1 |
||||||||||||||||
33 |
893 |
2633 |
596 |
2 |
33 |
886 |
2578 |
591 |
2 |
||||||||||||||||||||||
41 |
9374 |
14382 |
434 |
3 |
41 |
9329 |
15424 |
435 |
3 |
||||||||||||||||||||||
43 |
8506 |
13549 |
2835 |
4 |
43 |
8505 |
13789 |
2835 |
4 |
||||||||||||||||||||||
109 |
5 |
109 |
5 |
||||||||||||||||||||||||||||
6214 |
9 |
6214 |
9 |
||||||||||||||||||||||||||||
9998 |
10 |
9951 |
10 |
||||||||||||||||||||||||||||
21 |
2616 |
3136 |
48 |
11250 |
17135 |
715 |
4 |
21 |
2594 |
3136 |
48 |
11416 |
17328 |
733 |
4 |
||||||||||||||||
28 |
1481 |
2767 |
872 |
5 |
28 |
1486 |
2877 |
865 |
5 |
||||||||||||||||||||||
48 |
7152 |
11228 |
2146 |
6 |
48 |
7335 |
11311 |
2201 |
6 |
||||||||||||||||||||||
2861 |
9 |
2934 |
9 |
||||||||||||||||||||||||||||
4656 |
10 |
4684 |
10 |
||||||||||||||||||||||||||||
Good Compromise Solution 3 |
Good Compromise Solution 4 |
|
|||||||||||||||||||||||||||||
BSi* |
bqAi* /kg |
bqBi* /kg |
CDCj* |
qAj* /kg |
qBj* /kg |
Qkj* /kg |
PSk* |
BSi* |
bqAi* /kg |
bqBi* /kg |
CDCj* |
qAj* /kg |
qBj* /kg |
Qkj* /kg |
PSk* |
|
|||||||||||||||
1 |
15205 |
16957 |
2 |
24266 |
29454 |
2028 |
2 |
1 |
13488 |
17009 |
2 |
22583 |
29413 |
1799 |
2 |
|
|||||||||||||||
2 |
3458 |
4722 |
5068 |
4 |
2 |
3464 |
4672 |
4496 |
4 |
|
|||||||||||||||||||||
22 |
2471 |
2534 |
6360 |
5 |
22 |
2479 |
2535 |
5912 |
5 |
|
|||||||||||||||||||||
30 |
1730 |
2956 |
412 |
6 |
30 |
1741 |
2992 |
413 |
6 |
|
|||||||||||||||||||||
34 |
1403 |
2279 |
2664 |
7 |
34 |
1411 |
2201 |
2672 |
7 |
|
|||||||||||||||||||||
1014 |
8 |
899 |
8 |
|
|||||||||||||||||||||||||||
3865 |
9 |
3524 |
9 |
|
|||||||||||||||||||||||||||
2856 |
10 |
2867 |
10 |
|
|||||||||||||||||||||||||||
4 |
4254 |
9306 |
4 |
13095 |
21801 |
1276 |
3 |
4 |
4255 |
10284 |
4 |
13381 |
22974 |
1277 |
3 |
|
|||||||||||||||
44 |
8840 |
12493 |
5893 |
5 |
44 |
9126 |
12688 |
6084 |
5 |
|
|||||||||||||||||||||
1702 |
6 |
1702 |
6 |
|
|||||||||||||||||||||||||||
851 |
9 |
851 |
9 |
|
|||||||||||||||||||||||||||
3373 |
10 |
3468 |
10 |
|
|||||||||||||||||||||||||||
5 |
4724 |
6034 |
5 |
27679 |
42237 |
740 |
1 |
5 |
4790 |
6069 |
5 |
27444 |
42331 |
743 |
1 |
|
|||||||||||||||
6 |
6061 |
9849 |
6132 |
2 |
6 |
5767 |
9840 |
6122 |
2 |
|
|||||||||||||||||||||
17 |
2337 |
2861 |
1480 |
4 |
17 |
2342 |
2872 |
1485 |
4 |
|
|||||||||||||||||||||
19 |
1818 |
4192 |
4518 |
5 |
19 |
1815 |
4209 |
4367 |
5 |
|
|||||||||||||||||||||
26 |
2220 |
3810 |
4985 |
7 |
26 |
2228 |
3995 |
4930 |
7 |
|
|||||||||||||||||||||
32 |
1322 |
1417 |
9825 |
10 |
32 |
1318 |
1444 |
9796 |
10 |
|
|||||||||||||||||||||
49 |
9197 |
14067 |
49 |
9184 |
13895 |
|
|||||||||||||||||||||||||
7 |
769 |
2454 |
7 |
7577
|
15202 |
2723 |
1 |
7 |
765 |
2559 |
7 |
7568 |
15289 |
2721 |
1 |
|
|||||||||||||||
45 |
6808 |
12745 |
1746 |
2 |
45 |
6803 |
12728 |
1743 |
2 |
|
|||||||||||||||||||||
128 |
4 |
127 |
4 |
|
|||||||||||||||||||||||||||
2043 |
5 |
2041 |
5 |
|
|||||||||||||||||||||||||||
938 |
9 |
936 |
9 |
|
|||||||||||||||||||||||||||
9 |
896 |
2253 |
9 |
1572 |
3558 |
597 |
3 |
9 |
902 |
2335 |
9 |
1579 |
3668 |
601 |
3 |
|
|||||||||||||||
12 |
676 |
1303 |
975 |
10 |
12 |
677 |
1330 |
978 |
10 |
|
|||||||||||||||||||||
3 |
2849 |
5879 |
13 |
3752 |
7288 |
190 |
1 |
3 |
2848 |
6170 |
13 |
3757 |
7465 |
190 |
1 |
|
|||||||||||||||
13 |
903 |
1406 |
380 |
2 |
13 |
909 |
1292 |
380 |
2 |
|
|||||||||||||||||||||
271 |
3 |
273 |
3 |
|
|||||||||||||||||||||||||||
569 |
5 |
569 |
5 |
|
|||||||||||||||||||||||||||
181 |
6 |
182 |
6 |
|
|||||||||||||||||||||||||||
760 |
7 |
759 |
7 |
|
|||||||||||||||||||||||||||
1310 |
9 |
1312 |
9 |
|
|||||||||||||||||||||||||||
90 |
10 |
91 |
10 |
|
|||||||||||||||||||||||||||
8 14 16 0 |
921 613 621 0 |
1023 1449 1518 0 |
14 0 0 0 |
2154 0 0 0 |
3992 0 0 0 |
310 |
2 |
8 |
917 |
1038 |
14 |
2153 |
3963 |
310 |
2 |
|
|||||||||||||||
104 |
4 |
14 |
615 |
1453 |
104 |
4 |
|
||||||||||||||||||||||||
207 |
6 |
16 0 |
621 0 |
1469 0 |
207 |
6 |
|
||||||||||||||||||||||||
1533 |
10 |
1532 |
10 |
|
|||||||||||||||||||||||||||
25 |
2310 |
2351 |
25 |
14904 |
14927 |
770 |
1 |
25 |
2268 |
2349 |
25 |
15218 |
14945 |
757 |
1 |
|
|||||||||||||||
38 |
12594 |
12573 |
1155 |
2 |
38 |
12949 |
12594 |
1134 |
2 |
|
|||||||||||||||||||||
6297 |
6 |
6475 |
6 |
|
|||||||||||||||||||||||||||
2099 |
9 |
2158 |
9 |
|
|||||||||||||||||||||||||||
4583 |
10 |
4695 |
10 |
|
|||||||||||||||||||||||||||
27 |
1718 |
1281 |
27 |
1718 |
1282 |
1146 |
2 |
27 |
1752 |
1355 |
27 |
1752 |
1356 |
1168 |
2 |
|
|||||||||||||||
573 |
9 |
584 |
9 |
|
|||||||||||||||||||||||||||
10 |
827 |
1094 |
31 |
14128 |
21578 |
1349 |
1 |
10 |
813 |
1085 |
31 |
14086 |
21451 |
1337 |
1 |
|
|||||||||||||||
15 |
916 |
2374 |
899 |
5 |
15 |
915 |
2324 |
891 |
5 |
|
|||||||||||||||||||||
18 |
2697 |
1735 |
2874 |
6 |
18 |
2674 |
1798 |
2871 |
6 |
|
|||||||||||||||||||||
31 |
1067 |
1797 |
661 |
7 |
31 |
1070 |
1750 |
662 |
7 |
|
|||||||||||||||||||||
42 |
8621 |
14573 |
1887 |
9 |
42 |
8614 |
14489 |
1882 |
9 |
|
|||||||||||||||||||||
6460 |
10 |
6444 |
10 |
|
|||||||||||||||||||||||||||
35 |
1762 |
1160 |
35 |
11258 |
12043 |
3798 |
1 |
35 47 |
1747 9274 |
1161 11186 |
35 |
11021 |
12349 |
3710 |
1 |
|
|||||||||||||||
47 |
9496 |
10882 |
949 |
2 |
927 |
2 |
|
||||||||||||||||||||||||
2849 |
3 |
2782 |
3 |
|
|||||||||||||||||||||||||||
1900 |
4 |
1855 |
4 |
|
|||||||||||||||||||||||||||
881 |
6 |
873 |
6 |
|
|||||||||||||||||||||||||||
293 |
9 |
291 |
9 |
|
|||||||||||||||||||||||||||
588 |
10 |
583 |
10 |
|
|||||||||||||||||||||||||||
23 |
2456 |
2375 |
36 |
12125 |
19273 |
5103 |
2 |
23 |
2453 |
2393 |
36 |
12101 |
19258 |
5089 |
2 |
|
|||||||||||||||
29 |
1627 |
1992 |
246 |
3 |
29 |
1626 |
2015 |
246 |
3 |
|
|||||||||||||||||||||
36 |
777 |
2290 |
3404 |
6 |
36 |
777 |
2272 |
3396 |
6 |
|
|||||||||||||||||||||
46 |
7266 |
12612 |
1255 |
9 |
46 |
7245 |
12574 |
1254 |
9 |
|
|||||||||||||||||||||
2118 |
10 |
2117 |
10 |
|
|||||||||||||||||||||||||||
24 |
1721 |
4971 |
37 |
31165 |
43395 |
6170 |
3 |
24 |
1721 |
4791 |
37 |
30712 0 0 0 0 0 0 |
43717 0 0 0 0 0 0 |
6150 |
3 |
|
|||||||||||||||
37 |
9207 |
13920 |
2396 |
4 |
37 |
9214 |
14108 |
2397 |
4 |
|
|||||||||||||||||||||
40 |
9934 |
11971 |
1030 |
5 |
40 |
9697 |
11971 |
1008 |
5 |
|
|||||||||||||||||||||
50 |
10303 |
12529 |
3974 |
6 |
50 0 0 0 |
10080 0 0 0 |
12843 0 0 0 |
3879 |
6 |
|
|||||||||||||||||||||
3091 |
7 |
3024 |
7 |
|
|||||||||||||||||||||||||||
7403 |
9 |
7314 |
9 |
|
|||||||||||||||||||||||||||
7101 |
10 |
6941 |
10 |
|
|||||||||||||||||||||||||||
11 |
759 |
1711 |
39 |
12605 |
20855 |
3949 |
9 |
11 |
760 |
1750 |
39 |
12828 |
19852 |
4022 |
9 |
|
|||||||||||||||
39 |
11846 |
19142 |
8657 |
10 |
39 |
12067 |
18100 |
8806 |
10 |
|
|||||||||||||||||||||
20 |
1624 |
4691 |
43 |
20385 |
35073
|
216 |
1 |
20 |
1628 |
4640 |
43 |
20349 |
34897 |
217 |
1 |
|
|||||||||||||||
33 |
889 |
2629 |
593 |
2 |
33 |
889 |
2616 |
593 |
2 |
|
|||||||||||||||||||||
41 |
9365 |
14150 |
433 |
3 |
41 |
9336 |
13869 |
434 |
3 |
|
|||||||||||||||||||||
43
|
8508 |
13599
|
2836 |
4 |
43 0 0 0 |
8497 0 0 0 |
13768 0 0 0 |
2832 |
4 |
|
|||||||||||||||||||||
109 |
5 |
109 |
5 |
|
|||||||||||||||||||||||||||
6213 |
9 |
6207 |
9 |
|
|||||||||||||||||||||||||||
9986 |
10 |
9958 |
10 |
|
|||||||||||||||||||||||||||
21 |
2608 |
3140 |
48 |
11494
|
17814 |
740 |
4 |
21 |
2596 |
3131 |
48 |
11475 |
17054 |
739 |
4 |
|
|||||||||||||||
28 |
1484 |
2788 |
870 |
5 |
28 |
1485 |
2893 |
865 |
5 |
|
|||||||||||||||||||||
48 |
7402
|
11882 |
2221 |
6 |
48 |
7394 |
11027 |
2218 |
6 |
|
|||||||||||||||||||||
2961 |
9 |
2958 |
9 |
|
|||||||||||||||||||||||||||
4704 |
10 |
4695 |
10 |
|
|||||||||||||||||||||||||||
* the solutions for each good compromise solution |
|
||||||||||||||||||||||||||||||
Appendix C – MATLAB Code of NSGA II
The following four parts of the code are written down on our own including, Data input, Values of objective functions and constraints errors, variables normalisation and judgement of whether solutions feasible or infeasible.
Dataset input
%% dataset of TL case
num_bs=50; % number of BSs
num_cdc=num_bs;
num_ps=10;
V=num_bs*num_cdc+num_ps*num_cdc+num_cdc+num_bs*2+num_cdc*2+num_ps*num_cdc; % sum of variables
mu_ddpt_A=Demand_all(:,1)'; % ddpt~N(mu,sigma) and the number related to every BS
sigma_ddpt_A=Demand_all(:,2)';
mu_ddpt_B=Demand_B(:,1)';
sigma_ddpt_B=Demand_B(:,2)';
S_pb=supply';
W_pb=(S_pb>0);
loc_bs=loc_bs; % locations of BSs
loc_ps=loc_ps;
loc_cdc=loc_bs;
alph_A=4; % cost for Items A increasing per unit
alph_B=3;
beta_cdc=100000; % cost for opening a CDC
gam_AB=12000; % unit cost of transport
gam_A=8400;
gam_B=5900;
Objective Functions and Constraints errors
function [fit,err,err2]=TL_case(x)
global num_bs num_cdc num_ps mu_ddpt_A sigma_ddpt_A mu_ddpt_B sigma_ddpt_B
global S_pb alph_A alph_B beta_cdc gam_AB gam_A gam_B
global loc_bs loc_cdc loc_ps
%% code starts
c=[];
pA=0;
pB=0;
num_f3=num_bs*num_cdc+num_ps*num_cdc+num_cdc;
x(:,1:num_f3)=round(x(:,1:num_f3));
% establish a new S_pb for judgement
%x1-xij, x2-ykj, x3-zj, x4-bqAi, x5-bqBi, x6-qAj, x7-qBj, x8-Qkj.
x1=x(:,1:num_bs*num_cdc); %('0010000100001000001000010'); % Decision variables, xij, ykj, zj should automatically be processed here is for trial.
x2=x(:,num_bs*num_cdc+1:num_bs*num_cdc+num_ps*num_cdc); % ('001000010000010'); % The rule of string is that from left to right, y11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 31, 32, 33, 34, 35 % binary string represented by a decimal value for bitget
x3=x(:,num_bs*num_cdc+num_ps*num_cdc+1:num_f3); % ('00110');
x4=x(:,num_f3+1:num_f3+num_bs); % the number is capacity of every BS and should be processed by compute automatically, here is for trial
x5=x(:,num_f3+1+num_bs:num_f3+num_bs+num_bs);
x6=x(:,num_f3+1+num_bs+num_bs:num_f3+num_bs+num_bs+num_cdc); % the number is capacity of every potential CDC
x7=x(:,num_f3+1+num_bs+num_bs+num_cdc:num_f3+num_bs+num_bs+num_cdc+num_cdc); % for items B
x8=x(:,num_f3+1+num_bs+num_bs+num_cdc+num_cdc:num_f3+num_bs+num_bs+num_cdc+num_cdc+num_ps*num_cdc);
%% Handling constraints
%% Constraint 1 and 2
for hci=1:num_bs
cons_1=sum(x1(:,(hci-1)*num_cdc+1:hci*num_cdc),2);
c(:,hci)=cons_1-1.1; %initially normalisaiton of constraints xij (uniform is <=0)
c(:,num_bs+hci)=0.9-cons_1; % first num_bs columns save constraint 1
% constraints 1 and 2 in which sum of xij <=0, i.e. 0.9<=sum of xij <=1.1
end
%% Constraint 3 and 4
for jj=1:num_cdc % Must notice the order of loop who is first and then.
cons_3=0;
cons_4=0;
for ii=1:num_bs % Who is inner will be first loop.
o_bc_ctf=(ii-1)*num_cdc+jj; % the location of current BS on the string
xx1_bc_ctf=x1(:,o_bc_ctf);
cons_3=cons_3+xx1_bc_ctf.*x4(:,ii);
cons_4=cons_4+xx1_bc_ctf.*x5(:,ii);
end
c(:,num_bs+num_bs+jj)=cons_3-x6(:,jj)-num_bs-2; % num_bs and 2 are used to compensate variance from round function
c(:,num_bs+num_bs+num_cdc+jj)=cons_4-x7(:,jj)-num_bs-2;
end
%% Contraint 5: Q<=S
for kkkkk=1:num_ps
for jjjjj=1:num_cdc
cons_5=0;
o_pc_c5=(kkkkk-1)*num_cdc+jjjjj;
for iiiii=1:num_bs
o_bc_c5=(iiiii-1)*num_cdc+jjjjj;
xx1_bc_c5=x1(:,o_bc_c5);
cons_5=cons_5+S_pb(kkkkk,iiiii).*xx1_bc_c5;
end
c(:,num_bs+num_bs+num_bs+num_bs+o_pc_c5)=x8(:,o_pc_c5)-cons_5-num_ps-3;
end
end
%% Constrain 6: qAj<=sum of Qkj
for jjjj=1:num_cdc
cons_6=0;
for kkkk=1:num_ps
o_pc_c6=(kkkk-1)*num_cdc+jjjj;
cons_6=cons_6+x8(:,o_pc_c6)*x3(:,jjjj);
end
c(:,num_bs+num_bs+num_cdc+num_cdc+num_cdc*num_ps+jjjj)=x6(:,jjjj)-cons_6-num_ps-2;
end
%% CSL
for i =1:num_bs
pA_temp =normcdf(x4(:,i), mu_ddpt_A(:,i), sigma_ddpt_A(:,i)); %probability of Items A in BSi
pB_temp=normcdf(x5(:,i), mu_ddpt_B(:,i), sigma_ddpt_B(:,i));
pA=pA+pA_temp; %probability across the whole network
pB=pB+pB_temp;
end
% TOC
%% Facility Cost includes PFC and POC
fc_bs=0;
fc_cdc=0;
fc_pfc_cdc=0;
for i=1:num_bs
fc_bs_temp=alph_A*x4(:,i)+alph_B*x5(:,i);
fc_cdc_temp=alph_A*x6(:,i)+alph_B*x7(:,i);
fc_pfc_cdc_temp=beta_cdc*x3(:,i);
fc_bs=fc_bs+fc_bs_temp; %sum of facility cost of BS
fc_cdc=fc_cdc+fc_cdc_temp;
fc_pfc_cdc=fc_pfc_cdc+fc_pfc_cdc_temp; % sum of periodic fixed cost for opening a CDC
end
fc_total=fc_bs+fc_cdc+fc_pfc_cdc;
%%Transportation cost, TCij, TCkj, TChj
tc_bs=0;
tc_ps=0;
tc_cdc=0;
%% transport cost of BS-CDC
for i=1:num_bs
for j =1:num_cdc
d_bs=sqrt( (loc_bs (i, 1)-loc_cdc(j,1))^2+(loc_bs (i, 2)-loc_cdc(j,2))^2);
o_bc=(i-1)*num_cdc+j; % the location of current BS on the string
xx1_bc=x1(:,o_bc); % Extract the value of current x1, i.e. xij, the rule of extract is from high to low position, i.e. left to right of the string
tc_bs_temp=d_bs*gam_AB*xx1_bc;
tc_bs=tc_bs+tc_bs_temp; %Cumulative transport costs of BS
end
end
%% transport cost of PS-CDC-CDC
for jjj=1:num_cdc
% transport cost of PS-CDC
for kkk=1:num_ps
d_ps=sqrt( (loc_cdc (jjj, 1)-loc_ps(kkk,1))^2+(loc_cdc(jjj, 2)-loc_ps(kkk,2))^2);
o_pc=(kkk-1)*num_cdc+jjj;
xx2_pc=x2(:,o_pc);
tc_ps_temp=d_ps*gam_A.*xx2_pc;
tc_ps=tc_ps+tc_ps_temp;
end
%% transport cost of CDC-CDC
for h=1:num_cdc
d_cdc_12=sqrt( (loc_cdc(jjj, 1)-loc_cdc(h,1))^2+(loc_cdc (jjj, 2)-loc_cdc(h,2))^2);
o_cdc_1=jjj;
o_cdc_2=h;
xx3_cdc_1=x3(:,o_cdc_1);
xx3_cdc_2=x3(:,o_cdc_2);
tc_cdc_temp=d_cdc_12.*gam_B.*xx3_cdc_1.*xx3_cdc_2;
tc_cdc=tc_cdc+tc_cdc_temp;
end
end
tc_total=tc_bs+tc_ps+tc_cdc;
f1=-(pA+pB)/(2*num_bs); % for both minised optimisation hereby using minus CSL
f2=fc_total+tc_total;
err2=c;
err=(c>0); % (c>0) if c(1,1)<=0, output c(1,1)=0;if c(1,2)>0, output c(1,2)=1.
fit=[f1,f2];
end
Variables Normalisation
%% This function is going to normalise the data of decision variables which are generated in the part of Main Loop as so to incorporate binary and decimal data at same time.
function [x]=variables_normalised(x_temp)
global num_bs num_cdc num_ps pop_size W_pb S_pb
%% Making a population feasible is to
% 1, ensure the sum of zj>=1;
% 2, randomly allocate bs to cdc while cdc's bs is only linked itself.
% 3, allocate ps to cdc.
% 4, other constraints are fulfilled.
% Notes: the variables really out of control is x3, x4 and x5, others'
% value are determined by these three measures.
no_x1=num_bs*num_cdc; % number of xij
no_x12=num_bs*num_cdc+num_cdc*num_ps; %xij+ykj
no_x123=num_bs*num_cdc+num_cdc*num_ps+num_cdc; %xij+ykj+zj
no_x14=no_x123+num_bs;
no_x15=no_x14+num_bs;
no_x16=no_x15+num_cdc;
no_x17=no_x16+num_cdc;
no_x18=no_x17+num_ps*num_cdc;
x=[];
for p=1:pop_size
%% Step 1 - ensure at least one cdc is open
for jjj=1:num_cdc
if x_temp(p,no_x12+1:no_x123)<0.5 %Loop for zj<0.5
x_temp(p,no_x12+1:no_x123)=x_temp(p,no_x12+1:no_x123)./3;
ccc=randperm(num_cdc);
x_temp(p,no_x12+ccc(1))= x_temp(p,no_x12+ccc(1))+0.5;
end
end
% step 2 - Allocate BS
for tj=1:num_cdc % zj=1, xjj==1, the others in the same vector is 0.1;
if x_temp(p,no_x12+tj)>=0.5 % ensure a bs which is opening as cdc is only linked itself
x_temp(p,(tj-1)*num_cdc+1:tj*num_cdc)=0.1; % sum of xij =1
x_temp(p,(tj-1)*num_cdc+tj)=0.9;
else
% zj=0, x1j,y1j....xij,ykj==0
for tti=1:num_bs
x_temp(p,(tti-1)*num_cdc+tj)=0.1;
end
for ttk=1:num_ps
x_temp(p,no_x1+(ttk-1)*num_cdc+tj)=0.1;
end
end
end
%zj=0, allocate the other BSs in the same vector to available CDC
one_cdc=find(x_temp(p,no_x12+1:no_x123)>=0.5);
leng_o=length(one_cdc); % length of columns where cdc is 1.
for ttj=1:num_cdc % zj=0, allocate other BSs besides above
if x_temp(p,no_x12+ttj)<0.5
tc=randperm(leng_o); % for random assignment of CDC opened to a bs
tjj=one_cdc(tc(1)); % randomly pick up a cdc who is open
if x_temp(p,(ttj-1)*num_cdc+1:ttj*num_cdc)<0.5 % here for xij, tj refers to i, tjj refers to j
x_temp(p,(ttj-1)*num_cdc+tjj)=0.9; % random choose one cdc from opening depots to aasign to bs
else
one_bs=find(x_temp(p,(ttj-1)*num_cdc+1:ttj*num_cdc)>=0.5);
leng_obs=length(one_bs);
tcc=randperm(leng_obs); % random choose one bs which has been assigned to a cdc opened
tii=one_bs(tcc(1));
x_temp(p,(ttj-1)*num_cdc+1:ttj*num_cdc)=0.1; % ensure sum of xij==1
x_temp(p,(ttj-1)*num_cdc+tii)=0.9; % enable the bs picked up to assign to an available cdc
end
end
end
% Step 3 - Allocate PS to cdc
for apk=1:num_ps
for j=1:num_cdc
for ii=1:num_bs
round_bc=round(x_temp(p,(ii-1)*num_cdc+j));
tpu1=round_bc;
tpu2=W_pb(apk,ii);
tempuse=tpu1*tpu2;
if tempuse>0
x_temp(p,no_x1+(apk-1)*num_cdc+j)=0.9;
end
end
end
end
%% Ensure others are fulfilled
xsave=x_temp;
x_temp(:,1:no_x123)=round(x_temp(:,1:no_x123));
for othsj=1:num_cdc
% if zj=0, qAj,qBj, Qkj=0;
if x_temp(p,no_x12+othsj)<0.5
x_temp(p,no_x15+othsj)=0.1;
x_temp(p,no_x16+othsj)=0.1;
for tempk=1:num_ps
x_temp(p,no_x17+(tempk-1)*num_cdc+othsj)=0.1;
end
end
% for constraint 4 ==> Qkj=sum of Qki which is <= S_pb(k,i) and
% calculated with bqAi.
for othsk=1:num_ps
Qkj=0.1;
for othsi=1:num_bs
Qki=x_temp(p,no_x123+othsi).*S_pb(othsk,othsi)./sum(S_pb(:,othsi));
Qkj_temp=Qki*x_temp(p,(othsi-1)*num_cdc+othsj);
Qkj=Qkj+Qkj_temp;
end
x_temp(p,no_x17+(othsk-1)*num_cdc+othsj)=Qkj;
end
end
% qAj,qBj
for tempj=1:num_cdc
% sum of qAi*xij,qBi*xij
sum_bsA=0.1;
sum_bsB=0.1;
for tempi=1:num_bs
bsA_temp=x_temp(p,(tempi-1)*num_cdc+tempj)*x_temp(p,no_x123+tempi);
bsB_temp=(x_temp(p,(tempi-1)*num_cdc+tempj))*(1+x_temp(p,no_x14+tempi));
sum_bsA=sum_bsA+bsA_temp;
sum_bsB=sum_bsB+bsB_temp;
end
% qAj,qBj == sum of qAi*xij == sum of Qkj
x_temp(p,no_x15+tempj)=sum_bsA;
x_temp(p,no_x16+tempj)=sum_bsB;
end
x=[x;x_temp(p,:)];
x(p,1:no_x123)=xsave(p,1:no_x123);
x=real(x);
end
Judgemant
%% This function is to judgem how many and which solutions generated are feasible and suitable to our case.
function [no_fea_solutions,fea_solutions,Errors]=judge(xx_temp)
%% This function is second part of initialisation of population
% In a population, find solutuions which ensure a opening cdc is
% connected only one bs and at least one ps, and a closing cdc is linking
% to nothing.
% Save these solutions into another matrix;
global num_bs num_cdc num_ps pop_size V M
no_x1=num_bs*num_cdc; % number of xij
no_x12=num_bs*num_cdc+num_cdc*num_ps; %xij+ykj
no_x123=num_bs*num_cdc+num_cdc*num_ps+num_cdc; %xij+ykj+zj
xave=xx_temp;
xx_temp=round(xx_temp);
nfs=0; % number of feasible solutions in the population
fea_temp=[]; %save feasible solutions
err_records=[];
for p=1:pop_size
temp_bc=0;
temp_pc=0;
temp_pop=0;
% for value of cdc==0 to keep 0 for all bs-cdc and ps-cdc
zero_cdc=find(xx_temp(p,no_x12+1:no_x123)==0);
leng_z=length(zero_cdc);
for pos_vcdc=1:leng_z
j=zero_cdc(pos_vcdc); % columns of cdc whose value is 0
for i=1:num_bs
pos_bc=(i-1)*num_cdc+j;
temp_bc=temp_bc+xx_temp(p,pos_bc);
end
for k=1:num_ps
poS_pb=no_x1+(k-1)*num_cdc+j;
temp_pc=temp_pc+xx_temp(p,poS_pb);
end
temp_pop=temp_pc+temp_bc;
end
% for value of cdc==1 to ensure an opening cdc is connected with at least one ps
one_cdc=find(xx_temp(p,no_x12+1:no_x123)==1);
leng_o=length(one_cdc);
temp_pc11=0; % if a cdc is connected with at least one ps, 1 and 0 otherwise
temp_bc11=0;
for pos_v1cdc=1:leng_o
jj=one_cdc(pos_v1cdc); % columns of cdc whose value is 1
temp_pc1=0; % sum of values of ps which is linked to a opening cdc
for kk=1:num_ps
poS_pb1=no_x1+(kk-1)*num_cdc+jj;
temp_pc1=temp_pc1+xx_temp(p,poS_pb1); % so temp_pc1 is the sum of ps linked to an opening cdc
end
if temp_pc1==0
temp_pc11=temp_pc11+0;
else
temp_pc11=temp_pc11+1; % no matter how many ps are connected, the solution is feasible
end
end
% Check - sum of xij==1
for ii=1:num_bs
temp_bc1=0;
for jjj=1:num_cdc
pos_bc1=(ii-1)*num_cdc+jjj;
temp_bc1=temp_bc1+xx_temp(p,pos_bc1);
end
if temp_bc1==1
temp_bc11=temp_bc11+1;
else
temp_bc11=temp_bc11+0;
end
end
% judge on errs determined in TL_case
temp_err=xx_temp(p,V+M+1);
if temp_pop==0 && temp_pc11~=0 && temp_bc11==num_bs && temp_err==0
nfs=nfs+1;
fea_temp=[fea_temp,p];
end
% Output errors
if temp_pop~=0
err_records=[err_records;[p,1]];
elseif temp_pc11==0
err_records=[err_records;[p,3]];
elseif temp_bc11~=num_bs
err_records=[err_records;[p,2]];
elseif temp_err~=0
err_records=[err_records;[p,4]];
end
end
no_fea_solutions=nfs;
fea_solutions=xave(fea_temp,:);
Errors=err_records;
end
The following seven parts of the code are written down based on (Selvaraj, 2015) and other open accesses of resources online.
Main Loop
clear
clc
global V M etac etam pop_size pm xl xu W_pb num_bs num_cdc num_ps
global mu_ddpt_A sigma_ddpt_A mu_ddpt_B sigma_ddpt_B S_pb
global alph_A alph_B beta_cdc gam_AB gam_A gam_B
global loc_bs loc_cdc loc_ps
load('[SDD]ALL_needed1.mat') % read/load the dataset used here, SDD=standardisation
%% code starts
pop_size=1000; % Population size
gen_max=10; % Max number of generations - stopping criteria, for a population evolving
M=2;
no_runs=1; % Number of runs, for new solutions.
etac = 2; % distribution index for crossover
etam = 5; % distribution index for mutation / mutation constant
fname='TL_case'; % Objective function and constraint evaluation
%% Data used
num_bs=num_bs;num_cdc=num_bs;num_ps=num_ps;mu_ddpt_A=mu_ddpt_A;
sigma_ddpt_A=sigma_ddpt_A;mu_ddpt_B=mu_ddpt_B;sigma_ddpt_B=sigma_ddpt_B;
S_pb=S_pb;W_pb=W_pb;alph_A=alph_A;alph_B=alph_B;beta_cdc=beta_cdc;
gam_AB=gam_AB;gam_A=gam_A;gam_B=gam_B;loc_bs=loc_bs;loc_cdc=loc_cdc;
loc_ps=loc_ps;
%% Lower and Upper bound of variables
%x1,2,3
lx_bpc=zeros(1,num_bs*num_cdc+num_ps*num_cdc+num_cdc);
ux_bpc=ones(1,num_bs*num_cdc+num_ps*num_cdc+num_cdc);
%x4,5,6,7
lx4=mu_ddpt_A;
lx5=mu_ddpt_B;
lx6=zeros(1,num_cdc);
lx7=zeros(1,num_cdc);
ux4=[];
for ux_temp=1:num_cdc
ux4=[ux4,sum(S_pb(:,ux_temp))]; % under limited supply
end
ux5=mu_ddpt_B+4.*sigma_ddpt_B; % for max CSL==1
ux6=repmat(sum(ux4(:)),1,num_cdc);
ux7=repmat(sum(ux5(:)),1,num_cdc);
lx8=zeros(1,num_ps*num_cdc);
ux8=[];
for k_pc=1:num_ps
for j_pc=1:num_cdc
cap_pc=sum(S_pb(k_pc,:));
ps_pc=(k_pc-1)*num_cdc+j_pc;
ux8(1,ps_pc)=cap_pc;
end
end
xl=[lx_bpc lx4 lx5 lx6 lx7 lx8]; % lower bound vector
xu=[ux_bpc ux4 ux5 ux6 ux7 ux8]; % upper bound vectorfor i=1:NN
%% Previous value of objectives and temporary xl and xu
[Pre_CSL,Pre_TOC]=previous(num_bs,num_ps);
xl_temp=repmat(xl, pop_size,1);
xu_temp=repmat(xu, pop_size,1);
%% Other parameters used in the simulation
pm= 1/V; % Mutation Probability
Q=[];
%% Runs
for run = 1:no_runs
%% Initial population
x_temp=xl_temp+((xu_temp-xl_temp).*rand(pop_size,V));
x=variables_normalised(x_temp); % normalise data of variables
%% Evaluate objective function
for i =1:pop_size
[ff(i,:),err(i,:),err2(i,:)] =feval(fname, x(i,:)); % Objective function evaulation
end
error_norm_off=normalisation(err); % Normalisation of the constraint violation
population_init=[x ff error_norm_off];
[nfs_x,fea_x,errs_x]=judge(population_init); % check of feasible solutions
[population,front]=NDS_CD_cons(population_init); % Non domination Sorting on initial population only for sorting
%% Genetic operations Start----one iteration is one-time evolvement(parent>offspring and parent+offspring>new population)
for gen_count=1:gen_max
% selection (Parent Pt of 'N' pop size)
parent_selected=tour_selection(population);% 10 Tournament selection
%% Reproduction (Offspring Qt of 'N' pop size)
% SBX crossover and polynomial mutation
%for generating offspring population
% so individuals in population has been changed
child_offspring = genetic_operator(parent_selected(:,1:V));
child_offspring=variables_normalised(child_offspring); % normalise data of variables
for ii = 1:pop_size
[fff(ii,:),errr(ii,:),errr2(ii,:)]=feval(fname, child_offspring(ii,:)); % objective function evaluation for offspring
end
error_norm_off=normalisation(errr);
child_offspring=[child_offspring fff error_norm_off];
%% Intermediate population (Rt= Pt U Qt of 2N size)
population_inter=[population(:,1:V+M+1) ; child_offspring(:,1:V+M+1)];
[population_inter_sorted,front]=NDS_CD_cons(population_inter); % Non domination Sorting on offspring
%% Replacement - N
new_pop=replacement(population_inter_sorted,front);
new_pop(:,1:V)=new_pop(:,1:V);
population=new_pop;
end
new_pop=sortrows(new_pop,V+1);
paretoset(run).trial=new_pop(:,1:V+M+1);
Q = [Q; paretoset(run).trial]; % Combining Pareto solutions obtained in each run
end
%% Judgement of solutions
[nfs_Q,fea_Q,Err_Q]=judge(Q); % check of feasibility of Q
%% Result and Pareto plot
Q(:,1:V)=round(Q(:,1:V));
new_pop(:,1:V)=round(new_pop(:,1:V)); % Translation
if run==1
plot(new_pop(:,V+1),new_pop(:,V+2),'*')
else
[pareto_filter,front]=NDS_CD_cons(Q); % Applying non domination sorting on the combined Pareto solution set
rank1_index=find(pareto_filter(:,V+M+2)==1); % Filtering the best solutions of rank 1 Pareto
pareto_rank1=pareto_filter(rank1_index,1:V+M);
plot(pareto_rank1(:,V+1),pareto_rank1(:,V+2),'*') % Final Pareto plot
save solution5(TL_trial).txt pareto_rank1 -ASCII
end
xlabel('OF1-Minus CSL')
ylabel('OF2-TOC')
Fast Elitist Non-Dominated Sorting and Crowding Distance Assignment
%% function begins
function [chromosome_NDS_CD front] = NDS_CD_cons(population)
global V M problem_type
%% Initialising structures and variables
chromosome_NDS_CD1=[];
infpop=[];
front.fr=[];
struct.sp=[];
rank=1;
%% Segregating feasible and infeasible solutions
if all(population(:,V+M+1)==0)
problem_type=0;
chromosome=population(:,1:V+M); % All Feasible chromosomes;
pop_size1=size(chromosome,1);
elseif all(population(:,V+M+1)~=0)
problem_type=1;
pop_size1=0;
infchromosome=population; % All InFeasible chromosomes;
else
problem_type=0.5;
feas_index=find(population(:,V+M+1)==0);
chromosome=population(feas_index,1:V+M); % Feasible chromosomes;
pop_size1=size(chromosome,1);
infeas_index=find(population(:,V+M+1)~=0);
infchromosome=population(infeas_index,1:V+M+1); % infeasible chromosomes;
end
%% Handling feasible solutions
if problem_type==0 | problem_type==0.5
pop_size1 = size(chromosome,1);
f1 = chromosome(:,V+1); % objective function values
f2 = chromosome(:,V+2);
%Non- Domination Sorting
% First front
for p=1:pop_size1
struct(p).sp=find(((f1(p)-f1)<0 &(f2(p)-f2)<0) | ((f2(p)-f2)==0 &(f1(p)-f1)<0) | ((f1(p)-f1)==0 &(f2(p)-f2)<0));
n(p)=length(find(((f1(p)-f1)>0 &(f2(p)-f2)>0) | ((f2(p)-f2)==0 &(f1(p)-f1)>0) | ((f1(p)-f1)==0 &(f2(p)-f2)>0)));
end
front(1).fr=find(n==0);
% Creating subsequent fronts
while (~isempty(front(rank).fr))
front_indiv=front(rank).fr;
n(front_indiv)=inf;
chromosome(front_indiv,V+M+1)=rank;
rank=rank+1;
front(rank).fr=[];
for i = 1:length(front_indiv)
temp=struct(front_indiv(i)).sp;
n(temp)=n(temp)-1;
end
q=find(n==0);
front(rank).fr=[front(rank).fr q];
end
chromosome_sorted=sortrows(chromosome,V+M+1); % Ranked population
%Crowding distance Assignment
rowsindex=1;
for i = 1:length(front)-1
l_f=length(front(i).fr);
if l_f > 2
sorted_indf1=[];
sorted_indf2=[];
sortedf1=[];
sortedf2=[];
% sorting based on f1 and f2;
[sortedf1 sorted_indf1]=sortrows(chromosome_sorted(rowsindex:(rowsindex+l_f-1),V+1));
[sortedf2 sorted_indf2]=sortrows(chromosome_sorted(rowsindex:(rowsindex+l_f-1),V+2));
f1min=chromosome_sorted(sorted_indf1(1)+rowsindex-1,V+1);
f1max=chromosome_sorted(sorted_indf1(end)+rowsindex-1,V+1);
chromosome_sorted(sorted_indf1(1)+rowsindex-1,V+M+2)=inf;
chromosome_sorted(sorted_indf1(end)+rowsindex-1,V+M+2)=inf;
f2min=chromosome_sorted(sorted_indf2(1)+rowsindex-1,V+2);
f2max=chromosome_sorted(sorted_indf2(end)+rowsindex-1,V+2);
chromosome_sorted(sorted_indf2(1)+rowsindex-1,V+M+3)=inf;
chromosome_sorted(sorted_indf2(end)+rowsindex-1,V+M+3)=inf;
for j = 2:length(front(i).fr)-1
if (f1max - f1min == 0) | (f2max - f2min == 0)
chromosome_sorted(sorted_indf1(j)+rowsindex-1,V+M+2)=inf;
chromosome_sorted(sorted_indf2(j)+rowsindex-1,V+M+3)=inf;
else
chromosome_sorted(sorted_indf1(j)+rowsindex-1,V+M+2)=(chromosome_sorted(sorted_indf1(j+1)+rowsindex-1,V+1)-chromosome_sorted(sorted_indf1(j-1)+rowsindex-1,V+1))/(f1max-f1min);
chromosome_sorted(sorted_indf2(j)+rowsindex-1,V+M+3)=(chromosome_sorted(sorted_indf2(j+1)+rowsindex-1,V+2)-chromosome_sorted(sorted_indf2(j-1)+rowsindex-1,V+2))/(f2max-f2min);
end
end
else
chromosome_sorted(rowsindex:(rowsindex+l_f-1),V+M+2:V+M+3)=inf;
end
rowsindex = rowsindex + l_f;
end
chromosome_sorted(:,V+M+4) = sum(chromosome_sorted(:,V+M+2:V+M+3),2);
chromosome_NDS_CD1 = [chromosome_sorted(:,1:V+M) zeros(pop_size1,1) chromosome_sorted(:,V+M+1) chromosome_sorted(:,V+M+4)]; % Final Output Variable
end
%% Handling infeasible solutions
if problem_type==1 | problem_type==0.5
infpop=sortrows(infchromosome,V+M+1);
infpop=[infpop(:,1:V+M+1) (rank:rank-1+size(infpop,1))' inf*(ones(size(infpop,1),1))];
for kk = (size(front,2)):(size(front,2))+(length(infchromosome))-1;
front(kk).fr= pop_size1+1;
end
end
chromosome_NDS_CD = [chromosome_NDS_CD1;infpop];
Binary Tournament Selection
function [parent_selected] = tour_selection(pool)
%% Binary Tournament Selection
[pop_size, distance]=size(pool);
rank=distance-1;
candidate=[randperm(pop_size);randperm(pop_size)]';
for i = 1: pop_size
parent=candidate(i,:); % Two parents indexes are randomly selected
if pool(parent(1),rank)~=pool(parent(2),rank) % For parents with different ranks
if pool(parent(1),rank)<pool(parent(2),rank) % Checking the rank of two individuals
mincandidate=pool(parent(1),:);
elseif pool(parent(1),rank)>pool(parent(2),rank)
mincandidate=pool(parent(2),:);
end
parent_selected(i,:)=mincandidate; % Minimum rank individual is selected finally
else % for parents with same ranks
if pool(parent(1),distance)>pool(parent(2),distance) % Checking the distance of two parents
maxcandidate=pool(parent(1),:);
elseif pool(parent(1),distance)< pool(parent(2),distance)
maxcandidate=pool(parent(2),:);
else
temp=randperm(2);
maxcandidate=pool(parent(temp(1)),:);
end
parent_selected(i,:)=maxcandidate; % Maximum distance individual is selected finally
end
end
Genetic Operations
%We operate genetic process using SBX (Simulate Binary Crossover) and Polynomial Mutation.
function child_offspring = genetic_operator(parent_selected)
global V xl xu etac
%% SBX cross over operation incorporating boundary constraint
[N] = size(parent_selected,1);
xl1=xl';
xu1=xu';
rc=randperm(N);
for i=1:(N/2)
parent1=parent_selected((rc(2*i-1)),:);
parent2=parent_selected((rc(2*i)),:);
if (isequal(parent1,parent2))==1 & rand(1)>0.5
child1=parent1;
child2=parent2;
else
for j = 1: V
if parent1(j)<parent2(j)
beta(j)= 1 + (2/(parent2(j)-parent1(j)))*(min((parent1(j)-xl1(j)),(xu1(j)-parent2(j))));
else
beta(j)= 1 + (2/(parent1(j)-parent2(j)))*(min((parent2(j)-xl1(j)),(xu1(j)-parent1(j))));
end
end
u=rand(1,V);
alpha=2-beta.^-(etac+1);
betaq=(u<=(1./alpha)).*(u.*alpha).^(1/(etac+1))+(u>(1./alpha)).*(1./(2 - u.*alpha)).^(1/(etac+1));
child1=0.5*(((1 + betaq).*parent1) + (1 - betaq).*parent2);
child2=0.5*(((1 - betaq).*parent1) + (1 + betaq).*parent2);
end
child_offspring((rc(2*i-1)),:)=poly_mutation(child1); % polynomial mutation
child_offspring((rc(2*i)),:)=poly_mutation(child2); % polynomial mutation
end
Polynomial Mutation Operations
function mutated_child = poly_mutation(y)
global V xl xu etam pm
%% Polynomial mutation including boundary constraint
del=min((y-xl),(xu-y))./(xu-xl);
t=rand(1,V);
loc_mut=t<pm;
u=rand(1,V);
delq=(u<=0.5).*((((2*u)+((1-2*u).*((1-del).^(etam+1)))).^(1/(etam+1)))-1)+(u>0.5).*(1-((2*(1-u))+(2*(u-0.5).*((1-del).^(etam+1)))).^(1/(etam+1)));
c=y+delq.*loc_mut.*(xu-xl);
mutated_child=c;
Replacement for Iterations
function new_pop=replacement(population_inter_sorted, front)
global pop_size
%% code starts
index=0;
ii=1;
while index < pop_size
l_f=length(front(ii).fr);
if index+l_f < pop_size
new_pop(index+1:index+l_f,:)= population_inter_sorted(index+1:index+l_f,:);
index=index+l_f;
else
temp1=population_inter_sorted(index+1:index+l_f,:);
temp2=sortrows(temp1,size(temp1,2));
new_pop(index+1:pop_size,:)= temp2(l_f-(pop_size-index)+1:l_f,:);
index=index+l_f;
end
ii=ii+1;
end
Constraints errors normalisation
function err_norm = normalisation(error_pop)
%% Description
% 1. This function normalises the constraint violation of various individuals, since the range of
% constraint violation of every chromosome is not uniform. The methods of handling such a
% problem is to put the solutions of which constraints errors are all zero forward.
% 2. Input is in the matrix error_pop with size [pop_size, number of constraints].
% 3. Output is a normalised vector, err_norm of size [pop_size,1]
%% Error Nomalisation for inequation (<=0)
[N,nc]=size(error_pop);
con_max=0.00001+max(error_pop); % max([]) returns to the maximum of each column, e.g. max([1 7;2 3])=[2 7]
con_maxx=repmat(con_max,N,1);
cc=error_pop./con_maxx;
err_norm=sum(error_pop,2); % finally sum up all violations sum(A,1) sum of column, sum(A,2) sum of row