No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

BestKnownResults.java 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package jobshop;
  2. import java.util.Arrays;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.stream.Collectors;
  6. /**
  7. * This class contains the best known results for common jobshop instances.
  8. * Note that the best known result might not have been proven to be the optimal solution
  9. * for the instance.
  10. */
  11. public final class BestKnownResults {
  12. /**
  13. * Checks whether we have data available for the provided instance.
  14. * @param instanceName Name of the instance.
  15. * @return True if the instance is known, false otherwise.
  16. */
  17. public static boolean isKnown(String instanceName) {
  18. return bests.containsKey(instanceName);
  19. }
  20. /**
  21. * Returns all instances that start with the given prefix.
  22. * For example, the prefix "ft" should match the instances "ft06", "ft10" and "ft20"
  23. * @param namePrefix Prefix that should be looked-up.
  24. * @return All instances that start with the given prefix, in alphabetical order.
  25. */
  26. public static List<String> instancesMatching(String namePrefix) {
  27. return Arrays.stream(instances)
  28. .filter(i -> i.startsWith(namePrefix))
  29. .sorted()
  30. .collect(Collectors.toList());
  31. }
  32. /**
  33. * Returns the best known result for the given instance.
  34. * @param instanceName Instance of which we want to retrieve the best result.
  35. * @return Best makespan that has ever been found for this instance.
  36. */
  37. public static int of(String instanceName) {
  38. if(!bests.containsKey(instanceName)) {
  39. throw new RuntimeException("Unknown best result for "+instanceName);
  40. }
  41. return bests.get(instanceName);
  42. }
  43. // all best results.
  44. static final private HashMap<String, Integer> bests;
  45. // a sorted array of instance names
  46. static String[] instances;
  47. // initialize the internal data structures.
  48. static {
  49. bests = new HashMap<>();
  50. bests.put("aaa1", 11);
  51. bests.put("aaa2", 29);
  52. bests.put("aaa3", 41);
  53. bests.put("abz5", 1234);
  54. bests.put("abz6", 943);
  55. bests.put("abz7", 656);
  56. bests.put("abz8", 665);
  57. bests.put("abz9", 679);
  58. bests.put("ft06", 55);
  59. bests.put("ft10", 930);
  60. bests.put("ft20", 1165);
  61. bests.put("la01", 666);
  62. bests.put("la02", 655);
  63. bests.put("la03", 597);
  64. bests.put("la04", 590);
  65. bests.put("la05", 593);
  66. bests.put("la06", 926);
  67. bests.put("la07", 890);
  68. bests.put("la08", 863);
  69. bests.put("la09", 951);
  70. bests.put("la10", 958);
  71. bests.put("la11", 1222);
  72. bests.put("la12", 1039);
  73. bests.put("la13", 1150);
  74. bests.put("la14", 1292);
  75. bests.put("la15", 1207);
  76. bests.put("la16", 945);
  77. bests.put("la17", 784);
  78. bests.put("la18", 848);
  79. bests.put("la19", 842);
  80. bests.put("la20", 902);
  81. bests.put("la21", 1046);
  82. bests.put("la22", 927);
  83. bests.put("la23", 1032);
  84. bests.put("la24", 935);
  85. bests.put("la25", 977);
  86. bests.put("la26", 1218);
  87. bests.put("la27", 1235);
  88. bests.put("la28", 1216);
  89. bests.put("la29", 1152);
  90. bests.put("la30", 1355);
  91. bests.put("la31", 1784);
  92. bests.put("la32", 1850);
  93. bests.put("la33", 1719);
  94. bests.put("la34", 1721);
  95. bests.put("la35", 1888);
  96. bests.put("la36", 1268);
  97. bests.put("la37", 1397);
  98. bests.put("la38", 1196);
  99. bests.put("la39", 1233);
  100. bests.put("la40", 1222);
  101. bests.put("orb01", 1059);
  102. bests.put("orb02", 888);
  103. bests.put("orb03", 1005);
  104. bests.put("orb04", 1005);
  105. bests.put("orb05", 887);
  106. bests.put("orb06", 1010);
  107. bests.put("orb07", 397);
  108. bests.put("orb08", 899);
  109. bests.put("orb09", 934);
  110. bests.put("orb10", 944);
  111. bests.put("swv01", 1407);
  112. bests.put("swv02", 1475);
  113. bests.put("swv03", 1398);
  114. bests.put("swv04", 1474);
  115. bests.put("swv05", 1424);
  116. bests.put("swv06", 1678);
  117. bests.put("swv07", 1600);
  118. bests.put("swv08", 1763);
  119. bests.put("swv09", 1661);
  120. bests.put("swv10", 1767);
  121. bests.put("swv11", 2991);
  122. bests.put("swv12", 3003);
  123. bests.put("swv13", 3104);
  124. bests.put("swv14", 2968);
  125. bests.put("swv15", 2904);
  126. bests.put("swv16", 2924);
  127. bests.put("swv17", 2794);
  128. bests.put("swv18", 2852);
  129. bests.put("swv19", 2843);
  130. bests.put("swv20", 2823);
  131. bests.put("yn1", 885);
  132. bests.put("yn2", 909);
  133. bests.put("yn3", 892);
  134. bests.put("yn4", 968);
  135. bests.put("ta01", 1231);
  136. bests.put("ta02", 1244);
  137. bests.put("ta03", 1218);
  138. bests.put("ta04", 1175);
  139. bests.put("ta05", 1224);
  140. bests.put("ta06", 1238);
  141. bests.put("ta07", 1227);
  142. bests.put("ta08", 1217);
  143. bests.put("ta09", 1274);
  144. bests.put("ta10", 1241);
  145. bests.put("ta11", 1361);
  146. bests.put("ta12", 1367);
  147. bests.put("ta13", 1342);
  148. bests.put("ta14", 1345);
  149. bests.put("ta15", 1340);
  150. bests.put("ta16", 1360);
  151. bests.put("ta17", 1462);
  152. bests.put("ta18", 1396);
  153. bests.put("ta19", 1335);
  154. bests.put("ta20", 1351);
  155. bests.put("ta21", 1644);
  156. bests.put("ta22", 1600);
  157. bests.put("ta23", 1557);
  158. bests.put("ta24", 1647);
  159. bests.put("ta25", 1595);
  160. bests.put("ta26", 1645);
  161. bests.put("ta27", 1680);
  162. bests.put("ta28", 1614);
  163. bests.put("ta29", 1635);
  164. bests.put("ta30", 1584);
  165. bests.put("ta31", 1764);
  166. bests.put("ta32", 1796);
  167. bests.put("ta33", 1793);
  168. bests.put("ta34", 1829);
  169. bests.put("ta35", 2007);
  170. bests.put("ta36", 1819);
  171. bests.put("ta37", 1778);
  172. bests.put("ta38", 1673);
  173. bests.put("ta39", 1795);
  174. bests.put("ta40", 1674);
  175. bests.put("ta41", 2018);
  176. bests.put("ta42", 1956);
  177. bests.put("ta43", 1859);
  178. bests.put("ta44", 1984);
  179. bests.put("ta45", 2000);
  180. bests.put("ta46", 2021);
  181. bests.put("ta47", 1903);
  182. bests.put("ta48", 1952);
  183. bests.put("ta49", 1968);
  184. bests.put("ta50", 1926);
  185. bests.put("ta51", 2760);
  186. bests.put("ta52", 2756);
  187. bests.put("ta53", 2717);
  188. bests.put("ta54", 2839);
  189. bests.put("ta55", 2679);
  190. bests.put("ta56", 2781);
  191. bests.put("ta57", 2943);
  192. bests.put("ta58", 2885);
  193. bests.put("ta59", 2655);
  194. bests.put("ta60", 2723);
  195. bests.put("ta61", 2868);
  196. bests.put("ta62", 2869);
  197. bests.put("ta63", 2755);
  198. bests.put("ta64", 2702);
  199. bests.put("ta65", 2725);
  200. bests.put("ta66", 2845);
  201. bests.put("ta67", 2825);
  202. bests.put("ta68", 2784);
  203. bests.put("ta69", 3071);
  204. bests.put("ta70", 2995);
  205. instances = bests.keySet().toArray(new String[0]);
  206. Arrays.sort(instances);
  207. }
  208. }