Advertisement
Guest User

Untitled

a guest
Apr 7th, 2014
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 3.27 KB | None | 0 0
  1. case object TypeOptimization {
  2.     lazy val COST = "COST"
  3.     lazy val TIME = "TIME"
  4. }
  5.  
  6. object GreedyAlghoritmOptimization {    
  7.   def findBestAssignment(project: ProjectFile, task: Task, resources: List[Resource])(implicit typeOptimization: String) = typeOptimization match {
  8.     case TypeOptimization.COST =>
  9.       var theBestResource = resources.head
  10.      
  11.       var mainProject     = ProjectCloner.createBaseProject(project, false)
  12.       val mainProjectTask = mainProject  .getTaskByID      (task.getID()  )      
  13.       mainProjectTask.addResourceAssignment(resources.head)
  14.                    
  15.       resources.tail foreach { resource =>
  16.         val localProject      = ProjectCloner.createBaseProject(project, false)
  17.         val localProjectTask  = localProject .getTaskByID      (task.getID()      )      
  18.         localProjectTask.addResourceAssignment(resource)
  19.        
  20.         if(ProjectEvaluation.getProjectCost(mainProject) > ProjectEvaluation.getProjectCost(localProject)) {
  21.           theBestResource = resource
  22.           mainProject     = ProjectCloner.createBaseProject(localProject, false)
  23.         }      
  24.       }
  25.      
  26.       theBestResource
  27.     case TypeOptimization.TIME =>
  28.       var theBestResource = resources.head
  29.      
  30.       var mainProject     = ProjectCloner.createBaseProject(project, false)
  31.       val mainProjectTask = mainProject  .getTaskByID      (task.getID()  )      
  32.       mainProjectTask.addResourceAssignment(resources.head)
  33.       ProjectInitialization.packProject (mainProject)
  34.       ProjectInitialization.fixConflicts(mainProject)
  35.      
  36.       resources.tail foreach { resource =>
  37.         val localProject      = ProjectCloner.createBaseProject(project, false)
  38.         val localProjectTask  = localProject .getTaskByID      (task.getID()  )      
  39.         localProjectTask.addResourceAssignment(resource)
  40.         ProjectInitialization.packProject (localProject)
  41.         ProjectInitialization.fixConflicts(localProject)
  42.        
  43.         if(ProjectEvaluation.getProjectDuration(mainProject) > ProjectEvaluation.getProjectDuration(localProject)) {
  44.           theBestResource = resource
  45.           mainProject     = ProjectCloner.createBaseProject(localProject, false)
  46.         }
  47.       }
  48.      
  49.       theBestResource
  50.     case _                     =>
  51.       throw new Exception("Wrong TypeOptimization")
  52.   }
  53. }
  54.  
  55. object GreedyAlghoritm {
  56.    
  57.   def eval(project: ProjectFile)(implicit typeOptimization: String) {
  58.     val tasks = project.getAllTasks().asScala.toList
  59.     tasks foreach { task =>
  60.         val resources      = SkillsUtilities.resourcesCapablePerformingTask(task).asScala.toList
  61.         val resource       = GreedyAlghoritmOptimization.findBestAssignment(project, task, resources)      
  62.         val resourceAssign = task.addResourceAssignment(resource)
  63.        
  64.         resourceAssign.setStart        (task          .getStart                     ())
  65.         resourceAssign.setWork         (task          .getDuration                  ())
  66.         resourceAssign.setRemainingWork(resourceAssign.getWork                      ())
  67.         resourceAssign.setCost         (resourceAssign.getWork()        .getDuration() *
  68.                                         resource      .getStandardRate().getAmount  ())
  69.     }
  70.     ProjectInitialization.packProject (project)
  71.     ProjectInitialization.fixConflicts(project)
  72.   }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement