Advertisement
Guest User

Untitled

a guest
Oct 18th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileReader;
  4. import java.util.ArrayList;
  5.  
  6. public class Project {
  7. private ArrayList<Task> tasks = new ArrayList<>();
  8. private int countTasks;
  9. private int lastAssignedTaskId = -1;
  10. public ArrayList<Task> initialTasks = new ArrayList<>();
  11. private ArrayList<Task> nodesSeen = new ArrayList<>(); //I found this was the easiest way to do realisability
  12. public Project(String fileDirectory) {
  13. File inFile = new File(fileDirectory);
  14. readFromFile(inFile);
  15. for (Task task : tasks) {
  16. for (Task compareTask : tasks) {
  17. if (task.getPredecessors().contains(compareTask.getTaskNumber())) {
  18. compareTask.addOutEdge(task);
  19. }
  20. }
  21. if (task.getPredecessors().isEmpty()) {
  22. initialTasks.add(task);
  23. }
  24. }
  25. }
  26. private void readFromFile(File inFile) {
  27. try {
  28. FileReader fileReader = new FileReader(inFile);
  29. BufferedReader bufferedReader = new BufferedReader(fileReader);
  30. String line;
  31. setCountTasks(Integer.parseInt(bufferedReader.readLine()));
  32. bufferedReader.readLine();
  33. bufferedReader.readLine(); //pass the two empty lines in the source files
  34. while ((line = bufferedReader.readLine()) != null) {
  35. String[] fileData = line.split( "\\s+");
  36. int taskNumber = Integer.parseInt(fileData[0]);
  37. String taskName = fileData[1];
  38. int taskTime = Integer.parseInt(fileData[2]);
  39. int taskManpower = Integer.parseInt(fileData[3]);
  40. ArrayList<Integer> predecessors = new ArrayList<>();
  41. for (int i = 4 ; i <= fileData.length-1 ; i++) {
  42. predecessors.add(Integer.parseInt(fileData[i]));
  43. }
  44. predecessors.remove( predecessors.size()-1); //remove the trailing 0; less error-prone than reducing loop length
  45. Task task = new Task(assignId(), taskTime, taskManpower, taskName, predecessors.size());
  46. task.setNumber(taskNumber);
  47. task.setPredecessors(predecessors);
  48. tasks.add(task);
  49. assert tasks.size() == countTasks;
  50. }
  51. bufferedReader.close();
  52. } catch(Exception e) {
  53. e.printStackTrace();
  54. }
  55. }
  56. public void confirmRealisable() {
  57. for (Task node : initialTasks) {
  58. confirmRealisableRecursive(node);
  59. }
  60. nodesSeen.clear();
  61. }
  62. public void confirmRealisableRecursive(Task node) {
  63. nodesSeen.add(node);
  64. for (Task task : node.getOutEdges()) {
  65. if (!nodesSeen.contains(task)) {
  66. confirmRealisableRecursive(task);
  67. } else {
  68. System.out.println("Cycle detected: ");
  69. System.out.println();
  70. for (Task cycleNode : nodesSeen) {
  71. if (cycleNode.getTaskNumber() != nodesSeen.size()) {
  72. System.out.print(cycleNode.getTaskNumber() + " -> ");
  73. } else {
  74. System.out.print(cycleNode.getTaskNumber());
  75. }
  76. }
  77. }
  78. }
  79. nodesSeen.remove(node);
  80. }
  81. public void optimalTimeSchedule() {
  82. ArrayList<Integer> completed = new ArrayList<>();
  83. ArrayList<Task> underway = new ArrayList<>();
  84. ArrayList<Task> taskList = new ArrayList<>();
  85. ArrayList<Task> pruneList = new ArrayList<>();
  86. for (Task task : tasks) {
  87. taskList.add(task);
  88. }
  89. int time = 0;
  90. int staff;
  91. while (completed.size() < countTasks) {
  92. boolean printed = false;
  93. for (Task task : taskList) {
  94. boolean add = true;
  95. if (!task.getPredecessors().isEmpty()) {
  96. for (int pred : task.getPredecessors()) {
  97. if (!completed.contains(pred)) {
  98. add = false;
  99. }
  100. }
  101. }
  102. if (add && !underway.contains(task)) {
  103. underway.add(task);
  104. pruneList.add(task);
  105. }
  106. }
  107. for (Task task : pruneList) {
  108. taskList.remove(task);
  109. }
  110. pruneList.clear();
  111. staff = 0;
  112. for (Task task : underway) {
  113. staff = staff + task.getStaff();
  114. if (task.getTime() == task.getTimeCounter()) {
  115. if (!printed) {
  116. System.out.println("Current time: " + time);
  117. System.out.println("Current staff: " + staff);
  118. printed = true;
  119. }
  120. System.out.println("Starting: " + task.getTaskNumber() + " - " + task.getName());
  121. }
  122. if (task.getTimeCounter() == 0) {
  123. if (!printed) {
  124. System.out.println("Current time: " + time);
  125. System.out.println("Current staff: " + staff);
  126. printed = true;
  127. }
  128. pruneList.add(task);
  129. completed.add(task.getTaskNumber());
  130. System.out.println("Completed: " + task.getTaskNumber() + " - " + task.getName());
  131. }
  132. }
  133. for (Task task : pruneList) {
  134. underway.remove(task);
  135. }
  136. pruneList.clear();
  137. time++;
  138. for (Task task : underway) {
  139. task.decrementTimeCounter();
  140. }
  141. }
  142. }
  143. private void setCountTasks(int count) {
  144. countTasks = count;
  145. }
  146. private int assignId() {
  147. lastAssignedTaskId++;
  148. return lastAssignedTaskId;
  149. }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement